二十一点游戏设计报告_第1页
二十一点游戏设计报告_第2页
二十一点游戏设计报告_第3页
二十一点游戏设计报告_第4页
二十一点游戏设计报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计实验报告书程序名:二十一点游戏班级:12计算机科学与技术一班指导老师:韩静小组成员:刘宇、徐含、叶安江二十一点游戏设计报告1、 问题描述:要求支持键盘操作以及计算机的自动判断,并能够在界面上及时准确的显示当前牌面、点数,实现得分的自动加减及显示。二、功能分析:二十一点游戏需解决的问题包括:1、 游戏开始、进行、结束过程中的界面设计,以及发牌等动画的显示。2、 产生随机的牌点以及显示在牌面。3、 如何利用键盘实现开牌、要牌等操作。4、 如何实现发牌的动画效果。5、 如何实现筹码的录入以及玩家赌金的自动加减。6、 如何保存赌金的数值,以便于下次开始游戏时能够显示最新的赌金。3、 程序设计:

2、1、 程序设计总体结构:首先,初始化进入图形模式,提示按键开始游戏。开始游戏,进入游戏的主题部分,处理程序实现过程中的各种事件和函数。在处理过程中,判断游戏是否结束。若未结束,从开始界面处执行程序,若结束,则跳出循环,结束游戏。初始化参数开始界面、动画开始游戏处理和实现游戏进行过程中的的各种事件和功能游戏结束?关闭图形模式 否 是主函数为: main() int num1,num2,i,p; char index; p=1; kaishijiemian(); /*调用开始界面的函数*/ gundong(); /*调用滚动函数*/ while(p=1) dujin(1); /*读取赌金*/ yo

3、uxijiemian(); /*进入游戏界面*/ srand(unsigned)time(null ); for(i=1;i=10000;i+) num1=rand()%52; num2=rand()%52; index=painum1; painum1=painum2; painum2=index; fapai(); /*发牌函数*/ panduan(); /*判断函数*/ dujin(2); /*保存赌金*/ ky=bioskey(0); switch(ky) case key_esc: p=0;break; default: p=1;break; closegraph();2、 界面设计

4、开始界面:游戏界面:结束界面:3、 函数设计:本程序由一个主函数,13个子函数,共14个函数组成。函数间相互关系如下图:初始化参数开始游戏gongdong()kaishi()开始界面、动画 dujin(1)读取赌金youxijiemian()(1j16?jisuandn()dn() 是 是 panduan() playerdsp=1?dujin(1)保存赌金jieshu(n) 游戏结束 computerds关闭图形模式 否 详细描述:文件名函数原型函数功能函数处理 21dian .ckaishi() 创建游戏的进入界面通过绘图、画线、填色、显示数字等生成界面gundong()从进入界面到切到游

5、戏界面时产生一段动画youxijiemian()游戏进行时的背景,其上显示各种提示以及筹码、赌金等对玩家键入的键码、定义的值进行分析判断,通过绘图、画线、填色、显示数字等生成游戏界面fapai()游戏进行中发牌的总控制通过对wj()、dn()、wanjiapai()、diannaopai()、jisuanwj()、jisuandn()等函数的调用,实现对发牌的总控制panduan()比较玩家、电脑的点数大小,并计算出相应的赌金对fapai()函数中传递来的playerds、computerds进行判断,判定游戏的胜负,并改变money的值jieshu()显示双方点数。提示游戏操作,生成游戏结果

6、通过绘图、画线、填色、显示数字等生成界面,wj()dn()对游戏过程中玩家和电脑的进行操作,便于融入程序,起过渡作用wanjiapai(int g)diannaopai(int h)绘制游戏过程中的牌以及显示点数通过对movebar、movebar1的调用实现图形化牌、牌点jisuanwj ()、jisaundn()计算牌的点数,并赋值到computerds、playerds中通过一系列的比较,得出双方的牌点数4、 小组分工 全部的图形界面、及动画设计刘宇文件部分,以及键值框的设计徐含主函数以及除图形函数、文件部分以外的子函数叶安江5、 源代码:#include#include#include

7、#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 player6; char computer4; int money=2000; int wager; /*下注的赌金*/ int ky; int j,m; int paishu; void kaishi(); /*定义开

8、始动画*/ 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);

9、/*游戏结束动画*/ char pai54=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;

10、i=10000;i+) num1=rand()%52; num2=rand()%52; index=painum1; painum1=painum2; painum2=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=det

11、ect; 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); se

12、tcolor(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();

13、 /*调用滚动函数*/ 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;x80;x+) for(y=0;y=0&ax0=9) outtextxy(25+x*8,295,ax); x+; ax0=getch(); if(x=7&ax0!=13) ax0=65; for(y=0;yx;y+) p=p*10+(ay0-0); /*调用发牌函数*/void fapai() i

14、nt i; int h,g; h=g=2;/*开始各发两张牌*/ player0=pai0; player1=pai1; paishu=2; computer0=pai5; computer1=pai6; j=1; m=1; for(i=0;i2;i+) wanjiapai(g);g+; for(i=0;i2;i+) diannaopai(h);h+; j=2; while(j(d+5);x-) movebar1(x * 20); d+; setcolor(14); rectangle(g-3)*20+200,340,(g-3)*20+250,420); setcolor(green); li

15、ne(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,playerj); outtextxy(g-3)*20+205,360,s); if(g=2) for(x=17;x5;x-) movebar1(x*20); setcolor(14); rectangle(g-3)*20+200,340,(g-3)*20+250,420); setcolor(green); setfills

16、tyle(1,5); floodfill(g-3)*20+205,350,14); setcolor(14); settextstyle(1,0,1); sprintf(s,%c,player0); 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); fl

17、oodfill(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(playerj=1) playerds=playerds+1; if(playerj=2) playerds=playerds+2; if(playerj=3) playerds=playerds+3; if(playerj=4) playerds=playerds+4; if(playerj=5) playerds=

18、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) playerds=playerds+10; if(playerj=q) playerds=playerds+10; if(playerj=k) playerds=playerds+10;/*电脑

19、发牌动画*/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,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,

20、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;x10;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

21、 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(computer

22、ds21) 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=6) computerds=computerds+6; if(computerm=7) comput

23、erds=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(computerm=q) computerds=computerds+10; if(computerm=k) computerds=computerds+10;void panduan() /*判断函数*/ int win

24、ner,n; /*定义胜者数*/ void jieshu(int n); winner=0; while(winner=0) if(playerds21&computerds21&playerds21) n=2; jieshu(n); money=money+wager*2; winner=winner+1; if(playerds=21&computerdscomputerds) 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&playerdscomputerds) n=4; jieshu(n); money=money-wager; winner=winner+1; void jieshu(int n) int i, graphdriver,graphmode,size,page; char a30,b30; graphdriver=detect; initgraph(&graphdriver,&graphmode,); cleardevice(); setbkcolor(blue); setviewpor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论