输入头文件,设置函数,其中snakeMove()是实现蛇运动的函数,put_food()是随机放置金币的函数,printmap()是输出图像的函数, X、Y记录蛇尾的坐标,snakeX和snakeY记录蛇的初始坐标。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#define SNAKE_MAX_LENGTH 100
#define SNAKE_HEAD 'H'
#define SNAKE_BODY 'X'
#define BLANK_CELL ' '
#define WALL_CELL '*'
#define food '$'
void snakeMove(char ch, int snakeX[], int snakeY[]);
void put_money(void);
void printmap(void);
void put_food(void);
int X, Y;
输出图像和放置食物的函数如下:
void put_food(){
int x,y;
x = rand() % 10 + 1;
y = rand() % 10 + 1;
while(map[y][x] != BLANK_CELL){
x = rand() % 10 + 1;
y = rand() % 10 + 1;
}
map[y][x] = food;
}
void printmap(){
int i,j;
for(i = 0; i < 12; i++){
for(j = 0; j < 12; j ++)
printf("%c", map[i][j]);
putchar('\n');
}
}
要实现蛇的移动和增长,蛇每移动一次,让蛇头的坐标做相应的变化,它的每一节身体的坐标变为前一节身体的坐标,蛇尾的初始坐标的字符清零。若蛇头的坐标变化后恰好为食物的坐标,则蛇的身长加一,蛇尾的初始坐标的字符不清零。
具体实现方法如下:
void snakeMove(char ch,int snakeX[], int snakeY[]){
int i;
X = snakeX[0];
Y = snakeY[0];
switch (ch){
case 'A': case 'a':
for(i = 0; i < snakeLength - 1; i++){
snakeX[i] = snakeX[i + 1];
snakeY[i] = snakeY[i + 1];
}
snakeX[snakeLength - 1]--;
break;
case 'S': case 's':
for(i = 0; i < snakeLength - 1; i++){
snakeX[i] = snakeX[i + 1];
snakeY[i] = snakeY[i + 1];
}
snakeY[snakeLength - 1] ++;
break;
case 'D': case 'd':
for(i = 0; i < snakeLength - 1; i++){
snakeX[i] = snakeX[i + 1];
snakeY[i] = snakeY[i + 1];
}
snakeX[snakeLength - 1]++;
break;
case 'W': case 'w':
for(i = 0; i < snakeLength - 1; i++){
snakeX[i] = snakeX[i + 1];
snakeY[i] = snakeY[i + 1];
}
snakeY[snakeLength - 1]--;
break;
default:
return ;
}
}
int main(){
char ch;
int i;
map[5][5] = food;
printmap();
while(1){
ch = getch();
snakeMove(ch, snakeX, snakeY);
if(map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] != food)
map[Y][X] = ' ';
for(i = 0; i < snakeLength - 1; i++)
map[snakeY[i]][snakeX[i]] = SNAKE_BODY;
if(map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] == SNAKE_BODY || map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] == WALL_CELL)
break;
if(map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] == food){
for(i = snakeLength; i > 0; i --){
snakeY[i] = snakeY[i - 1];
snakeX[i] = snakeX[i - 1];
}
snakeY[0] = Y;
snakeX[0] = X;
snakeLength ++;
put_food();
}
map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] = SNAKE_HEAD;
system("cls");
printmap();
}
getchar();
}
简单的贪吃蛇小游戏就这样做好了。