零基礎教做貪吃蛇 (4)剩餘函式講解

2021-10-02 15:15:26 字數 2166 閱讀 9505

emmm,昨天沒有更新,,這個嘛。還是因為stm32的原因,,,昨天弄它的串列埠通訊弄了一下午加半個晚上,,再加上降溫了。。手冷,,昨天就沒寫。。今天因為妹妹開網課了,,我又給她把家裡以前的台式拼起來,,所以耽誤的不少時間。。

好了,話不多說,我們來開始今天的主題,這是最後一章了,我會把剩餘的函式都講了它。大家看完後可以自己嘗試著也寫乙個,或者找啥子畫素鳥啊,五子棋啊啥子試試,原理都是通的。這些專案除了可以激發興趣外,還可以加深你對c語言的理解。

這個函式可以說是整個遊戲的核心函式了,我們一定要弄明白蛇在整個遊戲中的移動的邏輯。

首先,蛇在地圖初始化的時候已經被我們列印出來了,但是在遊戲中,即使我們不操作,蛇也是會自動移動的,這個移動的方向初始化時是向上,其他時候就是我們上次操作時的方向。

怎麼樣顯示蛇「移動」的這個效果嘞?嘿嘿,通過座標運算,把蛇的身子的其他值往前乙個移動就可以了。

for

(k = snake.len -

1; k>

0; k--

)//蛇的身子一格一格的移動

並且蛇在移動時,如果沒有吃到過果子,是沒有長大的。所以我們渲染蛇向前移動時,最後一格的蛇尾「#」也要變成「 」

同時,使用鍵盤控制蛇的移動時,如果蛇是向上走的,則你輸入「s」向下是無效的。即需要考慮操作的合理性。

這個函式的完整**:

void

movesnake()

for(k = snake.len -

1; k>

0; k--

)//蛇的身子一格一格的移動if(

kbhit()

)//檢查當前是否有鍵盤輸入;if

(ch != up && ch != down && ch != left && ch != right)

//如果輸入的時其他的鍵,則使用預設方向。這裡的up啊啥的都是之前定義好的

if(direction != ch)

//如果輸入的不預設方向

else

}else

}else

}gotoxy

(snake.x[0]

, snake.y[0]

);printf

("@");

//輸出蛇的頭

grow =0;

//把grow標記回0

gotoxy

(frame_height,0)

;//把游標始終弄在結尾處

}

emm,為了方便大家理解,我在它原本的基礎上加了不少注釋,方便大家理解。

這個函式時用來判斷蛇是否存活。主要的邏輯是判斷蛇是否撞到邊界和撞到自己。

這個函式很簡單,就是乙個判斷函式

int

isalive

(void

)

這個函式是用來根據蛇的長度判斷蛇的速度的。但是我們主要的速度邏輯並不是在這裡實現的,所以這個函式並不複雜。

void

getspeed

(void

)//根據長度修改速度

嘿嘿,關於snake.h和它的函式終於寫完了。接下來我們就可以來完成最後一步了。之前說了,我們只要在開頭把snake.h的標頭檔案包含進來,就可以直接用了。具體邏輯我就不詳細講解了,但是注釋我還是給大家打的挺詳細的。

#include

"snake.h"

#include

#include

//transposed structure object

extern

struct food food;

//全域性變數申明

extern

struct snake snake;

//main function

intmain()

if(finish)

//如果沒有標記通關,則顯示你這次的長度 //death or customs clearance

system

("cls");

}else

//如果通關了

system

("cls");

}}}}

零基礎教做貪吃蛇 (1)準備知識

大家可以先大概看下這個圖,心裡大概有個底,這樣寫起程式來才不會無從下手。通過上面這個圖,我們可以大致了解到,這次的東西並不怎麼複雜,主要難度都集中在蛇的移動上面。大家剛學完c語言基礎的童鞋可能現在會有些懵逼了,怎麼才能在用c語言輸入能動的東西欸。以前都沒學過這種東西啊,毫無頭緒欸。其實我們遇到的大多...

零基礎教做貪吃蛇 (3)部分函式講解

為啥子不按照順序先從initmap開始講嘞?因為initmap這個函式需要定點輸出,而且我之前說了,在這個專案中我不會使用 n 這種來輸出介面,所以我們採用定點輸出的方式,為了方便它的使用,當然是把它打包成乙個函式啦。這個函式沒啥子講的,只是死套模板罷了,只不過我們把x和y作為函式的輸入就可以了 v...

vb做的貪吃蛇

dim q as integer dim w as integer dim sq as integer dim sw as integer dim cq as integer dim cw as integer dim ss as long dim c as integer dim a as int...