(C语言贪吃蛇)7.显示贪吃蛇完整身体改进

目录

文章目录 

前言

一、贪吃蛇身体是什么?

二、对贪吃蛇身体进行改进

1.贪吃蛇身子显示

2.链表动态添加蛇的节点

总结


 

前言

上节显示了贪吃蛇身子的三个节点,但是吃了食物后蛇身变长应该如何操作,本节给出答案。

 

一、贪吃蛇身体是什么?

使用链表这个数据结构来动态的显示贪吃蛇的身体。

二、对贪吃蛇身体进行改进

1.贪吃蛇身子显示

代码如下:

#include <curses.h>

struct Snake
{
    int hang;
    int lie;
    struct Snake * next;
};

struct Snake node1 = {2,2,NULL};
struct Snake node2 = {2,3,NULL};
struct Snake node3 = {2,4,NULL};


void initNcurse()
{
    initscr();
    keypad(stdscr,1);
}

int hasSnakeNode(int i,int j)
{
    struct Snake * p;
    p = &node1;
    while(p != NULL)
    {
        if(p->hang == i && p->lie == j)
        {
            return 1;
        }
        p = p -> next;
    }
    return 0;    
}

void gamePic()
{
    int hang;
    int lie;

    for(hang = 0;hang < 20;hang ++)
    {

        if(hang == 0)
        {
            for(lie = 0;lie < 20;lie ++)
               {
                   printw("--");
               }
            printw("\n");
        }
        if(hang >= 0 && hang <= 19)
        {
            for(lie = 0;lie <= 20;lie ++)
            {
                if(lie == 0 || lie == 20) printw("|");
                else if(hasSnakeNode(hang,lie)) printw("[]");
                else printw("  ");
            }
            printw("\n");
        }
        if(hang == 19)
        {
            for(lie = 0;lie < 20;lie ++)
               {
                   printw("--");
               }
               printw("\n");
               printw("by beiweiqiuAC");
        }
    }

}

int main()
{
    initNcurse();

    node1.next = &node2;
    node2.next = &node3;

    gamePic();
    getch();//防止程序退出
    endwin();
    return 0;
}


2.链表动态添加蛇的节点

 

我们改善上面的代码,删去

struct Snake node1 = {2,2,NULL};
struct Snake node2 = {2,3,NULL};
struct Snake node3 = {2,4,NULL};

删去示范作用的贪吃蛇身体节点,改用封装函数的方式来初始化蛇身。

void addNode()
{
    struct Snake * new = (struct Snake *)malloc(sizeof(struct Snake));
    new->hang = head->hang;
    new->lie = head->lie+1;

    new->next = NULL;
    tail->next = new;

}

void initSnake(){
    head = (struct Snake *)malloc(sizeof(struct Snake));
    head->hang = 2;
    head->lie = 2;
    head->next = NULL;

    tail = head;
    addNode();
}

两个函数initSnake()用来初始化蛇身,addnode()用来增加蛇的身体节点。

但是这样操作有点问题,比如第二个节点是在head的基础上操作,那第三个也能在head上进行操作吗,很明显是不行的,所以我们选择在尾巴上做操作。

运行结果:

9da0e062ae8c4114ad56ad297a2cb76d.png


总结

我们对上节的代码进行了改进,通过封装函数,现在可以动态的显示贪吃蛇的身体了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值