zoukankan      html  css  js  c++  java
  • c语言贪吃蛇详解-2.画出蛇

    c语言贪吃蛇详解-2.画出蛇

    前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解。我将分几步来教大家写一个贪吃蛇小游戏。由于大家c语言未学完,这个教程只涉及数组和函数等知识点。

    蛇的身体就是一些点,我们可以用二维数组把这些点的坐标存起来。

    先声明一个足够大的二维数组。虽然我觉得你们玩不了这么长(手动滑稽)。

    int s[H*W][2];

    这样s[0][0]表示蛇头的i坐标,s[0][1]表示蛇头的j坐标。s[i][0]表示蛇第i+1个点的i坐标。s[i][1]同理。

    然后再声明一个int变量存储蛇的长度。然后把这些初始化操作都放进上面init函数里面。

    int sLength;        //蛇的长度
    sLength=4;          //让蛇的最初长度为4

     然后给刚开始的蛇身几个初始坐标

    s[0][0]=H/2;
    s[0][1]=W/2;      
    for(i=1;i<4;i++)
    {
      s[i][0]=s[0][0]+i;
      s[i][1]=s[0][1]; //给刚开始的蛇身几个初始坐标
    }

    然后接下来我们把蛇画出来,我这里有一个函数(百度的),可以实现移动光标到指定点。注:要添加头文件windows.h

    如下:

    void gotoxy(int i,int j)
    {
        COORD position={j,i};
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);
    }

    然后就可以先画地图,然后通过移动光标在地图上画出蛇。

    void drawSnake()
    {
        int i;
        for(i=0;i<sLength;i++)
        {
            gotoxy(s[i][0],s[i][1]);        //移动关标到蛇的坐标
            printf("@");                    //在这个位置画蛇
        }
    }

    好,看看效果

    蛇确实出来了,但是那个光标很碍事,在init函数开始时加入下面代码可隐藏关标

    CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

     

    这样就没有光标了。

    到现在为止的代码。

    #include <stdio.h>
    #include <stdlib.h>
    #include<windows.h>
    
    #define H 23
    #define W 75
    
    int a[H][W];        //地图数组
    int s[H*W][2];      //蛇身坐标数组
    int sLength;        //蛇的长度
    void init()         //程序开始时的初始化操作
    {
        CONSOLE_CURSOR_INFO cursor_info = {1, 0};
        SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);    //隐藏关标
        int i,j;
        for(i=0; i<H; i++)
        {
            a[i][0]=1;          //让第一列为1
            a[i][W-1]=1;        //让最后一列为1
        }
        for(j=0; j<W; j++)
        {
            a[0][j]=1;      //让第一行为1
            a[H-1][j]=1;    //让最后一行为1
        }
        sLength=4;          //让蛇的最初长度为4
        s[0][0]=H/2;
        s[0][1]=W/2;        //给蛇头坐标赋值
        for(i=1;i<4;i++)
        {
            s[i][0]=s[0][0]+i;
            s[i][1]=s[0][1];  //给刚开始的蛇身几个初始坐标
        }
    
    }
    
    void gotoxy(int i,int j)        //移动光标
    {
        COORD position={j,i};
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);
    }
    
    void drawMap()                  //画地图
    {
        int i,j;
        for(i=0;i<H;i++)
        {
            for(j=0;j<W;j++)            //两重for循环遍历数组
            {
                if(a[i][j]==0)          //为0输出空格
                    printf(" ");
                else                    //为1输出#
                    printf("#");
            }
            printf("
    ");               //别忘了换行
        }
    }
    
    void drawSnake()                //画蛇
    {
        int i;
        for(i=0;i<sLength;i++)
        {
            gotoxy(s[i][0],s[i][1]);        //移动关标到蛇的坐标
            printf("@");                    //在这个位置画蛇
        }
    }
    
    int main()
    {
        init();                     //程序开始时的初始化操作
        drawMap();                  //画地图
        drawSnake();                //画蛇
        getchar();
        return 0;
    }
  • 相关阅读:
    iaas,paas,saas理解
    July 06th. 2018, Week 27th. Friday
    July 05th. 2018, Week 27th. Thursday
    July 04th. 2018, Week 27th. Wednesday
    July 03rd. 2018, Week 27th. Tuesday
    July 02nd. 2018, Week 27th. Monday
    July 01st. 2018, Week 27th. Sunday
    June 30th. 2018, Week 26th. Saturday
    June 29th. 2018, Week 26th. Friday
    June 28th. 2018, Week 26th. Thursday
  • 原文地址:https://www.cnblogs.com/hjw1/p/7911995.html
Copyright © 2011-2022 走看看