二十一點(diǎn)游戲設(shè)計(jì)報(bào)告_第1頁
二十一點(diǎn)游戲設(shè)計(jì)報(bào)告_第2頁
二十一點(diǎn)游戲設(shè)計(jì)報(bào)告_第3頁
二十一點(diǎn)游戲設(shè)計(jì)報(bào)告_第4頁
二十一點(diǎn)游戲設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、. . . . 課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告書程序名:二十一點(diǎn)游戲班級(jí):12計(jì)算機(jī)科學(xué)與技術(shù)一班指導(dǎo)老師:靜小組成員:宇、徐含、葉安江20 / 20二十一點(diǎn)游戲設(shè)計(jì)報(bào)告1、 問題描述:要求支持鍵盤操作以與計(jì)算機(jī)的自動(dòng)判斷,并能夠在界面上與時(shí)準(zhǔn)確的顯示當(dāng)前牌面、點(diǎn)數(shù),實(shí)現(xiàn)得分的自動(dòng)加減與顯示。二、功能分析:二十一點(diǎn)游戲需解決的問題包括:1、 游戲開始、進(jìn)行、結(jié)束過程中的界面設(shè)計(jì),以與發(fā)牌等動(dòng)畫的顯示。2、 產(chǎn)生隨機(jī)的牌點(diǎn)以與顯示在牌面。3、 如何利用鍵盤實(shí)現(xiàn)開牌、要牌等操作。4、 如何實(shí)現(xiàn)發(fā)牌的動(dòng)畫效果。5、 如何實(shí)現(xiàn)籌碼的錄入以與玩家賭金的自動(dòng)加減。6、 如何保存賭金的數(shù)值,以便于下次開始游戲時(shí)能夠顯示最

2、新的賭金。3、 程序設(shè)計(jì):1、 程序設(shè)計(jì)總體結(jié)構(gòu):首先,初始化進(jìn)入圖形模式,提示按鍵開始游戲。開始游戲,進(jìn)入游戲的主題部分,處理程序?qū)崿F(xiàn)過程中的各種事件和函數(shù)。在處理過程中,判斷游戲是否結(jié)束。若未結(jié)束,從開始界面處執(zhí)行程序,若結(jié)束,則跳出循環(huán),結(jié)束游戲。初始化參數(shù)開始界面、動(dòng)畫開始游戲處理和實(shí)現(xiàn)游戲進(jìn)行過程中的的各種事件和功能游戲結(jié)束?關(guān)閉圖形模式 否 是主函數(shù)為: main() int num1,num2,i,p; char index; p=1; kaishijiemian(); /*調(diào)用開始界面的函數(shù)*/ gundong(); /*調(diào)用滾動(dòng)函數(shù)*/ while(p=1) dujin(1)

3、; /*讀取賭金*/ youxijiemian(); /*進(jìn)入游戲界面*/ srand(unsigned)time(NULL ); for(i=1;i<=10000;i+) num1=rand()%52; num2=rand()%52; index=painum1; painum1=painum2; painum2=index; fapai(); /*發(fā)牌函數(shù)*/ panduan(); /*判斷函數(shù)*/ dujin(2); /*保存賭金*/ ky=bioskey(0); switch(ky) case Key_Esc: p=0;break; default: p=1;break; clo

