貪吃蛇(C語言)

2021-10-04 12:08:02 字數 2887 閱讀 4266

今天也要努力學習,爭取考上杭電!

今天幫朋友寫了貪吃蛇,我自己都沒寫過,還要罵罵咧咧幫別人寫。

本來是寫了乙個版本,結果所有功能實現以後,發現了乙個bug!!!這個bug是啥呢,就是我的蛇緊急轉彎時候,如果身子挨在一起,就會在頭尾在同一直線時 斷掉。哈哈哈哈,讓我想到了有的蛇砍掉頭還能蹦躂兩下…不過後面改掉了。

如果有要寫貪吃蛇的大一朋友們,可以參考一下這個思路:

1、實現動態的效果,肯定是要不停清屏、輸出的

2、蛇頭要有乙個移動方向,如果不人為干預的話,那就應該遵循舊的移動方向

3、如果從鍵盤鍵入了乙個方向,鍵入的方向和當前方向相反,就是無效的鍵入

4、不需要一直鍵入,而是想鍵入就鍵入,那麼應該使用非阻塞的getch(kbhit()和getch()配合使用)

5、蛇的下乙個位置,判斷當前蛇頭按方向的下乙個座標是不是牆、某一節身子、食物、空白

6、是牆、某一節身子的話,就結束了

7、是空白的話,就可以走,那麼空白的座標變成頭的,原來的頭變成身子,尾巴向前移

8、是食物的話,就可以走,那麼食物的座標變成頭的,原來的頭變成身子,而尾巴不需要動

9、尾巴的判斷,把尾巴的最後一節變為空(通常情況下,乙個尾巴肯定是線性的,與倒數第二節尾巴相連,所以我的bug就是出現在這裡,如果只是判斷到乙個相連的就不判斷了,那麼兩個相鄰的時候就出問題了,後面我的思路是改用了單鏈表,儲存每一節點的座標,這樣甚至就不用判斷尾巴了,但是消耗的空間和原來只用兩個變數儲存尾座標相比多了乙個長度為蛇身的鍊錶)

10、食物生成,就是生成一對隨機數做座標,隨機數範圍在地圖合理範圍內,如果生成的座標是身子什麼的從新生成一對再

11、至於資料儲存,為了不來回傳參,我選擇了用的全域性變數,因為真的用了好多控制變數

我的**中,地圖是用了乙個二維字元陣列,蛇身體座標用的單鏈表實現

1、gotoxy(int x, int y):將游標移動到控制台的某個座標,這個要看你的環境,沒有的話自己寫或者下庫

2、kbhit():檢查當前是否有鍵入,沒有返回0 , 標頭檔案:conio.h

3、getch():無回顯,自動讀取,不需要按回車!可以搭配kbhit()使用,標頭檔案:conio.h

然後,就是方向鍵,鍵入是返回兩個值,第乙個值是-32,說明是方向鍵,這時候再讀取第二個判斷是啥方向

大概就寫完了,明天也要努力學習考杭電!

#include

#include

#include

#include

#include

#include

#define map_heigth 30

#define map_width 60

typedef

struct snakesnake,

*psnake;

char map[map_heigth]

[map_width+1]

;psnake sh,st;

//蛇頭 蛇尾指標,但蛇尾是煉表頭指標

int h_x,h_y,t_x,t_y;

//頭座標 尾座標

int point =75;

//方向值,初始向左 ←75 →77 ↑72 ↓ 80

char get_p,get_key;

//key用來接收鍵入,方向鍵返回兩個值,第二個用p接收

int food =0;

//食物數目

int sleep =30;

//休眠時間

int length =5;

//蛇長

void

gotoxy

(int x,

int y)

void

insert_head

(int x,

int y)

void

del_tail()

void

ini_snake()

}void

produce_food()

else}}

void

ini_map()

map[0]

[map_width]

='\0'

; map[map_heigth-1]

[map_width]

='\0'

;for

(i =

1;i < map_heigth-

1;i++

) map[i]

[map_width-1]

='*'

; map[i]

[map_width]

='\0';}

ini_snake()

;produce_food()

;}void

load_map()

return;}

intcheck_next()

if(map[next_y]

[next_x]

=='*'

|| map[next_y]

[next_x]

=='+'

)return0;

//撞到牆或自己

else

if(flag)

t_y = st -> y;

t_x = st -> x;

map[t_y]

[t_x]

=' '

;del_tail()

;return1;

}void

load_end()

void

monitor_key()

}}}void

start()

load_end()

;}intmain()

;}

C語言貪吃蛇

include include include include include include define screen width 40 遊戲螢幕寬度 define screen length 15 遊戲螢幕長度 define start x 16 螢幕起始x座標 define start y ...

C語言 貪吃蛇

include include include define framewidght 22 define frameheight 22 short generaterandnumber short a,short b void posconsolecursor short x,short y voi...

C語言貪吃蛇

親測devc 編譯器完美執行 define crt secure no warnings include include include include void readini file fphead,int score,char argv 建立或開啟乙個和執行檔案對應的ini檔案,讀取最高紀錄 ...