C++控制台可以寫出什麼樣的厲害的遊戲?


2016.5 更新一下

最近的一個月小項目做一個控制台3d第一人稱射擊遊戲,背景在太空,玩家可以自由移動並發射子彈,boss也會以一定花式發射子彈,漂浮的隕石可以擋子彈。名字叫《射死大雞怪》哈哈哈,宗旨是純天然無添加劑,不引用任何第三方庫,所以這麼寫起來還是夠嗆的…

雖然遊戲不會做的很複雜,但是遊戲邏輯還只寫了一半。整個project分成三層:

1,模擬顯卡層(軟體模擬渲染管線)

2,遊戲引擎層(場景管理)

3,遊戲邏輯層

由於之前在寫遊戲引擎,所以軟體渲染是一個新的挑戰。由於在dx11的龍書,Real Time Rendering等書對管線有所了解,再加上自己的理解,寫了大概一個星期就寫到可以紋理貼圖了。其中需要了解的,大概就是變換(World ,View,Projection),多邊形裁剪,深度矯正插值,三角形的光柵化等等。shader還是照寫只不過改成用c艹來模擬而已。因為都是用控制台字元來當成一個「像素」,所以軟渲做的比較簡陋,畢竟3d字元畫的畫質也不會好到哪去(; ̄д ̄)然後遊戲引擎層就抄一下我另一個項目渲染引擎Noise3D啦,最後定義一棵狀態樹(就是長得很像樹的state transition table),用狀態機來驅動遊戲的各階段,我倒是感覺狀態機就這麼直接死磕複雜場景有點吃力,我應該再開發個設計狀態機的帶GUI的軟體,然後另外在程序里把狀態機的狀態轉移和輸出分離,這樣就能清晰許多了

這麼寫了一輪發現,其實遊戲引擎的主題好像真的不是渲染,而是場景管理,場景對象之間的聯繫,還有很多基礎設施下層建築。

然後呢,寫代碼和看書要相結合,寫了這一輪我該開始看看書積累了不然後勁不足。不過倒是c艹大作業就有了著落了hhhh!

關於這個項目的入門級搓逼軟體渲染器可以戳這裡

http://www.zhihu.com/question/24786878/answer/100713585

對了,

https://github.com/CHINA-JIGE/Shoot-The-Chicken-3D

//------------------------分割線 原答案----------

hhhhhh我花了一兩天無聊做的打飛機遊戲,一個字元當一個像素,一個二維數組當圖片。設置好一個遊戲主循環,每次渲染就是std::cout來輸出字元布滿一個屏幕(當然更好的做法是移動控制台的游標,在需要畫圖的地方輸出字元,會更快,控制台輸出字元真的巨慢),停頓些許時間之後可以用system("cls")來清空屏幕,然後進入下一個循環。

不過如果你說比較厲害的遊戲,那肯定只用控制台是搞不定的,你可以學一下DirectX或者OpenGL等渲染API,2D遊戲可以cocos2dx等等。渲染api是一堆一堆的,關鍵是你的遊戲邏輯要寫好,剩下渲染反而不是最重要的問題。

最近學校在搞什麼「黑框框」程序設計比賽,準備寫個簡單點3D soft renderer試試=v=

-??????????????

更新:好吧只是std::cout這種基礎的字元輸出比較慢…還是建議使用stdio.h的windows api。解決閃屏可以使用雙緩衝,CreateConsoleScreenBuffer得到另一個屏幕緩衝區,WriteConsoleOutputCharacter()和WriteConsoleOutputAttribute()來寫一整串帶顏色的文字,一塊一塊地寫會比一個一個寫快很多,就像3d渲染引擎里Draw Call太多也會變得慢。

代碼寫的比較隨便…老實說是不能看的… https://github.com/CHINA-JIGE/Hit-The-Plane-2D


可以寫個 FPS,如 aaquake2 - Text Mode Quake II

但這種只是先渲染成圖像,再轉成 ASCII。你也可以直接渲染,例如 Shoot "em - Jan Ringo??


我想你說C++控制台是指Windows命令行窗口吧。我初學編程的時候寫過一個小的遊戲框架,並用這個遊戲框架做了一個神經病打地鼠遊戲。

先摘抄一段遊戲框架的介紹:

Dorothy Console就是為了達到這種效果的簡單的一個2D遊戲引擎。她是基於Windows控制台系統的遊戲引擎,這意味著利用Dorothy製作出的遊戲將會充滿了巨大的馬賽克,「解析度」極低。只支持16種顏色的顯示,繪圖效率不高,效果一般。目前只可以進行聲音和音效的播放,也可以接受用戶的鍵盤和滑鼠輸入。Dorothy的升級版Witch中提供了一些簡單的2D動畫效果比如幀動畫、旋轉和縮放等,可以載入24位bmp圖片,但圖片上只有Windows繪圖程序的默認的前16種顏色會被正常載入。有提供一套默認的控制台遊戲開發框架,你可以在示例的Bunny遊戲中了解到。

