上篇記錄了main函式、game類和food類的設計,本片繼續記錄snake類的設計。
同樣從game類中對snake類的需求出發,snake類用乙個deque儲存一系列點,每次迴圈需要根據其方向完成點的更新、方向更新、食物是否與蛇身重合等等一些列功能:
#pragma once
#include #include "point.h"
#include class snake
,, }, char c = 'd') :body(li), direction(c) ;
void paintbody(handle);
bool hititself()
bool overlap(const point &p)//判斷重新整理的食物是否與蛇身重合
bool senddata(int &sock);
bool recvdata(int &sock);
void painthead(handle hand)
void tailclear(handle hand)
const point& head()
bool changedirection(char &k);
void update();
void reset();
bool press(char &k)
private:
dequebody;
char direction;
size_t bodysize;
};inline
bool snake::changedirection(char &k)
return false;
}inline
void snake::update()
}
蛇身繪製方面,因為整個程式中food的繪製顏色及符號與蛇身一致,因此在吃上食物後不需進行任何操作,而未吃上食物則只需在頭部多繪製乙個點並抹掉尾部的點即可。因為需要在game中判定是否撞牆,因此定義乙個返回頭部資料的介面;reset完成資料的重置。
###五、point類的設計
point類基本上就是乙個pair加上了幾個介面,需要能夠完成point的繪製及清除、資料的返回即可:
#pragma once
#include #include using namespace std;
class point
void paint(handle hand)
void clear(handle hand)
int& xx()
const int& xx() const
int& yy()
const int &yy() const
bool operator==(const point& point) const
private:
int x;
int y;
};
###六、公用資料和函式
static handle hout = getstdhandle(std_output_handle);
static bool chekans(const int &sock)
buff[n] = 0;
return (strcmp("lwb", buff) ? false : true);
}static void setoutputposition(int x, int y, handle hand)
static int n;
chekanks用於check伺服器在成功接受資料後返回的訊息,setoutputposition則用於設定游標位置,這個函式在程式中使用很多,主要是對setconsolecursorposition進行了封裝。n則用於一些函式的返回值檢測。 C語言小專案之貪吃蛇
設計思路 1 首先需要定義乙個確定大小的範圍,即乙個矩形範圍。需要定義兩個巨集height width分別代表長和寬。2 蛇身設計需要定義乙個一定大小的陣列,由於矩形範圍是height width 所以可以定義陣列大小為 height width即可。3 蛇所吃的食物的設計需要乙個在矩形範圍內隨便出...
前端練手小專案 貪吃蛇
雖然不難 但是可以說 從頭到尾都是自己想的!開心 下面說一下js方面的詳細思路以及遇到的問題,獨立寫下來還是收穫比較大 這裡我的規則就是簡化的版本,也就是隨機出現食物,每次蛇吃到長度就加一。這個專案還比較簡單,因此事件需要繫結的就三個 1 按鍵按鈕 給document全域性繫結,這裡採用keyup而...
C語言 貪吃蛇遊戲專案
蛇的初始化實際就是二維陣列的初始化,該二維陣列儲存兩個值,裡面包含該蛇身體的座標資訊,他出現的初始位置是模擬座標的中間位置。蛇的移動是通過改變二維陣列座標來實現的,例如當蛇向右前進乙個單位,則將尾每乙個身體位置的座標更改,同時改變舌頭 蛇身以及蛇尾的方向。這樣整體來看蛇就前進了乙個單位。當蛇吃了正常...