字符游戏-智能蛇(上)

2023-10-27

字符游戏-智能蛇(上)


上周的作业是写出字符游戏-贪吃蛇的小程序。在完成这个项目之后,我将理清思路,记录一下我的学习过程。

  • 让蛇动起来
  • 放置奖励的食物
  • 在蛇吃到食物时延长蛇的身体
  • 设置游戏结束的机制

让蛇动起来

先设置一下相应的字符表示:

 
 
  1. char BLANK_CHAR = ' ';
  2. char WALL_CHAR = '*';
  3. char SNAKE_HEAD_CHAR = 'H';
  4. char SNAKE_BODY_CHAR = 'X';
  5. char FOOD_CHAR = '$';

在这里,我们用 * 来围成墙体,用 $ 来表示食物,用 H 来表示蛇头,用 X 来表示蛇的身体。

绘出一个方形区域,这是蛇身活动的范围。

 
 
  1. char map[12][13] = {
  2. "************",
  3. "* *",
  4. "* *",
  5. "* *",
  6. "* *",
  7. "* *",
  8. "* *",
  9. "* *",
  10. "* *",
  11. "* *",
  12. "* *",
  13. "************",
  14. };

初始化变量:

 
 
  1. int snakeHeadX = 1, snakeHeadY = 1;
  2. int snakeBodyX[100] = {0}, snakeBodyY[100] = {0};
  3. int snakeBodyLen = 0;
  4. int snakeTailIndex = -1;
  5. int willBeLonger = 0;
  6. int foodX = 0, foodY = 0;
  7. int gameRunning = 1;

