c语言小游戏 精简_一个简易的贪吃蛇小游戏C语言源码
/*
*程序名称:贪吃蛇v2.1
*程序描述:一个简易的贪吃蛇小游戏
*版本信息:v2.1
*v1.1版本更新:1:加入菜单选择项
*v1.2版本更新:1:修复菜单选择bug
*v1.3班本更新:1:加入难度选择项
* 2:增加键盘采集频率,大大增加操作灵敏度
* 3:优化屏幕刷新频率,平衡刺眼的情况
*v2.0版本更新:1:使用新的数据存储结构
* 2:使用全新的蛇的形状,更加美观
* 3:解决了1.X版本地图长宽不等距的问题
*v2.1版本更新:1:修复蛇行进过程中快速切换方向至死亡的bug
* 2:屏幕刷新改为蛇每前进一次刷新一次,闪屏更柔和
* 3:更新退出后版本信息的输出
*/
#include
#include
#include
#include
#include
#include
int i;
#define N 25
#define M 22
//结构体名的宏定义
#define STRU_B struct board
//结构体元素part的值定义
#define bBORDER "◆"
#define sHEAD "■"
#define sBODY "◆"
#define sTAIL "◇"
#define bNONE " "
#define bFOOD "☆"
//结构体元素drection的值定义
#define UP 24
#define DOWN 25
#define RIGHT 26
#define LEFT 27
struct board{
char drection;
char part[4];
};
void print_first(void);
int degree_difficulty(void);
void start(int diff);
void initialise_board(STRU_B(*p)[N]);
void creat_sanke(STRU_B(*p)[N]);
void show_board(STRU_B(*p)[N]);
int move_snake(STRU_B(*p)[N], char drection);
void delete_tail(STRU_B(*p)[N]);
void lose(STRU_B(*p)[N]);
void add_food(STRU_B(*p)[N]);
void print_last();
int main(void)
{
print_first();
do
{
start(degree_difficulty());
printf("1:再来一局\n2:退出\n请选择:");
fflush(stdin);
scanf("%d", &i);
} while (i == 1);
print_last();
return 0;
}
void print_first(void)
{
printf("*************欢迎来到贪吃蛇*************\n\n");
printf("使用键盘上、下、左、右键控制方向\n\n\n");
}
int degree_difficulty(void)
{
int diff;
do
{
printf("\n请选择难度:(1——3):");
scanf("%d", &diff);
switch (diff)
{
case 1:diff = 10; break;
case 2:diff = 6; break;
case 3:diff = 2; break;
default:
break;
}
if (2 <= diff && diff <= 10)
return diff;
printf("\n请输入正确的编号选择难度:(1——3):");
} while (1);
}
void start(int diff)
{
STRU_B board[M][N];
char drection = RIGHT;
int isn_lose = 1, i, dc;
initialise_board(board);
creat_sanke(board);
while (isn_lose)
{
dc = 0;
system("CLS");
show_board(board);
for (i = 0; i < diff; i++)
{
if (GetKeyState(VK_UP) < 0 && drection != DOWN && dc == 0) drection = UP, dc++;
if (GetKeyState(VK_DOWN) < 0 && drection != UP && dc == 0) drection = DOWN, dc++;
if (GetKeyState(VK_LEFT) < 0 && drection != RIGHT && dc == 0) drection = LEFT, dc++;
if (GetKeyState(VK_RIGHT) < 0 && drection != LEFT && dc == 0) drection = RIGHT, dc++;
Sleep(10);
}
isn_lose = move_snake(board, drection);
}
system("CLS");
show_board(board);
}
void initialise_board(STRU_B(*p)[N])
{
int i, j;
for (j = 0; j < N; j++)
strcpy(p[0][j].part , bBORDER);
for (i = 1; i < M - 1; i++)
for (j = 0; j < N; j++)
if (j == 0 || j == (N - 1))
strcpy(p[i][j].part , bBORDER);
else
strcpy(p[i][j].part , bNONE);
for (j = 0; j < N; j++)
strcpy(p[M - 1][j].part , bBORDER);
}
void creat_sanke(STRU_B(*p)[N])
{
p[M / 2][N / 2].drection = RIGHT;
strcpy(p[M / 2][N / 2].part , sHEAD);
p[M / 2][N / 2 - 1].drection = RIGHT;
strcpy(p[M / 2][N / 2 - 1].part , sBODY);
p[M / 2][N / 2 - 2].drection = RIGHT;
strcpy(p[M / 2][N / 2 - 2].part , sTAIL);
add_food(p);
}
void show_board(STRU_B(*p)[N])
{
int i, j;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
printf("%s", p[i][j].part);
printf("\n");
}
}
int move_snake(STRU_B(*p)[N], char drection)
{
int i, j, NH = 0;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
{
if (strcmp(p[i][j].part, bNONE) == 0 || strcmp(p[i][j].part, sBODY) == 0);
else if (strcmp(p[i][j].part , sHEAD) == 0 && NH == 0)
{
p[i][j].drection = drection;
switch (drection)
{
case UP:if (strcmp(p[i - 1][j].part , bBORDER) == 0) { lose(p); return 0; }
if (strcmp(p[i - 1][j].part , bFOOD) == 0) add_food(p);
else delete_tail(p);
p[i - 1][j] = p[i][j];
break;
case DOWN:if (strcmp(p[i + 1][j].part, bBORDER) == 0) { lose(p); return 0; }
if (strcmp(p[i + 1][j].part, bFOOD) == 0) add_food(p);
else delete_tail(p);
p[i + 1][j] = p[i][j];
break;
case LEFT:if (strcmp(p[i][j - 1].part, bBORDER) == 0) { lose(p); return 0; }
if (strcmp(p[i][j - 1].part, bFOOD) == 0) add_food(p);
else delete_tail(p);
p[i][j - 1] = p[i][j];
break;
case RIGHT:if (strcmp(p[i][j + 1].part, bBORDER) == 0) { lose(p); return 0; }
if (strcmp(p[i][j + 1].part, bFOOD) == 0) add_food(p);
else delete_tail(p);
p[i][j + 1] = p[i][j];
break;
}
strcpy(p[i][j].part, sBODY);
NH++;
}
}
return 1;
}
void delete_tail(STRU_B(*p)[N])
{
int i, j, NT = 0;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
if (strcmp(p[i][j].part, sTAIL) == 0 && NT == 0)
{
switch (p[i][j].drection)
{
case UP:strcpy(p[i - 1][j].part, p[i][j].part), strcpy(p[i][j].part, bNONE);
break;
case DOWN:strcpy(p[i + 1][j].part, p[i][j].part), strcpy(p[i][j].part, bNONE);
break;
case LEFT:strcpy(p[i][j - 1].part, p[i][j].part), strcpy(p[i][j].part, bNONE);
break;
case RIGHT:strcpy(p[i][j + 1].part, p[i][j].part), strcpy(p[i][j].part, bNONE);
break;
}
NT++;
}
}
void lose(STRU_B(*p)[N])
{
strcpy(p[M / 2][N / 3].part, "Yo");
strcpy(p[M / 2][N / 3 + 1].part, "u ");
strcpy(p[M / 2][N / 3 + 2].part, "lo");
strcpy(p[M / 2][N / 3 + 3].part, "se");
strcpy(p[M / 2][N / 3 + 4].part, "! ");
}
void add_food(STRU_B(*p)[N])
{
int x, y;
srand(time(0));
x = (rand() % N - 2) + 1;
y = (rand() % M - 2) + 1;
while (strcmp(p[y][x].part, bNONE) != 0)
{
x = (rand() % N - 2) + 1;
y = (rand() % M - 2) + 1;
}
strcpy(p[y][x].part, bFOOD);
}
void print_last()
{
system("CLS");
printf("\n\n\n********************************************************\n");
printf("* *\n");
printf("* 贪吃蛇v2.1 *\n");
printf("* *\n");
printf("********************************************************\n");
Sleep(1000);
}
c语言小游戏 精简_一个简易的贪吃蛇小游戏C语言源码相关推荐
- python爬虫捕鱼网站_一个简易的爬虫工具,使用Python语言编写,用于zhihu全自动捕鱼...
简介 这是什么 这是一个简易的爬虫工具,使用Python语言编写,用于zhihu全自动捕鱼,理论上,你可以爬取你感兴趣的任何问题,而不仅仅是小姐姐. 如何使用 编程使用 请确保你的Python版本是3 ...
- 【贪吃蛇小游戏】宝塔面板快速搭建贪吃蛇小游戏Web网站 - 无需云服务器
文章目录 前言 视频教程 1. 环境安装 2. 安装cpolar内网穿透 3. 内网穿透 4. 固定http地址 5. 配置二级子域名 6. 创建一个测试页面 转载自远程内网穿透的文章:Linux使用 ...
- JavaGUI简易版贪吃蛇小游戏
做这个小游戏,主要是学习一下游戏制作的基本逻辑,加深对面向对象的理解. 游戏引擎: /*** 大牛程序员写的游戏的公共类 * 使用Game.init()方法初始化游戏* 使用Game.gameOver ...
- Java经典小游戏——贪吃蛇简单实现(附源码)
文章目录 一.使用知识 二.使用工具 三.开发过程 3.1素材准备 3.2 开发过程 3.2.1 创建项目 3.2.2 页面设计 3.23 画蛇 3.24创建蛇的食物 3.2.5增加蛇的存活状态 3. ...
- C语言C++图形库---贪吃蛇大作战【附源码】
这一节中,我们来做一款经典小游戏,贪吃蛇.先看看最终效果图 在开始之前,我们把窗体创建好. 创建一个800 * 600的窗体.这一次我们使用默认的原点和坐标轴:原点在窗体左上角,X轴正方向向右,Y轴正 ...
- c语言小游戏 精简_【原创】用非常简单的c语言自编的一个小游戏
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 修改过后: #include #include void js(int); int qian = 1000; int x = 0; int main() ...
- 基于面向对象 来写一个简单的贪吃蛇小游戏(代码可直接用)
分析一下用到的对象(这个案例的地图过于简单,可以不用创建为对象) 食物对象(food) 蛇对象(snake) 游戏对象(game) 1.food对象 属性 :x, y, ...
- 100行代码,使用 Pygame 制作一个贪吃蛇小游戏!
作者 | 周萝卜 来源 | 萝卜大杂烩 相信我们大家都玩过贪吃蛇游戏,今天我们就从头一起来写一个贪吃蛇小游戏,只需要100多行的代码就完成了. 用到的 Pygame 函数 贪吃蛇小游戏用到的函数 功能 ...
- python贪吃蛇小游戏_python开发贪吃蛇小游戏
3.概要设计 3.1 程序功能模块 由设计应解决的问题可知,本次的设计是使用用方向键来实现一个简易的贪吃蛇小游戏的程序,具体的功能模块如图3-1所示. 图3-1 程序功能模块 Fig.3-1 prog ...
最新文章
- 【模拟退火】解决【TSP】问题
- 如何改善虚幻引擎中的游戏线程CPU性能表现
- H.264 中很有用的一些概念
- Sliverlight MD5
- 【Liunx】Linux 系统目录结构
- div 重新加载_JS之 加载模糊文本动画
- Android Studio 0.1 gradle home的问题
- linux系统如何重置密码
- USB转双串口产品设计-RS485串口
- 为AutoCAD提供可用字体-CAD字体库大全提供下载
- android usb 读写权限,Android默认给予USB读写权限,去掉受权对话框
- 苹果内购那些事儿(二)
- 微信oa服务器,微信oa系统是什么?微信如何与oa系统进行结合?
- 突破次元壁垒,让身边的玩偶手办在屏幕上动起来!
- ISME:长江流域Comammox Nitrospira的群落、生物地理学和生态驱动者
- spss分析 sus量表高低分组
- 惠普1005w打印机使用说明书_首款能充粉的打印机来了 惠普1005w一体机评测
- 微信小程序vantweapp-Dialog弹出框提交表单,并还原确定按钮样式
- 阿里云相关-云服务器ECS
- xlc编译mysql库_[Xlcteam](Web)Xlcteam客户留言板
热门文章
- 使用AWS Elastic Beanstalk轻松进行Spring Boot部署
- 如何在内存序列化中使用Java深克隆对象
- Spring Bean范围
- 更好的默认NullPointerException消息是否会传入Java?
- q7goodies事例_Java 8 Friday Goodies:Lambda和SQL
- 休息一下,或者:如何使用Java 12制作出色的拼图游戏
- 使用HazelCast进行休眠缓存:JPA缓存基础知识
- usb端点轮询_使用Spring Integration轮询http端点
- 使用Gatling + Gradle + Jenkins Pipeline为您的JAX-RS(和JavaEE)应用程序进行连续压力测试...
- Neo4j:特定关系与一般关系+属性