从C语言到第一个黑框游戏

C语言 游戏 学习

0.序言

经过一整个学期的学习,同学们对于C语言是从入门到放弃呢?还是从入门到绝望?

1

其实与纯粹的理论学习不同,编程是一门实践性很强的学问,擅于将书中所学用于实践才能真正学好编程,发现编程的乐趣。在此,我想简单讲讲如何用大一上学期学会的C语言,来编写一个简单的贪吃蛇游戏。(ps:在这里,我只想写思路,而不介绍具体的编程细节,因为希望你更多的能从这篇文章中学习将知识应用于实践中的思考方式和能力。)

1. 准备

我们知道,刚开始学习编程,用C语言在黑框框中将数据输入,然后经过一系列逻辑处理再输出出来,好像就是C语言所能达到的极限了?其实不然,只要善于发挥想象力。不过,在一切开始之前,我们需要对任务进行简单(fu za)的分析:

2. 功能需求

首先,我们要有一条蛇,其次我们要让它动起来,接着再随机生成一些“食物”,当蛇头碰到食物时,蛇的长度便增加,如果蛇头撞到墙,那么游戏结束。为了美观,我们用特殊符号●表示蛇,用★表示食物,用■表示墙。这些符号不难找到,但是我们还需要知道他们对应的ASC码,怎么做呢?很简单,输入符号型,输出整型即可。

3. 一些必要的工具

根据功能分析,我们需要在屏幕上的任意位置打印出蛇和食物,所以我们需要一个能够将光标移动到运行框任意位置的函数:

#include

int gotoxy(int x,int y)

{

COORD cd;

cd.X=x;

cd.Y=y;

return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cd);

}

我们还需要能够实时获取键盘输入的函数,这里要稍微提一下,我们用输入设备进行输入时,操作系统会将这些输入以队列(先进先出)的形式存储在输入缓冲区中,然后依次读出给相应的应用使用。所以我们需要有一个函数判断,当前键盘输入缓冲区中是否有值,如果有,则读出来。这个判断的函数我使用:kbhit()。所以就有:

if(kbhit())

{

getch();

}

在写贪吃蛇之前,我也不知道有这些函数的存在,所以说需求永远是学习的第一生产力。

4. 让蛇动起来

相信大家都能很轻松的将界面和蛇打印出来,例如这样:

游戏界面

而对于如何让它动起来可能毫无头绪。遇到毫无头绪的问题时,我们需要将问题稍微分解一下:

怎样做会有动画的效果?我们知道,当变化的图片的刷新速度快达30帧时,在人眼看来就会有动画的效果。所以我们要做的就是不停的更新蛇的位置,并且打印出来

如何更新蛇的位置?最朴素的方法是,我把原来的位置“擦除”,然后在再新的位置重新设定一条蛇,这样做未尝不可,但其实我们有更好的方法,那就是擦除蛇尾,并且在蛇头前进的方向添加一个蛇头,怎么做?

对应数组的写法就是 :

二维数组

对应链表的写法就是 : 就是链表插入和删除嘛,图不好做,不做了

皮的嘛,就不谈了

蛇如何转向?首先你要限定蛇是不能向目前前进方向或者其反方向转向的,其次你要定义一个全局变量direction(上下左右)表示蛇目前会一直往这个方向走,最后只要在读取到键盘输入时,根据输入改变前进方向,并在那个方向添加一个蛇头,前进方向自然就变了

数据更新完打印界面一闪一闪的?正常,因为你把整个界面都擦除再打印,如果程序跑的不够快,那么就会出现这种情况,这里我想提一下,虽然我们是很朴素的写一个贪吃蛇,但是这里其实就已经涉及到一个很重要的知识,画面刷新。我们知道,画面的绘制对于计算机来说是一个巨大的负担,所以我们为了提高绘图的速度,在需要自己实现绘图的一些底层应用或者游戏引擎中,往往采用局部刷新、图层叠加,缓冲区绘制等的方式优化性能,即只更新需要变化的局部画面,对于可以覆盖更新的图层直接覆盖,对于需要多个图层绘制的画面绘制先在缓冲区中“绘制”,绘制完再进行真正的屏幕绘制

5. 碰撞检测

和现实世界不同,游戏世界的碰撞是我们通过数学和逻辑方法判断的,所以碰撞检测就变得极为重要,它是你的游戏世界成型的根本。如果你的目标是成为一个游戏开发人员,相信我碰撞检测将是你的朋友(e meng),和绘图方法一样,碰撞检测是一滩极深的水,而这里我们讲的是最简单的碰撞检测,点和点之间的碰撞检测,这其实很简单,判断两个点是否重复,就看坐标(x,y)值是否相同就好了,以屏幕左上角为坐标原点,建立xy坐标系,你的蛇头就是一个坐标点(x1,y1),而墙上每一块砖有它的坐标,食物也是如此。

6. 结束

其实到这里,做一个贪吃蛇游戏会遇到的一些基本难题我已经帮你一一列举并提供了基本的解决方案,而具体实现中其实你还会遇到许多逻辑上的问题,不过这都不重要,重要的是,我们通过做一个贪吃蛇,学到了最基础的绘图方法和碰撞检测。记住这些名词,它们将是你装逼的利器。

