为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

二十一点游戏设计报告

2017-10-26 28页 doc 83KB 31阅读

用户头像

is_594905

暂无简介

举报
二十一点游戏设计报告二十一点游戏设计报告 程序名:二十一点游戏 班级:12计算机科学与技术一班 指导老师:韩静 小组成员:刘宇、徐含、叶安江 二十一点游戏设计报告 一、问题描述: 要求支持键盘操作以及计算机的自动判断,并能够在界面上及时准确的显示当前牌面、点数,实现得分的自动加减及显示。 二、功能分析: 二十一点游戏需解决的问题包括: 1、游戏开始、进行、结束过程中的界面设计,以及发牌等动画的显示。 2、产生随机的牌点以及显示在牌面。 3、如何利用键盘实现开牌、要牌等操作。 4、如何实现发牌的动画效果。 5、如何实现筹码的录...
二十一点游戏设计报告
二十一点游戏报告 程序名:二十一点游戏 班级:12计算机科学与技术一班 指导老师:韩静 小组成员:刘宇、徐含、叶安江 二十一点游戏设计报告 一、问描述: 要求支持键盘操作以及计算机的自动判断,并能够在界面上及时准确的显示当前牌面、点数,实现得分的自动加减及显示。 二、功能分析: 二十一点游戏需解决的问题包括: 1、游戏开始、进行、结束过程中的界面设计,以及发牌等动画的显示。 2、产生随机的牌点以及显示在牌面。 3、如何利用键盘实现开牌、要牌等操作。 4、如何实现发牌的动画效果。 5、如何实现筹码的录入以及玩家赌金的自动加减。 6、如何保存赌金的数值,以便于下次开始游戏时能够显示最新的赌金。 三、程序设计: 1、程序设计总体结构:首先,初始化进入图形模式,提示按键开始游戏。开始游戏,进入游戏的主题部分,处理程序实现过程中的各种事件和函数。在处理过程中,判断游戏是否结束。若未结束,从开始界面处执行程序,若结束,则跳出循环,结束游戏。 初始化参数 开始界面、动画 开始游戏 处理和实现游戏进行过程中 否 的的各种事件和功能 是 游戏结束,, 关闭图形模式 主函数为: main() { int num1,num2,i,p; char index; p=1; kaishijiemian(); /*调用开始界面的函数*/ gundong(); /*调用滚动函数*/ while(p==1){ dujin(1); /*读取赌金*/ youxijiemian(); /*进入游戏界面*/ srand((unsigned)time(NULL )); for(i=1;i<=10000;i++){ num1=rand()%52; num2=rand()%52; index=pai[num1]; pai[num1]=pai[num2]; pai[num2]=index; } fapai(); /*发牌函数*/ panduan(); /*判断函数*/ dujin(2); /*保存赌金*/ ky=bioskey(0); switch(ky){ case Key_Esc: p=0;break; default: p=1;break;} } closegraph(); } 2、界面设计 开始界面: 游戏界面: 结束界面: 3、函数设计: 本程序由一个主函数,13个子函数,共14个函数组成。 函数间相互关系如下图: 初始化参数 开始界面、动画 kaishi() gongdong() 开始游戏 读取赌金 dujin(1) youxijiemian() ( 116? playerds panduan() Computerds jieshu(n) 游戏结束 dujin(1)保存赌金 p=1??? 否 关闭图形模式 详细描述: 文件名 函数原型 函数功能 函数处理 kaishi() 创建游戏的进入通过绘图、画线、 界面 填色、显示数字等 生成界面 gundong() 从进入界面到切 到游戏界面时产 生一段动画 youxijiemian() 游戏进行时的背对玩家键入的键 景,其上显示各种码、定义的值进行 提示以及筹码、赌分析判断,通过绘 金等 图、画线、填色、 显示数字等生成 游戏界面 fapai() 游戏进行中发牌通过对WJ()、 的总控制 DN()、wanjiapai()、 diannaopai()、 jisuanWJ()、21dian .c jisuanDN()等函数 的调用,实现对发 牌的总控制 panduan() 比较玩家、电脑的对fapai()函数中传 点数大小,并计算递来的playerds、 出相应的赌金 computerds进行判 断,判定游戏的胜 负,并改变money 的值 jieshu() 显示双方点数。提通过绘图、画线、 示游戏操作,生成填色、显示数字等 游戏结果 生成界面, WJ() 对游戏过程中玩 DN() 家和电脑的进行 操作,便于融入程 序,起过渡作用 wanjiapai(int g) 绘制游戏过程中通过对movebar、 diannaopai(int h) 的牌以及显示点movebar1的调用 数 实现图形化牌、牌 点 jisuanWJ ()、 计算牌的点数,并通过一系列的比jisaunDN() 赋值到较,得出双方的牌 computerds、点数 playerds中 四、小组分工 全部的图形界面、及动画设计 刘宇 文件部分,以及键值框的设计 徐含 主函数以及除图形函数、文件部分以外叶安江 的子函数 五、源代码: #include #include #include #include #include #include #include #include #define Key_Esc 0x11b #define Key_Enter 0x1c0b #define Key_Y 0x1579 #define Key_N 0x316e int winner; /*胜者数*/ int playerds,computerds; /*玩家、电脑的点数*/ char player[6]; char computer[4]; int money=2000; int wager; /*下注的赌金*/ int ky; int j,m; int paishu; void kaishi(); /*定义开始动画*/ void gundong(); void youxijiemian(); void fapai(); /*定义发牌函数*/ void panduan(); /*定义判断函数*/ void dujin(int b); /*定义读取、保存赌金的函数*/ void WJ(); /*有关玩家电脑操作的函数*/ void DN(); void wanjiapai(int g); /*玩家和电脑的发牌动画*/ void diannaopai(int h); void jisuanWJ(); /*计算玩家和电脑的点数*/ void jisuanDN(); void jieshu(int n); /*游戏结束动画*/ char pai[54]={'A','2','3','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','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'}; main(){ int num1,num2,i,p; char index; p=1; kaishi(); gundong(); while(p==1) { dujin(1); /*读取赌金*/ youxijiemian(); /*进入游戏界面*/ srand((unsigned)time(NULL )); /*洗牌*/ for(i=1;i<=10000;i++) { num1=rand()%52; num2=rand()%52; index=pai[num1]; pai[num1]=pai[num2]; pai[num2]=index; } fapai(); /*发牌函数*/ panduan(); /*判断函数*/ dujin(2); /*保存赌金*/ ky=bioskey(0); switch(ky){ case Key_Esc: p=0;break; default: p=1;break;} } closegraph(); } /*调用开始动画*/ void kaishi() { int graphdriver,graphmode; graphdriver=DETECT; initgraph(&graphdriver,&graphmode,""); cleardevice(); setbkcolor(9); setviewport(10,10,630,470,2); /*开图视口*/ 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!"); 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(); } /*调用滚动函数*/ void gundong() { int x,y; setcolor(5); outtextxy(150,90,"Have a good time!"); ky=bioskey(0); if(ky==Key_Esc) closegraph(); setcolor(7); for(x=0;x<80;x++) { for(y=0;y<10;y++){ /*改变滚动条速度*/ line(-200,x+y*60-200,600,x+y*60-200); delay(500); } } clearviewport(); } /*调用赌金保存、读取函数*/ void dujin(int b) { FILE *fp; if(b==1) { if((fp=fopen("a.txt","r"))==NULL){ settextstyle(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","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."); } } } /*调用游戏界面*/ void youxijiemian() { int x,y,p,graphdriver,graphmode; char s[30]; /*存放转换数据类型的数组*/ char a[8][2]={{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); arc(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,"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); setcolor(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); a[x][0]=getch(); /*输入筹码*/ while(a[x][0]!=13||x==0) { if(a[x][0]>='0'&&a[x][0]<='9'){ outtextxy(25+x*8,295,a[x]); x++; } a[x][0]=getch(); if(x==7&&a[x][0]!=13) a[x][0]=65; } for(y=0;y(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",player[j]); 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",player[0]); outtextxy((g-3)*20+205,360,s);} } void movebar1(int bar) /*玩家牌 设窗口并画填色牌*/ { 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;j21) playerds=playerds-10; } if(player[j]=='1') playerds=playerds+1; if(player[j]=='2') playerds=playerds+2; if(player[j]=='3') playerds=playerds+3; if(player[j]=='4') playerds=playerds+4; if(player[j]=='5') playerds=playerds+5; if(player[j]=='6') playerds=playerds+6; if(player[j]=='7') playerds=playerds+7; if(player[j]=='8') playerds=playerds+8; if(player[j]=='9') playerds=playerds+9; if(player[j]=='10') playerds=playerds+10; if(player[j]=='J') playerds=playerds+10; if(player[j]=='Q') playerds=playerds+10; if(player[j]=='K') playerds=playerds+10; } /*电脑发牌动画*/ void diannaopai(int h) { int x,c,y; char s[1]; void movebar(int bar); char pai[5]; 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,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",computer[m]); outtextxy((h+4)*20+240,80,s); } if(h==2) { h=h-2; for(x=1;x<10;x++) movebar(x * 20); setcolor(14); rectangle((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) /*电脑牌 设窗口并画填色牌*/ { 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,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) { computer[2]=pai[7]; h=4; diannaopai(h); getch(); m=2; jisuanDN(m); } } void jisuanDN(int m) { if(computer[m]=='A') { computerds=computerds+11; if(computerds>21) computerds=computerds-10; } if(computer[m]=='1') computerds=computerds+1; if(computer[m]=='2') computerds=computerds+2; if(computer[m]=='3') computerds=computerds+3; if(computer[m]='4') computerds=computerds+4; if(computer[m]=='5') computerds=computerds+5; if(computer[m]=='6') computerds=computerds+6; if(computer[m]=='7') computerds=computerds+7; if(computer[m]=='8') computerds=computerds+8; if(computer[m]=='9') computerds=computerds+9; if(computer[m]=='10') computerds=computerds+10; if(computer[m]=='J') computerds=computerds+10; if(computer[m]=='Q') computerds=computerds+10; f(computer[m]=='K') i computerds=computerds+10; } void panduan() /*判断函数*/ { int winner,n; /*定义胜者数*/ 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; winner=winner+1; } if(playerds<=21&&computerds<=21&&playerds
/
本文档为【二十一点游戏设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索