扑克牌发牌课程设计文档格式.docx
《扑克牌发牌课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《扑克牌发牌课程设计文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
2.1.2使用控件3
2.2洗牌3
2.2.1产生随机数3
2.3发牌3
2.3.1发牌思想3
2.3.2排序3
2.4整体排序思想3
3.效果展示5
4.附录:
程序代码6
1.1设计要求
1、两副牌升级游戏的发牌程序。
四人游戏,底牌8张。
2、列出每人的牌。
3、将每人的牌按大王、小王、不同的花色的拖拉机、单对、单牌的顺序,每一类顺序中从大到小排列好。
4、其余功能自行扩展。
5、可以是图形用户界面程序也可以是命令行程序。
1.2编辑编译相关部分
1.2.1运行环境
运行环境:
windows7
是由微软公司(Microsoft)开发的操作系统,本次操作用的是64为操作系统。
1.2.2编辑环境
编译环境:
VisualStudio是微软公司推出的开发环境。
是最流行的Windows平台应用程序开发环境。
2012年9月12日微软在西雅图发布VisualStudio2012。
其实早在8月16日VisualStudio2012和.NETFramework4.5已经可以下载,微软负责VisualStudio部门的公司副总裁JasonZander还发表博客,列举了升级到VisualStudio2012版的12大理由。
1.2.3编程语言
编程语言:
C#
C#是微软发布的一种面向对象的、运行于.netFramework之上的高级程序设计语言。
并定于在微软职业开发者论坛(PDC)上登台亮相。
C#是微软公司研究员AndersHejlsberg的最新成果。
C#看起来与Java有着惊人的相似;
它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。
但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NETwindows网络框架的主角。
1.3设计理念
关于拖拉机游戏扑克牌发牌程序的设计思想:
用数字1-108分别代表每张扑克牌的区分值(两幅扑克牌),利用产生随机数的方法对扑克牌进行洗牌和发牌,然后对产生的随机数进行排序来实现扑克牌的排列顺序。
2.软件内容相关
2.1图形界面设计
使用windows窗体应用程序构造图形化界面,利用控件分模块实现所要求的功能。
2.1.1图形界面的设计
窗体1(Form1,主界面)如图2-2-1
图2-2-1窗体
2.1.2使用控件
使用控件:
button,label,PictureBox.
2.2洗牌
2.2.1产生随机数
1)产生随机数
利用C#中的的random.Next(a,b)函数来产生1-108之间的随机数,并且将这108个数字存入数组当中。
其中两幅扑克牌的值定位:
黑桃A----K1----1355----67
梅花A----K14---2668----80
方块A----K21---3981----93
红桃A----K40---5294----106
小王53
大王54
2.3发牌
2.3.1发牌思想
1)设计思想
发牌的实质就是对数组中的数进行排序,根据拖拉机游戏的玩法,扑克牌的顺序依次为大王、小王、不同花色的拖拉机、单对、单牌的顺序,每一类顺序中从大到小的顺序排列好。
一共发4份牌,留8张底牌。
2)对大王,小王以及Ace的排序在扑克牌顺序的最大,其原理大同小异。
2.3.2排序
1)对单对的排序思想
从最开始的产生的1---108的随机数组成了数组名为Card的数组,到每个玩家的手中25张牌,可以分别对这25张牌的值进行对比,根据相同牌(单对)之间的关系,把单对找出来。
2.4整体排序思想
3.效果展示
图3-1效果展示1
图3-1效果展示2
5.参考书籍:
[1]沃森(KarliWatson),JacobVibeHammer,JonD.Reid,MorganSkinner等.编写C#程序,变量和表达式,流程控制,字符串的处理,面向对象编程简介等.C#入门经典(第6版)[平装].2014,1(3):
11~531,621~634.
程序代码
publicpartialclassForm1:
Form
{
intnum,i,j,k,m,d=0,temp,Ace=0;
intplace=0,sign=0;
int[]Card=newint[108];
publicForm1()
InitializeComponent();
}
privatevoidpictureBox7_Click(objectsender,EventArgse)
privatevoidForm1_Load(objectsender,EventArgse)
privatevoidbutton1_Click(objectsender,EventArgse)
Randomrandom=newRandom();
for(num=0;
num<
108;
)/**************************二幅牌********************************/
temp=random.Next(1,109);
//避免重复的方法
for(j=0;
j<
num;
j++)
if(temp==Card[j])
break;
if(num==j)
Card[num]=temp;
num++;
place=0;
Ace=0;
for(d=0;
d<
100;
d+=25)
set_single_card(54,108,d);
//大毛d---d+25
set_single_card(53,107,d);
//小毛
Sort_all(40,52,94,106,d);
//红桃
Sort_all(27,39,81,93,d);
//方块
Sort_all(14,26,68,80,d);
//梅花
Sort_all(1,13,55,67,d);
//黑桃
pictureBox101.Image=Image.FromFile(Card[100].ToString()+"
.jpg.jpg"
);
pictureBox102.Image=Image.FromFile(Card[101].ToString()+"
pictureBox103.Image=Image.FromFile(Card[102].ToString()+"
pictureBox104.Image=Image.FromFile(Card[103].ToString()+"
pictureBox105.Image=Image.FromFile(Card[104].ToString()+"
pictureBox106.Image=Image.FromFile(Card[105].ToString()+"
pictureBox107.Image=Image.FromFile(Card[106].ToString()+"
pictureBox108.Image=Image.FromFile(Card[107].ToString()+"
privatevoidset_card(intplace1,intcard,int[]Cad)
switch(place1)
case0:
pictureBox1.Image=Image.FromFile(Cad[card].ToString()+"
break;
case1:
pictureBox2.Image=Image.FromFile(Cad[card].ToString()+"
..
..
case97:
pictureBox98.Image=Image.FromFile(Cad[card].ToString()+"
case98:
pictureBox99.Image=Image.FromFile(Cad[card].ToString()+"
case99:
pictureBox100.Image=Image.FromFile(Cad[card].ToString()+"
privatevoidlabel1_Click(objectsender,EventArgse)
privatevoidset_single_card(intq,intw,intd)//单牌q或w(两幅扑克牌)循环范围d----d+25
sign=0;
for(j=d;
d+25;
if(Card[j]==q||Card[j]==w)//小毛
if(sign==0)
set_card(place,j,Card);
sign=1;
place++;
else
privatevoidsort(int[]array,intn)
inti,j,t;
for(i=0;
i<
n-1;
i++)//注意i的值!
n-1-i;
j++)//注意j的值!
if(array[j]<
=array[j+1])
t=array[j];
array[j]=array[j+1];
array[j+1]=t;
privatevoiddelete(int[]Cad,intvalue,intn)//删除数组长度为n的Cad中值为Value
inta,b;
for(a=0;
a<
n;
a++)
if(Cad[a]==value)
for(b=a;
b<
b++)
Cad[b]=Cad[b+2];
}
privatevoidSort_all(intq,intw,intt,intp,intd)//q--wt---p范围d--d+25
int[]Temp=newint[25];
int[]temp_=newint[25];
for(i=d,k=0;
25+d;
i++)4
if((Card[i]>
q)&
&
(Card[i]<
=w))
Temp[k]=Card[i];
k++;
elseif((Card[i]>
t)&
=p))//把相同的扑克处理成相同数字
Temp[k]=Card[i]-54;
sort(Temp,k);
//选择法排序Temp
for(i=0,m=0;
k;
i++)//提取单对
if(Temp[i]==Temp[i+1])
temp_[m]=Temp[i];
m++;
sort(temp_,m);
//选择法排序temp_
if(temp_[0]==0)//没有有单对
switch(Ace)
set_single_card(40,94,d);
Ace+=25;
case25:
set_single_card(27,81,d);
case50:
set_single_card(14,68,d);
case75:
set_single_card(1,55,d);
Ace=0;
i++)
set_card(place,i,Temp);
m;
i++)//放置单对
set_card(place,i,temp_);
delete(Temp,temp_[i],k);
sort(Temp,k-2*m);
k-2*m;
Temp=null;
temp_=null;
}