zoukankan      html  css  js  c++  java
  • 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);

    流程结束。

  • 相关阅读:
    013.Kubernetes认证授权
    012.Kubernetes的configmap和secret配置
    011.Kubernetes使用共享存储持久化数据
    010.kubernets的调度系统之daemonset
    009.kubernets的调度系统之污点和容忍
    008.kubernets的调度系统之标签选择器
    007.kubernets的headless service配置和ingress的简单配置
    Meterpreter初探
    渗透第一课:尝试渗透
    Metasploit漏洞扫描
  • 原文地址:https://www.cnblogs.com/WinonaJia/p/7740113.html
Copyright © 2011-2022 走看看