宇宙无敌皮皮蛇

宇宙无敌皮皮蛇

开头

如何让一条贪食蛇升级成为智能蛇呢?如何在字符终端上完成“清屏”“修改光标位置”“设置字符前景和背景色”等操作咧?想啊想想啊想,于是宇宙无敌皮皮蛇诞生了。

凭什么叫无敌蛇

为了让这条蛇看起来更酷,我对这条蛇进行了全方位的改造,让这个字符游戏更像一个游戏:

  1. 优化界面,并增设了一定长度的障碍物;
  2. 增设得分、坐标等变量的显示;
  3. 增强趣味性,玩家可自由设置前进速度、声音、界面颜色;
  4. 对比之前输入后还要按一次回车的情况,这里采用了Linux下非阻塞地检测键盘输入的方法,实现 kbhit();
  5. 增设智能模式,该模式下玩家可以成为一个旁观者,无敌蛇将会自动前进,不断成长。

游戏界面如下:

这里写图片描述

如何无敌

自顶向下,逐步求精,无敌蛇的程序开头见下图:

这里写图片描述

其中GameStart()和GameOver()各负责游戏的开头和结尾;initialization()负责初始化游戏;move()负责移动;judge_head()负责判断;static_info()和dynamic_info()负责变量的显示;其他部分代码如下:

gotoxy()即根据坐标防止光标,在各部函数均有应用:

这里写图片描述

draw_cube()负责展示游戏画面:

这里写图片描述

food()负责食物部分:

这里写图片描述
smart()是智能模式开启后将要执行的部分,智能模式给出的伪代码:

    // Hx,Hy: 头的位置
    // Fx,Fy:食物的位置
    function whereGoNext(Hx,Hy,Fx,Fy) {
    // 用数组movable[3]={“a”,”d”,”w”,”s”} 记录可走的方向
    // 用数组distance[3]={0,0,0,0} 记录离食物的距离
    // 分别计算蛇头周边四个位置到食物的距离。H头的位置,F食物位置
    //     例如:假设输入”a” 则distance[0] = |Fx – (Hx-1)| + |Fy – Hy|
    //           如果 Hx-1,Hy 位置不是Blank,则 distance[0] = 9999
    // 选择distance中存最小距离的下标p,注意最小距离不能是9999
    // 返回 movable[p]
    }

p_move()负责链表指针的变动(蛇每部位都存在结构体变量中):

这里写图片描述

总结

十分认同写程序时,一个完整框架万分重要。

而在这个程序里,有许多函数是我们没有接触过的,比如光标的放置,比如kbhit(),即作业要求中说的“在字符终端上完成“清屏”“修改光标位置”“设置字符前景和背景色”等操作”,于是这就更考验程序员检索信息和学习应用的能力了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值