版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、漢諾塔C源程序?qū)崿F(xiàn)及講解,制作人:賈維華、劉璐,漢諾塔,一、漢諾塔游戲簡介及其玩法 二、設(shè)計思路及其程序設(shè)計流程 三、源程序及其講解 四、游戲程序中應(yīng)注意的問題,一、漢諾塔游戲簡介及其玩法,1 游戲方法:點擊PLAY開始,會看到3個柱子和從大到小編著號碼的盤子,而且盤子自上而下半徑依次增大。成功把盤子順序不變的堆到最右邊的竹子旁為勝利。 2 游戲規(guī)則:一次只能移動一個木塊,盤子可以累起來,但是必須把半徑小的放在半徑大的上面。,3操作指南:在掛有圓盤的柱子上方點擊向上按鈕 W 或者 UPDOWN按鍵選中圓盤,按左右移動鍵移動到相對應(yīng)的柱子上方,按向下鍵放下圓盤,至此完成一次圓盤移動。,二、設(shè)計思
2、路及程序設(shè)計流程,1 設(shè)計思路:本設(shè)計中將盤子的數(shù)目設(shè)定為39個。設(shè)三個柱子A、B、C 移動的過程可分解為三個步驟: 第一步 把A上的n-1個圓盤移到B上; 第二步 把A上的一個圓盤移到C上; 第三步 把B上的n-1個圓盤移到C上; 其中第一步和第三步是類同的。 其實際思想是利用一個遞歸原理。,例如最簡單的三階漢諾塔移動方法: AC,AB,CB,AC,BA,BC,AC 2 程序設(shè)計流程圖:,三、源程序及其講解,1 源程序:見win tc 2 主程序構(gòu)架 main() INITIAL(); /*界面初始化*/ Start_Logo(); /*游戲啟動始界面*/ getch(); again: n
3、Step=0;/*判斷條件*/ Logo();/*進(jìn)入游戲*/ goto again; ,3. 主要程序分析,#include stdio.h #include conio.h #include stdlib.h #include dos.h #include time.h #include graphics.h #define S setcolor #define F setfillstyle #define R rectangle #define C circle #define B bar #define B3D bar3d #define L line #define O outtex
4、txy #define X 200 #define Y 20 int nStep=0; int nRecord7=7,15,31,63,127,255,511,nRec; int nDisk,nDisknum; int nBaseNum; float nDelay; char chMark15;,struct rod int nDisk105; int nDiskName10; tree3; /*/ ntoa(int s) int b15; int i,j; for (i=0;i=10;i+) bi=s%10; s/=10; bi=s; for(j=i;j=0;j-) chMarki-j=bj
5、+0; void INITIAL() /*GAME INITIAL*/ int gd=DETECT,gm=0; initgraph( ,void Start_Logo()/*啟動標(biāo)志*/ F(3,8); B(200,150,439,259); S(7); R(201,151,442,262); S(WHITE); R(199,149,440,260); settextstyle(DEFAULT_FONT,HORIZ_DIR,2); O(233,180,HANOI TOWER); S(1); O(232,179,HANOI TOWER); S(WHITE); settextstyle(DEFAU
6、LT_FONT,HORIZ_DIR,2); O(284,204,V 2.0); S(1); O(283,203,V 2.0); settextstyle(DEFAULT_FONT,HORIZ_DIR,1); S(WHITE); O(205,240,WERTE BY LiuLu AND JiaWeiHua!); O(204,239,WERTE BY LiuLu AND JiaWeiHua!); ,void FLASH_REC() int NUM,x1=8,x2=10; randomize(); for(NUM=0;NUM33;NUM+) F(1,rand()%16); B(x1,412,x2,4
7、14); x1=x1+20; x2=x2+20; void DrawRod() F(1,3); B(120,152,124,402); /*ROD1*/ B(320,152,324,402); /*ROD2*/ B(520,152,523,402); /*ROD3*/ F(6,LIGHTBLUE); B(119,151,123,401); B(319,151,323,401); B(519,151,522,401); ,void DRAW() F(1,8); B(6,80,633,100); /*BROWN BAR*/ B(6,415,633,479); F(1,7); /*GAME BACK
8、GROUND*/ B(7,102,632,410); S(15); R(6,0,633,479); S(15); settextstyle(DEFAULT_FONT,HORIZ_DIR,4); O(70,30,HANOI TOWER V2.0); S(9); O(71,31,HANOI TOWER V2.0); S(7); /*SHOW MESSAGE*/ settextstyle(DEFAULT_FONT,HORIZ_DIR,1); O(189,445,-MADE BY LiuLu AND JiaWeiHua-); L(165,419,165,425); S(12); O(170,419,M
9、ESSAGE:); /*MESSAGE BOX*/ S(7); O(20,419,PRESS ESC TO QUIT); ,void ShowInfo(int nRn,int nWhetherGetDisk) F(1,8); B(230,418,620,428); settextstyle(DEFAULT_FONT,HORIZ_DIR,1); S(CYAN); if(nRn=0 ,void ShowRecord() settextstyle(DEFAULT_FONT,HORIZ_DIR,1); F(1,8); B(78,82,90,94); ntoa(nDisk); S(YELLOW); O(
10、40,86,DISK:); S(15); O(80,86,chMark); B(348,82,360,94); ntoa(nRec); S(YELLOW); O(290,86,RECORD:); S(15); O(350,86,chMark); B(560,82,610,94); ntoa(nStep); S(YELLOW); O(520,86,STEP:); S(15); O(562,86,chMark); ,void FillDisk(int x1,int y1,int x2,int y2,int color,int color1) S(color); F(1,color); B3D(x1
11、,y1,x2,y2,5,5); F(1,color1); B3D(x1+1,y1+1,x2+1,y2+1,5,5); /*=END OF FUN FADEOUT=*/ void ClrScreen(void) int NUM; F(11,9); for (NUM=84;NUM476;NUM+) B(7,NUM,632,NUM+2); delay(20); int Ball(int nRn) F(1,7); B(20,105,609,130); F(1,RED); S(RED); C(118+(nRn*200),115,10); floodfill(118+(nRn*200),115, RED)
12、; ,void Quit() ClrScreen(); settextstyle(DEFAULT_FONT,HORIZ_DIR,2); S(WHITE); O(180,210,THANK YOU TO PLAY); O(180,230, 2010.6 ); S(RED); O(181,211,THANK YOU TO PLAY); O(181,231, 2010.6 ); O(181,260, ANY KEY TO QUIT ); S(GREEN); O(180,180,G A M E O V E R); S(15); O(181,181,G A M E O V E R); getch();
13、closegraph(); exit(0) ; ,int IsWin() int i,nStep_Sub_Rec; int nDiskNum=0; for (i=0;inDisk;i+) if(tree2.nDiski0=1) nDiskNum+; nStep_Sub_Rec=nStep-nRec; if (nDiskNum=nDisk) ShowInfo(4,0); /*IT CAN BE SET AS YOUR WAY*/ nBaseNum=nRec/9; if (nStep_Sub_Rec=nBaseNum)/*WIN*/ ClrScreen(); S(GREEN); settextst
14、yle(DEFAULT_FONT,HORIZ_DIR,3); O(230,200,YOU WIN); S(RED); O(231,201,YOU WIN); else if (nStep_Sub_Rec=nBaseNum*2) ClrScreen(); S(RED); settextstyle(DEFAULT_FONT,HORIZ_DIR,3); O(220,200,JUST SOSO); S(LIGHTBLUE); O(221,201,JUST SOSO); else ClrScreen(); S(LIGHTBLUE);,settextstyle(DEFAULT_FONT,HORIZ_DIR
15、,3); O(175,200,YOU PLAY BAD); S(CYAN); O(176,201,YOU PLAY BAD); sound(1000); delay(1000); sound(1500); delay(300); sound(400); delay(2020); nosound(); S(BLUE); settextstyle(DEFAULT_FONT,HORIZ_DIR,1); O(170,230,PRESS ANY KEY TO CONTINUE(ESC TO QUIT); S(WHITE); O(171,231,PRESS ANY KEY TO CONTINUE(ESC
16、TO QUIT); if(getch()=27) Quit(); else ClrScreen();return(1); else ShowInfo(3,nStep_Sub_Rec); return(0); ,void HelpMessage() S(3); L(7,314,632,314); L(7,432,632,432); S(12); settextstyle(DEFAULT_FONT,HORIZ_DIR,1); O(23,320,HELP MESSAGE:); S(7); O(50,340,1).KEY: ,A,D :MOVE THE RED BALL TO SELECT A ROD
17、); O(50,365,2).KEY: UP,W :TO SELECT THE TOP DISK); O(50,390,3).KEY: DOWN,S :TO GET DOWN THE DISK WHICH SELECT); O(50,415,4).KEY: ESC :QUIT THE GAME); S(12); O(50,442,5).IF STEP-RECORD=A BASENUM THAN :YOU WIN); O(50,453,6).IF STEP-RECORD=A BASENUM*2 THAN :JUST SOSO); O(50,464,7).ELSE :YOU BAD BAD_);
18、,void Game() /*見turboc*/ void Select() int nInput,i; DRAW(); settextstyle(DEFAULT_FONT,HORIZ_DIR,1); S(15); O(155,230,PLEASE INPUT THE NUMBER OF DISKS(3.9):); while(nInput=getch()9); nInput=nInput-48; nDisk=nInput; delay (1000); ,void Mode_1() /*PLAYER PLAY*/ again: DRAW(); Game(); /*GAME*/ cleardevice(); if(nDisk9) nDisk+; nStep=0; goto again; void GameMode(int mode) if(mode=1) ClrScreen();Select();Mode_1(); ,void Logo() int nPlay_Mode=1; DRAW(); ClrSc
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中階段學(xué)生輔導(dǎo)與提升計劃方案
- 安全員A證考試考前沖刺練習(xí)試題必考附答案詳解
- 安全員A證考試從業(yè)資格考試真題帶答案詳解
- 2025年物聯(lián)網(wǎng)平臺開發(fā)模擬試題及答案解析
- 安全員A證考試提分評估復(fù)習(xí)含答案詳解【奪分金卷】
- 安全員A證考試強(qiáng)化訓(xùn)練題型匯編及參考答案詳解【預(yù)熱題】
- 安全員A證考試題庫檢測題型含答案詳解【b卷】
- 鋼結(jié)構(gòu)基礎(chǔ)施工方案技術(shù)交底模板
- 人力資源招聘與配置策略方案模板
- 安全員A證考試強(qiáng)化訓(xùn)練附參考答案詳解(完整版)
- 2026貴州省省、市兩級機(jī)關(guān)遴選公務(wù)員357人考試備考題庫及答案解析
- 兒童心律失常診療指南(2025年版)
- 北京通州產(chǎn)業(yè)服務(wù)有限公司招聘備考題庫必考題
- 2026年基金從業(yè)資格證考試題庫500道含答案(完整版)
- 氣體滅火系統(tǒng)維護(hù)與保養(yǎng)方案
- GB/T 10922-202555°非密封管螺紋量規(guī)
- ESD護(hù)理教學(xué)查房
- 內(nèi)窺鏡護(hù)理不良事件分析與防范措施
- 2025年《電信業(yè)務(wù)投訴處理》知識考試題庫及答案解析
- 82-2手榴彈使用課件
- 道路清掃保潔服務(wù)投標(biāo)方案
評論
0/150
提交評論