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...