4、segraph();2、 界面設(shè)計(jì)開始界面:游戲界面:結(jié)束界面:3、 函數(shù)設(shè)計(jì):本程序由一個(gè)主函數(shù),13個(gè)子函數(shù),共14個(gè)函數(shù)組成。函數(shù)間相互關(guān)系如下圖:初始化參數(shù)開始游戲gongdong()kaishi()開始界面、動(dòng)畫dujin(1)讀取賭金youxijiemian()(1<J<5&&ky=Key_Y?是 否jisuanWJ()WJ()wanjiapai()fapai()處理事件與實(shí)現(xiàn)功能jisuanDN()diannaopai()Computerds>16?jisuanDN()DN() 是 是 panduan() playerdsp=1?dujin(1)

5、保存賭金jieshu(n) 游戲結(jié)束 Computerds關(guān)閉圖形模式 否 詳細(xì)描述:文件名函數(shù)原型函數(shù)功能函數(shù)處理21dian .ckaishi() 創(chuàng)建游戲的進(jìn)入界面通過繪圖、畫線、填色、顯示數(shù)字等生成界面gundong()從進(jìn)入界面到切到游戲界面時(shí)產(chǎn)生一段動(dòng)畫youxijiemian()游戲進(jìn)行時(shí)的背景,其上顯示各種提示以與籌碼、賭金等對(duì)玩家鍵入的鍵碼、定義的值進(jìn)行分析判斷,通過繪圖、畫線、填色、顯示數(shù)字等生成游戲界面fapai()游戲進(jìn)行中發(fā)牌的總控制通過對(duì)WJ()、DN()、wanjiapai()、diannaopai()、jisuanWJ()、jisuanDN()等函數(shù)的調(diào)用,實(shí)現(xiàn)

6、對(duì)發(fā)牌的總控制panduan()比較玩家、電腦的點(diǎn)數(shù)大小,并計(jì)算出相應(yīng)的賭金對(duì)fapai()函數(shù)中傳遞來的playerds、computerds進(jìn)行判斷,判定游戲的勝負(fù),并改變money的值jieshu()顯示雙方點(diǎn)數(shù)。提示游戲操作,生成游戲結(jié)果通過繪圖、畫線、填色、顯示數(shù)字等生成界面,WJ()DN()對(duì)游戲過程中玩家和電腦的進(jìn)行操作,便于融入程序,起過渡作用wanjiapai(int g)diannaopai(int h)繪制游戲過程中的牌以與顯示點(diǎn)數(shù)通過對(duì)movebar、movebar1的調(diào)用實(shí)現(xiàn)圖形化牌、牌點(diǎn)jisuanWJ ()、jisaunDN()計(jì)算牌的點(diǎn)數(shù),并賦值到compute

7、rds、playerds中通過一系列的比較,得出雙方的牌點(diǎn)數(shù)4、 小組分工全部的圖形界面、與動(dòng)畫設(shè)計(jì)宇文件部分,以與鍵值框的設(shè)計(jì)徐含主函數(shù)以與除圖形函數(shù)、文件部分以外的子函數(shù)葉安江5、 源代碼:#include<bios.h>#include<graphics.h>#include<math.h>#include<dos.h>#include<stdlib.h>#include<stdio.h>#include<time.h>#include<conio.h>#define Key_Esc 0x11

8、b#define Key_Enter 0x1c0b#define Key_Y 0x1579#define Key_N 0x316e int winner; /*勝者數(shù)*/ int playerds,computerds; /*玩家、電腦的點(diǎn)數(shù)*/ char player6; char computer4; int money=2000; int wager; /*下注的賭金*/ int ky; int j,m; int paishu; void kaishi(); /*定義開始動(dòng)畫*/ void gundong(); void youxijiemian(); void fapai(); /*定

9、義發(fā)牌函數(shù)*/ void panduan(); /*定義判斷函數(shù)*/ void dujin(int b); /*定義讀取、保存賭金的函數(shù)*/ void WJ(); /*有關(guān)玩家電腦操作的函數(shù)*/ void DN(); void wanjiapai(int g); /*玩家和電腦的發(fā)牌動(dòng)畫*/ void diannaopai(int h); void jisuanWJ(); /*計(jì)算玩家和電腦的點(diǎn)數(shù)*/ void jisuanDN(); void jieshu(int n); /*游戲結(jié)束動(dòng)畫*/ char pai54='A','2','3',&#

10、39;4','5','6','7','8','9','10','J','Q','K', 'A','2','3','4','5','6','7','8','9','10','J','Q','K', 'A','2'

11、;,'3','4','5','6','7','8','9','10','J','Q','K', 'A','2','3','4','5','6','7','8','9','10','J','Q','K','0&

12、#39; main() int num1,num2,i,p; char index; p=1; kaishi(); gundong(); while(p=1) dujin(1); /*讀取賭金*/ youxijiemian(); /*進(jìn)入游戲界面*/ srand(unsigned)time(NULL ); /*洗牌*/ for(i=1;i<=10000;i+) num1=rand()%52; num2=rand()%52; index=painum1; painum1=painum2; painum2=index; fapai(); /*發(fā)牌函數(shù)*/ panduan(); /*判斷函數(shù)*

13、/ dujin(2); /*保存賭金*/ ky=bioskey(0); switch(ky) case Key_Esc: p=0;break; default: p=1;break; closegraph(); /*調(diào)用開始動(dòng)畫*/ void kaishi() int graphdriver,graphmode; graphdriver=DETECT; initgraph(&graphdriver,&graphmode,""); cleardevice(); setbkcolor(9); setviewport(10,10,630,470,2); /*開圖視

14、口*/ setfillstyle(1,2); setcolor(YELLOW); floodfill(80,80,15); ellipse(20,20,45,45,20,10); settextstyle(2,0,9); setfillstyle(3,7); floodfill(20,20,8); setfillstyle(1,10); floodfill(21,300,1); setcolor(6); ellipse(300,80,0,360,120,70); settextstyle(0,0,2); outtextxy(190,75,"Welcome Game!");

15、setviewport(100,200,540,380,0); setcolor(2); setfillstyle(1,12); rectangle(20,20,420,120); floodfill(50,100,2); settextstyle(4,0,3); setcolor(YELLOW); outtextxy(110,60,"Press any key to continue!"); getch(); /*調(diào)用滾動(dòng)函數(shù)*/ void gundong() int x,y; setcolor(5); outtextxy(150,90,"Have a good

16、 time!"); ky=bioskey(0); if(ky=Key_Esc) closegraph(); setcolor(7); for(x=0;x<80;x+) for(y=0;y<10;y+) /*改變滾動(dòng)條速度*/ line(-200,x+y*60-200,600,x+y*60-200); delay(500); clearviewport(); /*調(diào)用賭金保存、讀取函數(shù)*/ void dujin(int b) FILE *fp; if(b=1) if(fp=fopen("a.txt","r")=NULL) settex

17、tstyle(TRIPLEX_FONT,HORIZ_DIR,2); outtextxy(120,60,"What a pity!You rocord is lost!"); fscanf(fp ,"%d",&money); if(fclose(fp) settextstyle(TRIPLEX_FONT,HORIZ_DIR,2); outtextxy(120,60,"What a pity!Can not save the money."); if(b=2) if(fp=fopen("a.txt","

18、;r=")=NULL) settextstyle(TRIPLEX_FONT,HORIZ_DIR,2); outtextxy(120,60,"What a pity!You rocord is lost!"); fprintf(fp,"%d",money); if(fclose(fp) settextstyle(TRIPLEX_FONT,HORIZ_DIR,2); outtextxy(120,60,"What a pity!Can not save the money."); /*調(diào)用游戲界面*/ void youxijiem

19、ian() int x,y,p,graphdriver,graphmode; char s30; /*存放轉(zhuǎn)換數(shù)據(jù)類型的數(shù)組*/ char a82=0; x=0;p=0; graphdriver=DETECT; initgraph(&graphdriver,&graphmode,""); cleardevice(); setbkcolor(GREEN); setcolor(LIGHTGRAY); setfillstyle(1,YELLOW); arc(250,10,220,320,220); setcolor(7); setfillstyle(1,9); a

20、rc(250,10,220,320,200); setcolor(LIGHTGRAY); line(500,2,500,477); line(500,240,640,240); settextstyle(DEFAULT_FONT,HORIZ_DIR,2); outtextxy(178,30,"COMPUTER"); outtextxy(194,280,"PLAYER"); outtextxy(20,360,"MONEY"); outtextxy(540,65,"KEY"); outtextxy(20,250,&qu

21、ot;WAGER"); settextstyle(TRIPLEX_FONT,HORIZ_DIR,2); outtextxy(524,105,"Enter is Start"); outtextxy(524,135,"Esc is Quit"); outtextxy(524,165,"Y is Yes"); outtextxy(524,195,"N is No"); rectangle(20,380,90,420); setfillstyle(1,6); settextstyle(0,0,1); setco

22、lor(YELLOW); sprintf(s,"%d",money); outtextxy(30,395,s); rectangle(20,275,90,310); settextstyle(2,0,5); setfillstyle(1,5); settextstyle(0,0,1); settextstyle(TRIPLEX_FONT,HORIZ_DIR,2); ax0=getch(); /*輸入籌碼*/ while(ax0!=13|x=0) if(ax0>='0'&&ax0<='9') outtextxy(25

23、+x*8,295,ax); x+; ax0=getch(); if(x=7&&ax0!=13) ax0=65; for(y=0;y<x;y+) p=p*10+(ay0-'0'); /*調(diào)用發(fā)牌函數(shù)*/void fapai() int i; int h,g; h=g=2;/*開始各發(fā)兩牌*/ player0=pai0; player1=pai1; paishu=2; computer0=pai5; computer1=pai6; j=1; m=1; for(i=0;i<2;i+) wanjiapai(g);g+; for(i=0;i<2;i+)

24、diannaopai(h);h+; j=2; while(j<5&&ky!=Key_N) /*顯示提示,詢問玩家是否要牌*/ setcolor(RED); settextstyle(DEFAULT_FONT,HORIZ_DIR,2); outtextxy(524,300,"CHOOSE"); settextstyle(TRIPLEX_FONT,HORIZ_DIR,3); outtextxy(510,330," Do you want "); outtextxy(510,350,"another card?");

25、outtextxy(510,385,"Yes or No?"); ky=bioskey(0); /*根據(jù)指令,決定是否發(fā)牌*/ switch(ky) case Key_Y: playerj=paij; wanjiapai(g); g+; j+; paishu+; break; case Key_N: DN(); break; default: break; jisuanDN(m); /*計(jì)算電腦牌的點(diǎn)數(shù)*/ WJ(); /*對(duì)玩家牌的操作*/void wanjiapai(int g) /*玩家發(fā)牌動(dòng)畫*/ int x,y,d; char s1; void movebar1(

26、int bar); d=0; if(g!=2) for(x=17;x>(d+5);x-) movebar1(x * 20); d+; setcolor(14); rectangle(g-3)*20+200,340,(g-3)*20+250,420); setcolor(GREEN); line(g-4)*20+250,341,(g-4)*20+250,419); setfillstyle(1,5); floodfill(g-3)*20+205,350,14); setcolor(14); settextstyle(1,0,1); sprintf(s,"%c",play

27、erj); outtextxy(g-3)*20+205,360,s); if(g=2) for(x=17;x>5;x-) movebar1(x*20); setcolor(14); rectangle(g-3)*20+200,340,(g-3)*20+250,420); setcolor(GREEN); setfillstyle(1,5); floodfill(g-3)*20+205,350,14); setcolor(14); settextstyle(1,0,1); sprintf(s,"%c",player0); outtextxy(g-3)*20+205,36

