失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 贪吃蛇c加加代码_C语言/C加加编程学习之贪吃蛇小游戏源代码

贪吃蛇c加加代码_C语言/C加加编程学习之贪吃蛇小游戏源代码

时间:2019-10-17 08:30:53

相关推荐

贪吃蛇c加加代码_C语言/C加加编程学习之贪吃蛇小游戏源代码

[代码运行效果截图]

[c]代码库

#include

#include

#include

#include

#include

#include

#define N 21

//●★

intapple[3];

charscore[3];

chartail[3];

voidgotoxy(intx,inty)//输出坐标

{

COORD pos;//WINDOWS API中定义的一个结构表示一个字符在控制台屏幕上的坐标

pos.X = x;

pos.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

//使光标 到(x,y)这个位置的函数.

}

voidcolor(intb)//颜色函数

{

HANDLEhConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;//用来修改命令行窗口的颜色

SetConsoleTextAttribute(hConsole,b) ;

}

intBlock(charhead[2])//判断出界

{

if((head[0] < 1) || (head[0] > N) || (head[1] < 1) || (head[1] > N))

return1;

return0;

}

intEat(charsnake[2])//吃了苹果

{

if((snake[0] == apple[0]) && (snake[1] == apple[1]))

{

apple[0] = apple[1] = apple[2] = 0;

gotoxy(N+44,10);

color(13);

printf("%d",score[0]*10);

color(11);

return1;

}

return0;

}

voidDraw(char**snake,intlen)//蛇移动

{

if(apple[2])

{

gotoxy(apple[1] * 2, apple[0]);

color(12);

printf("●");

color(18);//轨迹颜色

}

gotoxy(tail[1] * 2, tail[0]);

if(tail[2])

{

color(14);

printf("★");

color(11);

}

else

printf("■");

gotoxy(snake[0][1] * 2, snake[0][0]);

color(14);

printf("★");

color(11);

putchar('\n');

}

char** Move(char**snake,chardirx,int*len)//控制方向

{

inti, full = Eat(snake[0]);

memcpy(tail, snake[(*len)-1], 2);

for(i = (*len) - 1; i > 0; --i)

memcpy(snake[i], snake[i-1], 2);

switch(dirx)

{

case'w':case'W': --snake[0][0];break;

case's':case'S': ++snake[0][0];break;

case'a':case'A': --snake[0][1];break;

case'd':case'D': ++snake[0][1];break;

default: ;

}

if(full)

{

snake = (char**)realloc(snake,sizeof(char*) * ((*len) + 1));

snake[(*len)] = (char*)malloc(sizeof(char) * 2);

memcpy(snake[(*len)], tail, 2);

++(*len);

++score[0];

if(score[3] < 16)

++score[3];

tail[2] = 1;

}

else

tail[2] = 0;

returnsnake;

}

voidinit(charplate[N+2][N+2],char***snake_x,int*len)//初始化

{

inti, j;

char**snake = NULL;

*len = 3;

score[0] = score[3] =3;

snake = (char**)realloc(snake,sizeof(char*) * (*len));

for(i = 0; i < *len; ++i)

snake[i] = (char*)malloc(sizeof(char) * 2);

for(i = 0; i < 3; ++i)

{

snake[i][0] = N/2 + 1;

snake[i][1] = N/2 + 1 + i;

}

for(i = 1; i <= N; ++i)

for(j = 1; j <= N; ++j)

plate[i][j] = 1;

apple[0] =rand()%N + 1; apple[1] =rand()%N + 1;

apple[2] = 1;

for(i = 0; i < N + 2; ++i)

{

gotoxy(0, i);

for(j = 0; j < N + 2; ++j)

{

switch(plate[i][j])

{

case0:

color(12);printf("□");color(11);continue;

case1:printf("■");continue;

default: ;

}

}

putchar('\n');

}

for(i = 0; i < (*len); ++i)

{

gotoxy(snake[i][1] * 2, snake[i][0]);

printf("★");

}

putchar('\n');

*snake_x = snake;

}

voidManual()

{

gotoxy(N+30,2);

color(10);

printf("按 W S A D 移动方向");

gotoxy(N+30,4);

printf("按 space 键暂停");

gotoxy(N+30,8);

color(11);

printf("历史最高分为: ");

color(12);

gotoxy(N+44,8);

printf("%d",score[1]*10);

color(11);

gotoxy(N+30,12);

printf("你现在得分为: 0");

}

intFile_in()//取记录的分数

{

FILE*fp;

if((fp =fopen("C:\\tcs.txt","a+")) == NULL)

{

gotoxy(N+18, N+2);

printf("文件不能打开\n");

exit(0);

}

if((score[1] =fgetc(fp)) != EOF);

else

score[1] = 0;

return0;

}

intFile_out()//存数据

{

FILE*fp;

if(score[1] > score[0])

{gotoxy(10,10);

color(12);

puts("Demi 加油哦");

gotoxy(0,N+2);

return0;

}

if((fp =fopen("C:\\tcs.txt","w+")) == NULL)

{

printf("文件不能打开\n");

exit(0);

}

if(fputc(--score[0],fp)==EOF)

printf("输出失败\n");

gotoxy(10,10);

color(12);

puts("恭喜Demi打破记录");

gotoxy(0,N+2);

return0;

}

voidFree(char**snake,intlen)//释放空间

{

inti;

for(i = 0; i < len; ++i)

free(snake[i]);

free(snake);

}

intmain(void)

{

intlen;

charch ='g';

chara[N+2][N+2] = {{0}};

char**snake;

srand((unsigned)time(NULL));

color(11);

File_in();

init(a, &snake, &len);

Manual();

while(ch != 0x1B)// 按 ESC 结束

{

Draw(snake, len);

if(!apple[2]) {

apple[0] =rand()%N + 1;

apple[1] =rand()%N + 1;

apple[2] = 1;

}

Sleep(200-score[3]*10);

setbuf(stdin, NULL);

if(kbhit())

{

gotoxy(0, N+2);

ch = getche();

}

snake = Move(snake, ch, &len);

if(Block(snake[0])==1)

{

gotoxy(N+2, N+2);

puts("你输了");

File_out();

Free(snake, len);

getche();

exit(0);

}

}

Free(snake, len);

exit(0);

}

感觉大家一直以来的支持,谢谢(#^.^#)

如果觉得《贪吃蛇c加加代码_C语言/C加加编程学习之贪吃蛇小游戏源代码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。