關於貪吃蛇我認為最難實現的部分是如何控制小蛇的移動,還有吃到食物後小蛇變長的問題。
這個圖可以解釋:
小蛇移動:
第一步用12345個數字記錄小蛇的位置,然後使所有的小蛇位置數字加一。
第二步使小蛇的最大值位置處變為0,就相當於那個位置消失了。
第三步使最小值的上/下/左/右位置(根據按鍵判斷)的元素變為1。
小蛇吃到食物後變長:
上面的第二步是使最大值變為0,我們可以試想一下 如果吃到食物,最大值就不變為0了,那麼這不就相當於小蛇變長了嗎?這時,我們只需要加乙個if else判斷是否吃到食物即可。
標頭檔案以及全域性變數
#include
#include
#include
#define high 26
#define width 46
int num[high]
[width]=;
//邊框
int movesnake;
//小蛇移動
int food_x, food_y;
//食物
int score;
//計分
防閃屏
void
gotoxy
(int x,
int y)
隱藏游標
void
hidecursor()
;setconsolecursorinfo
(getstdhandle
(std_output_handle)
,&cursor_info)
;}
初始化介面
void
startup()
for(
int j =
0; j < width; j++
)//小蛇初始化
num[high /2]
[width /2]
=1;for
(int i =
1; i <=
4; i++
) movesnake =4;
//初始化蛇的移動方向
hidecursor()
;//初始化食物
food_x =
rand()
%(high -5)
+2; food_y =
rand()
%(width -5)
+2; num[food_x]
[food_y]=-2;}
主介面顯示
void
show()
else
if(num[i]
[j]==-3
)else
if(num[i]
[j]==0)
else
if(num[i]
[j]==1)
else
if(num[i]
[j]>1)
else
if(num[i]
[j]==-2
)}printf
("\n");
}printf
("得分為:%d\n"
,score)
;}
後台操作
void
movesnakepostion()
if(num[i]
[j]==2)
}}if(movesnake ==1)
//向上
if(movesnake ==2)
//向下
if(movesnake ==3)
//向左
if(movesnake ==4)
//向右
if(num[newhead_i]
[newhead_j]==-
2)//當小蛇沒吃到食物
else num[snakeback_i]
[snakeback_j]=0
;//蛇身最大值的元素也就是蛇尾蛇尾變為0,蛇身就相當於長度不變
if(num[newhead_i]
[newhead_j]
>
0|| num[newhead_i]
[newhead_j]==-
1|| num[newhead_i]
[newhead_j]==-
3)else num[newhead_i]
[newhead_j]=1
;}void
back()
人機互動
void
front()
}
主介面
int
main()
}
實現:
C 貪吃蛇二
小菜學習winform 一 貪吃蛇 說到oo可能一說一大堆,這裡面小菜只是簡單的把貪吃蛇抽象出來,先來說蛇,具有的屬性和行為,屬性比如蛇的長度 蛇的寬度 蛇的行動方向等 行為比如是否吃到食物 是否撞牆等,那我們可以抽象乙個蛇的類,這樣實現 1 using system 2using system.c...
C 貪吃蛇設計
class map enum char map row col 地圖 map void drawmap 繪製地圖 bool isvaildpoint int x,int y 1.利用列舉來定義常量,在類外部可以通過作用域解析來獲取列舉常量,便於所有類的交流.2.通過二維陣列儲存地圖,在構造的時候讀取...
C語言貪吃蛇
include include include include include include define screen width 40 遊戲螢幕寬度 define screen length 15 遊戲螢幕長度 define start x 16 螢幕起始x座標 define start y ...