#涉及函式
標頭檔案函式名
解釋stdio.h
printf()
在黑框框上列印文字用的
scanf()
從鍵盤上輸入文字所用
stdlib.h
rand()
獲得隨機的乙個數值
conio.h
kbhit()
判斷當前鍵盤是否有輸入
windows.h
system
後面起到清屏變色的功能
sleep()
起到延遲的作用
以上是我感覺在寫貪吃蛇的時候用到頻率比較多的函式。實現游標移動的函式我找了很多也不知道是包含於哪乙個標頭檔案的就沒有寫在裡面。
#如何編寫
首先我們要做貪吃蛇這個遊戲。首先解決讓蛇運動這個最大的難題,在這裡我們用的思維就是消失乙個出現乙個。就是在蛇頭出現乙個的時候蛇尾就相對應的消失乙個。就這樣消失出現消失出現。連續起來蛇就移動了起來。這個道理很容易明白那麼如何編寫呢?下面**奉上。
void
move
(int x,
int y)
這一段的**起到乙個將游標移動到相應位置的作用。定義了乙個新的函式move(int x,int y)形參x,y對應的就是橫座標和縱座標。當我們分別給x,y乙個值得時候,游標就移動到相對應的位置。
void
down()
//改變儲存位置陣列的數值
}
上面的**塊就是向下移動的**。主要是陣列中元素的連續賦值。然後進行游標的移動移動到相應的位置中就可以達到移動蛇的效果。
void
shead()
//列印新的蛇頭
void
spp(
)//抹除蛇的尾巴
上面的**塊就起到了新增和抹除的作用,move()函式進行移動游標然後利用printf()函式進行列印或者抹除。
到這裡我們就可以實現乙個移動的小方塊的程式。
那麼新的問題來了,我們做出來的僅僅是乙個移動的小方塊,並無法做出來蛇那麼我們怎樣才能做出一「條」蛇呢?
pp.x[pp.b]
=head.x[head.a-length]
;
我們可以通過引入乙個變數length,通過這個變數我們就可以通過乙個「差」來實現蛇身的出現。
void
foods()
//隨機生成食物的函式
else}}
move
(food.x,food.y)
;printf
("■");
}
上年一段**塊實現的是給食取位置。在這裡我們只需注意食物出現不在框框外不在蛇身上就可。其中給rand()函式取出的隨機數設定範圍即可實現食物不會跑沒了。
通過乙個遞迴函式就可保證出現的食物在橫座標上出現的座標都為偶數。
for迴圈遍歷對比食物是否會出現在蛇身上。
rand()%(a-b+1)+b控制隨機數出現的大小大於b小於a。
以上就是本人在寫貪吃蛇時最為崩潰的幾個點。下面奉送完整的**。(我盡量注釋的詳細一點)
#
include
#include
#include
#include
#define
up72
//72就是大家按下↑這個的時候對應的鍵值
#define
down80#
define
left75#
define
right
77//************定義變數 大家盡量定義變數的時候具有一定的意義否則容易把自己搞昏頭
char xy;
//儲存鍵盤敲下的字母
int s;
//儲存速度
void
color()
;struct
food
//定義食物的位置
food;
struct
pppp;
struct
head
//定義蛇的頭部
head;
int length;
//定義蛇身長
void
speed()
;//通過對輸入數字的判斷改變蛇運動的速度
//************實現移動
voidup(
);//上
void
down()
;//下
void
left()
;//左
void
right()
;//右
//************基本流程
void
original()
;//初始化蛇身位置,列印邊界
void
get();
//蛇進行運動的判斷語句
void
shead()
;//蛇頭移動
void
spp();
//蛇尾抹除
void
foods()
;//生成食物
void
list()
;//顯示引數
void
gameopen()
;//歡迎介面
void
gameover()
;//遊戲結束
void
common()
;//************實現判斷
void
d_body()
;//判斷body指令
void
d_wall()
;//判斷wall指令
void
d_food()
;//判斷food指令
void
d_doot()
;//判斷foot指令
//************
void
move
(int x,
int y)
;//移動函式的宣告語句
//************
intmain()
void
color()
//實現介面變色的功能
void
move
(int x,
int y)
//個人理解為固定搭配其中coord可以被其他的替換其餘的不可替換
void
gameopen()
void
gameover()
void
list()
//主要起到顯示蛇頭座標顯示得分情況的作用
void
get(
)//從鍵盤中獲得乙個鍵值,並將其賦值給xy,並且使用switch語句判斷xy儲存的值按照xy值得不同呼叫不用的函式
case
's':
case
'a':
case
'd':
case
'w':
case
's':
case
'a':
case
'd':
case up:
case down:
case left:
case right:}}
}void
d_doot()
//判斷陣列的使用情況。保證遊戲的可玩性。
}void
d_body()
//判斷蛇頭和蛇身是否重合 }}
void
d_wall()
//判斷蛇頭是否和牆體重合
}void
d_food()
//判斷蛇頭和食物的座標是否相同若相同蛇身加一
}void
foods()
//隨機生成食物的函式
else}}
move
(food.x,food.y)
;printf
("■");
}void
original()
//起到列印牆體並且給所有變數賦初值的作用。
for(y=
0;y<
24;y++
)for
(;x>
0;x-=2)
for(
;y>
0;y-=1)
head.x[0]
=12; head.y[0]
=12;move
(head.x[x]
,head.y[x]);
printf
("■");
foods()
;get()
;}voidup(
)//改變儲存位置陣列的數值
}void
down()
//改變儲存位置陣列的數值
}void
left()
//改變儲存位置陣列的數值
}void
right()
//改變儲存位置陣列的數值
}void
speed()
//判斷開始時s中輸入的數值並且使蛇頭列印蛇尾抹除產生延遲
else
if(s==2)
else
if(s==3)
else
}void
shead()
//列印新的蛇頭
void
spp(
)//抹除蛇的尾巴
void
common()
//將零碎的函式放在之中,簡化**的輸入量。
到這裡就結束了,是在是不想寫下去了,需要改進的地方大家可以告訴我。我會虛心改進的!!! 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檔案,讀取最高紀錄 ...