28、0,s); void movebar1(int bar) /*玩家牌 設(shè)窗口并畫填色牌*/ setcolor(14); rectangle(bar+90,340,bar+140,420); setfillstyle(8,13); floodfill(bar+91,350,14); delay(50000); setfillstyle(1,2); floodfill(bar+91,350,14); setcolor(2); rectangle(bar+90,340,bar+140,420);/*玩家的操作*/void WJ() playerds=0; for(j=0;j<paishu;j+

29、) jisuanWJ(j);void jisuanWJ(int j) if(playerj='A') playerds=playerds+11; if(playerds>21) playerds=playerds-10; if(playerj='1') playerds=playerds+1; if(playerj='2') playerds=playerds+2; if(playerj='3') playerds=playerds+3; if(playerj='4') playerds=playerds+4

30、; if(playerj='5') playerds=playerds+5; if(playerj='6') playerds=playerds+6; if(playerj='7') playerds=playerds+7; if(playerj='8') playerds=playerds+8; if(playerj='9') playerds=playerds+9; if(playerj='10') playerds=playerds+10; if(playerj='J') pl

31、ayerds=playerds+10; if(playerj='Q') playerds=playerds+10; if(playerj='K') playerds=playerds+10;/*電腦發(fā)牌動(dòng)畫*/void diannaopai(int h) int x,c,y; char s1; void movebar(int bar); char pai5; c=0; if(h!=2) h=2-h; for(x=1;x<(10-c);x+) movebar(x * 20); c+; setcolor(14); rectangle(h+4)*20+200,

