c语言贪吃蛇最简单代码手机

2022-11-30 投稿:洪紫芬 分享

#include<stdio.h>

#include<time.h>

#include<windows.h>

#include<stdlib.h>

#define U 1

#define D 2

#define L 3

#define R 4 //蛇的状态,U:上 ;D:下;L:左 R:右

typedef struct SNAKE //蛇身的一个节点

{

int x;

int y;

struct SNAKE *next;

}snake;

//全局变量//

int score=0,add=10;//总得分与每次吃食物得分。

int status,sleeptime=200;//每次运行的时间间隔

snake *head, *food;//蛇头指针,食物指针

snake *q;//遍历蛇的时候用到的指针

int endgamestatus=0; //游戏结束的情况,1:撞到墙;2:咬到自己;3:主动退出游戏。

//声明全部函数//

void Pos();

void creatMap();

void initsnake();

int biteself();

void createfood();

void cantcrosswall();

void snakemove();

void pause();

void gamecircle();

void welcometogame();

void endgame();

void gamestart();

void Pos(int x,int y)//设置光标位置

{

COORD pos;

HANDLE hOutput;

pos.X=x;

pos.Y=y;

hOutput=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hOutput,pos);

}

void creatMap()//创建地图

{

int i;

for(i=0;i<58;i =2)//打印上下边框

{

Pos(i,0);

printf("■");

Pos(i,26);

printf("■");

}

for(i=1;i<26;i )//打印左右边框

{

Pos(0,i);

printf("■");

Pos(56,i);

printf("■");

}

}

void initsnake()//初始化蛇身

{

snake *tail;

int i;

tail=(snake*)malloc(sizeof(snake));//从蛇尾开始,头插法,以x,y设定开始的位置//

tail->x=24;

tail->y=5;

tail->next=NULL;

for(i=1;i<=4;i )

{

head=(snake*)malloc(sizeof(snake));

head->next=tail;

head->x=24 2*i;

head->y=5;

tail=head;

}

while(tail!=NULL)//从头到为,输出蛇身

{

Pos(tail->x,tail->y);

printf("■");

tail=tail->next;

}

}

int biteself()//判断是否咬到了自己

{

snake *self;

self=head->next;

while(self!=NULL)

{

if(self->x==head->x && self->y==head->y)

{

return 1;

}

self=self->next;

}

return 0;

}

void createfood()//随机出现食物

{

snake *food_1;

srand((unsigned)time(NULL));

food_1=(snake*)malloc(sizeof(snake));

while((food_1->x%2)!=0) //保证其为偶数,使得食物能与蛇头对其

{

food_1->x=rand()R 2;

}

food_1->y=rand()$ 1;

q=head;

while(q->next==NULL)

{

if(q->x==food_1->x && q->y==food_1->y) //判断蛇身是否与食物重合

{

free(food_1);

createfood();

}

q=q->next;

}

Pos(food_1->x,food_1->y);

food=food_1;

printf("■");

}

void cantcrosswall()//不能穿墙

{

if(head->x==0 || head->x==56 ||head->y==0 || head->y==26)

{

endgamestatus=1;

endgame();

}

}

void snakemove()//蛇前进,上U,下D,左L,右R

