一、程式實現的原理:
1、構造蛇身:定義乙個座標陣列,存放的是蛇的每一節蛇身所在的座標位置。這樣就將移動蛇身的操作轉換為移動陣列的操作,將吃食物增加蛇身體長度的操作轉換為在陣列後面追加元素的操作。
2、移動效果:每次移動時,將每一節蛇身(蛇頭除外)依次往前移動一節,然後擦去蛇的最後一節,最後確定蛇頭的方向,再繪製乙個蛇頭。這樣就會顯示乙個移動效果。
3、身體增加效果:每次移動時候,判斷蛇頭是否碰到了食物,如果碰到了食物,則吃掉它,並且只進行前移蛇身和增加蛇頭的操作,不進行擦除蛇尾的操作(可以用乙個標記變數判斷是否吃掉了食物,然後在擦除蛇尾那裡判斷是否需要擦除蛇尾),這就會顯示蛇身體增加的效果。
二、預備知識
1、控制台視窗
控制台視窗每乙個位置程式設計客棧都有它的座標,且座標系如下圖所示(隨箭頭方向座標逐漸增大)
2、通過**將游標移動到控制台指定位置
這裡用到了c語言windows程式設計中控制代碼的概念,不知道的可以百度。實在不會也沒關係,可以當做乙個函式模板來使用,無需做太多了解。
zskrntyh#include
#include
//將游標移動到控制台的(x,y)座標點處
void gotoxy(int x, int y)
int main()
從執行結果可以看到,程式在指定位置輸出了待輸出的內容。
三、 程式框架
1、定義相關標頭檔案
2、定義函式結構以及相關屬性
3、完成各**塊
四、具體操作
1、定義相關標頭檔案
本程式所用到的標頭檔案如下所示
#include
#include
#include //windows程式設計標頭檔案
#include
#include //控制台輸入輸出標頭檔案
2、定義函式結構以及相關屬性
首先需要確定遊戲的邊框大小
#define snakesize 100//蛇的身體最大節數
#define mapwidth 118 //寬度
#define mapheight 29//高度
其次要定義食物的座標,以及 蛇自身的相關屬性
//食物的座標
程式設計客棧struct food;
//蛇的相關屬性
struct snake;
這裡蛇的身體由一節一節的小方塊■組成, 將蛇的身體每一節的小方塊所在的位置用乙個陣列來儲存起來,方便以後操作。
確定遊戲所用到的幾個函式塊。
//繪製遊戲邊框
void drawmap();
//隨機生成食物
void createfood();
//按鍵操作
void keydown();
//蛇的狀態
bool snakestatus();
//從控制台移動游標
void gotoxy(int x, int y);
最後定義幾個全域性變數
int key = 72;//表示蛇移動的方向,72為按下「↑」所代表的數字
//用來判斷蛇是否吃掉了食物,這一步很重要,涉及到是否會有蛇身移動的效果以及蛇身增長的效果
int changeflag = 0;
int sorce = 0;//記錄玩家的得分
五、完成各**塊
1、 實現將游標移到指定位置的操作
//將控制台游標移到(x,y)處
void gotoxy(int x, int y)
2、 列印遊戲邊框以及遊戲初始畫面
乙個小方塊字元■在x方向上占用兩個位置,在y方向上占用乙個位置。每一節蛇身由乙個小方塊構成。
void drawmap()
//列印左右邊框
for (int i = 1; i < mapheight; i++)
//隨機生成初試食物
while (1)
//將游標移到食物的座標處列印食物
gotoxy(food.x, food.y);
printf("★");
//初始化蛇的屬性
snake.len = 3;
snake.speed = 200;
//在螢幕中間生成蛇頭
snake.x[0] = mapwidth / 2 + 1;//x座標為偶數
snake.y[0] = mapheight / 2;
//列印蛇頭
gotoxy(snake.x[0], snake.y[0]);
printf("■");
//生成初試的蛇身
for (int i = 1; i < snake.len; i++)
//列印完蛇身後將游標移到螢幕最上方,避免游標在蛇身處一直閃爍
gotoxy(mapwidth - 2, 0);
return;
}3、編寫按鍵操作的**
void keydown()
/**蛇移動時候先擦去蛇尾的一節
*changeflag為0表明此時沒有吃到食物,因此每走一步就要擦除掉蛇尾,以此營造乙個移動的效果
*為1表明吃到了食物,就不需要擦除蛇尾,以此營造乙個蛇身增長的效果
*/ if (changeflag == 0)
//將蛇的每一節依次向前移動一節(蛇頭除外)
for (int i = snake.len - 1; i > 0; i--)
//蛇當前移動的方向不能和前一次的方向相反,比如蛇往左走的時候不能直接按右鍵往右走
//如果當前移動方向和前一次方向相反的話,把當前移動的方向改為前一次的方向
if (pre_key == 72 && key == 80)
key = 72;
if (pre_key == 80 && key == 72)
key = 80;
if (pre_key == 75 && key == 77)
key = 75;
if (pre_key == 77 && key == 75)
key = 77;
/***控制台按鍵所代表的數字
*「↑」:72
*「↓」:80
*「←」:75
*「→」:77
*/ //判斷蛇頭應該往哪個方向移動
switch (key)
//列印出蛇頭
gotoxy(snake.x[0], snake.y[0]);
printf("■");
gotoxy(mapwidth - 2, 0);
//由於目前沒有吃到食物,changflag值為0
changeflag = 0;
return;
}4、實現生成食物的**
void createfood()
} //隨機生成的食物不能橫座標為奇數,也不能在蛇身,否則重新生成
if (flag && food.x % 2 == 0)
break; }
//繪製食物
gotoxy(food.x, food.y);
printf("★");
snake.len++;//吃到食物,蛇身長度加1
sorce += 10;//每個食物得10分
snake.speed -= 5;//隨著吃的食物越來越多,速度會越來越快
changeflag = 1;//很重要,因為吃到了食物,就不用再擦除蛇尾的那一節,以此來造成蛇身體增長的效果
} return;
}5、判斷蛇運動是否符合規範
bool snakestatus()
return true;
}六、main函式
int main()
gotoxy(mapwidth / 2, mapheight / 2);
printf("game over!\n");
gotoxy(mapwidth / 2, mapheight / 2 + 1);
printf("本次遊戲得分為:%d\n", sorce);
sleep(5000);
return 0;
}七、執行效果圖
本文標題: c語言實現貪吃蛇小遊戲
本文位址:
C語言實現貪吃蛇小遊戲(詳解)
目錄 一 程式實現的原理 二 預備知識 1 控制台視窗 2 通過 將游標移動到控制台指定位置 三 程式框架 四 具體操作 1 定義相關標頭檔案 2 定義函式結構以及相關屬性 五 完成各 塊 1 實現將游標移到指定位置的操作 2 列印遊戲邊框以及遊戲初始畫面 3 編寫按鍵操作的 4 實現生成食物的 5...
C語言貪吃蛇小遊戲
整個 都是c語言,其中呼叫少部分庫函式,不如實現螢幕座標列印的函式,貪吃蛇遊戲 的核心在於蛇身體座標的更新,實現細節請看 注釋,include stdafx.h 如果是vc環境的話加上該標頭檔案 include include include include include define turnu...
c語言小遊戲 貪吃蛇
1 資料設計 遊戲地圖的寬和高,以及蛇的最大長度 食物在地圖上x和y上的顯示 蛇的長度,蛇得每一節的座標儲存,蛇的移動速度 蛇是否變化,蛇的初始移動方向 2 模組化設計 void drawmap 繪製遊戲地圖 void keydown 按鍵處理 voidcreatefood 產生食物 void go...