• 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][2] = { 0 };
        //Snake[0] = 2;//为蛇头
        
        for (int i = 0; i < Len; i++)
        {
            Snake[i][0] = Len - i - 1;
        }
        Food.X = W / 2;
        Food.Y = H / 2;
        Map[Food.Y][Food.X] = 2;
    
        const char *SNAKE[] = { "  ", "" ,""};
        while (true)
        {
            system("cls");
            int x = 0;
            int y = 0;
            for (int i = 0; i < Len; i++)
            {
                // 2 1 0
                // 1 1 1
    
                // 3 2 1
                // 0 1 1 1
                //这里需要注意
                x = Snake[i][0];
                y = Snake[i][1];
                //这里取决于对二维数组的理解
                //虽然Y始终为0
                //Map[y] 为首地址
                //经过推理得到这几种写法
                //*(Map[y] + x) = 1;
                //Map[y][x] = 1;
                *(Map[0] + x) = 1;
                //Map[0][x] = 1;
            }
            for (int i = 0; i < H; i++)
            {
                for (int j = 0; j < W; j++)
                {
                    std::cout << SNAKE[Map[i][j]];
                }
                std::cout << std::endl;
            }
            memset(Map, 0, sizeof(Map));
            SnekeMove();
            for (int i = Len; i > 0; i--)
            {
                Snake[i][0] = Snake[i - 1][0];
            }
    
            if (g_Dir == UP)
            {
                Snake[0][0] -= W;
            }
            if (g_Dir == DOWN)
            {
                Snake[0][0] += W;
            }
            if (g_Dir == LEFT)
            {
                Snake[0][0]--;
            }
            if (g_Dir == RIGHT)
            {
                Snake[0][0]++;
            }
    
            Sleep(50);
        }
    
    
        //https://www.bilibili.com/video/av29007126/?spm_id_from=333.788.videocard.1
        system("pause");
        return 0;
    }
  • 相关阅读:
    hdu 4578 线段树 ****
    hdu 4576 概率dp **
    hdu 4622 **
    vue中保存和获取cookie,读写cookie以及设置有效时间等,使用js-cookie
    go语言 strconv.ParseInt 的例子
    【golang】unsafe.Sizeof浅析
    Golang 漫谈之channel妙法
    总结了才知道,原来channel有这么多用法!
    字符集之在UTF-8中,一个汉字为什么需要三个字节?
    什么是Bitmap
  • 原文地址:https://www.cnblogs.com/YZFHKMS-X/p/11780545.html
Copyright © 2020-2023  润新知