{

snake * nexthead;

cantcrosswall();

nexthead=(snake*)malloc(sizeof(snake));

if(status==U)

{

nexthead->x=head->x;

nexthead->y=head->y-1;

if(nexthead->x==food->x && nexthead->y==food->y)//如果下一个有食物//

{

nexthead->next=head;

head=nexthead;

q=head;

while(q!=NULL)

{

Pos(q->x,q->y);

printf("■");

q=q->next;

}

score=score add;

createfood();

}

else //如果没有食物//

{

nexthead->next=head;

head=nexthead;

q=head;

while(q->next->next!=NULL)

{

Pos(q->x,q->y);

printf("■");

q=q->next;

}

Pos(q->next->x,q->next->y);

printf(" ");

free(q->next);

q->next=NULL;

}

}

if(status==D)

{

nexthead->x=head->x;

nexthead->y=head->y 1;

if(nexthead->x==food->x && nexthead->y==food->y) //有食物

{

nexthead->next=head;

head=nexthead;

q=head;

while(q!=NULL)

{

Pos(q->x,q->y);

printf("■");

q=q->next;

}

score=score add;

createfood();

}

else //没有食物

{

nexthead->next=head;

head=nexthead;

q=head;

while(q->next->next!=NULL)

{

Pos(q->x,q->y);

printf("■");

q=q->next;

}

Pos(q->next->x,q->next->y);

printf(" ");

free(q->next);

q->next=NULL;

}

}

if(status==L)

{

nexthead->x=head->x-2;

nexthead->y=head->y;

if(nexthead->x==food->x && nexthead->y==food->y)//有食物

{

nexthead->next=head;

head=nexthead;

q=head;

while(q!=NULL)

{

Pos(q->x,q->y);

printf("■");

q=q->next;

}

score=score add;

createfood();

}

else //没有食物

{

nexthead->next=head;

head=nexthead;

q=head;

while(q->next->next!=NULL)

{

Pos(q->x,q->y);

printf("■");

q=q->next;

}

Pos(q->next->x,q->next->y);

printf(" ");

free(q->next);

q->next=NULL;

}

}

if(status==R)

{

nexthead->x=head->x 2;

nexthead->y=head->y;

if(nexthead->x==food->x && nexthead->y==food->y)//有食物

{

nexthead->next=head;

head=nexthead;

q=head;

while(q!=NULL)

{

Pos(q->x,q->y);

printf("■");

q=q->next;

}

score=score add;

createfood();

}

else //没有食物

{

nexthead->next=head;

head=nexthead;

q=head;

while(q->next->next!=NULL)

{

Pos(q->x,q->y);

printf("■");

q=q->next;

}

Pos(q->next->x,q->next->y);

printf(" ");

free(q->next);

q->next=NULL;

}

}

if(biteself()==1) //判断是否会咬到自己

{

endgamestatus=2;

endgame();

}

}

void pause()//暂停

{

while(1)

{

Sleep(300);

if(GetAsyncKeyState(VK_SPACE))

{

break;

}

}

}

void gamecircle()//控制游戏

{

Pos(64,15);

printf("不能穿墙,不能咬到自己\n");

Pos(64,16);

printf("用↑.↓.←.→分别控制蛇的移动.");

Pos(64,17);

printf("F1 为加速,F2 为减速\n");

Pos(64,18);

printf("ESC ::暂停游戏.");

Pos(64,20);

printf("c语言研究中心 ");

status=R;

while(1)

{

Pos(64,10);

printf("得分:%d ",score);

Pos(64,11);

printf("每个食物得分:%d分",add);

if(GetAsyncKeyState(VK_UP) && status!=D)

{

status=U;

}

else if(GetAsyncKeyState(VK_DOWN) && status!=U)

{

status=D;

}

else if(GetAsyncKeyState(VK_LEFT)&& status!=R)

{

status=L;

}

else if(GetAsyncKeyState(VK_RIGHT)&& status!=L)

{

status=R;

}

else if(GetAsyncKeyState(VK_SPACE))

{

pause();

}

else if(GetAsyncKeyState(VK_ESCAPE))

{

endgamestatus=3;

break;

}

else if(GetAsyncKeyState(VK_F1))

{

if(sleeptime>=50)

{

sleeptime=sleeptime-30;

add=add 2;

if(sleeptime==320)

{

add=2;//防止减到1之后再加回来有错

}

}

}

else if(GetAsyncKeyState(VK_F2))

{

if(sleeptime<350)

{

sleeptime=sleeptime 30;

add=add-2;

if(sleeptime==350)

{

add=1; //保证最低分为1

}

}

}

Sleep(sleeptime);

snakemove();

}

}

