版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、先是效果圖:主菜單:Inixl時E:Sf建:fc件夾輸閃舌盤比卄誡品謐羅斷方塊I觸12弄個羅期方址5l.e方is.斯賽置行壽羅選開-請12345助出幫退zl游戲:時新建立件夾3閃云盤比卄成品I燼穿廝方?jīng)Q訶ek殆從俄羅期方繪L5.l.ezeJni2d時新建立件夾3閃云盤比卄成品I燼穿廝方?jīng)Q訶ek殆從俄羅期方繪L5.l.ezeJni2d搜狗拼皇設(shè)置:錯誤處理:(兀土錯呃!1?系我們解決這個問題;了條錯誤信息匸錯誤碼是:無袪打幵或找不到設(shè)置文件時E:Sf建:fc件夾輸閃舌盤比卄誡品謐羅斷方喪I觸酸匸謐羅期方塊1一5.l.e你可以選祥以下操作:庫重啟程存冬以默需殳聲重啟程序,3-冋設(shè)置和藪據(jù)文件寫展默
2、認(rèn)設(shè)置然后重啟4-退出627行,代碼如下:#ineludeviostream.h#ineludevconio.h#ineludevstdio.h#ineludevwindows.h#ineludevfstream.h#ineludevtime.h#ineludevestring#pragmaeomment(lib,winmm.lib)定義方塊#defineNO0#defineSQR1碰撞檢測#defineOK0#defineCANTMOVE1方向#defineUP0#defineDOWN1#defineLEFT2#defineRIGHT3/錯誤碼#defineno_enough_memory0
3、#defineset_no_found1#definedat_no_found2#defineerror_argument3/函數(shù)聲明/模塊voidplay();開始游戲voidsets();設(shè)置voidhighscores();排行榜voidcopyright。;/作者/功能voidmapsetup();準(zhǔn)備地圖boolnewsqr();放置方塊,返回是否游戲結(jié)束intmove(intdirection);移動方塊,返回定義表voidmovetomap();把當(dāng)前方塊移動到地圖上intwholeline();檢查是否組成了一層,返回層數(shù),-1表示沒有voiddeleteline(intwhi
4、ch);/刪除一行voidendup();/結(jié)束游戲,清理內(nèi)存/顯示voidshow();/刷新畫面voidshowmenu(char*menu);顯示菜單/文件voidloadset();加載設(shè)置voidsaveset();保存設(shè)置voidloadhs();加載排行榜booladdscores(intscore,charname50);增加一個分?jǐn)?shù),返回是否是高分voidsavehs();保存排行榜/坐標(biāo)變換intget(intx,inty);voidset(intx,inty,intdate);/結(jié)構(gòu)/設(shè)置structintxs,ys;屏幕大小intspeed;/速度charsqr3,no
5、3,frame3;方塊、空白處、邊框的樣式gameset;/排行榜structcharname50;intscore;rating10;/全局變量/變量int*map=NULL;地圖boolnow44;當(dāng)前方塊intxnow,ynow;當(dāng)前位置intguide;/分?jǐn)?shù)/常量constboolshap744=形狀0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
6、0,1,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,;constcharerrword450=程序沒能取得足夠的內(nèi)存,”無法打開或找不到設(shè)置文件set.ini,”無法打開或找不到排行榜數(shù)據(jù)highscore.dat,您設(shè)置的參數(shù)太大或者太小;/控制臺HANDLEhout;/控制臺句柄COORDcurpos=0,0;光標(biāo)坐標(biāo)/主函數(shù)intmain()start1:tryhout=GetStdHandle(STD_OUTPUT_HANDLE);獲取控制臺句柄,以便移動光標(biāo)srand(time
7、(0);用當(dāng)前時間初始化隨機數(shù)生成器loadset();加載loadhs();start2:while(1)showmenu(俄羅斯方塊n請選擇菜單:n1.開始游戲n2.設(shè)置n3.排行榜n4.幫助n5.保存并退出n”);switch(getch()case1:system(cls);/play函數(shù)覆蓋界面而不是清屏,所以需要先清屏play();break;case2:sets();break;case3:highscores();break;case4:copyright();break;case5:savehs();保存數(shù)據(jù)saveset();return0;catch(interrnum)
8、/錯誤處理system(cls);printf(o(_v)o出錯啦!n程序收到了一條錯誤信息,錯誤碼是:d(%s)n您可以聯(lián)系我們解決這個問題。n”,errnum,errworderrnum);printf(n你可以選擇以下操作:n1.重啟程序n2.以默認(rèn)設(shè)置重啟程序n3.向設(shè)置和數(shù)據(jù)文件寫入默認(rèn)設(shè)置然后重啟n4.退出n);switch(getch()case1:gotostart1;case2:gameset.xs=20;gameset.ys=20;gameset.speed=100;strcpy(gameset.sqr,);無法直接給數(shù)組復(fù)制數(shù)據(jù)strcpy(gameset.no,);st
9、rcpy(gameset.frame,:);inti;for(i=0;iv10;i+)strcpy(,未命名”),ratingi.score=0;gotostart2;case3:ofstreamfout;fout.open(set.ini);foutvv20n20n100nn:n;fout.close();fout.clear();fout.open(highscore.dat);intj;for(j=0;j10;j+)foutvv未命名nOn;gotostart1;default:return-1;/返回異常退出return0;voidplay()mapsetup(
10、);初始化/*for(inti=0;iv20;i+)set(i,19,SQR);*/while(newsqr()不斷新建方塊,直到返回NOwhile(move(DOWN)!=CANTMOVE)每次向下移動方塊,直到不能移動guide+=1;向下移動一次加1分show();顯示while(kbhit()不斷處理鍵盤,直到?jīng)]有按鍵switch(getch()獲取按鍵casew:move(UP);break;cases:move(DOWN);break;casea:move(LEFT);break;cased:move(RIGHT);break;Sleep(gameset.speed);/延時mov
11、etomap();退出循環(huán)時無法向下移動,把當(dāng)前方塊移動到地圖上intline;while(line=wholeline()!=-1);不斷檢查是否出現(xiàn)整行,直到?jīng)]有deleteline(line);刪除整行endup();無法新建方塊,游戲結(jié)束return;結(jié)束/函數(shù)定義voidmapsetup()map=newintgameset.xs*gameset.ys;申請內(nèi)存if(!map)如果申請到0throwno_enough_memory;拋出異常/初始化地圖inti,j;for(i=0;igameset.xs;i+)for(j=0;j=0&xvgameset.xs&y=0&yvgamese
12、t.ys)/是否在地圖范圍內(nèi)return*(map+y*gameset.xs+x);提取數(shù)據(jù)elsereturnSQR;/虛擬地圖側(cè)面和底部有方塊voidset(intx,inty,intdate)if(x=0&xvgameset.xs&y=0&yvgameset.ys)/if(x0&xvgameset.xs&y0&yvgameset.ys)/是否在地圖范圍內(nèi)*(map+y*gameset.xs+x)=date;寫入return;boolnewsqr()inti,j;for(i=0;iv4;i+)檢查下一個方塊要出現(xiàn)的地方是否有方塊if(get(gameset.xs/2+i,0)=SQR)re
13、turnfalse;/有方塊,創(chuàng)建失敗intwhich=rand()%7;隨機選擇形狀for(i=0;iv4;i+)for(j=0;jv4;j+)nowij=shapwhichij;復(fù)制形狀for(i=rand()%4;i0;i-)/旋轉(zhuǎn)隨機0-3次move(UP);xnow=gameset.xs/2;設(shè)置坐標(biāo)ynow=-4;returntrue;intmove(intdirection)intx,y;儲存坐標(biāo)偏移量inti,j;switch(direction)caseUP:/上鍵是旋轉(zhuǎn)boolnewshap44;儲存旋轉(zhuǎn)后的圖形for(i=0;iv4;i+)for(j=0;jv4;j+)n
14、ewshapij=nowj3-i;/坐標(biāo)變換for(i=0;iv4;i+)for(j=0;jv4;j+)if(newshapij=true&get(xnow+i,ynow+j)=SQR)對新圖形碰撞檢測returnCANTMOVE;/不能旋轉(zhuǎn)for(i=0;i4;i+)for(j=0;j4;j+)nowij=newshapij;檢測完畢,復(fù)制形狀returnOK;caseDOWN:/先記錄坐標(biāo)的偏移量,確定沒有碰撞以后移動x=0,y=1;break;caseLEFT:x=-1;y=0;break;caseRIGHT:x=1,y=0;break;for(i=0;i4;i+)for(j=0;j4;
15、j+)if(nowij=true&get(i+x+xnow,j+y+ynow)=SQR)如果和地圖上的方塊重合(邊緣以外get函數(shù)也返回SQR,不必單獨處理)/if(get(i+x,j+y)=SQR)/if(nowi+xj+y=SQR)returnCANTMOVE;/無法移動xnow+=x;檢測完畢,更改坐標(biāo)ynow+=y;returnOK;voidmovetomap()guide+=10;成功放置方塊,加10分inti,j;for(i=0;i4;i+)for(j=0;j4;j+)if(nowij=true)set(xnow+i,ynow+j,SQR);/復(fù)制方塊到地圖return;intwh
16、oleline()inti,j;boolwhole;/儲存是否是整行for(j=0;jgameset.ys;j+)/for(i=0;igameset.ys;i+)whole=true;假設(shè)是整行for(i=0;igameset.xs;i+)/for(j=0;j=0;i-)for(j=0;j=xnow&iv(xnow+4)&j=ynow&jv(ynow+4)/if(i=xnow&iv(xnow+1)&j=ynow&jv(ynow+1)在當(dāng)前方塊范圍內(nèi)if(nowi-xnowj-ynow=true)/如果有方塊printf(gameset.sqr);elseif(get(i,j)=SQR)如果地圖
17、有方塊printf(gameset.sqr);else/否則,空白printf(gameset.no);else/不在當(dāng)前方塊范圍內(nèi),輸出地圖if(get(i,j)=SQR)有方塊printf(gameset.sqr);else/否則,沒方塊printf(gameset.no);printf(:n);右邊框和換行for(i=0;ivgameset.xs+2;i+)下邊框printf(gameset.frame);printf(n);return;voidshowmenu(char*menu)inti,j;charoutput100;儲存本行的文字system(cls);for(i=0;igam
18、eset.xs;i+)printf(gameset.frame);/輸出上邊框printf(n);i=0,j=0;while(*menu!=0)printf(gameset.frame);/左邊框for(i=0,j=0;*(menu+i)!=n&*(menu+i)!=O;i+,j+)復(fù)制本行if(*(menu+i)=t)如果是制表符,輸出空格直到列數(shù)是6的倍數(shù)for(;j%6!=5;j+)outputj=gameset.no0;j-;elseoutputj=*(menu+i);直接復(fù)制menu=menu+i+1;移動扌旨針至U下一行for(;jvgameset.xs*2-6;j+)用空格填充本
19、行的后面outputj=gameset.no0;outputj=O;/結(jié)束標(biāo)記printf(gameset.no);行首空格,讓界面更好看printf(output);/輸出內(nèi)容printf(gameset.frame);/右邊框printf(n);換行Sleep(IOO);/延時,顯示漸漸出現(xiàn)的效果for(i=O;ivgameset.xs;i+)printf(gameset.frame);/輸出下邊框printf(n);return;voidsets()charword1000;要顯示的文字while(1)/使用符號告訴編譯器下一行應(yīng)該和本行連起來再編譯sprintf(&word0,設(shè)置菜單n請選擇你要更改的選項:n屏幕大小:nt1.寬度:dnt2.高度:dn速度:nt3.方塊下落速度:dn顯示:nt4.方塊形狀:%snt5.空白區(qū)域形狀:%snt6.邊框形狀:%sn7.返回n,gameset.xs,gameset.ys,gameset.speed,gameset.sqr,gameset.no,gameset.frame);showmenu(&word0);charchoice=getch();showmenu(”請輸入改變后的參數(shù):);顯示提示switch(choice)/分情
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保設(shè)備安裝承包合同樣本4篇
- 2025年個人創(chuàng)業(yè)風(fēng)險投資合同范本3篇
- 二零二五版模具維修保養(yǎng)與質(zhì)量保障合同3篇
- 2020-2025年中國山蒼子油行業(yè)競爭格局分析及投資規(guī)劃研究報告
- 2025年個人黑色奔馳豪華車型租賃合同4篇
- 2025年度個人住宅門窗安裝質(zhì)量保證合同3篇
- 二零二五年度農(nóng)藥生產(chǎn)許可證申請代理合同4篇
- 2025年度頁巖磚建筑一體化應(yīng)用供應(yīng)合同4篇
- 2025年度拆除工程房屋安全評估及施工監(jiān)管合同3篇
- 2025年度門窗定制項目融資租賃合同4篇
- 無人化農(nóng)場項目可行性研究報告
- 《如何存款最合算》課件
- 社區(qū)團支部工作計劃
- 拖欠工程款上訪信范文
- 2024屆上海市金山區(qū)高三下學(xué)期二模英語試題(原卷版)
- 學(xué)生春節(jié)安全教育
- 《wifi協(xié)議文庫》課件
- 《好東西》:女作者電影的話語建構(gòu)與烏托邦想象
- 教培行業(yè)研究系列(七):出國考培的再研究供需變化的新趨勢
- GB/T 44895-2024市場和社會調(diào)查調(diào)查問卷編制指南
- 道醫(yī)館可行性報告
評論
0/150
提交評論