用c編寫貪吃蛇全過程_第1頁
用c編寫貪吃蛇全過程_第2頁
用c編寫貪吃蛇全過程_第3頁
用c編寫貪吃蛇全過程_第4頁
用c編寫貪吃蛇全過程_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C語言編寫貪吃蛇此貪吃蛇是我剛學(xué)習(xí)c語言的時(shí)候做的,很手生,寫得也不好,而且bug比較多,但做為一般的畢業(yè)設(shè)計(jì)或者是課堂設(shè)計(jì)是夠用了,而且因?yàn)椴皇呛軐I(yè),但還是希望各位童鞋不要抄襲,畢竟知識(shí)是自己的,在看懂了的前提下,自己可以參考著寫一遍,弄懂了才是自己的。廢話不說了,大家都懂,現(xiàn)在進(jìn)入正題。在vs2010環(huán)境下編繹通過,但不保證在其他平臺(tái)上能通過。僅做為參考。具體能實(shí)現(xiàn)的功能:方向控制,吃食物,食物有兩種,有毒的,吃了會(huì)減少生命值,還有一種是無毒的,吃了會(huì)長(zhǎng)身體,撞墻死亡,碰身體死亡,死亡重新開始游戲。首先附上一張游戲截圖,僅為初學(xué)者參考,高手可以點(diǎn)擊右上角,謝謝!全部代碼為在三個(gè)文件里面,

2、分別為header.h,src.c, main.c,下面分別發(fā)出代碼及簡(jiǎn)單的注解:一 header.h,這是存放的頭文件以及函數(shù)聲明,就不解釋了,直接放代碼;#include<stdio.h>#include<windows.h>#include<math.h>#include <conio.h>#include <string.h>int xy250;int i;int food2;int pois25;int wall(void);int init(int len);/int way(int flag);int mov(int k

3、ey);int print(int ret);int run(int ret);int foods(void);int grow(void);int direction(void);int die(void);int or(void);int poi(void);int gotoxy(int x,int y);二、資源文件src.c,這里存放的是函數(shù)的實(shí)現(xiàn)方法:#include"header.h"int flag=0;int len=5;int key=0;char name="name"int core=0;int life=3;/初始化墻int wa

4、ll(void)int i=0;int j=0;for(i=0;i<30;i+)for(j=0;j<30;j+)if(i=0)printf("* ");if(j=29)printf("n");if(i>0&&i<29)if(j=0)printf("* ");if(j=29)printf("*n");if(j>0&&j<29)printf(" ");if(i=29)printf("* ");/初始化蛇屬性int

5、 init(int len)life=3;core=0;flag=0;len=5;key=0;gotoxy(8,15);printf("請(qǐng)輸入你的大名,按Enter鍵開始游戲:");scanf("%s",&name);gotoxy(62,2);printf("-");gotoxy(62,4);printf("name:%s",name);gotoxy(8,15);printf(" ");gotoxy(62,6);printf("方向控制說明:");gotoxy(62,

6、7);printf("w:向上 s:向下");gotoxy(62,8);printf("a:向左 d: 向右");gotoxy(62,10);printf("表示食物");gotoxy(62,11);printf("¤表示有毒");gotoxy(62,12);printf("分?jǐn)?shù):%d",core);gotoxy(62,14);printf("生命值:");for(i=0;i<3;i+)printf("");xy00=22;xy10=22;

7、for(i=1;i<len;i+)xy0i=xy0i-1-2;xy1i=xy1i-1;print(len);for(i=0;i<5;i+)pois0i=2*(rand()%(28)+1);pois1i=rand()%(28)+1;gotoxy(pois0i,pois1i);printf("¤");/蛇移動(dòng)int run(int ret)for(i=ret-1;i>0;i-)xy0i=xy0i-1;xy1i=xy1i-1;/打印蛇int print(int ret)int i=0;for(i=0;i<ret;i+)if(i=0)gotoxy(

8、xy00,xy10);printf("");elsegotoxy(xy0i,xy1i);printf("");/定義窗口屬性int gotoxy(int x,int y)COORD coord = x, y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);/蛇移動(dòng)int mov(int k)switch(k)case 1:if(2 != flag )run(len);xy00=xy00-2;flag=1;break;case 2:if(1 != flag)run(len);

9、xy00=xy00+2;flag=2;break;case 3:if(4 != flag)run(len);xy10=xy10-1;flag=3;break;case 4:if(3 != flag)run(len);xy10=xy10+1;flag=4;break;/生成食物int foods(void)food0=2*(rand()%(28)+1);food1=rand()%(28)+1;gotoxy(food0,food1);printf("");/蛇吃食物并成長(zhǎng)int grow(void)if(xy00=food0&&xy10=food1)len+;f

