版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.一 、 題目闡述:通過本學(xué)期對c語言的學(xué)習(xí),對程序編譯有了初步的了解,并運(yùn)用了各種函數(shù)(如文件包含,宏定義,結(jié)構(gòu)體,函數(shù)調(diào)用等)編寫了這個推箱子游戲。二 、 設(shè)計(jì)思路: 程序中“3”代表墻壁,“2”代表箱子,“4”代表目的地,“0”代表空,“5”代表人+目的地,“ 1“ 代表人,“6“代表箱子+目的地,用“enter”鍵選擇關(guān)數(shù),按“p“鍵可以毀步,但最多只能毀5次。通過上下左右鍵實(shí)現(xiàn)箱子的上下左右移動,在可移動的范圍內(nèi),推送到目的地。在推動的過程中若徹底失敗,便按r鍵重新啟動游戲。三、主要解決問題的方法及技術(shù)關(guān)鍵1、 主要問題及解決方法函數(shù)的定義及調(diào)用光標(biāo)的定位設(shè)置處理問題光標(biāo)的定位設(shè)置處
2、理是通過void gotoxy(int x,int y)函數(shù)實(shí)現(xiàn)的。定位設(shè)置手段是通過型參x、y獲取定位點(diǎn),應(yīng)用int86的中斷調(diào)用完成光標(biāo)定位。 數(shù)組函數(shù),switch,if語句,for循環(huán)語句的應(yīng)用2、 技術(shù)關(guān)鍵光標(biāo)定位c語言中循環(huán)語句的使用 精品.c語言繪圖及定義函數(shù)的使用input name();char;printf(“nnplease input your name”)c=getchar();c!=y&c!=y&c!c!=y&c!=yintgd=detect,gm;精品.judgeide();key!=key-entercasekey=bio=key(0);bio=key(1)if
3、setbkcolor(bkcolor);idc=0idc=1game();break;viewrecord();bio=keyidc=2deleterecord=();bio=keyidc=3exit(0);精品.key=key_enterinti,i,flog;nextmission();time(&t1);break;flag=1flog=0;1ififthe end.四: 程序清單:#define max 2 /*游戲中總關(guān)數(shù)*/#define startx 180#define starty 80#define bkcolor black#define mancolor red#def
4、ine objectcolor yellow#define timeint 2#define starnum 300#define stepmax 5#include精品.#include#include#include#include#include#include#include#include#define key_r 0x1372#define key_up 0x4800#define key_enter 0x1c0d#define key_down 0x5000#define key_p 0x1970#define key_esc 0x11b#define key_right 0x4
5、d00#define key_left 0x4b00typedef struct starint x;int y;int c;star;star sstarnum;typedef struct recordchar name20;int second;struct time t;struct date d;record;record rmax;typedef struct cint x;int y;add;typedef struct aint x;int y;player;player p;char name20; /*進(jìn)入游戲時記錄玩家的姓名*/精品.time_t t1,t2; /*游戲結(jié)
6、束時的時間*/int ide; /*開始進(jìn)入游戲時,選擇菜單時返的功能號(1,2,3)*/int missionnum; /*玩家正在玩的關(guān)數(shù)*/int boxnum; /*目的地的個數(shù)*/int key; /*玩家按鍵*/int map1010; /*地圖.(空=0),(人=1),(箱子=2),(墻=3),(目的地=4),(人+目的地=5),(箱子+目的地=6)*/int stepnum;int directionkey; /*用來表示方向鍵最后一次按鍵*/int boxmovestepmax;int stepstepmax;/*函數(shù)定義*/void inputname();void ini
7、t();void mainmenu();void judgerecord();void writerecord();void judgeide();void drawmenu(int );void game();void initmission(int );void nextmission();void initpic(int ,int ,int );int move(add );void drawwall(int ,int );void drawback(int ,int );void drawbox(int ,int );void drawobject(int ,int );void dr
8、awman(int ,int );void drawstar();int judgewin();void initmission1();void initmission2();int timecome();void changestar();void inputname();void viewrecords();void deleterecords();void registerstep();void reverselymove();void moveback(add );void main()inputname();精品.init(); /*驅(qū)動顯卡*/srand(time(&t1);mai
9、nmenu(); /*畫開始菜單(1.start game 2.view records 3.delete records 4.exit game)*/void inputname()char c;clrscr(); do printf(nnplease input your name:); scanf(%s,name); printf(are you sure the name right(y/n):); do c=getch(); while(c!=y&c!=y&c!=n&c!=n); while(c!=y&c!=y);void init()int gd=detect,gm;initgra
10、ph(&gd,&gm,c:tc);void mainmenu()setbkcolor(bkcolor);cleardevice();/*drawstar(); /*畫開始菜單的背景畫面*/drawstar();ide=0,key=0;drawmenu(ide);do if(bioskey(1) /*有鍵按下則處理按鍵*/ key=bioskey(0); switch(key) case key_down: ide+;ide=ide%4;drawmenu(ide);break; case key_up: ide-;ide=(ide+4)%4;drawmenu(ide);break; 精品. el
11、se if(timecome() changestar(); /*改變背景*/ while(key!=key_enter);judgeide(); /*根據(jù)ide運(yùn)行不同的程序*/void judgeide()switch(ide) case 0:game();break; case 1:viewrecords();bioskey(0);mainmenu();break; case 2:deleterecords();viewrecords();bioskey(0);mainmenu();break; case 3:exit(0); void game()int i,j,flag;add ad
12、;missionnum=0;nextmission();do flag=0; key=bioskey(0); switch(key) case key_enter:nextmission();time(&t1);break; case key_up:ad.x=-1;ad.y=0;flag=1;directionkey=key;break; case key_down:ad.x=1;ad.y=0;flag=1;directionkey=key;break; case key_left:ad.x=0;ad.y=-1;flag=1;directionkey=key;break; case key_r
13、ight:ad.x=0;ad.y=1;flag=1;directionkey=key;break; case key_r:missionnum-;nextmission();break; case key_esc:mainmenu();break; case key_p:reverselymove();break; if(flag=1) if(move(ad) registerstep(); if(judgewin() judgerecord();nextmission(); while(1);void initmission(int n)精品.int i,j;for(i=0;i10;i+)
14、for(j=0;jmax) missionnum=1;else missionnum+;initmission(missionnum);setbkcolor(bkcolor);cleardevice();for(i=0;i10;i+) for(j=0;j10;j+) initpic(mapij,i,j);switch(missionnum) case 1:outtextxy(200,230,mission 1);break; case 2:outtextxy(200,230,mission 2);break; time(&t1);for(i=0;istepmax;i+) stepi=boxmo
15、vei=0;stepnum=0;精品.int move(add a)int flag;int i=stepnum%stepmax;switch(mapp.x+a.xp.y+a.y) case 0:mapp.xp.y-=1;initpic(mapp.xp.y,p.x,p.y); p.x=p.x+a.x;p.y=p.y+a.y; mapp.xp.y+=1;initpic(mapp.xp.y,p.x,p.y);flag=1;break; case 2:if(mapp.x+2*a.xp.y+2*a.y=0|mapp.x+2*a.xp.y+2*a.y=4) mapp.xp.y-=1;mapp.x+a.x
16、p.y+a.y=1;mapp.x+2*a.xp.y+2*a.y+=2; initpic(mapp.xp.y,p.x,p.y); initpic(mapp.x+a.xp.y+a.y,p.x+a.x,p.y+a.y); initpic(mapp.x+2*a.xp.y+2*a.y,p.x+2*a.x,p.y+2*a.y); p.x=p.x+a.x;p.y=p.y+a.y;flag=1;boxmovei=1; else flag=0; break; case 3:flag=0;break; case 4:mapp.xp.y-=1;initpic(mapp.xp.y,p.x,p.y); p.x=p.x+
17、a.x;p.y=p.y+a.y; mapp.xp.y+=1;initpic(mapp.xp.y,p.x,p.y);flag=1;break; case 6:if(mapp.x+2*a.xp.y+2*a.y=0|mapp.x+2*a.xp.y+2*a.y=4) mapp.xp.y-=1;mapp.x+a.xp.y+a.y=5;mapp.x+2*a.xp.y+2*a.y+=2; initpic(mapp.xp.y,p.x,p.y); initpic(mapp.x+a.xp.y+a.y,p.x+a.x,p.y+a.y); initpic(mapp.x+2*a.xp.y+2*a.y,p.x+2*a.x
18、,p.y+2*a.y); p.x=p.x+a.x;p.y=p.y+a.y;flag=1;boxmovei=1; else flag=0; break; return flag;void drawwall(int i,int j)drawback(i,j);setfillstyle(9,1);bar(startx+20*j-9,starty+20*i-9,startx+20*j+9,starty+20*i+9);void drawman(int i,int j)drawback(i,j);setcolor(mancolor);circle(startx+20*j,starty+20*i,9);a
19、rc(startx+20*j-3,starty+20*i-2,20,160,3);精品.arc(startx+20*j+4,starty+20*i-2,20,160,3);arc(startx+20*j,starty+20*i-2,220,320,7);void drawback(int i,int j)setfillstyle(1,bkcolor);bar(startx+20*j-9,starty+20*i-9,startx+20*j+9,starty+20*i+9);void drawobject(int i,int j)drawback(i,j);setcolor(objectcolor
20、);line(startx+20*j-9,starty+20*i,startx+20*j+9,starty+20*i);line(startx+20*j-9,starty+20*i-9,startx+20*j+9,starty+20*i+9);line(startx+20*j-9,starty+20*i+9,startx+20*j+9,starty+20*i-9);void drawbox(int i,int j)drawback(i,j);setfillstyle(9,3);bar(startx+20*j-9,starty+20*i-9,startx+20*j+9,starty+20*i+9
21、);void drawmenu(int j)int n;char *s4=1.start game,2.view records,3.delete records,4.exit game;settextstyle(0,0,1);setcolor(green);for(n=0;n4;n+)outtextxy(250,170+n*20,sn);setcolor(red);outtextxy(250,170+j*20,sj);void drawstar()int w,h,i,dotx,doty,color,maxcolor;w=getmaxx();h=getmaxy();maxcolor=getma
22、xcolor();for(i=0;istarnum;i+) si.x=1+random(w-1); si.y=1+random(h-1); si.c=random(maxcolor);精品. putpixel(si.x,si.y,si.c); void changestar()int i,maxcolor;maxcolor=getmaxcolor();for(i=0;istarnum;i+) si.c=random(maxcolor); putpixel(si.x,si.y,si.c); int timecome() static long tm, old; tm=biostime(0,tm)
23、; if(tm-oldtimeint) return 0; else old=tm; return 1; int judgewin()int n=0,i,j;for(i=0;i10;i+) for(j=0;j10;j+) if(mapij=6) n+;if(n=boxnum) return 1;else return 0;void initmission1() /*第九關(guān)*/int i,j;for(i=0;i10;i+) for(j=0;j10;j+) mapij=0;for(i=0;i=5;i+) map0i=3;for(i=5;i=7;i+) map2i=mapi-11=3;for(i=1
24、;i=4;i+) map6i=map5i+3=mapi0=3;精品.map37=map47=map15=3;for(i=2;i=4;i+) map2i=2;map34=map45=2;for(i=2;i=3;i+) map3i=map4i=4;map44=4;p.x=3;p.y=5;map35=1;boxnum=5;void initmission2()int i,j;for(i=0;i10;i+) for(j=0;j10;j+) mapij=0;for(i=1;i=5;i+) map0i=map6i=3;for(i=2;i=4;i+) map1i+3=mapi7=mapi+25=mapi0=
25、3;map11=map21=map50=map55=map46=map60=3;map24=map33=map42=map43=2;map23=map32=map34=map44=4;p.x=1;p.y=3;map13=1;boxnum=4;void viewrecords()file *fp;int i;setbkcolor(bkcolor);cleardevice();if(fp=fopen(record,r)=null) printf(nerror on open file!); getch(); exit(1); gotoxy(1,1);printf(ntttrecord inform
26、ationn);printf(record-holder achievement(s)t time(h:m:s)ttdate(y/m/d);for(i=0;imax;i+)精品. fseek(fp,i*sizeof(record),0); fread(&ri,sizeof(record),1,fp); printf(n%-10st%dtt %02d:%02d:%02dtt%02d/%02d/%02d,,ri.second,ri.t.ti_hour,ri.t.ti_min,ri.t.ti_sec,ri.d.da_year,ri.d.da_mon,ri.d.da_day);fclos
27、e(fp);gotoxy(10,25);printf(press any key to return mainmenu.);void deleterecords()int i;file *fp;fp=fopen(record,w);for(i=0;imax;i+) strcpy(,nameless); ri.second=0; gettime(&ri.t); getdate(&ri.d); for(i=0;imax;i+) fwrite(&ri,sizeof(record),1,fp);fclose(fp);void judgerecord()int i=missionnum-1
28、;time(&t2);if(ri.second=0|difftime(t2,t1)ri.second) gotoxy(10,3);printf(ttyou have broken the record); ri.second=difftime(t2,t1); strcpy(,name); gettime(&ri.t); getdate(&ri.d); writerecord(); else gotoxy(10,3);printf(ttyou have pass this mission);gotoxy(10,4);printf(ttpress any key continue.);getch();getch();精品.void writerecord()file *fp;int i=missionnum-1;fp=fopen(record,rt+);fseek(fp,i*sizeof(record),0);fwrite(&rmissionnum-1,sizeof(record),1,fp);fclose(fp);void regi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電氣大數(shù)據(jù)技術(shù)方法
- 勐海事業(yè)編招聘2022年考試模擬試題及答案解析18
- 渝西高鐵重慶明通牽(一期)220千伏外部供電工程環(huán)境影響報告表
- 深南電路招聘考試題及答案
- 熱處理考試題庫及答案
- 2026年深圳中考語文詩歌鑒賞專項(xiàng)試卷(附答案可下載)
- 2026年深圳中考英語核心素養(yǎng)檢測試卷(附答案可下載)
- 2026年深圳中考物理期末綜合測評試卷(附答案可下載)
- 廣東省汕頭市金平區(qū)2026年九年級上學(xué)期期末物理試題附答案
- 2026年深圳中考生物綠色植物的呼吸作用試卷(附答案可下載)
- 工程制藥專業(yè)畢業(yè)論文
- 2025年冷水機(jī)組考試題庫及答案
- 超聲科工作總結(jié)與計(jì)劃
- 旅居養(yǎng)老策劃方案
- T-CRHA 089-2024 成人床旁心電監(jiān)測護(hù)理規(guī)程
- DBJ52T 088-2018 貴州省建筑樁基設(shè)計(jì)與施工技術(shù)規(guī)程
- 專題15 物質(zhì)的鑒別、分離、除雜、提純與共存問題 2024年中考化學(xué)真題分類匯編
- 小區(qū)房屋維修基金申請范文
- 中職高二家長會課件
- 復(fù)方蒲公英注射液在痤瘡中的應(yīng)用研究
- 淮安市2023-2024學(xué)年七年級上學(xué)期期末歷史試卷(含答案解析)
評論
0/150
提交評論