C语言如何实现贪吃蛇小游戏
作者
这篇文章给大家分享的是有关C语言如何实现贪吃蛇小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
实现功能
蛇最开始三节,向右移动。用户可以通过按上下左右来控制蛇的移动,食物随机产生,蛇吃到食物后蛇的身体会变长。蛇撞墙或者撞到自己身体后,游戏结束。
怎么实现
要实现一个贪吃蛇小游戏,首先要想清楚游戏里有什么,怎样实现功能。
很明显游戏中只有两样东西,蛇和食物。所以要建立蛇和食物信息,然后将蛇和食物进行初始化,在将蛇和食物画出来。
实现的功能有:
1. 蛇的移动2. 按键控制蛇的移动3. 食物的产生4. 蛇吃食物后蛇身体变长5. 游戏的结束
用结构体建立蛇和食物的信息
structCOOR{//位置,x,y坐标 intx; inty; }; structSNAKE{//蛇的基础信息 intsize;//节数 intspeed;//运动速度 chardir;//运动方向 structCOORxy[MAX];//位置 }snakes; structFOOD{//食物信息 structCOORfooddir;//食物位置 intflag;//判断食物是否被吃掉,1未被吃掉,0被吃掉 }food;
实现功能的函数:
蛇:
voidsnakeInit(){//初始化蛇的信息 voiddrawSnake(){//画蛇 voidmoveSnake(){//蛇的移动 voidcoorSnake(){//按键控制蛇的运动方向
食物:
voidinitFood(){//初始化食物的信息 voiddrawFood(){//画食物
其它:
intgameOver(){//游戏结束情况 voidgameInit(){//初始化窗口范围
代码
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<graphics.h> #include<conio.h> #include<Windows.h> #defineMAX200 HWNDhwnd=NULL; enumDIR{//枚举移动方向 UP, DOWN, LEFT, RIGHT, }; structCOOR{//位置,x,y坐标 intx; inty; }; structSNAKE{//蛇的基础信息 intsize;//节数 intspeed;//运动速度 chardir;//运动方向 structCOORxy[MAX];//位置 }snakes; structFOOD{//食物信息 structCOORfooddir;//食物位置 intflag;//判断食物是否被吃掉,1未被吃掉,0被吃掉 }food; voidsnakeInit(){//初始化蛇的信息 snakes.size=3;//开始节数 snakes.dir=RIGHT;//开始运动方向 snakes.speed=10; inti=0; for(;i<snakes.size;i++){//每一节书的位置,注意将第一节作为头 snakes.xy[i].x=40-10*i; snakes.xy[i].y=10; } } voiddrawSnake(){//画蛇 inti=0; for(;i<snakes.size;i++){ setlinecolor(BLACK);//画线的颜色 setfillcolor(RED);//填充色 //fillrectangle(snakes.xy[i].x,snakes.xy[i].y,snakes.xy[i].x+10,snakes.xy[i].y+10);//矩形 fillcircle(snakes.xy[i].x,snakes.xy[i].y,5);//圆形 } } voidmoveSnake(){//蛇的移动 //snakes.xy[0].x++; inti=0; for(i=snakes.size-1;i>0;i--){//蛇身跟着舌头运动 snakes.xy[i].x=snakes.xy[i-1].x; snakes.xy[i].y=snakes.xy[i-1].y; } switch(snakes.dir){ caseUP: snakes.xy[0].y-=snakes.speed; break; caseDOWN: snakes.xy[0].y+=snakes.speed; break; caseLEFT: snakes.xy[0].x-=snakes.speed; break; caseRIGHT: snakes.xy[0].x+=snakes.speed; break; default: break; } } voidcoorSnake(){//按键控制蛇的运动方向 if(_kbhit()){//等待获取按键 charc=_getch();//获得按键 switch(c){ case72: case'w': if(snakes.dir!=DOWN){ snakes.dir=UP; } break; case80: case's': if(snakes.dir!=UP){ snakes.dir=DOWN; } break; case75: case'a': if(snakes.dir!=RIGHT){ snakes.dir=LEFT; } break; case77: case'd': if(snakes.dir!=LEFT){ snakes.dir=RIGHT; } break; default: break; } } } voidinitFood(){//初始化食物的信息 food.flag=1; while(1){ START: food.fooddir.x=rand()%63*10;//食物位置随机 food.fooddir.y=rand()%47*10; for(inti=0;i<snakes.size;i++){//防止食物生成在蛇身上。 if(food.fooddir.x==snakes.xy[i].x&&food.fooddir.y==snakes.xy[i].y){ gotoSTART; } else{ break; } } break; } } voiddrawFood(){//画食物 //food.fooddir.x=100; //food.fooddir.y=200; setlinecolor(BLACK); setfillcolor(RED); fillcircle(food.fooddir.x,food.fooddir.y,5); } voideatFood(){//蛇吃食物 if(snakes.xy[0].x-food.fooddir.x<=5&&snakes.xy[0].y-food.fooddir.y<=5\ &&food.fooddir.x-snakes.xy[0].x<=5&&food.fooddir.y-snakes.xy[0].y<=5&&food.flag==1){ food.flag=0; snakes.size++; } } intgameOver(){//游戏结束情况 if(snakes.xy[0].x<5||snakes.xy[0].y<=0||snakes.xy[0].x>635||snakes.xy[0].y>478){ MessageBox(hwnd,"GAMEOVER!","你撞墙了!",MB_OK); return1; } for(inti=1;i<snakes.size;i++){ if(snakes.xy[0].x==snakes.xy[i].x&&snakes.xy[0].y==snakes.xy[i].y){ MessageBox(hwnd,"GAMEOVER!","你撞了自己",MB_OK); return1; } } return0; } voidgameInit(){ hwnd=initgraph(640,480);//设置窗口大小 setbkcolor(GREEN);//设置窗口颜色 } intmain(){ srand((unsignedlong)time(NULL));//生成随机数 gameInit(); cleardevice();//刷新窗口 snakeInit(); initFood(); while(1){ cleardevice(); if(food.flag==0){ initFood(); } drawFood(); drawSnake(); coorSnake(); eatFood(); moveSnake(); //eatFood(); if(gameOver()){ break; } //stopGame(); Sleep(100); } getchar();//防止闪屏 closegraph(); system("pause"); return0; }
感谢各位的阅读!关于“C语言如何实现贪吃蛇小游戏”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
目录
推荐阅读
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~