学习C++过程中做的一个小程序,比较简单,只实现了贪吃蛇小游戏最基本的功能。上传代码作为学习的记录,
同时也为其他同学提供作为一个小小的参考。
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <ctime>
#include <conio.h>
#include <windows.h>
using namespace std;
/*
1.24x24格子
2.初始length = 4
3.floor[][][0](取 0 或 1) : 蛇身:1 蛇头:2 食物:3
floor[][][1] : 蛇身方向
UP = 1, RIGHT = 2, DOWN = -1, LEFT = -2
*/
static int floor[24][24][2];
enum{
UP = 1,
RIGHT = 2,
DOWN = -1,
LEFT = -2
};
struct SNAKE{
int length;
pair<int, int> head;
pair<int, int> tail;
};
void init(SNAKE& snake){
int x, y;
snake.length = 4;
snake.head = make_pair(11, 3);
snake.tail = make_pair(11, 0);
for(int i = 0; i < snake.length - 1; i++){
floor[11][i][0] = 1;
floor[11][i][1] = RIGHT;
}
floor[11][snake.length - 1][0] = 2;
floor[11][snake.length - 1][1] = RIGHT;
do{
y = rand() % 12;
x = rand() % 12;
}while(floor[y][x][0] != 0);
floor[y][x][0] = 3;
}
void printGame(){
system("cls");
for(int i = 0; i < 26; i++){
cout << "#";
}
cout << endl;
/*************************************************************/
for(int i = 0; i < 24; i++){
cout << "#";
for(int j = 0; j < 24; j++){
if(floor[i][j][0] == 1){
cout << "+";
}else if(floor[i][j][0] == 2){
cout << "@";
}
else if(floor[i][j][0] == 3){
cout << "*";
}
else{
cout << " ";
}
}
cout << "#" << endl;
}
/*************************************************************/
for(int i = 0; i < 26; i++){
cout << "#";
}
cout << endl;
}
int getDirection(){
int ret = 0, ch = getch();
if(!isascii(ch)){
ch = getch();
switch(ch){
case 72: ret = UP; break;
case 75: ret = LEFT; break;
case 77: ret = RIGHT; break;
case 80: ret = DOWN; break;
default: break;
}
}
return ret;
}
void playGame(SNAKE& snake){
printGame();
int start = 0, temp = RIGHT, ret = RIGHT, x = 0, y = 0;
bool eat = false;
while(true){
/*蛇头*/
start = clock();
while(clock() - start <= 1000){
if(kbhit()){
temp = getDirection();
}
}
y = snake.head.first;
x = snake.head.second;
floor[y][x][0] = 1;
if(temp != -ret){
floor[y][x][1] = temp;
ret = temp;
}
else if(temp == -ret){
floor[y][x][1] = ret;
}
switch(floor[y][x][1]){
case UP: snake.head.first--; break;
case RIGHT: snake.head.second++; break;
case DOWN: snake.head.first++; break;
case LEFT: snake.head.second--; break;
default: break;
}
y = snake.head.first;
x = snake.head.second;
if(floor[y][x][0] == 3){ //吃到食物
eat = true;
}
else if(floor[y][x][0] == 1 || y < 0 || x < 0 || y > 23 || x >23){
break;
}
floor[y][x][0] = 2;
/*蛇尾*/
if(eat == false){ //未吃到食物
y = snake.tail.first;
x = snake.tail.second;
floor[y][x][0] = 0;
switch(floor[y][x][1]){
case UP: snake.tail.first--; break;
case RIGHT: snake.tail.second++; break;
case DOWN: snake.tail.first++; break;
case LEFT: snake.tail.second--; break;
default: break;
}
}
else{ // 吃到食物
snake.length++;
do{
y = rand() % 12;
x = rand() % 12;
}while(floor[y][x][0] != 0);
floor[y][x][0] = 3;
eat = false;
}
printGame();
cout << "得分: " << snake.length - 4 << endl;
}
}
int main(int argc, char** argv){
srand(unsigned(time(0)));
SNAKE snake;
init(snake);
playGame(snake);
return 0;
}