linux、c语言贪吃蛇项目(六)——蛇身向右移动

        首先我们要知道蛇身向右移动的原理:

当蛇向右移动一个单位的时候,头部要加一个身子,尾部要减少一个身子,循环遍历就能实现蛇身向右移动了。我们来看代码:

首先定义一个con变量,来接受键盘的输入,在main函数中,进入循环语句,当我们接收到键盘向右的指令(con == KEY_RIGHT)时,我们执行移动蛇身的函数,函数很简单,就是头部增加一个身子,尾巴减少一个身子,即:

void MoveSnake(){

    addnode();

    deletnode();

}

addnode函数在上篇文章中提到过了,接下来我们构建deletnode()函数:

void deletnode(){

    struct Snake *p;

    p = head;  //接受首地址

    head = head->next; //直接将首地址的下一个地址赋值给head就可以删除头部

    free(p);//在删除后我们应该使用free语句来释放,避免空间占用;

}

 在main函数中我又重新调用了Gamepic()函数,原因是因为如果不重新调用刷新游戏界面,可能代码已经运行了,但是却还是没有显示变化,所以需要调用Gamepic()刷新游戏界面,大家可以尝试一下将Gamepic注释掉,验证一下。将代码修改完整后,我们验证一下,可以得到下面的结果:

从上图可以看到,我们的蛇身虽然向右移动了,但是我们移动的图在下面,我们更倾向于向右移动后的图将之前的图覆盖,产生这样的原因是什么呢?

这主要是由于ncurses中,printw主要是看光标的位置打印的,当我们打印一次之后,光标移动到了最底下,所以打印也从地下开始打印,我们可以通过使用ncurses中的move函数来将移动到初始位置(0,0),这样每次打印都能将上一次打印的覆盖了:

 

 这样我们就能实现往右的循环了,验证一下:

        好了,今天的内容就到这里了,大家一起加油哦~如果又看不懂的,可以看一下我之前的几篇文章~ 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值