首先,我們先來理一下大致思路。
首先,要有地圖,再有蛇,還要有食物
那我們就先畫一張地圖出來吧!
畫地圖的過程中,光標在不斷移動,包括只有貪食蛇的移動,也都是光標移動後的打印與擦除,因此,我們先定義一個設置屏幕光標的函數setPos(),
void SetPos(int nX, int nY) //設置光標的位置
{
COORD cPos;
/* 可以將光標至於COORD上,按F12查看COORD的定義,是一個座標結構體,
函數也可以,將光標置於一個函數名上,F12即可轉到定義
轉到定義後,按ctrl+減號,即可退回原位置。 */
HANDLE hOutPut; //句柄變量,在此不做講解,屬於Windows裏的知識
cPos.X = nX;
cPos.Y = nY;
hOutPut = GetStdHandle(STD_OUTPUT_HANDLE); //以下兩個都是Windows的系統函數,用來設置光標的位置
SetConsoleCursorPosition(hOutPut, cPos); //在此,我們將構建好的座標傳入,即可設置光標位置
//對於Windows系統函數不必深究,如果想要學習Windows開發可以瞭解一下
}
通過不斷改變光標位置,在合適的位置打印即可繪製出想要的地圖。
在此我們畫一張40*40的地圖
void DrawMap()//創建地圖
{
int i;
for (i = 0; i < 80; i += 2)//打印上下邊框
{
Pos(i, 0);
printf("■");
Pos(i, 40);
printf("■");
}
for (i = 1; i < 40; i++)//打印左右邊框
{
Pos(0, i);
printf("■");
Pos(80, i);
printf("■");
}
}
現在先來運行一下程序:
運行後結果:
簡易的地圖已經畫好了
現在我們再來畫蛇,
首先,蛇身是一個不定長的線性數據結構,在此我們採用鏈表的方式來存儲,
typedef struct _SNACK {
int x;
int y;
struct _SNACK* next;
}SNACK;