• C语言控制台贪吃蛇2


    显示游戏边框及蛇的位置初始化

      一、显示游戏边框

       1、定义二维数组,例如20*48,将并边框按行打印(运行显示边框会卡,暂时不会别的写法QAQ)

    注:一个方块两个字节

    //定义边框数组
    char g_strgameback[20][48] = { 
        "■■■■■■■■■■■■■■■■■■■■■■■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■■■■■■■■■■■■■■■■■■■■■■■
    "};

      二、小蛇位置的初始化(链表法后议)

      1、定义小蛇的数组(20*3)

        每个节点装三个数据:x,y,小蛇方向

    #define DEF_SNAKE_LONG 20
    
    //定义蛇数组
    int g_arrSnake[DEF_SNAKE_LONG][3] = {0};

      2、设定小蛇方向(枚举)

    //蛇方向
    enum {to_east, to_west, to_south, to_north};

      3、设定小蛇的初始位置然后对节点初始化:用到随机数函数

    //为蛇产生随机位置
    void SetSnakeRandPos()
    {
        int nX = -1;
        int nY = -1;
    
        //产生随机数
        srand((unsigned int)time(NULL));//中种子
        nX = rand()%19 + 1;//对19取余得0~18,+1得0~19
        nY = rand()%18 + 1;
    } 

      4、将小蛇画到背景上

    //遍历小蛇数组,将方块拷贝到背景上
    strncpy(&g_strgameback[g_arrSnake[i][0]][g_arrSnake[i][1]], "", 2);

       其中用strcpy与strncpy的区别:前者在第二个参数中多出‘’ 导致结果出现以下情况:

      

      全部代码如下(对比之前有所调整)

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>
    #include <time.h>
    
    //三件套:添加音乐的函数
    #include <Windows.h>
    #include <mmsystem.h>
    #pragma comment(lib,"winmm.lib")
    
    #define DEF_SNAKE_LONG 20
    
    //定义边框数组
    char g_strgameback[20][48] = { 
        "■■■■■■■■■■■■■■■■■■■■■■■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■                                          ■
    ",
        "■■■■■■■■■■■■■■■■■■■■■■■
    "};
    
    //定义蛇数组
    int g_arrSnake[DEF_SNAKE_LONG][3] = {0};
    
    //蛇方向
    enum {to_east, to_west, to_south, to_north};
    
    void Cover();//显示首页
    void BGM();//播放音乐
    void ButtonTest();//显示首页
    void ShowBack();//打印游戏边框
    void SetSnakeRandPos();//为蛇产生随机位置
    void DrawSnake();//将蛇显示到背景上
    
    int main()
    {
        BGM();//播放音乐
        Cover();//显示首页
        ButtonTest();//检测按键
        PlaySound(NULL, 0, 0);//停止播放
        system("cls");//清屏
    
        SetSnakeRandPos();
    
        while(1)
        {
            system("cls");
    
            ShowBack();
    
            Sleep(500);
        }
    
        system("pause");
        return 0;
    }
    
    //显示首页
    void Cover()
    {
        printf("
    
    
    			       <<SNAKE>>
    
    ");
        printf("
    
    
    			<<W,S,A,D control move>>
    
    ");
        printf("
    
    
    			    <<space begin>>
    
    
    
    ");
    }
    
    //播放音乐
    void BGM()
    {
        PlaySound("C:\Windows\Media\Alarm03.wav" , NULL, SND_FILENAME | SND_ASYNC);
        //以C盘系统文件中.wav文件为例
    }
    
    //检测按键
    void ButtonTest()
    {
        char chinput;
    
        //检测空格
        while(1)
        {
            chinput = _getch();
            if(' ' == chinput)
            {
                break;
            }
        }
    }
    
    //打印游戏边框
    void ShowBack()
    {
        int i = 0;
    
        for(; i < 20; i++)
        {
            printf(g_strgameback[i]);
        }
    }
    
    //为蛇产生随机位置
    void SetSnakeRandPos()
    {
        int nX = -1;
        int nY = -1;
    
        //产生随机数
        srand((unsigned int)time(NULL));//中种子
        nX = rand()%19 + 1;//对19取余得0~18,+1得0~19
        nY = rand()%18 + 1;
    
        //初始化的三个节点
        g_arrSnake[0][0] = nY;        //
        g_arrSnake[0][1] = nY*2;    //
        g_arrSnake[0][2] = to_east;    //方向
    
        g_arrSnake[1][0] = nY;        
        g_arrSnake[1][1] = nY*2 + 2;    
        g_arrSnake[1][2] = to_east;    
    
        g_arrSnake[2][0] = nY;        
        g_arrSnake[2][1] = nY*2 + 4;    
        g_arrSnake[2][2] = to_east;    
    
        //将蛇显示到背景上
        DrawSnake();
    }
    
    //将蛇显示到背景上
    void DrawSnake()
    {
        int i = 0;
        for(; g_arrSnake[i][0] != 0; i++)//遍历每行,遇到初始蛇的位置拷贝方块
        {
            strncpy(&g_strgameback[g_arrSnake[i][0]][g_arrSnake[i][1]], "", 2);
        }
    }

    运行结果如图:

      

        

  • 相关阅读:
    Pandas DataFrame的基本属性
    Pandas , series 与 Dataframe的创建
    原生爬虫实例
    爬虫!对!学tmd爬虫!
    作业 选课系统
    面向对象
    面向对象
    正则计算器版中版之最后一版!
    正则计算器2
    mysql常见错误代码说明
  • 原文地址:https://www.cnblogs.com/WinonaJia/p/7684117.html
Copyright © 2020-2023  润新知