C語言控制臺貪吃蛇2
阿新 • • 發佈:2017-10-17
隨機數函數 edi mms ‘\0’ sign rand() 拷貝 printf rand
顯示遊戲邊框及蛇的位置初始化
一、顯示遊戲邊框
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