有大神幫注釋一下嗎,謝謝

#include <iostream>

#include <vector>

#include <ctime>

#include <cstdlib>

#include <conio.h>

#include <windows.h>

using namespace std;

enum Direction {UP, DOWN, LEFT, RIGHT};

//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;

void Frame::initializeFrame() {

if (width <= 0 || height <= 0) {

? cerr << "WRONG FRAME DIMENSION!" << endl;

? exit(0);

}

window = vector<vector<char> >(height, vector<char>(width, ' '));

for (int i = 0; i != height; ++i) {

? window[i][0] = window[i][width-1] = '#';

}

for (int j = 0; j != width; ++j) {

? window[0][j] = window[height-1][j] = '#';

}

}

void Frame::displayFrame() {

for (int i = 0; i != height; ++i) {

? for (char ch : window[i])

? cout << ch << ' ';

? cout << endl;

}

}

//snakeNode

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:

int x, y;

snakeNode *next, *prior;

}*head, *tail;

void snakeNode::addHead(int ix, int iy) {

snakeNode *newSnake = new snakeNode(ix, iy);

newSnake->next = head;

if (head)

? head->prior = newSnake;

else

? tail = newSnake;

head = newSnake;

frame.window[ix][iy] = '~';

}

void snakeNode::delTail() {

snakeNode *snakeTail = tail;

frame.window[snakeTail->x][snakeTail->y] = ' ';

tail = snakeTail->prior;

if (tail)

? tail->next = nullptr;

else

? head = nullptr;

delete snakeTail;

}

//movement

class movement {

public:

movement(): dir(LEFT) {randomFood();}

void randomFood();

void move();

void changeDirection(char);

private:

enum Direction dir;

int fx, fy;

bool outOfFrame(int h, int w) {

? return h < frame.height - 1 && h > 0 && w < frame.width - 1 && w > 0 ? false : true;

}

bool block(int h, int w) {

? for (snakeNode *snake = head; snake; snake = snake->next) {

? if (snake->x == h && snake->y == w)

? ? return true;

? }

? return false;

}

};

void movement::randomFood() {

srand((unsigned)time(0));

bool onSnake = true;

while (onSnake) {

? onSnake = false;

? fx = rand() % (frame.height - 2) + 1;

? fy = rand() % (frame.width - 2) + 1;

? for (snakeNode *snake = head; snake; snake = snake->next) {

? if (fx == snake->x && fy == snake->y) {

? ? onSnake = true; break;

? }

? }

}

frame.window[fx][fy] = 'x';

}

void movement::move() {

int h = head->x, w = head->y;

switch(dir) {

? case UP: --h; break;

? case DOWN: ++h; break;

? case LEFT: --w; break;

? case RIGHT: ++w; break;

}

if (outOfFrame(h, w) || block(h, w)) {

? cout << "Game Over!" << endl;

? exit(0);

}

if (h == fx && w == fy) {

? head->addHead(fx, fy);

? randomFood();

}

else {

? head->addHead(h, w);

? head->delTail();

}

}

void movement::changeDirection(char key) {

switch(key) {

? case 'w': {

? if (dir != DOWN) dir = UP;

? break;

? }

? case 's': {

? if (dir != UP) dir = DOWN;

? break;

? }

? case 'a': {

? if (dir != RIGHT) dir = LEFT;

? break;

? }

? case 'd': {

? if (dir != LEFT) dir = RIGHT;

? break;

? }

}

}

int main() {

unsigned speed, h, w;

char key;

cout << "Please input height and width!(10~39)" << endl;

cout << "height = ";

cin >> h;

cout << "width = ";

cin >> w;

cout << "Please input speed!(1~500)" <<endl;

cout << "speed = ";


cin >> speed;


frame.setHeight(h); frame.setWidth(w);


frame.initializeFrame();


head->addHead(frame.height / 2, frame.width / 2);


movement myMove;


while (true) {


? while (!kbhit()) {


? system("cls");


? myMove.move();


? frame.displayFrame();


? Sleep(speed);


? }


? key = getch();


? myMove.changeDirection(key);


}


return 0;


}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容