C 貪吃蛇的簡單實現版

2021-06-29 05:16:44 字數 3384 閱讀 9151

近期看完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...