貪吃蛇 C語言控制台簡單實現

2021-10-14 16:23:32 字數 3551 閱讀 6100

模組整合

完整**

這裡我採用的是結構體陣列來儲存蛇身資訊,包含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 ...