基本繪圖原理類似有個答主的說法,一個字元當一個像素,一個二維數組當圖片。設置好一個遊戲主循環,每次渲染就是用系統API WriteConsoleOutput來輸出字元緩衝區來布滿一個屏幕。至於怎麼做遊戲循環可以參看這篇文章遊戲主循環、幀速控制。

在一些電腦上因為WriteConsoleOutput沒有做垂直同步,會導致快速更新控制台屏幕時會出現畫面撕裂,所以我利用了一個Direct Draw的底層的老API WaitForVerticalBlank來做一點垂直同步,增強了一點畫質(極限低的畫質再怎麼增強都沒用)。項目地址在這裡:GitHub - IppClub/Dorothy-Console: A Windows command line console system game library


CGL目前已停止更新,CGL的繼任者Darwin圖形庫現已支持Windows操作系統。Darwin大幅精簡了CGL的功能,真正做到一心一意繪圖。Darwin現在已有幾位用戶,歡迎大家提出建議。

https://github.com/mikecovlee/darwin

-------------------------2017年更新-------------------------

關於控制台圖形我必須得說說我的CGL。

先放Github,歡迎各位參與CGL6的開發!

https://github.com/mikecovlee/covgl

--------------------------6月23日更新---------------------------

CGL6已經推出。希望各位知友能夠多給我提一些建議。

~~~~~~~~多圖預警~~~~~~~~

CGL,全稱Covariant Graphics Library,也可以理解為Console Graphics Library。

這玩意是我初中時期寫的,易用性還算可以,因為還算是OOP所以擴展性不錯,只不過因為我當初底層差所以I/O很渣,優化也不怎麼的…

[注:最近更新了第六版,代碼全部重構,效率提高了500%(嚇人)。]

不過好在我解決了閃屏和垂直同步的問題…當初為了寫一個自動限幀器也是夠拼的。當初用來調試的是一台某米手機(你沒看錯,這玩意3000行大部分是用手機寫的),所以幀數太高會卡死…於是我就做了個限幀器,計算每一幀的繪製時間並智能調節…我都想問我自己為了搗鼓個控制台圖形折磨自己這麼久真的好么…

最終的效果還是蠻好的,運行起來比較流暢。[注:CGL6再次優化,砍掉了很多無用的東西]

下面看圖吧。

[CGL6]

用CGL6寫的打磚塊遊戲

CGL6字元系統測試

CGL6字元系統支持的所有字元

[CGL5]

骰子模擬器

貪吃蛇

多線程多窗口彈球

進度條

終端模擬器

窗口管理器測試程序

類似於Vim的一個文本編輯器

——————————分割線—————————

重複,CGL已停止更新!感興趣的同學請移步Darwin圖形庫!

點個贊吧~


cdda和矮人堡壘。

都是點錯技能樹的遊戲。

另外仙劍不算是控制台了,要做的話還是找個引擎吧。


樓主可以學一些簡單的遊戲引擎的部分,現在cocos2dx引擎編程和使用簡單的功能都不會用到特別複雜的部分。樓主可以去cocos官網,簡單地學習一些API,然後慢慢磨練語言和技術吧。畢竟更複雜的遊戲涉及到更語言設施里高級的部分。這樣就能做遊戲了。應該注重遊戲邏輯,而不用糾結於渲染的邏輯


讓我想起了5年前操作系統實驗的lab0,要求寫一個運行在裸機上的遊戲,需要自己寫引導balabala的(我也忘記了- -)。

我寫了一個坦克大戰,ahahaha

不瞎扯,先上圖,在放到裸機上跑之前,我先寫了一個控制台的粗糙版本,就長下面這個樣子:

可以看到這裡的坦克都還只是一些方塊,發出來的子彈是更小的方塊,還像是從嘴裡吐出來的一樣,233333,好好笑,讓我笑一會兒。

後來把它移植到裸機上去之後,最終變成了下面這樣:

看起來還是挺好玩的,哈哈哈,而且那時候我還寫了一個作弊按鈕,作弊之後自己和基地無敵,哈哈哈,如下圖:

就醬紫。

