志在指尖
用双手敲打未来

c语言程序(c语言贪吃蛇最简单代码)

c语言程序

C言语是一种计算机程序设计言语。它既有高档言语的特色,又具有汇编言语的特色。它可以作为系统设计言语,编写工作系统应用程序,也可以作为应用程序设计言语,编写不依赖计算机硬件的应用程序。

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

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
#defineframe_height30//地图尺寸
#defineframe_width50
#defineUP’w’//移动
#defineDOWN’s’
#defineLEFT’a’
#defineRIGHT’d’
inti,j,k,sp,score;
charch=UP,state=UP,choo,n;//初始化方向
intgrow=0;
structFood//食物
{
intx;//横坐标
inty;//纵坐标
}food;
structSnake//蛇
{
/*用数组储存蛇的每一部分的坐标*/
intx[100];
inty[100];
intlen;//长度
intspeed;//速度
}snake;
voidmap(void);//地图
voidupdate_food(void);//更新食物
voidmove_snake(void);//蛇的移动
intalive(void);//判断蛇是否死亡
voidget_speed(void);//更新速度
voidgotoxy(intx,inty);//移动光标,进行游戏界面的打印
intmain()
{
do
{
score=0;//初始化分数为0
/*让用户进行难度选择,有彩蛋*/
printf(“Choosethedegreeofdifficulty:\n1:easy\t2:middle3:difficult\n”);
n=getch();
switch(n)
{
case’1′:
{
sp=300;
break;
}
case’2′:
{
sp=230;
break;
}
case’3′:
{
sp=180;
break;
}
default:
{
printf(“Congratulations!WelcometoDevil’sdifficulty\n”);
sp=120;
break;
}
}
system(“cls”);//每次新一局游戏先清屏,包含在<stdlib.h>
map();//打印地图
/*开始游戏*/
while(1)
{
update_food();//生产食物
get_speed();//获取速度
move_snake();//移动
Sleep(snake.speed);//延时函数,speed数值越大延时越长
if(!(alive()))//判断蛇是否死亡
{
break;//死亡则退出循环
}
}
printf(“GameOver!\n”);
printf(“1:Restart\t2:exit”);
choo=getch();
}
while(choo==’1′);
return0;
}
voidmap()
{
srand(time(NULL));
/*打印第一个食物*/
/*Attention!此处留了一个bug:可能食物
的位置与初始的蛇重合,然后食物就会消
失,读者可以加以改进*/
food.x=rand()%(frame_height-2)+1;
food.y=rand()%(frame_width-2)+1;//在框内
gotoxy(food.x,food.y);//把光标移动到该坐标
printf(“$”);//打印食物
/*snake的初始化*/
snake.x[0]=frame_height/2;
snake.y[0]=frame_width/2;
gotoxy(snake.x[0],snake.y[0]);
printf(“@”);
snake.len=3;
snake.speed=200;
for(k=1;k<snake.len;k++)
{
snake.x[k]=snake.x[k-1]+1;
snake.y[k]=snake.y[k-1];
gotoxy(snake.x[k],snake.y[k]);
printf(“@”);
}
/*墙壁*/
for(j=0;j<frame_width;j++)
{
gotoxy(0,j);
printf(“#”);
gotoxy(frame_height-1,j);
printf(“#”);
}
for(i=0;i<frame_height-1;i++)
{
gotoxy(i,0);
printf(“#”);
gotoxy(i,frame_width-1);
printf(“#”);
}
gotoxy(2,frame_width+3);
if(n==’1′)printf(“Difficulty:easy”);
elseif(n==’2′)printf(“Difficulty:middle”);
elseif(n==’3′)printf(“Difficulty:difficult”);
elseprintf(“WelcometotheDevil’sdifficulty”);
gotoxy(4,frame_width+3);
printf(“UP:w”);
gotoxy(6,frame_width+3);
printf(“DOWN:s”);
gotoxy(8,frame_width+3);
printf(“LEFT:a”);
gotoxy(10,frame_width+3);
printf(“RIGHT:d”);
gotoxy(12,frame_width+3);
printf(“Yourscore:%d”,score);
gotoxy(28,frame_width+3);
printf(“MadebyZhaoHejie”);
}
/*食物*/
voidupdate_food()
{
if(snake.x[0]==food.x&&snake.y[0]==food.y)//吃到食物
{
score+=10;
gotoxy(12,frame_width+3);
printf(“Yourscore:%d”,score);
srand(time(NULL));
/*以下是更新食物的代码,里面排除了
食物与蛇重合的情况,读者可以参考以
下代码完成对上述bug的改进*/
intflag=1;//标记变量
do
{
food.x=rand()%(frame_height-2)+1;
food.y=rand()%(frame_width-2)+1;//在框内
for(i=0;i<snake.len;i++)
{
if(food.x==snake.x[i]&&food.y==snake.y[i])
{
flag=0;//有重合
break;
}
}
}
while(flag==0);
/*打印食物*/
gotoxy(food.x,food.y);
printf(“$”);
snake.len++;
grow=1;//表明长了,在move_snake函数中有用到
}
}
/*移动蛇*/
voidmove_snake()
{
while(kbhit())//键盘有输入
{
ch=getch();
}
if(!grow)//没有长
{
gotoxy(snake.x[snake.len-1],snake.y[snake.len-1]);
printf(“”);//走了,在数组的最后打印空格,清除原有的蛇尾
}
for(k=snake.len-1;k>0;k–)//更新蛇的坐标,除了蛇头,其余位置继承上一个点的坐标
{
snake.x[k]=snake.x[k-1];
snake.y[k]=snake.y[k-1];//移动位置
}
switch(ch)//改变方向
{
caseUP:
{
if(state==DOWN)//如果此时方向向下,输入向上的作用要被无视
{
snake.x[0]++;
break;
}
else
{
snake.x[0]–;
state=UP;//其余的改变状态为向上
break;
}
}
caseDOWN:
{
if(state==UP)
{
snake.x[0]–;
break;
}
else
{
snake.x[0]++;
state=DOWN;
break;
}
}
caseLEFT:
{
if(state==RIGHT)
{
snake.y[0]++;
break;
}
else
{
snake.y[0]–;
state=LEFT;
break;
}
}
caseRIGHT:
{
if(state==LEFT)
{
snake.y[0]–;
break;
}
else
{
snake.y[0]++;
state=RIGHT;
break;
}
}
/*摁其余键,保持原有状态*/
default:
{
if(state==DOWN)
{
snake.x[0]++;
break;
}
elseif(state==UP)
{
snake.x[0]–;
break;
}
elseif(state==LEFT)
{
snake.y[0]–;
break;
}
elseif(state==RIGHT)
{
snake.y[0]++;
break;
}
}
}
gotoxy(snake.x[0],snake.y[0]);
printf(“@”);//打印蛇头
grow=0;//初始成长状态为0
gotoxy(frame_height,0);//光标移动到地图左下角下方
}
/*存活状态*/
intalive(void)
{
if(snake.x[0]==0||snake.x[0]==frame_height-1||snake.y[0]==0||snake.y[0]==frame_width-1)//撞墙
return0;
for(k=1;k<snake.len;k++)//咬到自己
{
if(snake.x[0]==snake.x[k]&&snake.y[0]==snake.y[k])
return0;
}
return1;
}
/*加速*/
/*speed越大,蛇的速度越小*/
voidget_speed()
{
if(snake.len<=6)
snake.speed=sp;
elseif(snake.len<=10)
snake.speed=sp-20;
elseif(snake.len<=20)
snake.speed=sp-50;
elseif(snake.len<=30)
snake.speed=sp-60;
else
snake.speed=sp-70;
}
/*移动光标*/
voidgotoxy(intx,inty)
{
HANDLEhout;
COORDcor;
/*
typedefstruct_COORD
{
SHORTX;//horizontalcoordinate
SHORTY;//verticalcoordinate
}COORD;
用该结构体来储存坐标
*/
hout=GetStdHandle(STD_OUTPUT_HANDLE);//从标准输出设备中取得一个句柄
/*这其中x,y的赋值对象要注意,不懂的好好想想*/
cor.X=y;
cor.Y=x;
SetConsoleCursorPosition(hout,cor);//定位光标的函数
}

未经允许不得转载:IT技术网站 » c语言程序(c语言贪吃蛇最简单代码)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载