字符版本-贪吃蛇游戏设计及创新算法
想必大家在小时候都玩过贪吃蛇这一经典小游戏吧,而做出贪吃蛇小游戏也是每一个初入编程学习的小萌新的梦想吧。
而在室友的Mac电脑上,我发现其自带有贪吃蛇小游戏:
1、打开终端
2、输入emacs
3、按下esc+x(光标会移动最下方)
4、输入snake并按下回车就可进行游戏了
游戏效果如下:
而在软导课后,我们学习到了如何制作贪吃蛇字符游戏,借助老师提供的材料,我也基本写出了贪吃蛇字符版的代码。
贪吃蛇主要代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SNAKE_MAX_LENGTH 20
#define SANKE_HEAD 'H'
#define SNAKE_BODY 'X'
#define BLANK_CELL ' '
#define SNAKE_FOOD '$'
#define WALL_CELL '*'
//snake stepping: dy = -1(up),1(down); dx = -1(left),1(right), 0(no move)
void snakeMove(char);
//put a food randomized on a blank cell
void put_money(void);
//out cells of the grid
void output(void);
//outs when gameover
void gameover(void);
char map[12][13] =
{"************", //初始状态
"*XXXXH *", //直接打表
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"* *",
"************"};//绘制蛇的移动范围
//define vars for snake
int snakeBodyX[SNAKE_MAX_LENGTH] = {4, 3, 2, 1};
int snakeBodyY[SNAKE_MAX_LENGTH] = {1, 1, 1, 1};
int snakeHeadx = 1;
int snakeHeady = 5;
int snakeLength = 5;
int moving = 1;
void printmap() {
system("cls");
int i = 0;
for (i = 0; i < 12; i ++) {
printf("%s\n", map[i]);
}
}
void snakeMove(char control) {
int i = 0;
int temp1 = snakeHeadx,temp2 = snakeHeady;//存储变量的位置与坐标
switch (control) {
case 'A':
case 'a':
snakeHeady --;
break;//左前进一步
case 'W':
case 'w':
snakeHeadx--;
break;//上前进一步
case 'D':
case 'd':
snakeHeady++;
break;//右前进一步
case 'S':
case 's':
snakeHeadx++;
break;//下前进一步
default:
return;
}
if (map[snakeHeadx][snakeHeady] != ' ')
gameover();
else {
map[snakeHeadx][snakeHeady] = 'H';
map[temp1][temp2] = map[snakeBodyX[i]][snakeBodyY[i]];
for (int j = i; j < snakeLength - 2; j ++) {
map[snakeBodyX[j]][snakeBodyY[j]] = map[snakeBodyX[j + 1]][snakeBodyY[j + 1]];
}
map[snakeBodyX[i]][snakeBodyY[i]] = ' ';
for (int k = snakeLength - 3; k >= 0; k --) {
snakeBodyX[k + 1] = snakeBodyY[k];
snakeBodyY[k + 1] = snakeBodyY[k];
} //使snakeBody的坐标发生变化
snakeBodyX[0] = temp1;
snakeBodyY[0] = temp2;
}
}
void gameover() {
printf("Game Over!\n");
moving = 0;
}
int main()
{
char control;//获取游戏者的控制指令
printmap();
while(moving) {
scanf("%c", &control);
snakeMove(control);
printmap();
}
return 0;
}
游戏效果如下:
智能推荐
简易贪吃蛇游戏设计(字符化)
emmm……这篇主要是介绍一个小小的用代码做出来的贪吃蛇,这对于一个新手的我来说可是费了好大一股劲,其实对于贪吃蛇来说,它本身的特性就决定了它适合用链表来做,emmm……但我不会,所以对于新手的我,我用了一种相似的方法,通过记录蛇的每一个身体点的坐标来操作蛇的移动。以下,我会用源代码的形式简单介绍。 首先,我们需要构造整个图形的边框架构,所以...
贪吃蛇的游戏设计和算法
字符版本贪吃蛇游戏设计及算法 一·所需功能: 1.地图的边界及更新 2.蛇的初始化 3.蛇往四个方向的移动(用键盘实现) 4.蛇撞到身体、障碍(边界或你在地图中定义) 游戏结束 5.蛇吃到食物,蛇就长一节 6.随机放置食物,不可在蛇上或者超出边界 7.得分的显示和增加 二·游戏的流程图: 三·游戏的基本伪代码: 输出字符矩阵 四.代码的实现 #includ...
字符游戏-贪吃蛇简介
**小时候玩过的贪吃蛇是这样的: 或者是这样的: 而我现在能打出来的却是: 只能说是:理想很丰满,现实很骨感。 这两周的作业都是“贪吃蛇”,这对一个小白来说简直是痛不欲生,因为不会做!所以网上查了很多资料以及看了很多dalao的文章,最后才勉勉强强打出走了很多弯路的贪吃蛇,见笑了。 首先是移动 这里面融合了是否吃到食物的判断以及对应的“增长”&ldq...
利用OpenGL设计贪吃蛇游戏
利用OpenGL设计贪吃蛇游戏 文章目录 利用OpenGL设计贪吃蛇游戏 任务介绍 游戏玩法 开发环境 游戏实现 贪吃蛇游戏的框架搭建 主程序 游戏类 游戏对象类 工具类 着色器类 摄像机类 精灵渲染类 场景、蛇、食物的渲染 场景 蛇、食物 蛇、食物的控制逻辑 蛇的移动 食物的随机摆放和旋转 碰撞检测与响应 实现效果 总结 任务介绍 贪吃蛇游戏:玩家控制贪吃蛇在游戏区域里驰骋,避免碰到自己或障碍物...
猜你喜欢
贪吃蛇设计与算法
我觉得在这个游戏中,最难的就是move函数了,打得很艰难,不过最后终于在改了很多次后成功打出来了。如下: 不过我的和别人的不太一样,我是把食物的代码也放进了move函数中。 下面是我的wheregonext函数(超低配智能): 在写的时候可以用自顶向下的方法,先写好总控代码,再分别写各个函数,下面是全部代码: 下面是在运行的程序: 欢迎大家指正。...
VUE给动态生成的el-checkbox添加v-model
需求描述:根据返回的数据,页面动态for循环添加el-checkbox,动态绑定v-model; html代码: tabList数据格式: 之前的错误做法: 开始以为这样就可以了,毕竟在el-checkbox上用item.status绑定v-model,后面发现checkbox点击的时候并没有更新; 解决方案: 官方文档...
[UE4]蓝图和C++调用自定义函数
1、C++自定义方法,蓝图调用 UFUNCTION宏是处理将C++函数暴露给反射系统的一些事情,参数BlueprintCallable意味着这个函数可以在蓝图中调用,而后面的目录是必须有的,这样在蓝图中右键点击的时候,我们就可以根据这个目录找到我们需要的函数。 2、蓝图定义方法,C++调用 当我们在蓝图中定义了一系列操作后,我们也想用C++调用,我们利用BlueprintImplementable...
Redis--2.Jedis的介绍和使用
一.概念 Jedis是Redis官方推荐使用的的一个Java连接开发的工具(中间件)。 Jedis主要是集成了redis的一些命令操作,封装了redis的java客户端。 使用Jedis操作Redis数据库,就相当于使用JDBC操作sql_server、Mysql数据库。 二.两种连接方式 1.Jedis对象直连Redis Jedis对象直连方式可以分为五个步骤: 1、导入Jedis的jar包 2...
选择图片上传之后,图片旋转问题解决方案(前端)
图片上传之后,显示为什么会是旋转的呢? 这就要说到图片的 exif 简单来说,Exif 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部,也就是说 Exif信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,它就好像是相机的日期打印功能一样,只不过 Exif信息所记录的资讯更为详尽和完备。Exif 所记录的元数据信息非常丰富,主...
