貪吃蛇C 原始碼,使用物件導向方式編寫

2021-06-29 05:03:07 字數 3576 閱讀 9043

網上好多貪吃蛇的原始碼,不過大部分都是用c面向過程的.自己用物件導向寫了乙個貪吃蛇,不足之處還請大家見諒.

我定義了3個類.

地圖類:包括地圖的抽象陣列, 地圖裡面包含乙個食物的座標.使用者可以自定義地圖的起始座標和寬度高度.

蛇類: 類中有蛇的出生長度,所屬地圖,方向,是否存活. 蛇可以吃掉食物,左右上下移動,死亡.

控制類: 記錄分數,並操縱蛇移動,控制遊戲進度暫停/結束.

"greedysnake.h"//包含了蛇類和地圖類.

#ifndef __greedysnake_h_

#define __greedysnake_h_

#define maxlength 200

#define maxmapwidth 200

#define maxmapheight 200

enum direction;

struct point

;void setwindowsize(int lines, int cols); //設定視窗大小

void gotoxy(int x, int y); //游標跳轉到指定位置

void setcolor(int colorid); //設定輸出顏色

bool isoverlap(point &p1, point &p2); //判斷兩個座標是否重疊

class map

int getheight()const

point getmapstartingcoord()const

point getfoodcoord()const

~map(){}

};class snake

int getlength()const

bool islife()const

~snake();

int _x[maxlength], _y[maxlength];

};#endif

實現** "greedysnake.cpp" 該檔案中還包含了幾個畫圖操作必要的函式

#include "greedysnake.h"

#include #include #include #include #include using std::cout; using std::endl;

int i, j;

void setwindowsize(int cols, int lines) //設定視窗大小

void gotoxy(const int x, const int y) //游標跳轉到指定位置

void gotoxy(const point &p) //游標跳轉到指定位置

void setcolor(int colorid) //設定輸出顏色

map::map(const int x, const int y, const int width, const int height)

gotoxy(x, y);

setcolor(11);

for (i = 0; i != _mapwidth; ++i) //根據抽象地圖陣列把地圖畫出來

cout << endl;

} refreshfood();

}void map::refreshfood() //重新整理食物

snake::snake(map *map, int defaultlenth)

draw();

}bool snake::eatfood()

return false;

}void snake::draw()const

}void snake::moveup()

_y[0] -= 1;

draw();

}void snake::movedown()

_y[0] += 1;

draw();

}void snake::moveleft()

_x[0] -= 1;

draw();

}void snake::moveright()

_x[0] += 1;

draw();

}void snake::dead()

}

控制類標頭檔案 "controller.h"

#ifndef __controller_h_

#define __controller_h_

#include "greedysnake.h"

class controller

void start(); //開始遊戲

void pause(); //暫停

void stop(); //停止

void showscore(); //顯示分數

~controller(){}

};#endif

控制類實現** "controller.cpp"

#include "controller.h"

#include #include #include using std::cout;

void controller::start()

switch (_dir)

else

_snake->movedown(); break;

case down:

if (key != up)

else

_snake->moveup(); break;

case left:

if (key != right)

else

_snake->moveright(); break;

case right:

if (key != left)

else

_snake->moveleft(); break;

case 8: pause(); break; //空格鍵暫停

default:break;

}_snake->dead();

sleep(_gamespeed);

if (_snake->eatfood())

}else

}}void controller::pause()

if (_dir == 8)

start(); }}

void controller::stop()

void controller::showscore()

最後是 "main.cpp"

/* greedysnake by ian*/

#include "greedysnake.h"

#include "controller.h"

#include #include #include void initwindow(int windowwidth, int windowheight)

int main()

以下是遊戲介面.

個人感覺控制類的實現還不是太好, 也希望大家能指出

物件導向貪吃蛇遊戲原始碼

話不多說,直接上 物件導向純用js做乙個貪吃蛇 html doctype html en utf 8 viewport content width device width,initial scale 1.0 document title stylesheet href css snake.css ...

貪吃蛇原始碼

去年五一寫的乙個貪吃蛇遊戲,在tc3下執行成功,過幾天加點注釋 大家先湊和看吧.hoho.include include include include include include define vk esc 0x11b define vk up 0x4800 define vk down 0x...

java貪吃蛇原始碼

業務分析 一 找物件 塊 組成貪吃蛇的組成元素和每次隨機生成的塊。cell 貪吃蛇 可以考慮用陣列表示,不單獨設定乙個類 主窗體物件 tcs 二 分析類 cell x y width height image up dpwn left right tcs 各種變數,c 存下次出現的塊 she 存貪吃...