void welcometogame()//开始界面

{

Pos(40,12);

system("title c语言研究中心 ");

printf("欢迎来到贪食蛇游戏!");

Pos(40,25);

system("pause");

system("cls");

Pos(25,12);

printf("用↑.↓.←.→分别控制蛇的移动, F1 为加速,2 为减速\n");

Pos(25,13);

printf("加速将能得到更高的分数。\n");

system("pause");

system("cls");

}

void endgame()//结束游戏

{

system("cls");

Pos(24,12);

if(endgamestatus==1)

{

printf("对不起,您撞到墙了。游戏结束.");

}

else if(endgamestatus==2)

{

printf("对不起,您咬到自己了。游戏结束.");

}

else if(endgamestatus==3)

{

printf("您的已经结束了游戏。");

}

Pos(24,13);

printf("您的得分是%d\n",score);

exit(0);

}

void gamestart()//游戏初始化

{

system("mode con cols=100 lines=30");

welcometogame();

creatMap();

initsnake();

createfood();

}

int main()

{

gamestart();

gamecircle();

endgame();

return 0;

}

#c语言贪吃蛇最简单代码手机#相关文章

c语言编程软件有哪些

这个就非常多啦,作为一门古老的编程语言,C语言的编程软件其实非常多,既有IDE环境也有代码编辑器,初学的话,建议还是以掌握基本功为准,不需要什么高级功能,轻便灵活,好使用就行,下面我简单介绍几个不错的

0.2万人浏览 c语言C语言c语言编程软件

c语言指针什么时候加星号

相当于:s = s*(ti)这里的星号(*)不是乘号,而是说明(t i)是一个指针值, *(ti)是(t i)这个指针所指向的内存区域里所存储的值,然后把s和这个值相加,再把得到的结果赋给s

0.2万人浏览 c语言C语言星号什么

c语言函数分类

fun函数是用调用主函数的。它是指用fun来定义一个函数或是方法,这样在引用时可以用fun表示。比如fun(int x,y), fun(int x,y) 有上面的出现,必然在主函数里有调它,fun没有

0.2万人浏览 C语言c语言c语言函数

c语言怎么定义函数并调用

你首先需要知道这个函数需要什么参数,举个例子来说一个函数的函数原型是 inta(intx),那么你在使用它的时候它的时候就要注意 要传递给他的是一个int类型的变量,它会返还给你一个int类型的变量例

0.2万人浏览 C语言调用函数函数调用

c语言程序设计入门视频教程

PS、AI是UI设计师必不可少的两项技能,对于想要学习UI设计的人来说,首先就是要学会使用PS和AI。如何才能快速学会这两样呢?下面,千锋UI设计培训就给大家分享20天学会UI设计(PS AI)入门教

0.2万人浏览 C语言c语言视频教程

c语言下载要钱吗

打开自己手机上的酷狗音乐播放器,在设置中把歌曲播放设置成边听边存。一直放到歌曲结束,就退出来。在文件夹中找到酷狗的存储文件夹(sdcard/KuGoo/dom_c/default)。找到后缀是kgtm

0.2万人浏览 c语言c

c语言入门自学书籍

高数吗,我全都忘了,如果你的编程方向是那种追求最优算法的话,如程序优化那种,就得好好看看高数了,不过也不用太深入,看专门为编程而编写的数学书会比较好,如《算法设计与分析基础》。。。。对自己要求不那么高

0.2万人浏览 C语言自学C语言c语言

c语言入门自学视频教程全集免费

C语言程序设计课程是入门级的程序设计课程,针对没有或很少具有编程经验的在职人员。课程通过学习C语言编程的基础语法,对程序设计有一个基本的认识,为后续计算机专业课程以及面向对象程序设计课程的学习打下基础

0.2万人浏览 C语言c语言C