C语言版贪吃蛇:第三部分

C语言版贪吃蛇:第三部分

概述

经过前两章的学习,我们已经基本实现了游戏的一半功能

  1. 绘制围墙
  2. 绘制蛇,绘制食物

本章将要学习

如何使我们的蛇动起来

这是贪吃蛇游戏中最重要的功能,实现了运动,游戏的主体也就完成了。

蛇的运动

设计思路

  • 设置一个while 循环语句,判断条件是是否有键盘读入
  • 如果有键盘读入,根据读入的按键,选择是否改变运动方向。
  • 如果没有键盘读入,则保持运动状态


重绘的方法

  • 设置一个clear()函数,在原来蛇的地方打印空格,相当于把原来的蛇“擦掉”
  • 根据键盘读入的按键,改变每一节蛇的坐标
  • 再用 上一章的 printsnake( ) 把新的蛇打印出来

键盘读入函数

  • 需要头文件 conio.h
  • kbhit( ) :判断是否有按键输入
  • getch( ) :读取按键,但不会在屏幕上显示出来


具体实现

定义变量
  1. direation: 存储当前运动方向(即键盘输入)
  2. direation_pre: 读入按键后,存储上一次的运动方向
  3. 主要是要避免原来向上运动,而键盘读入是下,产生bug。
  4. 字符型是为了存储 W,A,S,D


全局变量,参考代码

// 定义三个变量存 蛇长,蛇头,蛇尾
int lenth, head, nail;
// 食物位置
int food_x, food_y;
// 储存蛇的当前,和上一次的移动方向
char direation,direation_pre;


clear()函数
  1. 代码其实和printsnake( )基本一样,可以合并
  2. 这里为了理解方便重设了一个
  3. 将原来在坐标位置上答应 * (星号) 改为空格即可


参考代码如下:

// 清除蛇
void clear()
{
    int i, j = head;
    for (i = 1; i <= lenth; i++)
    {
        // 注意 里面的参数是j,j从蛇头移动到蛇尾
        gotoxy(Snake[j].x, Snake[j].y);
        printf(" ");
        j = Snake[j].next;
    }
}


move( )函数测试
  1. 现在这个部分只是做测试用的
  2. 以clear( ) 里面的for循环为模板
  3. 将打印部分替换成改变坐标


参考代码如下:
实现蛇的坐标右移一格

void move()
{
    int i, j = head;
    for (i = 1; i <= lenth; i++)
    {
        Snake[j].x++;
        j = Snake[j].next;
    }
}


测试时的主函数:

  • 在主函数里设置一个while循环
  • 依次调用三个函数
    • clear( )
    • move( )
    • printsnake( )
  • 实现蛇的不断右移
  • 测试后会发现蛇移动太快了
  • 这里加入一个Sleep函数,让程序中途停止一会
  • Sleep( 参数); 单位是毫秒


参考代码如下

int main()
{
    init(); // 初始化函数,绘制围墙
    while(1)
    {
        clear();
        move(
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值