用vc6 0實現用C語言編寫乙個簡單貪吃蛇遊戲

2021-10-13 05:23:57 字數 4288 閱讀 9540

控制鍵:↑↓←→

#include

#include

// stdlib.h裡面定義了五種型別、一些巨集和通用工具函式。 型別例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 巨集例如exit_failure、exit_success、rand_max和mb_cur_max等等;

// 常用的函式如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。

// 具體的內容你自己可以開啟編譯器的include目錄裡面的stdlib.h標頭檔案看看。

#include

//windows程式設計標頭檔案

標頭檔案之所重要,是因為標頭檔案封裝了許多庫函式以及一些類,將一些複雜的工作由庫函式處理,

標頭檔案中包含了windef.h、winnt.h、winbase.h、winuser.h、wingdi.h等標頭檔案,涉及到了windows核心api,圖形介面介面,圖形裝置函式等重要的功能

#include

#include

//控制台輸入輸出標頭檔案

//控制台輸入輸出)的簡寫,其中定義了通過控制台進行資料輸入和資料輸出的函式,主要是一些使用者通過按鍵盤產生的對應操作,比如getch()函式等等。

#ifndef __cplusplus

//一般用於將c++**以標準c形式輸出(即以c的形式被呼叫),這是因為c++雖然常被認為是c的超集,但是c++的編譯器還是與c的編譯器不同的。c中呼叫c++中的**這樣定義會是安全的。

typedef

char bool;

//使用 typedef宣告的名稱將占用與其他識別符號相同的命名空間(不包括語句標籤)。 因此,它們不能使用與前乙個宣告的名稱相同的識別符號(除了在類型別宣告中.

#define false 0

//錯誤為0

#define true 1

//正確為1

#endif

//#endif

//即可以設定不同的條件,在編譯時編譯不同的**,預編譯指令中的表示式與c語言本身的表示式基本一至如邏輯運算、算術運算、位運算等均可以在預編譯指令中使用。

//之所以能夠實現條件編譯是因為預編譯指令是在編譯之前進行處理的,通過預編譯進行巨集替換、條件選擇**段,然後生成最後的待編譯**,最後進行編譯。

//將游標移動到控制台的(x,y)座標點處

void

gotoxy

(int x,

int y)

#define snakesize 100

//蛇的身體最大節數

#define mapwidth 78

//寬度

#define mapheight 24

//高度

//食物的座標

struct

food;

//蛇的相關屬性

struct

snake;

//繪製遊戲邊框

void

drawmap()

;//隨機生成食物

void

createfood()

;//按鍵操作

void

keydown()

;//蛇的狀態

bool snakestatus()

;//從控制台移動游標

void

gotoxy

(int x,

int y)

;int key =72;

//表示蛇移動的方向,72為按下「↑」所代表的數字

//用來判斷蛇是否吃掉了食物,這一步很重要,涉及到是否會有蛇身移動的效果以及蛇身增長的效果

int changeflag =0;

int sorce =0;

//記錄玩家的得分

int i;

void

drawmap()

//列印左右邊框

for(i =

1; i < mapheight; i++

)//隨機生成初試食物

while(1

)//將游標移到食物的座標處列印食物

gotoxy

(food.x, food.y)

;printf

("*");

//初始化蛇的屬性

snake.len =3;

snake.speed =

200;

//在螢幕中間生成蛇頭

snake.x[0]

= mapwidth /2+

1;//x座標為偶數

snake.y[0]

= mapheight /2;

//列印蛇頭

gotoxy

(snake.x[0]

, snake.y[0]

);printf

("■");

//生成初試的蛇身

for(i =

1; i < snake.len; i++

)//列印完蛇身後將游標移到螢幕最上方,避免游標在蛇身處一直閃爍

gotoxy

(mapwidth -2,

0);return;}

void

keydown()

/* *蛇移動時候先擦去蛇尾的一節

*changeflag為0表明此時沒有吃到食物,因此每走一步就要擦除掉蛇尾,以此營造乙個移動的效果

*為1表明吃到了食物,就不需要擦除蛇尾,以此營造乙個蛇身增長的效果

*/if

(changeflag ==0)

//將蛇的每一節依次向前移動一節(蛇頭除外)

for(i = snake.len -

1; i >

0; i--

)//蛇當前移動的方向不能和前一次的方向相反,比如蛇往左走的時候不能直接按右鍵往右走

//如果當前移動方向和前一次方向相反的話,把當前移動的方向改為前一次的方向

if(pre_key ==

72&& key ==80)

key =72;

if(pre_key ==

80&& key ==72)

key =80;

if(pre_key ==

75&& key ==77)

key =75;

if(pre_key ==

77&& key ==75)

key =77;

/** *控制台按鍵所代表的數字

*「↑」:72

*「↓」:80

*「←」:75

*「→」:77

*///判斷蛇頭應該往哪個方向移動

switch

(key)

//列印出蛇頭

gotoxy

(snake.x[0]

, snake.y[0]

);printf

("■");

gotoxy

(mapwidth -2,

0);//由於目前沒有吃到食物,changflag值為0

changeflag =0;

return;}

void

createfood()

}//隨機生成的食物不能橫座標為奇數,也不能在蛇身,否則重新生成

if(flag && food.x %2==

0)break;}

//繪製食物

gotoxy

(food.x, food.y)

;printf

("*");

snake.len++

;//吃到食物,蛇身長度加1

sorce +=10

;//每個食物得10分

snake.speed -=5

;//隨著吃的食物越來越多,速度會越來越快

changeflag =1;

//很重要,因為吃到了食物,就不用再擦除蛇尾的那一節,以此來造成蛇身體增長的效果

}return;}

bool snakestatus()

return true;

}int

main()

gotoxy

(mapwidth /

2, mapheight /2)

;printf

("game over!\n");

gotoxy

(mapwidth /

2, mapheight /2+

1);printf

("本次遊戲得分為:%d\n"

, sorce)

;sleep

(500);

return0;

}

VC6 0中gdiPlus的使用以及乙個小例子

2.在tool,option,direction,include files下設定標頭檔案路徑 microsoft sdk include,在tool,option,direction,libaray files下設定lib路徑 microsoft sdk sdk8 lib,在project,set...

VC6 0中gdiPlus的使用以及乙個小例子

vc6.0中gdiplus的使用以及乙個小例子 2.在tool,option,direction,include files下設定標頭檔案路徑 microsoft sdk include,在tool,option,direction,libaray files下設定lib路徑 microsoft s...

C語言 編寫乙個日曆

題目 列印乙個月份的日曆。分析 首先列印乙個月份的日曆,要設定乙個基準年,並且要知道這一年的一月一號是週幾 求得當年的一月一號是週幾 在求得當月的第一天是週幾。define crt secure no warnings 1 include include 某個月的日曆 int months 2 13...