1 C語言陣列版貪吃蛇

2021-10-04 05:52:12 字數 4961 閱讀 5802

#涉及函式

標頭檔案函式名

解釋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檔案,讀取最高紀錄 ...