C语言贪吃蛇用VC2022
用到函数的调用和实现,用到easyx,结构体,数组等
也可以用链表来写,在linux上用vim写贪吃蛇原理差不多。
进行初始化
原本想用srand(time(null))的发下有时食物出不来就用了GETtick...
移动蛇:
用键位控制:
_kbhit是确认是否有按键按下,有就为1否则为0,_getch()是输入的字符.
画图:
调用easyx头文件,用来画图
食物随机出现:
蛇头碰到食物蛇尾加1
上面移动的是没有死亡的,下面这个移动到边界就是死亡:
打印菜单:
主函数:
#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<string.h>
void Game_draw();
void Game_Init();
void Move_snake();
void keyborad();
void snake_food();
int menu();
void snake_food_hard();
int Move_snake_siwang();
#define MAX_num 500
#define my_high 800
#define my_wide 800
enum dir
{
RIGHT,
DOWN,
UP,
LEFT,
};
struct Sanke
{
int szie;//蛇的节数
int dir;//蛇的方向
int speed;//蛇的速度
POINT coor[MAX_num];//坐标
}sanke;
struct Food
{
int x;
int y;
int r;
bool flag;
}food;
int main(void)
{
k:
int choose,i;
int l = 1;
choose=menu();
switch (choose)
{
case 3:
Game_Init();
while (1)
{
Game_draw();
Move_snake();
keyborad();
snake_food();
Sleep(100);
}
break;
case 2:
Game_Init();
while (1)
{
Game_draw();
if (l == 1)
{
l = Move_snake_siwang();
}
else
{
goto p;
}
keyborad();
snake_food();
Sleep(20);
}
break;
case 1:
Game_Init();
while (1)
{
Game_draw();
if (l == 1)
{
l = Move_snake_siwang();
}
else
{
goto p;
}
keyborad();
snake_food();
Sleep(100);
}
break;
}
p:
printf("you die ,please choose repeat or quit 1 or 0 :");
scanf_s("%d", &i);
if (i == 1)
{
goto k;
}
return 0;
}
void Game_Init()
{
initgraph(my_high,my_wide,SHOWCONSOLE);//设置命令框格,图形大小,SHOWCONSOLE显示控制台;
sanke.szie = 3;//初始话蛇定义其节数
sanke.speed = 10;
sanke.dir=RIGHT;
for (int i = 0; i<= sanke.szie-1; i++)
{
sanke.coor[i].y = 10;
sanke.coor[i].x = 100-10*i;
}
srand(GetTickCount());
food.x = rand() % my_wide+20;
food.y = rand() % my_high+20;
food.flag = true;
food.r = rand() % 10 + 5;
}
void Move_snake()
{
for (int i = sanke.szie- 1; i >0; i--)
{
sanke.coor[i] = sanke.coor[i - 1];
}
switch (sanke.dir)
{
case UP:
if (sanke.coor[0].y <= 0)
{
sanke.coor[0].y = my_high;
}
sanke.coor[0].y -= sanke.speed;
break;
case DOWN:
if (sanke.coor[0].y >= my_high)
{
sanke.coor[0].y = 0;
}
sanke.coor[0].y += sanke.speed;
break;
case LEFT:
if (sanke.coor[0].x <= 0)
{
sanke.coor[0].x = my_wide;
}
sanke.coor[0].x -= sanke.speed;
break;
case RIGHT:
if (sanke.coor[0].x>=my_wide)
{
sanke.coor[0].x = 0;
}
sanke.coor[0].x += sanke.speed;
break;
}
}
void keyborad()
{
if (_kbhit())
{
switch (_getch())
{
case 'W':
case 'w':
if (sanke.dir != DOWN)
{
sanke.dir =UP;
}
break;
case 'S':
case 's':
if (sanke.dir != UP)
{
sanke.dir = DOWN;
}
break;
case 'A':
case 'a':
if (sanke.dir != RIGHT)
{
sanke.dir = LEFT;
}
break;
case 'D':
case 'd':
if (sanke.dir != LEFT)
{
sanke.dir = RIGHT;
}
break;
case ' ':
while (1)
{
if (_kbhit())
{
if (_getch() == ' ')
{
break;
}
}
}
break;
}
}
}
void Game_draw()
{
BeginBatchDraw();
setbkcolor(RGB(28, 115, 119));//设置背景颜色
cleardevice();
setfillcolor(WHITE);
//绘制蛇
for (int i =0; i <= sanke.szie-1; i++)
{
solidcircle(sanke.coor[i].x, sanke.coor[i].y, 5);//绘制⚪函数
}
if (food.flag)
{
solidcircle(food.x, food.y, food.r);
}
//solidcircle(sanke.coor[0].x, sanke.coor[0].y, 5);
EndBatchDraw();
}
void snake_food()
{
if (sanke.coor[0].x <= food.x +food.r && sanke.coor[0].x >= food.x -food.r&&sanke.coor[0].y >= food.y - food.r && sanke.coor[0].y <= food.y + food.r)
{
food.flag = false;
sanke.szie++;
}
if (!food.flag)
{
srand(GetTickCount());
food.x = rand() % my_wide+1;
food.y = rand() % my_high+1;
food.flag = true;
food.r = rand() % 10 + 5;
}
}
int menu()
{
int a;
printf("#############################\n");
printf("#### welcome to game ####\n");
printf("#### 1.start easy game ####\n");
printf("#### 2.start hard game ####\n");
printf("#### 3.start wudi game ####\n");
printf("#### 4.close game ####\n");
printf("#############################\n");
printf(" please choose the number:");
scanf_s("%d", &a);
return a;
}
void snake_food_hard()
{
if (sanke.coor[0].x <= food.x + food.r && sanke.coor[0].x >= food.x - food.r && sanke.coor[0].y >= food.y - food.r && sanke.coor[0].y <= food.y + food.r)
{
food.flag = false;
sanke.szie++;
sanke.speed ++;
}
if (!food.flag)
{
srand(GetTickCount());
food.x = rand() % my_wide+1;
food.y = rand() % my_high+1;
food.flag = true;
food.r = rand() % 10 + 5;
}
}
int Move_snake_siwang()
{
int l = 1;
for (int i = sanke.szie - 1; i > 0; i--)
{
sanke.coor[i] = sanke.coor[i - 1];
}
switch (sanke.dir)
{
case UP:
if (sanke.coor[0].y <= 0)
{
l = 0;
return l;
}
sanke.coor[0].y -= sanke.speed;
break;
case DOWN:
if (sanke.coor[0].y >= my_high)
{
l = 0;
return l;
}
sanke.coor[0].y += sanke.speed;
break;
case LEFT:
if (sanke.coor[0].x <= 0)
{
l = 0;
return l;
}
sanke.coor[0].x -= sanke.speed;
break;
case RIGHT:
if (sanke.coor[0].x >= my_wide)
{
l = 0;
return l;
}
sanke.coor[0].x += sanke.speed;
break;
}
return 1;
}
C语言贪吃蛇用VC2022相关推荐
- c语言五子棋代码_基于控制台的C语言贪吃蛇
相信对很多人来说,学完C语言以后,都会找一些小程序来练练手.例如贪吃蛇.五子棋.俄罗斯方块等等. 今天给大家分享一个基于控制台的C语言贪吃蛇小程序. 基础知识要求:C语言基础. 知识点补充 这里写一些 ...
- c语言安卓贪吃蛇代码下载,C语言贪吃蛇代码
c语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的 C语言贪吃蛇代码部分 #include #include #include#include #defin ...
- c语言贪吃蛇游戏编程视频教程,C语言贪吃蛇游戏精典源码 - 视频教程 - VC中文网-VC-MFC编程论坛 - Powered by Discuz!...
19f700059b660539d5dc (38.08 KB, 下载次数: 0) 2017-11-14 16:28 上传 C语言贪吃蛇游戏精典源码 19f500058fe8fcaf675a (2.98 ...
- c语言对抗程序代码,C语言贪吃蛇源程序代码双人对抗
C语言贪吃蛇源程序代码双人对抗 #include #include #include #include #include #include #include #define LEFT 100 #def ...
- C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全
一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...
- mac下的c语言贪吃蛇
小白小白特别白-- c语言贪吃蛇其实在网上可以找到很多的资源.但是因为用的是mac,windows.h和conio.h找不到,所以里面很多函数用不了.在网上找了很久,才慢慢写完.在这里记录一下,欢迎感 ...
- c语言贪吃蛇大作业报告,C语言贪吃蛇实验报告
C语言贪吃蛇实验报告 C 语言程序设计实训报告姓 名 专 业 班 级 指导教师 二 011 年 7 月 14 日I I目录1 实训目的和要求 11.1 实训目的和任务 11.2 实训要求 12 实训任 ...
- c语言贪吃蛇游戏源码下载,c语言贪吃蛇游戏源码.doc
c语言贪吃蛇游戏源码.doc /*运行是按任意键开始,不过呢,反向也算输哟*/include include include include include include include defin ...
- C语言贪吃蛇,流畅版,可继续升级改造
好久没发博文了,这段时间正在入门kali,不过今天我会给大家讲解一下有关c语言贪吃蛇的小代码, 废话不多说,直接上代码 等等,不急,小编还有一个收藏了半年的文件给大家分享一下: 适合刚入门同学学习的编 ...
- 贪吃蛇c语言经典程序下载,c语言贪吃蛇源码
c语言贪吃蛇源码是一款非常经典的休闲益智游戏.c语言贪吃蛇源码游戏画面采用了像素风格,并添加了5中游戏模式,为玩家带来更有趣的游戏体验,有兴趣的玩家可以下载c语言贪吃蛇源码玩玩,回忆下童年的乐趣. 游 ...
最新文章
- 浅谈java中的四个核心概念【转】
- KVM基础功能——Cpu配置
- python多线程爬取_python 多线程方法爬取微信公众号文章
- 【Spark】Spark基础教程知识点
- php hasmany,浅谈laravel orm 中的一对多关系 hasMany
- 计算机网络教程三次握手,计算机网络(二) TCP协议的三次握手
- 用户如何设置浏览器主页的历史记录和管理加载项
- apache日志管理
- 如何在Linux中克隆一个分区或者硬盘驱动器
- 根据ip查询真实地址
- 红尘梦落,卧醉千年,当所有的繁华散尽
- 服务器winsxs文件夹怎么清理工具,win10系统winsxs文件夹该如何删除?win10删除winsxs文件夹的两种方法...
- 我把电脑系统升级成Windows11,体验了一下还是换回Windows10
- 雷电网络更新:迈向 Ithaca
- 什么是静态测试、动态测试、黑盒测试、白盒测试、α测试、β测试?
- [随手记系列]SQLite数据库.db | .db-wal | .db-shw到底是个啥,为什么我导出.db里面没数据呢?
- 银行业务管理软件(5)
- html识别文字转语音,Speech Synthesis API入门 - web前端识别文字转语音
- go语言web开发入门之使用http2
- el-avatar入门学习