近期看完C++Primer,决定小试身手,碰巧看到某博主用C++实现了贪吃蛇,所以我也决定试一试。
C++编程的核心思想之一就是OO思维(面向对象思维),需要一定的抽象能力,同样还需要更好的封装。
大概简述一下我的C++贪吃蛇编程思想:
对象有:
(a) 游戏框架:实现游戏空间,包括外围墙、贪吃蛇和食物的显示;
由于游戏框架只有一个,所以直接设了全局变量frame,减少调用时的传参。
为Frame设置了友元类snakeNode和movement,能够直接使用私有成员window(修改游戏界面中蛇和食物的位置);
<span style="font-size:14px;">//Frame of the game
class Frame {
public:
friend class snakeNode;
friend class movement;
unsigned width, height;
Frame(): width(30), height(30) {}
void setHeight(unsigned hgt) {
height = hgt;
}
void setWidth(unsigned wid) {
width = wid;
}
void initializeFrame();
void displayFrame();
private:
vector< vector<char> > window;
}frame;</span>
(b) 贪吃蛇节点:采用链表存储贪吃蛇各节点坐标,实际上是一个FIFO结构;
由于游戏中贪吃蛇只有一只,所以直接设了全局变量head和tail,减少调用时的传参。
<span style="font-size:14px;">class snakeNode {
public:
friend class movement;
snakeNode(int ix, int iy): x(ix), y(iy), next(nullptr), prior(nullptr) {}
void addHead(int, int);
void delTail();
private: