(C语言贪吃蛇)14.用绝对值方式解决不合理的走位

目录

前言

解决方式

运行效果

总结


前言

我们上节实现了贪吃蛇四方向走位,但是出现了一些不合理的走位,比如说身体节点和头节点重合等等,本节我们便来解决这个问题。

我们希望贪吃蛇撞到自身时游戏会重新开始,并且贪吃蛇的运动方向不能与上一秒的运动方向相反,即贪吃蛇的身体节点不能重合。

解决方式

对于我们上节宏定义的四个方向需要改变其值,为了更好的以绝对值的方式判断方向。
#define UP 1

#define DOWN 2

#define LEFT 3

#define RIGHT 4

修改后:

#define UP 1

#define DOWN -1

#define LEFT 2

#define RIGHT -2

我们这样修改的目的是:之前我们改变方向的时候是通过change()函数,只要我们有按键被按下的时候就改变他的方向,现在我们封装一个函数turn()来判断不合理走位。

cpp 复制代码
void turn()
{
    int direction;
    if(dir != abs(dir))
    {
        dir = direction;
    }
}

这个函数用来判断贪吃蛇的走位是否合理,如果按下的按键方向和之前运动的方向相反,那么就不执行,那么我们就解决了贪吃蛇的一个不合理走位了。

cpp 复制代码
void turn(int direction)
{
    
    if(abs(dir) != abs(direction))
    {
        dir = direction;
    }
}

void* changeDir()
{
    while (1)
        {
            key = getch();
            switch (key)
            {
            case 0402:
                    turn(DOWN);
                    break;
            case 0403:
                    turn(UP);
                    break;
            case 0404:
                    turn(LEFT);
                    break;
            case 0405:
                    turn(RIGHT);
                    break;
            }
        }
}

该文件默认名称为snake13.c

打开终端运行以下指令编译该文件

"gcc snake13.c -lcurses"

系统默认生成一个名为"a.out"的可执行文件,输入以下指令运行该文件

"./a.out"

运行效果

打开终端运行该程序,可以看出贪吃蛇已经正常运行,不会出现不合理的走位。

在Windows环境中可能会出现乱码,因为上下左右键作为相应键会返回出一些值出现在屏幕上导致乱码,我们只需要加上ncurses库里自带的函数即可。

(出现问题的友友这样修改就行了)

cpp 复制代码
void initNcurse()
{
    initscr();
    keypad(stdscr,1);
    noecho();
}

此时我们的贪吃蛇就不会出现不合理的走位了!

总结

我们本节解决了贪吃蛇不合理走位的问题,通过宏定义改变数值然后封装函数解决问题。

相关推荐
易辰君21 分钟前
python爬虫 - 初识爬虫
开发语言·爬虫·python
长天一色29 分钟前
【C语言系统编程】【第三部分:网络编程】3.2 数据传输和协议
c语言·开发语言·网络
结衣结衣.36 分钟前
Python基础语法1
开发语言·笔记·python·学习·编程·编程语法
风雨「83」40 分钟前
centos已安装python3.7环境,还行单独安装python3.10环境,如何安装,具体步骤
linux·开发语言·python
Lbs_gemini06031 小时前
Java研发笔记6——C语言程序设计学习笔记5
c语言·笔记·学习
peanutfish1 小时前
Chapter 4 RH294 RHEL Automation with Ansible
linux·ansible·yaml
Ling-X51 小时前
红日靶机(三)笔记
linux·windows·内网渗透·靶机笔记·vulnstack
碳苯1 小时前
【rCore OS 开源操作系统】Rust HashMap应用 知识点及练习题
开发语言·rust·操作系统
hakesashou1 小时前
php与python建站的区别有哪些
开发语言·php
朔北之忘 Clancy2 小时前
2021 年 12 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解