码迷,mamicode.com
首页 > 编程语言 > 详细

C语言控制台贪吃蛇2

时间:2017-10-17 22:56:22      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:控制   链表   nio   函数   move   pause   style   space   ast   

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

  一、显示游戏边框

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

注:一个方块两个字节

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

 

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

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

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

#define DEF_SNAKE_LONG 20

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

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

//蛇方向
enum {to_east = 2, to_west = -2, to_south = 1, to_north = -1};

  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的区别:前者在第二个参数中多出‘\0’ 导致结果出现以下情况:

  技术分享

 

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

#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] = { 
    "■■■■■■■■■■■■■■■■■■■■■■■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■                                          ■\n",
    "■■■■■■■■■■■■■■■■■■■■■■■\n"};

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

//蛇方向
enum {to_east = 2, to_west = -2, to_south = 1, to_north = -1};

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("\n\n\n\t\t\t       <<SNAKE>>\n\n");
    printf("\n\n\n\t\t\t<<W,S,A,D control move>>\n\n");
    printf("\n\n\n\t\t\t    <<space begin>>\n\n\n\n");
}

//播放音乐
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);
    }
}

运行结果如图:

  技术分享

    

 

C语言控制台贪吃蛇2

标签:控制   链表   nio   函数   move   pause   style   space   ast   

原文地址:http://www.cnblogs.com/WinonaJia/p/7684117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!