2010-02-05 72 views
24

我目前正在學習C++,因此我認爲嘗試(重新)編寫一些「常見的」基於文本的遊戲是一個好主意。 (想想狩獵Wumpus,猜計算機產生的(僞)隨機數,...)(基於文本)C++練習遊戲

但是,我找不到任何這些任務的好資源。

  • 哪些基於文本的遊戲可以「教育」我來編程?
  • 你還記得你編寫過的一個特別的遊戲(用C++編寫)嗎?它教會你很多東西嗎?
  • 這將是很好,如果你可以包括:
    • 遊戲的一般概念
    • 什麼C++語言程序設計這個遊戲將需要/的方面涉及
+2

偉大的問題! – 2010-02-05 23:54:49

回答

5

我想記住一些有趣的東西,當我在高中時的CS課上回來的時候。他們不是所有的遊戲,但它在這裏:

基於文本(ASCII)動畫 - 基本上我動畫一個ASCII龍進入終端,說些什麼,離開。在「繪製」每一幀後,它被清除,所以基本上它是一個逐幀的ASCII動畫生成器。

迷宮 - 在同一概念的種類中使用的Unicode字符。我從箭頭鍵中獲得了鍵盤輸入,並根據您的輸入重新劃分了迷宮。再次,在每幀之後清除屏幕並再次打印文本。

- 與上述類似的概念,但它是一個蛇遊戲。

簡單聊天 - 這調查了我們學校中央服務器上的共享文本文件(有人不小心弄壞了0777),並基本上爲一個非常簡單的聊天室提供了便利。

蜂鳴器 - 此計劃在我的學校臭名昭着。直到XP顯然,Windows計算機上的聲音緩衝區很容易被文本超載。運行此操作會導致計算機發出蜂鳴聲,直到您關閉它爲止(並且在大多數情況下還會導致計算機陷入停頓狀態,因此您必須重新啓動硬盤)。對我們高中的管理絕對是生氣。另外它只是一個2班輪。

char o = 7; 
while(1) cout << o; 

反正不知道這是否有助於你得到任何的想法,但只是用你的想象力。你可以有很多的樂趣,而不必瞭解很多關於編程的知識。只是有創意。

+4

對於蜂鳴器,C++任意提供給你一個逃生來幫助你的工作:嘗試*爲(;;)cout <<'\ a'; *:P – 2010-02-05 22:33:39

+0

出於對蜂鳴器的好奇,你能不能簡單地終止用[Ctrl] + [C]'程序而不是重新啓動機器? – stakx 2010-02-06 10:34:02

+0

使用Windows上的[Ctrl] + [C]':)?更一般的情況是,在windows中殺死一個瘋狂的程序是一種痛苦,因爲調用任務管理器可能不是微不足道的,並且需要大量資源。你有'[Alt] + [F4]',但是如果機器陷入停頓,有時它不起作用。 – 2010-02-06 15:44:24

5

Zork課程!

+3

聽起來好像提問者是C++初學者;用高級解析器重新實現文本冒險遊戲可能會是一個挑戰。 – 2010-02-05 22:27:09

+2

如果您將其作爲崇拜典範實施,則可獲得獎勵積分。 – 2010-02-05 22:34:08

+1

當我學習C++並且發現它非常有幫助時,我實際上做了一些非常類似的事情。當然,我現在會寫1000000次,但我學到了很多經驗教訓。開始簡單。 – 2010-02-05 22:37:03

11

「20道題」的自學版本可能相當有趣(如果你對此不熟悉,在Guess the Dictator/Sit-Com Character有相當有趣的實現)。

一個例子會話(基於本網站的問題):

 
Are you female? 
> N 
Are you overweight? 
> N 
Do you live in an apartment building? 
> Y 
Do you travel for your job? 
> N 
Do you have strange schemes to make money? 
> N 
Do you live in California? 
> N 
Are you a new doctor? 
> N 
Is your father gay? 
> Y 
Are you gay? 
> N 
Are you an actor? 
> N 
Are both your parents gay? 
> N 
Are you black? 
> N 
I guess you are Chandler from Friends, am I right? 
> Y 

在這一點上,如果我回答N,我不得不說我是誰想到的,選擇哪個區分問題我從朋友的Chandler中選擇了我選擇的獨裁者/坐位角色人物,然後說出我的問題的答案是「是」還是「否」。然後這個問題就會被記住,並且該計劃對於靜坐人物和獨裁者的知識越來越慢。

取決於你是如何做到這一點,這可能會幫助你學習:

  • 控制檯I/O(詢問用戶的問題)
  • 二叉樹(每個問題是在二進制樹中的節點和子節點都是你問這取決於是/否響應)的問題
  • 文件I/O(如果保存樹到磁盤)
+0

經過多一點調查,這與「Eliza」計劃或心理學家計劃相比。 – 2010-02-06 01:41:06

0

你必須去最酷的文字遊戲有史以來, 精英

您可以通過非常可讀且非常有趣的C代碼獲得源代碼。來源可在Ian Bell's site

精英因其「無限」的宇宙而聞名。這是一個非常聰明的設計。

1

許多你在童年時期玩過的基本棋盤遊戲。 戰列艦! (在一些國家,稱爲潛艇) - >這教你亂搞數組,傳遞緩衝區。也可以(如果你編寫一個AI)讓你玩這個。

