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 上的大型工程到底是怎樣設計與指揮建造的?