C语言开发实现贪吃蛇游戏

时间:2021-05-20

本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下

1、最好用VS运行
2、用到的函数有:_kbhit _getch EasyX图形库内一系列函数
3、蛇身与食物用矩形画的

代码如下:

#include<stdio.h>#include<graphics.h> //easyx头文件#include<conio.h>#include<time.h>/********************设置各种属性**********************///坐标属性typedef struct point { int x, y;}PYINT;//蛇struct snake { PYINT xy[100]; //蛇的每节坐标放到数组中 int position; //方向 int num; //长度}SNAKE;//食物struct food{ PYINT fdxy; int flag; //是否存在 int grade; //成绩}FOOD;//枚举:方向//也可用宏 #defineenum position{ up, down, left, right};/**********************对蛇的操作*****************************///初始化蛇//蛇的每节为 10x10填充的矩形void initsnake(){ SNAKE.xy[0].x = 0; SNAKE.xy[0].y = 0; //数组第一个元素为蛇头 SNAKE.xy[1].x = 10; SNAKE.xy[1].y = 0; SNAKE.xy[2].x = 20; SNAKE.xy[2].y = 0; SNAKE.position = right; //方向 (随便给) SNAKE.num = 3; //数量 (随便给)}//画蛇void Drawsnake(){ for (int i = 0; i < SNAKE.num; i++) { setlinecolor(BLACK); setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255)); fillrectangle(SNAKE.xy[i].x, SNAKE.xy[i].y, SNAKE.xy[i].x + 10, SNAKE.xy[i].y + 10); }}//使蛇动起来void Movesnake(){ for (int i = SNAKE.num; i > 0; i--) { SNAKE.xy[i].x = SNAKE.xy[i - 1].x; SNAKE.xy[i].y = SNAKE.xy[i - 1].y; //使每个元素向前移动 } switch (SNAKE.position) { case up: SNAKE.xy[0].y -= 10; break; case down: SNAKE.xy[0].y += 10; break; //上下移动 X坐标不发生改变 case left: SNAKE.xy[0].x -= 10; break; case right: SNAKE.xy[0].x += 10; break; //左右移动 Y坐标不发生改变 }}/******************************按键操作*****************************************///当蛇向上运动时,按向下键无效(其他三个相同)void Keydown(){ char ch = _getch(); switch (ch) { case 'W': case 'w': case 72: //小键盘上的“向上” if (SNAKE.position != down) //是否向下 SNAKE.position = up; break; case 'S': case 's': case 80: //小键盘上的“向下” if (SNAKE.position != up) //是否向上 SNAKE.position = down; break; case 'A': case 'a': case 75: //小键盘上的“向左” if (SNAKE.position != right) //是否向右 SNAKE.position = left; break; case 'D': case 'd': case 77: //小键盘上的“向右” if (SNAKE.position != left) //是否向左 SNAKE.position = right; break; }}/******************************食物操作**************************************///初始化食物void initfood(){ FOOD.fdxy.x = rand() % 60 * 10; FOOD.fdxy.y = rand() % 40 * 10; //把食物的坐标控制在游戏界面内 FOOD.flag = 1; //1代表存在食物 //FOOD.grade = 0; for (int i = 0; i < SNAKE.num; i++) { if (FOOD.fdxy.x == SNAKE.xy[i].x&&FOOD.fdxy.y == SNAKE.xy[i].y) //如果食物出现在蛇身上,重新产生X Y的值 { FOOD.fdxy.x = rand() % 60 * 10; FOOD.fdxy.y = rand() % 40 * 10; } }}//画食物void Drawfood(){ setlinecolor(BLACK); setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255)); fillrectangle(FOOD.fdxy.x, FOOD.fdxy.y, FOOD.fdxy.x + 10, FOOD.fdxy.y + 10);}/*************************************吃食物*************************************************/void eatfood(){ if (SNAKE.xy[0].x == FOOD.fdxy.x&&SNAKE.xy[0].y == FOOD.fdxy.y) { SNAKE.num++; FOOD.flag = 0; //食物存在的标记(1:存在 0;不存在) FOOD.grade += 10; //每吃一个食物分数加10 (每个食物是10分,可随意改变) }}/*************************************显示分数*************************************************/void putgrade(){ char str[20] = " "; sprintf_s(str, "greade: %d", FOOD.grade); settextcolor(RED); //设置字体颜色 outtextxy(500, 50, str);}/***********************************游戏结束***************************************************///当蛇头撞墙(蛇头撞上自身)//只分析一种情况int gameover(){ if (SNAKE.xy[0].x > 600 || SNAKE.xy[0].x < 0 | SNAKE.xy[0].y>400 || SNAKE.xy[0].y < 0) //撞墙 { initgraph(800, 600); settextcolor(RED); outtextxy(600, 400, "你撞墙了"); settextcolor(YELLOW); settextstyle(50, 50, "楷体"); //字体样式 outtextxy(200, 250, "GAME OVER"); //指定位置输出字符串 return 1; } return 0;}/*****************************************************************************************/int main(){ initgraph(600, 400); setbkcolor(BLACK); //背景颜色 cleardevice(); //清屏:刷新屏幕 srand((unsigned int)time(NULL)); //随机数种子 initsnake(); Drawsnake(); while (1) { cleardevice(); //清屏 Movesnake(); Drawsnake(); if (FOOD.flag == 0) { initfood(); } Drawfood(); if (_kbhit()) { //_kbhit: 检测是否有按键动作 Keydown(); } if (gameover()) { //若函数返回1:结束游戏 break; } eatfood(); putgrade(); Sleep(100); //延长时间 (即蛇移动的速度) } _getch(); //防止闪屏 closegraph(); //关闭窗口 return 0;}/**********************************************************///RGB(rand() % 255, rand() % 255, rand() % 255) 在三基色范围内随机产生//记得安装EasyX插件

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章