近期看完c++primer,決定小試身手,碰巧看到某博主用c++實現了貪吃蛇,所以我也決定試一試。
c++程式設計的核心思想之一就是oo思維(物件導向思維),需要一定的抽象能力,同樣還需要更好的封裝。
大概簡述一下我的c++貪吃蛇程式設計思想:
物件有:
(a) 遊戲框架:實現遊戲空間,包括外圍牆、貪吃蛇和食物的顯示;
由於遊戲框架只有乙個,所以直接設了全域性變數frame,減少呼叫時的傳參。
為frame設定了友元類snakenode和movement,能夠直接使用私有成員window(修改遊戲介面中蛇和食物的位置);
//frame of the game
class frame
void setheight(unsigned hgt)
void setwidth(unsigned wid)
void initializeframe();
void displayframe();
private:
vector< vector> window;
}frame;
(b) 貪吃蛇節點:採用鍊錶儲存貪吃蛇各節點座標,實際上是乙個fifo結構;
由於遊戲中貪吃蛇只有乙隻,所以直接設了全域性變數head和tail,減少呼叫時的傳參。
class snakenode
void addhead(int, int);
void deltail();
private:
int x, y;
snakenode *next, *prior;
}*head, *tail;
(c) 運動:遊戲的核心,隨機地產生食物,貪吃蛇的運動,貪吃蛇方向的改變等;
class movement
void randomfood();
void move();
void changedirection(char);
private:
enum direction dir;
int fx, fy;
bool outofframe(int h, int w)
bool block(int h, int w)
return false;
}};
一些用到的庫函式:
--kbhit():顧名思義(keyboardhit),檢測是否有鍵盤按鍵敲擊動作,如有返回true,無則返回false,包含在conio.h標頭檔案中;
--system(「cls」):清屏;
--sleep(t):暫停t的時間間隔;
--getch():從鍵盤獲取字元;
致謝:我是借鑑這個博主的c++貪吃蛇實現,同時修改了其中的2個問題:其一,隨機生成食物時應檢查是否生成在蛇節點上;其二,檢查碰撞時除與外圍牆碰撞外,還需檢查蛇頭與蛇身的碰撞。
最後,貪吃蛇的c++實現模板:
為複製方便,將類定義、成員函式實現及主函式都放在了一起,特此說明。
#include #include #include #include #include #include using namespace std;
enum direction ;
//frame of the game
class frame
void setheight(unsigned hgt)
void setwidth(unsigned wid)
void initializeframe();
void displayframe();
private:
vector< vector> window;
}frame;
void frame::initializeframe()
window = vector>(height, vector(width, ' '));
for (int i = 0; i != height; ++i)
for (int j = 0; j != width; ++j)
}void frame::displayframe()
}//snakenode
class snakenode
void addhead(int, int);
void deltail();
private:
int x, y;
snakenode *next, *prior;
}*head, *tail;
void snakenode::addhead(int ix, int iy)
void snakenode::deltail()
//movement
class movement
void randomfood();
void move();
void changedirection(char);
private:
enum direction dir;
int fx, fy;
bool outofframe(int h, int w)
bool block(int h, int w)
return false;
}};void movement::randomfood()
} }frame.window[fx][fy] = 'x';
}void movement::move()
if (outofframe(h, w) || block(h, w))
if (h == fx && w == fy)
else
}void movement::changedirection(char key)
case 's':
case 'a':
case 'd': }}
int main()
key = getch();
mymove.changedirection(key);
} return 0;
}
遊戲介面:
如有錯誤,請批評指正,謝謝。
python簡單版貪吃蛇
編寫內容 簡單版貪吃蛇 遊戲介紹 遊戲開始執行,按上下左右鍵蛇則會移動,每當蛇吃吃介面中隨機產生的食物時,設都會隨之增長一節。同時在遊戲介面的左下方會有分數顯示。當蛇碰到自己身體 或撞牆壁遊戲結束。如果想要再來一次,只需要點空格鍵,遊戲將重新開始。遊戲原始碼 import pygame import...
C 簡單貪吃蛇
一定要自己定義set level view score 等函式,main 函式中主要運用了函式指標來縮短 其中忽略了必要的 include標頭檔案和using指示 如 using namespace std 請自行補充。我的想法是有 兩個線性表 和乙個字串 一 定義第乙個線性表的 片段如下 int ...
c 實現貪吃蛇
include include include include include include include include include word square color 7 義方向 define key up 72 define key down 80 define key left 75...