标签:控制 链表 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); } }
运行结果如图:
标签:控制 链表 nio 函数 move pause style space ast
原文地址:http://www.cnblogs.com/WinonaJia/p/7684117.html