10、oods();core=core+100;gotoxy(62,12);printf("分?jǐn)?shù):%d",core);return len;/根據(jù)鍵值獲取蛇的移動(dòng)方向int direction(void)if(_kbhit()key=_getch();if('a'=key && flag!=2)flag=1;else if('d'=key && flag!=1)flag=2;else if('w'=key && flag!=4)flag=3;else if('s'=ke

11、y && flag!=3)flag=4;return flag;/撞強(qiáng)和碰尾死亡方式int die(void)if(xy00=0 | xy00=58 |xy10=0 |xy10=29)return -1;for(i=1;i<len;i+)if(xy00=xy0i && xy10=xy1i)return -2;/死亡后由玩家決定是否繼續(xù)游戲int or(void)int key;while(1)if(_kbhit()key=_getch();if('y'=key)return 1;if('n'=key)return 2;/吃有

12、毒的食物,生命減少至0;int poi(void)for(i=0;i<5;i+)if(xy00=pois0i && xy10=pois1i)life-;if(life=0)gotoxy(62,14); printf(" ");gotoxy(62,14);printf("生命值:");return -3;gotoxy(62,14); printf(" ");gotoxy(62,14);printf("生命值:");for(i=1;i<=life;i+)printf(""

13、);pois0i=2*(rand()%(28)+1);pois1i=rand()%(28)+1;gotoxy(pois0i,pois1i);printf("¤");三、主函數(shù)main.c文件#include"header.h"int main(void)int len=5;int i;int flag=2;int kill;int ret;int ret2;system("COLOR 0C");/窗口顏色system("MODE CON: COLS=99 LINES=30");/窗口寬度和高度in:len

14、=5;flag=2;/初始化移動(dòng)方向kill=1;ret=0;ret2=0;gotoxy(0,0);/光標(biāo)移動(dòng)到坐標(biāo)(0,0)的位置wall();/打印圍墻/初始化蛇init(5);/初始化蛇/測(cè)試語句/gotoxy(58,29);/printf("這");foods();/調(diào)用生成食物的函數(shù),生成一個(gè)食物while(1)gotoxy(xy0len-1,xy1len-1);printf(" ");/蛇移動(dòng)時(shí),蛇尾前移時(shí)擦去原蛇尾mov(flag);/控制蛇移動(dòng)方向len=grow();/蛇生長(zhǎng),并返回蛇的長(zhǎng)度ret2=poi();/蛇吃到有毒的食物,如果

15、生命值為0,剛死亡if(ret2=-3)goto out3;flag=direction();/根據(jù)鍵值,得到蛇移動(dòng)方向kill=die();/蛇死亡判斷,撞墻和碰尾死亡;print(len);/打印當(dāng)前長(zhǎng)度的蛇if(-1=kill)goto out1;/撞墻死亡if(-2=kill)goto out2;/碰尾死亡Sleep(300-5*len);/簡(jiǎn)單延時(shí)out1:gotoxy(15,15);printf("恭喜你撞墻而死!按y重新開始,按n結(jié)束游戲");in2:ret=or();/死亡后由玩家決定是否繼續(xù)游戲,按y繼續(xù)游戲,按n退出游戲if(1=ret)/復(fù)活后游戲,把

16、蛇身置空for(i=0;i<50;i+)xy0i=NULL;xy1i=NULL;goto in;/回到游戲開始的地方,開始游戲if(2=ret)goto _out;/退出游戲while(1);out2:gotoxy(15,15);printf("恭喜你碰尾而死!按y重新開始,按n結(jié)束游戲");goto in2;out3:gotoxy(15,15);printf("恭喜你中毒而死!按y重新開始,按n結(jié)束游戲");goto in2;while(1);_out:return -1;別外附上一些必要的關(guān)鍵代碼:#include <windows.h&

17、gt;#include <math.h>void gotoxy(int x, int y)/光標(biāo)跳轉(zhuǎn)COORD coord = x, y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);/隨機(jī)生成坐標(biāo)rand()%(ORDINATE_2-ORDINATE_1)/窗口屬性設(shè)置system("COLOR 09");system("MODE CON: COLS=99 LINES=27");/得到鍵盤輸入/key = _getch();if (_kbhit()/有輸入/

18、是否按下按鍵,并彈起以及附上控制臺(tái)的關(guān)鍵代碼:#include "stdio.h"#include "Windows.h"int main() HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); / 獲取控制臺(tái)句柄 SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED); / 設(shè)置為紅色 printf("把這句話顏色變成紅色n"); SetConsoleTextAttribute(handle, FORE

19、GROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);/ 設(shè)置為黃色 printf("把這句話顏色變成黃色n");0.設(shè)置控制臺(tái)輸出行數(shù)和列數(shù)system("mode con:cols=100 lines=20000");1.改變整個(gè)控制臺(tái)的顏色用 system("color 0A");其中color后面的0是背景色代號(hào),A是前景色代號(hào)。各顏色代碼如下:0=黑色1=藍(lán)色2=綠色3=湖藍(lán)色4=紅色5=紫色6=黃色7=白色8=灰色9=淡藍(lán)色A=淡綠色B=淡淺綠色C=淡紅色D=淡紫色E=

20、淡黃色F=亮白色2.改變下一個(gè)輸出或者輸入字體和背景的顏色采用SetConsoleTextAttribute函數(shù),如White on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),F(xiàn)OREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);Red on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),F(xiàn)OREGROUND_INTENSITY |FOREG

21、ROUND_RED);Green on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),F(xiàn)OREGROUND_INTENSITY |FOREGROUND_GREEN);Yellow on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),F(xiàn)OREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN);Blue on Black:SetConsoleTextAttribute(GetStdHandl

22、e(STD_OUTPUT_HANDLE),F(xiàn)OREGROUND_INTENSITY |FOREGROUND_BLUE);Magenta on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),F(xiàn)OREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_BLUE);Cyan on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),F(xiàn)OREGROUND_INTENSITY |FOREGROUND_GREEN |

23、FOREGROUND_BLUE);Black on Gray:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY);Black on White:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);Red on White:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED);等等。需要引入頭文件:win

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論