编写一个让蛇动起来的函数:

  1. void snakeMove(char control){
  2.  map[snakeHeadX][snakeHeadY]= BLANK_CHAR;
  3.  // record the previous snake head position
  4.  int prevSnakeHeadX= snakeHeadX;
  5.  int prevSnakeHeadY= snakeHeadY;
  6.  switch(control){
  7.   case'w':
  8.     snakeHeadX--;
  9.    break;
  10.   case'a':
  11.     snakeHeadY--;
  12.    break;
  13.   case's':
  14.     snakeHeadX++;
  15.    break;
  16.   case'd':
  17.     snakeHeadY++;
  18.    break;
  19.   default:
  20.    return;
  21.  }
  22.  if(map[snakeHeadX][snakeHeadY]!= BLANK_CHAR&&map[snakeHeadX][snakeHeadY]!= FOOD_CHAR)
  23.  {
  24.     gameOver();
  25.  }

就是说,当输入W时蛇会向上挪动一格,输入A时蛇会向左挪动一格,输入S时蛇会向下挪动一格,输入D时蛇会向右挪动一格。这样,我们就实现了对贪吃蛇行进方向的控制。

放置奖励的食物


因为每次放置食物的地方随机,程序里应当包含stdlib.h头文件。而为了不用每次都设置不同seed,我们可以给程序中添加time.h头文件。
注意,放置食物的地方不可以事蛇的身体,更不能是墙体。
下面是实现该功能的代码:

  
  
  1. void spawnFood() {
  2. // Random food position
  3. foodX = rand() % 10 + 1;
  4. foodY = rand() % 10 + 1;
  5. while (map[foodX][foodY] != BLANK_CHAR) {
  6. foodX = rand() % 10 + 1;
  7. foodY = rand() % 10 + 1;
  8. }
  9. map[foodX][foodY] = FOOD_CHAR;
  10. }
至此,贪吃蛇的前两项功能已经完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符游戏-智能蛇(上) 的相关文章

  • 手动删除shmget创建的共享内存

    使用shmget创建或打开共享内存的时候 其中有一个参数是制定了权限的 这个权限类似于文件的权限 指定了什么身份可以打开已经存在的共享内存 在我的项目中出现了一个程序运行失败 经过调查发现在使用shmget打开一段共享内存的时候没有权限 造
  • win10家庭版计算机属性里没有远程桌面,win10家庭版不支持远程桌面怎么办_远程桌面无法连接的解决方法...

    众所周知 有些win系统的家庭版本是无法远程桌面连接的 而且在连接的时候会报错 如果重新安装系统十分麻烦 那么咱们要怎么解决这个部分Windows电脑无法远程桌面连接的问题呢 下面小编就来分享多种Win电脑系统无法远程桌面连接的正确解决方法
  • js页面初始化方法只调用一次_10个常见的JS语言错误总汇

    1 Uncaught TypeError Cannot Read Property这是 JavaScript 开发人员最常遇到的错误 当你读取一个属性或调用一个未定义对象的方法时 Chrome 中就会报出这样的错误 导致这个错误发生的原因有
  • 地图采集车的那些事

    一 背景 高精地图 高精采集车 是做地图和出行领域同学经常挂在嘴上的一些常用词儿 但是 圈外的同学可能会问 到底什么是高精 高精是指高精度定位 高精地图是指包含丰富地理信息数据 具有高精度坐标的地图 当然 高精采集车就是采集制作高精地图数据
  • Caffe源码中io文件分析

    Caffe源码 caffe version commit 09868ac date 2015 08 15 中有一些重要的头文件 这里介绍下include caffe util io hpp文件的内容 1 include文件 1
  • MySQL 的FLASHBACK 数据回滚

    数据库的里面的FLASHBACK 功能是一个让人刮目相看的功能 如果你做错了什么怎么能将那段时间的数据恢复 并且还让生产的应用不停止 这是一个数据库管理员都想拥有的功能 SQL SERVER 需要借助第三方软件的功能 可以完成数据的回滚和恢
  • Python selenium各个组件的操作

    一 操作文本输入框 常用方法 说明 sendkeys 设值 clear 清空文本框内容 get attribute 获取文本框中的值 is display 判断元素是否显示 案例演示 from time import sleep from
  • Spring 如何解决循环依赖的问题

    一 什么是循环依赖 是两个或两个以上对象互相引用 即A依赖B B依赖C C又依赖A 例如 service public class A private B b Autowired public void setB B b this b b
  • 图像识别之KNN算法的理解与应用

    KNN是最经典的机器学习算法之一 该算法既可以用于数据分类 也可以用于数据回归预测 其核心思路是在训练样本中寻找距离最接近待分类样本的K个样本 然后 如果目的是分类 则统计这K个样本中的各个类别数量 数量最多的类别即认为是待分类样本的类别
  • STM32基础---BH1750 硬件 IIC 驱动程序+ 测试demo

    STM32基础 BH1750 硬件 IIC 驱动程序 测试demo STM32CudeMx MDK ARM BH1750 简介 产品介绍 产品特点 测量程序步骤 指令集合结构 从 写指示 到 读出测量结果 的测量时序实例 STM32Cube
  • Nvidia 2080 Ti很烫,是什么原因?

    我使用Dell工作站安装了Nvidia 2080 Ti显卡 重装了Ubuntu 16 04系统 系统刚装好后 发现显卡背面发热 很烫 见下图 我摸了另外一台相同配置的工作站 2080 Ti显卡并不烫 我原以为显卡坏了 多次开机 紧固显卡 仍
  • LoadRunner错误及解决方法总结[转]

    一 Step download timeout 120 seconds 这是一个经常会遇到的问题 解决得办法走以下步骤 1 修改run time setting中的请求超时时间 增加到600s 其中有三项的参数可以一次都修改了 HTTP r
  • MMDetection3.0环境配置(ubuntu20.04 + miniconda)

    MMDetection3 0环境配置 配置环境试用SOLO之后 总感觉和Mask R CNN比还差点意思 不论是精度还是速度 好像都没有作者说的那么强 不清楚是不是自建数据集的限制 或者因为没有调参影响了学习效果 有兴趣的可以看原文配置训练
  • python中的模块、库、包有什么区别

    1 python模块是 python模块 包含并且有组织的代码片段为模块 表现形式为 写的代码保存为文件 这个文件就是一个模块 sample py 其中文件名smaple为模块名字 关系图 2 python包是 包是一个有层次的文件目录结构
  • markdown 基础语法

    标题 在markdown中 使用 来表示标题 比如 代表一级标题 代表二级标题 以此类推 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 字体 使用符号来代表文字的各种状态 这是加粗的文字 这是倾斜的文字 这是斜体加粗的文字 这
  • 软件测试技术(白盒测试)

    一 实验原理 1 白盒测试 白盒测试也称为结构化测试或逻辑驱动测试 也就是已知产品的内部工作过程 清楚最终生成软件产品的计算机程序结构及其语句 按照程序内部的结构测试程序 测试程序内部的变量状态 逻辑结构 运行路径等 检验程序中的每条通路是
  • 电脑计算机里面只有c盘,电脑只有一个C盘怎么办?一招教你正确分区!

    前言 很多朋友在网上新买了笔记本电脑 或者是台式电脑 电脑只有一个磁盘 桌面上只有一个回收站 一脸懵逼 连 我的电脑 都找不到 今天小白就给大家电脑分区的教程 让大家可以正确分类自己的文件软件 PS 此教程合适广大的电脑小白 以及刚刚入门的
  • 计算机一级笔试2016年真题,2016年计算机一级真题及答案

    2016年计算机一级真题及答案 A ROM是只读存储器 其中的内容只能读一次 B 硬盘通常安装在主机箱内 所以硬盘属于内存 C CPU不能直接从外存储器读取数据 D 任何存储器都有记忆能力 且断电后信息不会丢失 参考答案 C 第22题 CP
  • win10 超级终端

    win10 超级终端 链接 https pan baidu com s 1tkc5EKwHkXC3xtm0BijWyA 提取码 u94q
  • 汇编语言笔记——微机结构基础、汇编指令基础

    文章目录 传送门 计算机系统基础 概述 微处理器 中央处理器 CPU 概述 性能指标与总线 前端总线 Front Side Bus 带宽 数据总线DB 地址总线AB 控制总线CB CPU软件特性与指令集 复杂指令集 CISC 精简指令集 R

随机推荐

  • Echarts图的tooltip提示框自定义展示各类数据

    需求 要求提示框显示统计值 统计值 分子 分母 外 还要展示分子和分母的数据 最开始以为Echarts图的series中data数据 只能是 series data 维度X 维度Y 其他维度 3 4 4 5 15 43 4 2 2 3 20
  • Mybatis Plus简述

    Mybatis Plus概述 MyBatis Plus 简称 MP 是一个 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率而生 提供了快速使用mybatis的方式 版本
  • Angular CLI 使用教程指南参考

    Angular CLI 使用教程指南参考 Angular CLI 现在虽然可以正常使用但仍然处于测试阶段 Angular CLI 依赖 Node 4 和 NPM 3 或更高版本 安装 要安装Angular CLI你需要先安装node和npm
  • RobotStudio 建立机器人模型和虚拟示教器的使用

    本系列使用的ABB机器人仿真软件版本为RbotStudio 5 15 02 64 bit 建立一个机器人模型 1 创建新工作站 空工作站 2 ABB模型库 选择机器人模型 3 导入模型库 选择工具模型
  • angular route 知識點

    讲解 路由功能是由 routeProvider服务 和 ng view 搭配实现 ng view相当于提供了页面模板的挂载点 当切换URL进行跳转时 不同的页面模板会放在ng view所在的位置 然后通过 routeProvider 配置路
  • 解决wordpress配置固定链接出现404错误

    两种方法解决 1 选择自定义结构在想要的固定链接格式前加 index php 这样虽然到达效果但是前面会加多个index php如果想不要的话试试第二种 2 我用的是nginx 在宝塔中选网站再进入设置选择伪静态 增加 location b
  • 向HTML中插入视频有两种方法

    向HTML中插入视频有两种方法 一种是古老的object标签 一种是html5中的video标签 前者兼容性相对好些 后者兼容性让人头疼 最常用的向HTML中插入视频的方法有两种 一种是古老的标签 一种是html5中的
  • CentOS 7.4 安装配置Samba服务器

    root localhost cat etc redhat release CentOS Linux release 7 4 1708 Core root localhost yum y install samba samba client
  • element 框架小细节

    Tabs 自定义添加页 div style margin bottom 20px div
  • NodeJS 对于 Java 开发者而言是什么?

    我们都知道Node js现在得到了所有的关注 每个人都对学习Node js感兴趣 并希望可以工作于Node js 在开始工作之前了解技术背后的概念总是不会错的 但对初学者来说 可能会因为不同的人使用的不同定义而晕头转向 Node js究竟是
  • JKS to PEM

    本文转自 https blog tankywoo com 2014 12 29 jks to pem html JKS Java KeyStore 是Java的一个证书仓库 包括授权证书和公钥证书等 file tankywoo jks ta
  • 动态cg怎么提取_galgame怎么提取动态cg(千彰cg怎么拿)

    crass是一款图片提取软件 那么你下的并不是cg而是提取cg的方法 重新找别的地方下吧 这些软件 crass 0 4 13 14 Susie32 不过有些被加密的 就不能提取 想把CG和音乐都抽出来 虽然网上有CG包下载 不过还是想自己抽
  • java 按list对象多个字段排序

    Java List中的数据如何根据对象的某一个或多个字段排序引出Comparable和comparator的使用 第一节 对于引入题目的探讨 首先把引入题目表述的清楚一些 在一个List中存储的是一些对象实例 而对象实例包含多个属性字段 我
  • HTML中如何插入空格,HTML空格代码,多种HTML空格写法

    记录一下 用到的空格的转义字符 1 最常见 nbsp 的称为 不换行空格 全称 No Break Space 占1个字符宽度 nbsp 2 ensp 称为 半角空格 全称 En Space 占1个字符宽度 ensp 3 emsp 的称为 全
  • 阿里云API网关使用教程

    API 网关 API Gateway 提供高性能 高可用的 API 托管服务 帮助用户对外开放其部署在 ECS 容器服务等阿里云产品上的应用 提供完整的 API 发布 管理 维护生命周期管理 用户只需进行简单的操作 即可快速 低成本 低风险
  • MYSQL的主键和外键,内连接和外连接,关联子查询

    目录 友情提醒 第一章 MYSQL数据库多表主键和外键 1 外键介绍 FOREIGN KEY 2 外键约束作用 2 三种情况下添加外键约束 一对一关系 一对多关系 多对多关系 4 删除外键约束 第二章 MYSQL数据库表之间的连接 1 内连
  • aspnet zero Refused to apply style from '...'because its MIME type ('') is not a supported styleshee

    这是asp net zero前端css javascript无法加载造成的错误 解决方法 1 安装npm 2 安装yarn cnpm install g yarn 3 在 Web Mvc目录下 打开cmd 执行 yarn 执行完成后再运行
  • Jeesite4使用小结(技术选型)

    这段时间公司准备采用新技术来进行开速开发 自己也是接手了一个项目 目前处于一边熟悉框架 一边开发 中间也踩了很多坑 所以在这打算记录一下 希望能给后面接触这个快速开发框架的一点帮助 第一次接触这个框架 一定要先了解他这个框架的技术选型 当然
  • 06_Me and My Girlfriend:信息收集、漏洞利用、基础提权姿势总结回顾

    思路总结 总体来说 在利用nmap进行扫描以后发发现主机 正对主机ip进行端口与服务的扫描 发现网站开放的80端口 访问发现没有任何功能 尝试gobuster与工具的使用扫描目录与敏感文件 但是无可利用信息 查看网页源码发现暴出来的信息us
  • 字符游戏-智能蛇(上)

    字符游戏 智能蛇 上 上周的作业是写出字符游戏 贪吃蛇的小程序 在完成这个项目之后 我将理清思路 记录一下我的学习过程 让蛇动起来 放置奖励的食物 在蛇吃到食物时延长蛇的身体 设置游戏结束的机制 让蛇动起来 先设置一下相应的字符表示 cha