#include
//ncurses必備的標頭檔案
#include
//malloc函式必備的標頭檔案
#include
//多執行緒必備的標頭檔案
//定義乙個結構體作為蛇身
struct snake
;#define up 1
#define down -1
#define left 2
#define right -2
//定義鍵盤輸入
int key;
//定義移動方向
int dir;
int score =0;
//定義蛇頭
struct snake *head =
null
;//定義蛇尾
struct snake *tail =
null
;//定義食物
struct snake food;
//初始化ncurses
void
initncurse()
//對蛇身初始化
void
initsnake()
//定義初始移動方向
dir = right;
//為蛇頭開闢空間
head =
(struct snake *
)malloc
(sizeof
(struct snake));
//定義蛇頭初始位置
head->row =1;
head->line =1;
head->next =
null
;//將蛇尾初始化指向蛇頭
tail = head;
//為蛇身增加節點
addnode()
;addnode()
;}//初始化食物
void
initfood()
//顯示蛇身
intsnakebody
(int row,
int line)
p = p->next;
}return0;
}//顯示食物
intsnakefood
(int row,
int line)
return0;
}//定義20x20大小的地圖
void
gamepic()
printw
("\n");
}if(row >
0&& row <20)
elseif(
snakebody
(row,line)
)elseif(
snakefood
(row,line)
)else
}printw
("\n");
}}printw
("by teng\n");
//列印分數
printw
("score %d\n"
,score)
;}
演算法說明:貪吃蛇是根據蛇尾來移動的,移動方向不同蛇尾的座標變化也不一樣,當蛇尾不吃食物時,需要刪除頭節點,在尾巴處增加新節點,這樣我們視覺效果就會看到蛇在移動,當吃到食物時,無需刪除頭節點。
//蛇身增加節點
void
addnode()
//將新節點加入蛇身
tail->next = new;
tail = new;
}//刪除蛇頭
void
deletenode()
//判斷蛇的死亡
intsnakedie()
p = p->next;
}//當貪吃蛇撞牆後死亡重生
if(tail->row ==
0|| tail->row ==
20|| tail->line ==
0|| tail->line ==20)
return0;
}void
movesnake()
}else
//當貪吃蛇死亡時,全部重置if(
snakedie()
)}
貪吃蛇不合理走位演算法說明:若無絕對值來控制實際方向,貪吃蛇將出現能夠反向走位的情況,算是乙個小bug,程式一開始我使用巨集定義確定方向的整數值,只需通過對比鍵盤輸入的方向及貪吃蛇走位方向的絕對值,即可判斷是否是合理走位。
//重新整理介面
void
*refreshinte***ce()
}//防止貪吃蛇不合理走位
void
turn
(int direction)
}//控制移動方向
void
*controldir()
}}
由於我們需要一邊控制貪吃蛇走位一邊重新整理ncurses介面,所以我們需要用到多執行緒
int
main()
現在完成了基本的貪吃蛇小遊戲,由於筆者能力有限,如有錯誤之處還請不吝賜教。 Linux下使用curses實現貪吃蛇小遊戲
效果圖如下 1.蛇的資料結構使用雙鏈表實現,資料結構如下 typedef struct pos typedef struct nodenode typedef struct dlinkdlink dlink snake the snake 另外注意,由於要在鍊錶頭部插入節點,在尾部刪除節點,所以最好...
實現貪吃蛇
貪吃蛇 1.它的移動我們採用頭部加乙個尾巴減乙個 2.我們將view的大小分成很多個格仔 3.蛇的移動是以乙個格仔為單位 created by administrator on 2016 10 11.public class gameview extends view public gameview...
程式設計實現貪吃蛇小程式
include include include include include define key up w 向上方向鍵 define key down s 向下方向鍵 define key right d 向右方向鍵 define key left a 向左方向鍵 define key spac...