模組整合
完整**
這裡我採用的是結構體陣列來儲存蛇身資訊,包含x,y座標。當然也可以用其他的儲存方式,比如二維陣列、鍊錶等。「場地」的大小是24x24,用字元*來表示蛇身。
struct snake
;//蛇身資訊
struct snake body[
600]
;//結構體陣列表示蛇身
body[0]
.x =
2; body[0]
.y =0;
body[1]
.x =
1; body[1]
.y =0;
body[2]
.x =
0; body[2]
.y =0;
//初始化,初始長度為3
//此處注意蛇頭的資訊一定要存在body[0]
void
show()
printf
("|\n");
//每行的末尾列印邊界
}for
(i =
0; i <
24; i++
)printf
("-");
//最後一行列印邊界
}
執行效果
因為字元是長方形的,最後列印出來也是長方形的,原理就是一行行列印,在遇到對應蛇身的x,y座標的時候就列印星號。注意清屏函式的使用。
當我們移動蛇身時,我們只需要改變蛇身的x,y座標。因為蛇是連續的,我們可以這樣理解,當我們移動的時候,每一步我們改變的只有頭和尾,我們將除了頭以外的身體部分,覆蓋之前除了尾的身體部分,這樣得到的就是連續變化的了。再改變頭的座標,往要移動的方向前進一格。這一部分理解了,貪吃蛇就完成了一大半。
那麼我們怎麼從鍵盤獲得輸入,從而改變方向呢。這裡需要用到 _kbhit() 函式(在下),檢查當前是否有鍵盤輸入,若有則返回乙個非0值,否則返回0。再用_getch()函式得到使用者鍵入的字元,若沒有輸入,既保持這個方向移動不變。
還要用到延時函式sleep(微秒數)(在裡),來減慢移動速度。
void
move()
if(a ==
's')
if(a ==
'a')
if(a ==
'd')
show()
;}//main函式中的內容,die_flag,用來判斷是否死亡
while
(die_flag)
else
遊戲結束有兩種情況,一種是碰到邊界了,另一種是碰到自身了,判定的方法都是將蛇頭的x,y座標和邊界和自身其他x,y相比較。
void
die()}
while
(die_flag)
else
}
生成目標我們只需要生成兩個小於24的隨機數,作為目標的橫縱座標,srand函式在stdlib.h標頭檔案中,srand函式生成的是偽隨機數,所以還需要播種,我們將時間轉換成數字,這樣就能保證每一次的種子不同。
另外,我們生成的目標還不能與蛇身重合,否則玩家會找不到目標。
void
target()
}//生成目標的時候用do while,首先執行一次,如果重合就繼續執行
dotarget()
;while
(is_on_body ==0)
;
加長無非是在蛇尾後加乙個,但是這一塊怎麼保證和蛇身方向相同呢。其實不難,我們能夠輕易得知,倒數第二塊和倒數第一塊總是在乙個方向上。那麼我新加上的這一塊和倒數第一塊的相對位置也是如此。
void
add(
)}
最後將幾個函式有序地放在一起,就完成了整個貪吃蛇。
while
(die_flag)
else
不過控制台玩起來十分不流暢,主要是重新整理率的問題,還有游標,其實也有辦法解決,控制台輸出的時候,游標不一定要順序移動,我們可以用setconsolecursorposition()函式直接將游標移動到相應位置,還可以用hidecursor()來隱藏游標。
這裡我們就不做過多的講解了,後面我們用easyx可以做出更流暢,使用者體驗更好的版本。
#include
#include
#include
#include
#include
void
move()
;void
add();
void
die();
void
target()
;void
show()
;int i, j,k, target_x, target_y, speed, lenth, die_flag, is_on_body;
char a;
struct snake
;//蛇身資訊
struct snake body[
600]
;//結構體陣列表示蛇身
intmain()
else
}return0;
}void
move()
if(a ==
's')
if(a ==
'a')
if(a ==
'd')
show()
;}void
show()
printf
("|\n");
//每行的末尾列印邊界
}for
(i =
0; i <
24; i++
)printf
("-");
//最後一行列印邊界
}void
add()}
void
die()}
void
target()
C語言控制台貪吃蛇
貪吃蛇 這個蛇是怎麼變長的.遊戲就是方塊和空格的更新 沒有牆的地方初始化為0,有牆的地方初始化為1,有蛇的地方初始化為2,食物初始化為3 所有的操作都在snakegroup裡面進行 include include include include include include include con...
c 控制台實現貪吃蛇
思路 效果 沒開發前覺得挺難,一步步做下來後就不覺得難了,當然,只是粗略的實現,速度,地圖自定義等都可以再繼續優化,規劃也不好。貪吃蛇包含 牆,食物,蛇。牆 初始後固定動,直接按橫0縱0,高寬自定列印字元即可。食物 x,y生成在牆內。蛇 會動,實際會動的只有蛇頭和蛇尾,蛇身每個字元都會經過蛇頭的位置...
C 控制台貪吃蛇
軟體實訓作品,現放出個人源 供需要的同學參考 int startx 8 x起點 const int starty 4 y起點 const int rangex 60 x範圍 const int rangey 20 y範圍 const int endx startx rangex x終點 const ...