• C语言控制台贪吃蛇4


    蛇死亡判断、吃食物、计分

    一、蛇死亡判断:装边界,撞自己死亡

      定义:IsSnakeDie()//蛇死亡判断  函数,返回类型为bool型

    思路:

      //蛇头的下一个,是方块 就是死亡
        if(0 == strncmp(&g_strgameback[g_arrSnake[0][0]][g_arrSnake[0][1] + g_arrSnake[0][2]], "", 2))
        {
            return false;
        }

    二、随机产生食物及吃食物变长

      1、(1)为食物产生随机的坐标

    //产生随机坐标
    srand((unsigned int)time(NULL));
    g_nRow = rand()%18 + 1;
    g_nCol = rand()%20 + 1;

        (2)在产生的位置上画上食物:

    strncpy(&g_strgameback[g_nRow][g_nCol*2], "", 2);

        此时调用函数运行结果可以显示食物,但是没有判断是否应该产生新食物,所以会一直随机产生食物。    

        (3)判断是否产生新食物 

    bool g_bIsProFood = true;
    
    //判断是否产生新的食物
    if(false == g_bIsProFood)
    {
        return ;
    }

        将随机产生的食物坐标以及遍历蛇数组放进一个循环中,实现蛇没吃掉食物前只有一个食物

     2、蛇吃食物变长

      当蛇头坐标与食物的坐标相等时,蛇身变长。先定义一个蛇身长度:int g_nSnakelen = 2;

    //蛇头光标跟坐标相等
    if(g_nRow == g_arrSnake[0][0] && g_nLie*2 == g_arrSnake[0][1])
    {
        //蛇长大
        if(to_east == g_arrSnake[g_nSnakelen][2])
        {
            g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0];
            g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] - 2;
            g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0];
        }
        else if(to_west == g_arrSnake[g_nSnakelen][2])
        {
            g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0];
            g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] + 2;
            g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0];
        }
        else if(to_north == g_arrSnake[g_nSnakelen][2])
        {
            g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0];
            g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] + 1;
            g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0];
        }
        else if(to_south == g_arrSnake[g_nSnakelen][2])
        {
            g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0];
            g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] - 1;
            g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0];
        }
    
        g_nSnakelen++;
        g_bIsProFood = true;
    }

        当计分函数写好后需要在蛇变长函数中调用,变长的同时分数也增加

    三、计分

      设置光标位置:SetConsoleCursorPosition();

    COORD rd;
    rd.X = 55;
    rd.Y = 8;
    //设置光标位置
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd);
    
    printf("Score Is :  ");
    
    rd.X = 56;
    rd.Y = 9;
        
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd);
    
    printf("%d",g_nScore*10);

    流程结束。

  • 相关阅读:
    巧用nginx屏蔽对用户不可见的文件
    关于之前我的主页页面加载很慢的问题
    学习Entity Framework 中的Code First
    理解POCO
    浅谈依赖注入
    从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
    ASP.NET Identity V2
    泛型约束
    C# Serializable
    C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo
  • 原文地址:https://www.cnblogs.com/WinonaJia/p/7740113.html
Copyright © 2020-2023  润新知