c语言命令行贪吃蛇,C语言实现贪吃蛇游戏(命令行)
这是一个纯C语言写的贪吃蛇游戏,供大家参考,具体内容如下
#include
#include
#include
#include
#include
#define SNAKE_LENGTH 100//定义蛇的最大长度
#define SCREEN_WIDETH 80
#define SCREEN_HEIGHT 30
//定义每一节蛇的坐标
struct coor{
int x;
int y;
};
//枚举方向
enum CH {
right = VK_RIGHT,
left = VK_LEFT,
up = VK_UP,
down = VK_DOWN
};
//定义蛇的属性
struct snake{
int len;//当前蛇的长度
struct coor coord[SNAKE_LENGTH];//每一节蛇的坐标
enum CH CH;//定义蛇的方向
int SPEED;
int flag;//定义蛇的状态 1表示存活 0表示死亡
}snake;
//光标移动函数
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
//初始化游戏界面
void init_sence()
{
//初始化上下墙
for (int i = 0; i < SCREEN_WIDETH; i += 2)
{
gotoxy(i,0);
printf("■");
gotoxy(i, SCREEN_HEIGHT);
printf("■");
}
//初始化左右墙
for (int i = 0; i <=SCREEN_HEIGHT; i++)
{
gotoxy(0, i);
printf("■");
gotoxy(SCREEN_WIDETH,i);
printf("■");
}
//打印提示信息
gotoxy(SCREEN_WIDETH + 5, 2);
printf("\t\t贪吃蛇");
gotoxy(SCREEN_WIDETH + 5, 6);
printf("2018//12//1");
gotoxy(SCREEN_WIDETH + 5, 8);
printf("作者:小豆芽");
gotoxy(SCREEN_WIDETH + 5, 10);
printf("F1:加速\tF2:减速");
gotoxy(SCREEN_WIDETH + 5, 12);
printf("CTRL:继续\t空格:暂停");
gotoxy(SCREEN_WIDETH + 5, 14);
printf("ESC:退出游戏");
gotoxy(SCREEN_WIDETH + 5, 28);
printf("建议:QQ:2862841130:::");
}
struct foodcoord {
int x;
int y;
int flag;//定义食物的状态
}food;
//**这是c程序**
#include"snake.h"
//蛇的移动
void move_snake();
//画出蛇
void draw_snake();
//产生食物
void creatfood();
//判断蛇是否吃到食物
void eatfood();
//判断蛇是否死掉
void SnakeState();
int main()
{
//设置窗口大小
system("mode con cols=110 lines=31");
//设置标题
SetConsoleTitleA("贪吃蛇");
//初始化蛇
begin:
snake.CH = VK_RIGHT;//初始化方向
snake.len = 5; //初始化长度
snake.SPEED = 300;//初始化蛇的移动速度
snake.coord[1].x = SCREEN_WIDETH / 2;//初始化蛇头的坐标
snake.coord[1].y = SCREEN_HEIGHT / 2;
snake.coord[2].x = SCREEN_WIDETH / 2-2;//初始化蛇头的坐标
snake.coord[2].y = SCREEN_HEIGHT / 2;
snake.coord[3].x = SCREEN_WIDETH / 2-4;//初始化蛇头的坐标
snake.coord[3].y = SCREEN_HEIGHT / 2;
//初始化食物状态
food.flag = 1;//1表示吃到食物 0表示没有吃到食物
//初始化食物状态
snake.flag = 1;//1活 0死
init_sence();//初始化游戏界面
while (1)
{
draw_snake();//画蛇
Sleep(snake.SPEED);//蛇的移动速度
move_snake();//移动蛇
if(food.flag)
creatfood();//产生食物
eatfood();//判断是否吃到食物
SnakeState();//判断蛇是否死亡
if (!snake.flag)break;
}
system("cls");
gotoxy(SCREEN_WIDETH/2, SCREEN_HEIGHT/2-4);
printf(" GAME OVER!!!");
gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+2);
printf("你的得分是:\t\t\t%d ",snake.len-1);
gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+4);
printf("我不服再来:\t\t\tCTRL ");
gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+6);
printf("算了垃圾游戏毁我青春:\t\tESC");
while (1)
{
if (GetAsyncKeyState(VK_CONTROL))
{
system("cls");
goto begin;
}
else if (GetAsyncKeyState(VK_ESCAPE))
return 0;
}
}
//蛇的移动
void move_snake()
{
//判断是否有按键操作
if (GetAsyncKeyState(up))
{
if(snake.CH!=down)snake.CH = up;
}
else if (GetAsyncKeyState(down))
{
if (snake.CH != up)snake.CH = down;
}
else if (GetAsyncKeyState(right))
{
if (snake.CH != left)snake.CH = right;
}
else if (GetAsyncKeyState(left))
{
if (snake.CH != right)snake.CH = left;
}
else if (GetAsyncKeyState(VK_F1))
{
if(snake.SPEED>=100)snake.SPEED -= 50;
}
else if (GetAsyncKeyState(VK_F2))
{
if (snake.SPEED <= 3000)snake.SPEED += 100;
}
//根据检测到的方向改变蛇头的位置
switch (snake.CH)
{
case right:snake.coord[1].x += 2; break;
case left:snake.coord[1].x -= 2; break;
case up:snake.coord[1].y -= 1; break;
case down:snake.coord[1].y += 1; break;
}
}
//画出蛇
void draw_snake()
{
//画出蛇头
gotoxy(snake.coord[1].x, snake.coord[1].y);
printf("□");
//画出蛇身,直接一个for循环实现
for (int i = 2; i <= snake.len; i++)
{
gotoxy(snake.coord[i].x, snake.coord[i].y);
printf("□");
}
//擦掉尾巴
gotoxy(snake.coord[snake.len].x, snake.coord[snake.len].y);
printf(" ");
//遍历每一节蛇
for (int i = snake.len; i >1; i--)
{
snake.coord[i].x = snake.coord[i - 1].x;
snake.coord[i].y = snake.coord[i - 1].y;
}
gotoxy(0, 0);
printf("■");
gotoxy(85, 25);
printf("得分:%d ", snake.len-1);
}
//产生食物
void creatfood()
{
//随机种子生成
srand((unsigned)time(NULL));
if(food.flag)
while (1)
{
food.x = rand() % 80;
food.y = rand() % 30;
if (food.x % 2 == 0 && food.x >= 2 && food.x <= 78 && food.y > 1 && food.y < 30)
{
int flag = 0;
//判断产生的食物可不可能在蛇的身体上
for (int i = 1; i <= snake.len; i++)
{
if (snake.coord[i].x == food.x&&snake.coord[i].y == food.y)
{
flag = 1;
break;
}
}
if (flag)continue;
//绘制食物
else
{
gotoxy(food.x, food.y);
printf("⊙");
food.flag = 0;
break;
}
}
}
food.flag = 0;
}
//判断蛇是否吃到食物
void eatfood()
{
//只需要判断蛇头是否与食物重合
if (food.x == snake.coord[1].x&&food.y == snake.coord[1].y)
{
snake.len+=1;
food.flag = 1;
}
}
//判断蛇是否死掉
void SnakeState()
{
if (snake.coord[1].x < 2 || snake.coord[1].x>78 || snake.coord[1].y < 1 || snake.coord[1].y>29)
snake.flag = 0;
for (int i = 2; i <= snake.len; i++)
{
if (snake.coord[1].x == snake.coord[i].x&&snake.coord[1].y == snake.coord[i].y)
snake.flag = 0;
}
}
更多有趣的经典小游戏实现专题,分享给大家:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
c语言命令行贪吃蛇,C语言实现贪吃蛇游戏(命令行)相关推荐
- 99行不用指针 c语言贪食蛇,小白99行C代码编写经典游戏贪吃蛇(多关版本)
文章目录 前言 一.实现原理 1.地图打印 2.蛇身运动 3.方向键操控 4.四种判定 5.函数工具 二.游戏试玩 1.编译环境 2.源代码 三.代码详解 1.游戏配置部分(第1~31行) 2.游戏主 ...
- C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全
一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...
- c语言:数据保存的方法实现简易贪吃蛇
贪吃蛇作为我童年第一个接触的手机游戏,在学c语言的时候就一直在想什么时候可以自己实现.经过一年的学习也是终于写出来了,在这期间我看了很多其它博客上的文章,我也很感谢那些愿意把自己的知识在网上和大家分享 ...
- 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏
c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...
- 贪吃蛇_C语言_链表实现_SCAU课程设计
个人大一下课程设计作品,本文中直接附上源代码(通过visual stdio 2019 实现 ): 课题:贪吃蛇(链表实现~) 语言:C/C++ 运行环境(软件):Visual Stdio 2019( ...
- 在 Ubuntu 上通过命令行改变 Linux 系统语言
这是一个快速教程,展示了在 Ubuntu 和其他 Linux 发行版上从命令行改变语言的步骤. 事实上,我一直在写西班牙语的文章.如果你没有访问过它并且/或你是一个讲西班牙语的人,请访问 It's F ...
- 贪吃蛇c语言经典程序下载,C语言实现贪吃蛇游戏(单人版)
本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 相比于第一个:贪吃蛇游戏,功能更加丰富 #include"snake.h" //蛇的移动 void m ...
- 贪吃蛇c语言经典程序下载,c语言贪吃蛇源码
c语言贪吃蛇源码是一款非常经典的休闲益智游戏.c语言贪吃蛇源码游戏画面采用了像素风格,并添加了5中游戏模式,为玩家带来更有趣的游戏体验,有兴趣的玩家可以下载c语言贪吃蛇源码玩玩,回忆下童年的乐趣. 游 ...
- c语言课程设计贪吃蛇报告,贪吃蛇C语言课程设计报告.doc
贪吃蛇C语言课程设计报告 贪吃蛇游戏设计 姓名: 张力 学号: 完成日期: 月 日 一.设计目的 贪吃蛇游戏程序功能的实现主要是建立在二维数组和图形界面的应用上,通过编写游戏程序能够熟悉掌握相关数组和 ...
- 贪吃蛇c语言 游戏中会出现障碍物,贪吃蛇C语言游戏代码.doc
贪吃蛇C语言游戏代码 //开始编写游戏需要的类 #include //EasyX_2011惊蛰版(绘图库) #include #include #include #define UP1 #define ...
最新文章
- 今天你写控件了吗?----ASP.net控件开发系列(三)
- Powershell查看AD 组成员的变化
- AIX卷管理介绍以及利用空闲PP来创建文件系统
- HH SaaS电商系统的商品营销角标功能模块设计
- The command ‘/bin/sh -c apt-get install -y vim’ returned a non-zzero code: 100
- oracle varchar2() 占几个字母,Oracle number date varchar2字段类型占用空间大小
- 研究员告警:严重漏洞影响数千万台IoT设备,可远程查看实时音视频并接管设备...
- 蚁群算法原理以及应用
- 软件工程之美学习笔记二十五 24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?
- Q4营收突破20亿且连续四个季度盈利斗鱼驶入“后直播时代”快车道
- Mermaid知识点总结3 - Flowchart 2
- tapestry mysql_第二十四讲:tapestry的grid组件
- 7. django应用及分布式路由
- ApowerREC 1.2.4破解版 亲测能用
- 用十种编程需语言说新年快乐_整理新年手机和PC的10种方法
- 代码战争之友人与敌人
- 字符 正则表达式详解
- 卸载未完全安装的Microsoft SQL Server 2008 R2
- mysql外键约束分数_MySQL 高级查询
- 3.5.3 数据排序;重复数值、缺失值处理
热门文章
- 【电源模块】LM2596 DCDC降压模块设计
- Stored Outline
- QQ登录界面(Java)
- 根据Landset 8计算植被覆盖度
- 新电脑的计算机怎么在桌面显示,新电脑我的电脑在哪_新电脑我的电脑在哪里查看-系统城...
- 有关单片机驱动IR2104遇到的问题及解决方法
- 【系】微信小程序云开发实战坚果商城-云开发之分类数据实现
- python输入名字配对情侣网名_输入名字配置情侣网名-网名搜索
- 关于KDIFF3的使用
- 华为P9 回退android6.0,华为P9 Plus从EMUI5.0 版本回退EMUI 4.1官方稳定版本