額,好像跑題了(逃


rogue,現在一大堆roguelike獨立遊戲參考的就是這款超前的非線性遊戲


rpg遊戲不就是劇情嗎,那些不是文字就可以搞定了?

要用cpp做遊戲的話建議學學cocos2d-x,挺不錯的一個引擎,上手不難,網上也有教程,不過是大多是2.0的,可以看看,看了以後關鍵是理解遊戲的運作原理。之後就是看各種官網和blog來解決一些問題了


純C++可以寫文字遊戲、數字遊戲、部分棋牌遊戲

藉助getch函數和清屏API,寫可以操作的遊戲,比如俄羅斯方塊、貪吃蛇、2048

再高級的參見其他答案吧


最近女票的數據結構作業有道是利用 A*演算法解決八數碼問題。

就是在 3×3 的棋盤上,擺有八個棋子,每個棋子上標有 1 至 8 的某一數字。棋盤中留有一個空格,空格用 0 來表示。空格周圍的棋子可以移到空格中。求出從初始狀態到目標狀態的最少步驟和路徑(解法)。

然後花了一晚上寫出來(雙map+狀態壓縮+二分搜索空間),這幾天又加了 GUI(SDL) 。

項目地址:GitHub - netcan/SlidePuzzle: Slide puzzle game written by Netcan. using the SDL engine and use of A* algorithm.

博文:解決八數碼問題之Astar演算法

控制台版本:

輸入起始狀態(9個數,0表示空格):
014276385
輸入目標狀態(9個數,0表示空格):
123456780
Step(0) ==&>
0 1 4
2 7 6
3 8 5
Step(1) ==&>
2 1 4
0 7 6
3 8 5
Step(2) ==&>
2 1 4
7 0 6
3 8 5
Step(3) ==&>
2 0 4
7 1 6
3 8 5
Step(4) ==&>
2 4 0
7 1 6
3 8 5
Step(5) ==&>
2 4 6
7 1 0
3 8 5
Step(6) ==&>
2 4 6
7 1 5
3 8 0
Step(7) ==&>
2 4 6
7 1 5
3 0 8
Step(8) ==&>
2 4 6
7 1 5
0 3 8
Step(9) ==&>
2 4 6
0 1 5
7 3 8
Step(10) ==&>
2 4 6
1 0 5
7 3 8
Step(11) ==&>
2 0 6
1 4 5
7 3 8
Step(12) ==&>
0 2 6
1 4 5
7 3 8
Step(13) ==&>
1 2 6
0 4 5
7 3 8
Step(14) ==&>
1 2 6
4 0 5
7 3 8
Step(15) ==&>
1 2 6
4 5 0
7 3 8
Step(16) ==&>
1 2 0
4 5 6
7 3 8
Step(17) ==&>
1 0 2
4 5 6
7 3 8
Step(18) ==&>
1 5 2
4 0 6
7 3 8
Step(19) ==&>
1 5 2
4 3 6
7 0 8
Step(20) ==&>
1 5 2
4 3 6
7 8 0
Step(21) ==&>
1 5 2
4 3 0
7 8 6
Step(22) ==&>
1 5 2
4 0 3
7 8 6
Step(23) ==&>
1 0 2
4 5 3
7 8 6
Step(24) ==&>
1 2 0
4 5 3
7 8 6
Step(25) ==&>
1 2 3
4 5 0
7 8 6
Step(26) ==&>
1 2 3
4 5 6
7 8 0

加了GUI效果圖:

視頻:

遊戲下載:

  • Windows版: https://github.com/netcan/SlidePuzzle/raw/master/dist/slidepuzzle_windows_release_1.0.zip
  • Linux版: https://raw.githubusercontent.com/netcan/SlidePuzzle/master/dist/slidepuzzle_linux


有個東西叫dark gdk,具體自行百度。


年輕時寫過一個命令行版本的flappybird,總共200多行代碼,雖然簡陋,不過還是能玩~

https://github.com/mafagan/flappybird


DOS系統中的各種遊戲算嗎


貪食蛇,可以參考Nokia上的


就沒有人知道 Nethack 和 Dwarf Fortress 么? 有哪些複雜的視頻遊戲值得推薦,為什麼?


我當時無聊拿控制台一個字元當一個像素位置,顏色用個可列印的ascii來替代,也沒有什麼通道,然後就可以想幹啥就幹啥了。。。記得我後來寫軟體光柵化的時候拿這個來放光柵化結果,,,,雖然肉眼幾乎什麼都看不出來但是能看個大形。。。


控制台能做所有類型的遊戲,其與你看到的厲害的遊戲 唯一的差別就在於 輸入/輸出

同一款馬里奧可以有各種平台的版本,保持核心邏輯不變,變化輸入/輸出而已


控制台寫Rpg沒問題,隨便抓就是。

Mud、2048、坦克大戰、打飛機、消方塊、鬥地主、魔塔、包剪噠、夢幻西遊、種菜農場。


推薦閱讀:

死亡宣告直播35殺單人4排吃雞,你覺得他的實力如何?能否去打職業?
如何看待《絕地求生:大逃殺》因與國內某加速器合作而得到大量差評一事?
在古劍奇譚,仙劍奇俠傳,軒轅劍這類公司里工作是一種什麼樣的體驗?
如何評價仙劍奇俠傳四中的玄霄?
Minecraft 上的大型工程到底是怎樣設計與指揮建造的?

TAG:遊戲 | 程序員 | 遊戲開發 | C |