c语言小游戏——贪吃蛇和俄罗斯方块

c语言小游戏——贪吃蛇和俄罗斯方块

贪吃蛇

效果:
这里写图片描述

运行环境:win10,vs2017
代码地址:https://github.com/zzaiyuyu/Snake/blob/master/main.c

首先思考一下设计这个游戏的流程

model部分


实体有游戏,蛇,坐标,食物,墙,所以我们的模型先抽象出来。蛇用一个链表表示,链表的每个节点都是x,y坐标,蛇还要保存当前移动的方向,方向只有四个所以用枚举。食物也是一个单独的坐标,墙是设定好的一个长和宽。

control逻辑部分


蛇怎么沿当前方向一直移动呢?

在主控制逻辑里写一个死循环,每走一步进程沉睡一定时间,然后能根据蛇的当前方向拿到下一个要走的位置。拿到下一个位置后进行链表的头插尾删操作,这样就有了蛇移动的感觉。

怎样控制方向?

在循环条件中,每次拿到下个位置前,先异步获取键盘按键,看是不是有键被按下,如果有就改变蛇的方向。这样根据方向拿到的下个位置就是新的方向的位置了。但是这还不够,只是方向变了但蛇的身子此时还不应该摆动过来,现在只是头变了,所以考虑蛇行走的过程应该是局部刷新的形式,在循环的每一次执行中,仅仅刷新头部和尾部的显示。

游戏怎么结束?

在拿到下一个位置之前,先判断下一个位置是不是在边界,是不是自己的蛇身,是不是食物。

view部分


想要在控制台精准打印,肯定要用到windows提供的接口。

首先控制光标位置,拿到标准输出的句柄(文件指针),就可以为所欲为的打印了。

计算出游戏界面的大小,画出边界的块块。将画单个块或者擦出单个块的函数抽象出来,因为不仅要画墙,还要画蛇身,食物。

俄罗斯方块

成果:这里写图片描述

代码地址:https://github.com/zzaiyuyu/Tetris
执行语句:gcc tetris2.c -L keyboard/keyboard -l keyboard -std=gnu99

思路:

model部分

每一个图形用一个5X5数组表示,有图案则置为1,无则0.这样总共可以把全部的7类图形用一个结构体数组描述出来。

同时游戏还需要当前正在下落的图案的坐标。


control部分

主流程:

主控制逻辑设置一个定时器,并且捕捉ALRM信号,每过一定时间就自动下落一格。

下落过程中需要判断下一个位置是不是可以走,如果可以走,就擦出当前图案,在下一个位置画出来,如果不能走,就是碰到物体了,需要检测是不是该消除,游戏结束,之后就要开始下一个块了。

其中在判断下一步是否可行时,需要当前整个图案信息才能判断是否碰到物体了,所以在每一次碰到物体首先要保存当前的整体背景。

如何控制方向?

在主控流程加一个死循环,不断的判断是否有按键产生。假如按了左键,首先判断下一个位置可行不可行。假如按上键,利用旋转函数对当前图案进行旋转。

如何设置不同颜色块,显示下一个形状?

在定时下落的函数里,如果碰到不能走的情况,说明要出下一个块了,此时设置一个随机数,造成不同颜色块的效果。同理只需要一个临时变量即可记录下一个形状。


view部分

VT100 实现终端画布式打印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值