逼是一样的逼,装上见高低

-----某不知名java老师如此说道

©宇

c++rpg黑框游戏_从C语言到第一个黑框游戏相关推荐

  1. java51游戏_简单实现美空军也得玩的游戏-谁能坚持超过50秒?(Java)

    前天不知道又在哪里见到这么一句话"谁能坚持超过50秒,我请他吃饭"(可以点击玩一玩原版游戏),其实这个不就是之前在同学QQ空间里面转来转去的一个网页游戏吗?什么"据说,美 ...

  2. 智能手机怎么玩java游戏_智能手机可以在普通手机上玩Java游戏吗?

    当然可以是2113. 某些智能手机需要首先在5261上安装JAVA平台,但是选择平台程序4102,否则会出现不稳定的情况. 尽管JAVA游戏非常受欢迎,但它们在1653年也很新,但总比没有好. 玩经典 ...

  3. unity 音乐节奏游戏_使用您当地音乐收藏的最佳节奏游戏

    unity 音乐节奏游戏 You can't have video games without music. Well, you can-the earliest games didn't have ...

  4. 用swing设计一个打地鼠小游戏_这7个风靡欧美的英语小游戏,学会胜过刷100道题!...

    精彩导读 小编为大家搜罗了一些在国外家喻户晓的语言类小游戏.好的方法胜过刷上100道题,真正让孩子觉得好玩,教学才会事半功倍! 01 Would You Rather... 最近牛津大学的面试考题惊天 ...

  5. 用深度强化学习玩atari游戏_(一)深度强化学习·入门从游戏开始

    1.在开始正式进入学习之前,有几个概念需要澄清,这样有利于我们对后续的学习有一个大致的框架感 监督型学习与无监督型学习 深度强化学习的范畴 监督型学习是基于已有的带有分类标签的数据集合,来拟合神经网络 ...

  6. 手机版python3h如何自制游戏_教你如何用 Python 写一个小游戏

    教你如何用 Python 写一个小游戏 引言 最近 python 语言大火, 除了在科学计算领域 python 有用武之地之外, 在游戏后台等方面, python 也大放异彩, 本篇博文将按照正规的项 ...

  7. 以前一款半回合制java游戏_我以前玩过一款回合制游戏,很久以前的事了但是忘记叫什么名字了? 爱问知识人...

    仙剑系列 仙1是我第一个玩的游戏,感觉很粗糙,不过很经典. 直到玩了第2个游戏,仙3,3D的画面让我第一次感受了到单机游戏的丰富多采,让我开始步入单机游戏的的殿堂.仙3外还是我继幻想三国志2后,第二次 ...

  8. python推箱子小游戏_小伙利用Python自制一个推箱子小游戏!

    原标题:小伙利用Python自制一个推箱子小游戏! 导语 月初更波python制作小游戏系列吧用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧 小伙利用Python自制一个推箱子 ...

  9. r语言 转录本结构及丰度_【R语言】数据结构Ⅱ—列表,数据框,因子

    四.列表 列表(list),可以包含不同类型的对象,甚至可以包括其他列表.列表的灵活性使得它非常有用. 例如,用R 拟合一个线性回归模型,其返回结果就是一个列表,其中包含了线性回归的详细结果,如线性回 ...

最新文章

  1. java获取jndi密码_用JAVA代码获取Weblogic配置的JNDI 数据源连接
  2. git 小乌龟 更新分支_时光机--git--现代程序员必备的星舰
  3. 中国是恶意程序感染率最高的国家
  4. 跨境电商Crazysales的高稳定性架构实践
  5. visual studio 2017插件安装qt
  6. Hadoop 同步集群时间ntp
  7. python像素处理_Python+OpenCV图像处理(五)—— 像素运算
  8. android 拖动缩放窗口大小,Android小应用----图片的拖动、缩放
  9. 博客园使用攻略之如何添加自己的js文件
  10. ubantu系统之快捷键使用
  11. MVC3中输出Html标签的方法
  12. saetv2.ex.class.php,curl out of memory window下PHP调用curl报内存不够
  13. 不理解 Java Steam?一步步梳理其工作方式
  14. 深度解读 RocketMQ 存储机制
  15. 实验二 分析1996~2015年人口数据各个特征的分布与分散状况
  16. 搞事情 | 众编程语言齐聚密谋:如何推翻java的统治地位!
  17. C语言好学吗?C语言适合什么样的人群?
  18. 阿拉伯数字金额转汉字大写
  19. JdbcTemplate空指针异常
  20. 人人为我,我为人人_众妙首页

热门文章

  1. Java基础篇二 视频来源:https://www.bilibili.com/video/BV12J41137hu?p=33spm_id_from=pageDriver
  2. Neo4j笔记(二)Cypher(6)UNWIND和FOREACH
  3. 关于电脑鼠标不受控乱动的问题
  4. WIN7文件夹共享步骤
  5. 新一代嵌入式客流统计一体机
  6. Ubuntu14.04与Win10双系统环境的配置(引导, 无线网卡)
  7. 威睿数据中心虚拟化解决方案
  8. 威盛卖掉威睿电通CDMA技术:Intel也全网通了!
  9. 插值查找(两种方法)
  10. “农业机械开发商”AMD的50年求生之路