• C++ 贪吃蛇一维


    #include <iostream>
    #include <conio.h>
    #include <windows.h>
    #include <time.h>
    
    int g_Dir = 3;
    #define UP         0
    #define DOWN  1
    #define LEFT       2
    #define RIGHT   3
    
    struct FOOD
    {
        int X = 0;
        int Y = 0;
        bool State = 0;
    }Food;
    
    //方向控制
    void SnekeMove()
    {
        if (::GetAsyncKeyState(VK_UP) & 1)
            g_Dir = 0;
        if (::GetAsyncKeyState(VK_DOWN) & 1)
            g_Dir = 1;
        if (::GetAsyncKeyState(VK_LEFT) & 1)
            g_Dir = 2;
        if (::GetAsyncKeyState(VK_RIGHT) & 1)
            g_Dir = 3;
    }
    
    //主函数
    int main()
    {
        srand((unsigned int)time(NULL));
        int W = 20;
        int H = 20;
        int Len = 3;
        int Map[20 * 20] = { 0 };
        int Snake[50] = { 0 };
        //Snake[0] = 2;//为蛇头
        
        for (int i = 0; i < Len; i++)
        {
            Snake[i] = Len - i - 1;
        }
        Food.X = W / 2;
        Food.Y = H / 2;
        Map[Food.Y * W + Food.X] = 2;
    
        const char *SNAKE[] = { "  ", "" ,""};
        while (true)
        {
            system("cls");
            for (int i = 0; i < Len; i++)
            {
                // 2 1 0
                // 1 1 1
    
                // 3 2 1
                // 0 1 1 1
                //这里需要注意
                Map[Snake[i]] = 1;
            }
            Map[Food.Y * W + Food.X] = 2;
            if (Map[Snake[0]] == Map[Food.Y * W + Food.X])
            {
                Map[Food.Y * W + Food.X] = 0;
                do
                {
                    bool FoodState = false;
                    Food.X = rand() % W;
                    Food.Y = rand() % H;
                    for (int i = 0; i < Len; i++)
                    {
                        if (Map[Food.Y * W + Food.X] != Map[Snake[i]])
                        {
                            FoodState = true;
                        }
                    }
                    if (FoodState)
                    {
                        Map[Food.Y * W + Food.X] = 2;
                        break;
                    }
                } while (true);
                Len++;
            }
    
            for (int i = 0; i < H; i++)
            {
                for (int j = 0; j < W; j++)
                {
                    //蛇头在地图上的坐标
                    if (i * W + j == Snake[0])
                    {
                        if (i == H - 1 || j == W - 1)
                        {
                            //撞墙
                            system("pause");
                            return 0;
                        }
                    }
                }
            }
    
            for (int i = 0; i < H; i++)
            {
                for (int j = 0; j < W; j++)
                {
                    std::cout << SNAKE[Map[i * W + j]];
                }
                std::cout << std::endl;
            }
            std::cout << std::endl;
            //for (int i = 0; i < Len; i++)
            //{
            //    std::cout << Snake[i]<<"  ";
            //}
            //std::cout << std::endl;
            std::cout <<"蛇的长度为 : "<<Len<<std::endl;
            memset(Map, 0, sizeof(Map));
    
            SnekeMove();
    
    
            for (int i = Len; i > 0; i--)
            {
                // 2 1 0
                //默认往右挪
                // 2 2 1 0
                //后面++
                // 3 2 1 0
                //完成一次移动
                Snake[i] = Snake[i - 1];
                /*
                比如往下
                // 3 2 1 0
                // 23 3 2 1 0
                */
            }
            if (g_Dir == UP)
            {
                Snake[0] -= W;
            }
            if (g_Dir == DOWN)
            {
                Snake[0] += W;
            }
            if (g_Dir == LEFT)
            {
                Snake[0]--;
            }
            if (g_Dir == RIGHT)
            {
                Snake[0]++;
            }
            
    
    
            Sleep(50);
        }
    
    
        //https://www.bilibili.com/video/av29007126/?spm_id_from=333.788.videocard.1
        system("pause");
        return 0;
    }
  • 相关阅读:
    性能测试分类
    monkey命令选项参考
    Hibernate三种状态
    Hibernate 的延迟加载
    JAVA2的三个版本
    缓存
    队列、生产消费模型.html
    socketserver剖析.html
    socketserver 之 recv(1024) 问题!
    粘包问题
  • 原文地址:https://www.cnblogs.com/YZFHKMS-X/p/11780544.html
Copyright © 2020-2023  润新知