




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市交通需求預(yù)測(cè)咨詢重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 應(yīng)對(duì)工作中突發(fā)事件的預(yù)案計(jì)劃
- 資源共享在班級(jí)工作中的重要性計(jì)劃
- 搶先獲取2025年VB考試核心試題及答案
- 倉庫成本控制與管理策略計(jì)劃
- 2024年惠州市博羅縣建工集團(tuán)有限公司招聘真題
- 班級(jí)輪值制度的設(shè)計(jì)與實(shí)施計(jì)劃
- 2024年安徽省農(nóng)業(yè)農(nóng)村廳下屬事業(yè)單位真題
- 2024年河南循環(huán)科技產(chǎn)業(yè)集團(tuán)招聘筆試真題
- 2024年赤峰中色鋅業(yè)有限公司招聘筆試真題
- 涂裝工考試:中級(jí)涂裝工考點(diǎn)(三)
- 醫(yī)院重癥監(jiān)護(hù)室感染監(jiān)控指南
- 2024年高中英語衡水體書法練字字帖
- 融資融券實(shí)務(wù)
- 人教版二年級(jí)下冊(cè)口算題天天練1000道可打印帶答案
- 2022北京東城六年級(jí)畢業(yè)考英語試題含答案
- 《藥物分析與檢驗(yàn)技術(shù)》課件-異煙肼中游離肼的檢查方法
- 手術(shù)室的健康教育
- 海水的淡化技術(shù)及應(yīng)用
- 食堂餐飲服務(wù)方案
- 中職學(xué)校設(shè)計(jì)說明
評(píng)論
0/150
提交評(píng)論