32、60,(h+4)*20+250,140); setcolor(GREEN); line(h+5)*20+200,61,(h+5)*20+200,139); setfillstyle(1,5); floodfill(h+4)*20+205,65,14); setcolor(14); settextstyle(1,0,1); sprintf(s,"%c",computerm); outtextxy(h+4)*20+240,80,s); if(h=2) h=h-2; for(x=1;x<10;x+) movebar(x * 20); setcolor(14); rectan

33、gle(h+4)*20+200,60,(h+4)*20+250,140); setcolor(GREEN); setfillstyle(8,13); floodfill(h+4)*20+205,70,14); setcolor(14); void movebar(int bar) /*電腦牌 設(shè)窗口并畫填色牌*/ setcolor(14); rectangle(bar+90,60,bar+140,140); setfillstyle(8,13); floodfill(bar+91,70,14); delay(50000); setfillstyle(1,2); floodfill(bar+91

34、,70,14); setcolor(2); rectangle(bar+90,60,bar+140,140);/*電腦的操作*/void DN() int h; computerds=0; for(m=0;m<=1;m+) jisuanDN(m); if(computerds<=16) computer2=pai7; h=4; diannaopai(h); getch(); m=2; jisuanDN(m); void jisuanDN(int m) if(computerm='A') computerds=computerds+11; if(computerds&

35、gt;21) computerds=computerds-10; if(computerm='1') computerds=computerds+1; if(computerm='2') computerds=computerds+2; if(computerm='3') computerds=computerds+3; if(computerm='4') computerds=computerds+4; if(computerm='5') computerds=computerds+5; if(computerm

36、='6') computerds=computerds+6; if(computerm='7') computerds=computerds+7; if(computerm='8') computerds=computerds+8; if(computerm='9') computerds=computerds+9; if(computerm='10') computerds=computerds+10; if(computerm='J') computerds=computerds+10; if(

37、computerm='Q') computerds=computerds+10; if(computerm='K') computerds=computerds+10;void panduan() /*判斷函數(shù)*/ int winner,n; /*定義勝者數(shù)*/ void jieshu(int n); winner=0; while(winner=0) if(playerds>21&&computerds<21) n=1; jieshu(n); money=money-wager; winner=winner+1; if(computerds>21&&playerds<21) n=2; jieshu(n); money=money+wager*2; winner=winner+1; if(playerds<=21&&computerds<=21&&playerds>computerds) n=2; jieshu(n); money=money+wager*2; winner=winner+1; if(playerds=computerds) n=3; jieshu(n); money=money+wager; winn

溫馨提示

  • 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)論