跳棋/國際象棋 - >實現人工智能超出了基礎知識的學習,但編碼遊戲的文本表示相當容易。

Stratego或基本wargames - >數據結構和OOP。

0

追捕Wumpus會是太棒了。這是一個相對簡單的遊戲,但大多數例子都是BASIC中的舊程序代碼。你可以從頭開始,用C++編寫一個OO版本。

Conway's Game of Life是另一個不錯的選擇,因爲它不需要任何用戶交互。我在職業生涯初期寫了一個3D版本,並發現它很有用。而且它的迷人看:-)

<一邊>
其實我懷念過去的日子裏,當計算機雜誌曾在,你可以自己輸入後面的程序列表。他們有遊戲,公用事業,不管。我學會了如此複製別人寫的東西。
< /拋開>

3

Facebook有一些很酷的工程難題,我喜歡,但他們可能是剛剛開始有點先進。我是個非常C++的程序員,所以我先用Python解決了難題,然後用C++解決了難題。

退房:Facebook Engineering Puzzles

他們似乎有一切從方便(冷盤),以相當具有挑戰性(自助餐)。

我相信這些難題是爲招聘而設立的,但他們對自己很有趣。 (也許我有點怪異?)

此外,他們有一個額外的好處:不知道什麼時候你可能需要一份工作。

1

A的經典遊戲良好來源是

http://www.atariarchives.org/basicgames/

本場比賽是在老學校的基本而是學會翻譯和任何語言寫這些無疑將獲得的技能非常有用。

例如,如果你想解決的幾個遊戲卡,這將是很好的創建頭,功能類,並把代碼分成兩個或更多的遊戲之間的可重複使用的庫。

它不是這麼多,你只要做它舒展你的技能和動作從瑣碎的東西沒有那麼...

找一個導師來檢查你的代碼,並就什麼嘗試還是建議不同。

0

早在一天,我做了一個熱座位多人輪盤賭的是教我一些基本的,基於所有文本。基本上,玩家會輪流在不同級別的賭注上進行各種賭注,會有一個平局(動畫爲&聲音),雙贏或者沒有贏家。很有趣。

1

如何Nim?有兩種變體,一種是多個樁,你可以在一個樁中隨意取多少個標記,另一個樁允許你一次取1-N個標記(N通常在3個左右) 。獲取最後一個令牌的人贏或輸。

遙想當年,我實現了一個版本的第二場比賽,讓你指定遊戲的所有參數,然後會悄悄選擇去第一與否,以保證勝利。啊,好時光。

+0

有趣的是,花了我一些時間來弄清楚,每次都可以贏得一些基礎數學(第二版),只要你決定誰知道總數後就開始......然後我的小妹妹恨我: p – 2010-02-06 15:50:07

0

跳棋。我有很大的樂趣在COBOL和FORTRAN一個很久以前

的混合物寫這個有才能看到自己的創作行爲是令人興奮巧妙

當然

你經過多次迭代它之前的行爲愚蠢你到這一點

0

Jotto是一場偉大的比賽,這只是關於一個人學習正確的複雜性。你必須認真思考幾個好的數據結構,但是你可以很容易地在少於1000行的C++中組合一個有趣的遊戲。

0

您應該檢查在英語互動小說網站:

http://www.intfiction.org/forum/

這就是文字遊戲的新的開發者收集有關他們討論。但是,C++不再執行實現,而是使用一些稱爲Inform,TADS和Hugo的專用編程語言。

你會發現很多在ifarchive文字遊戲(包括魔域,Hithhiker指南銀河,Wumpus ...):

http://ifarchive.org/

你可以找到一個的實現我的一個遊戲在C++這裏:

http://www.caad.es/baltasarq/if/csa/csa-cpp.zip

這可能是有用的,只要你能在西班牙讀。無論如何,我已經自己搬到了Inform 6。

0

棋盤遊戲,如跳棋和奧賽羅。早在上世紀90年代,我和同事們進行了一場奧賽羅AI競賽。我想我在此之前就是從tic-tac-toe開始的。

Etudes for Programmers有一些有趣的項目,如果你能找到一份副本。

0

曾經有一種冒險(即基於文本的遊戲)寫作語言叫做ALPS,我記得我編寫了一個版本,加上tcp和基本的多用戶處理程序,作爲我的第一個C/C++項目(最初是前者,最終後者)。項目是整齊的小型「模塊」,具有明確的尺度和有趣的最終結果:我用它來製作一個古怪的MUD與我強大的32K BBC Micro。對C/C++ ALPS進行編碼最終每週都會向我學習這門語言 - 達到一個體面的工作標準(遠非專家的意見)。

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – 2014-10-01 07:11:22

+0

我不同意。它回答了這些問題,但我不想引用名稱,因爲它可能會自我服務。因此,我將冒險語言命名爲模塊化格式,這是一種理想的學習工具 - 留給提問者看看會不會好奇。與引用精英作爲文本遊戲的那個人相比,這種方式如何不那麼恰當(你知道嗎?當時什麼都不是文本遊戲!) - 就像我贊同伊恩貝爾得到一個理所應當的提及一樣...... – yms 2014-10-01 07:33:12