C#NET程序设计 课程设计报告.docx
《C#NET程序设计 课程设计报告.docx》由会员分享,可在线阅读,更多相关《C#NET程序设计 课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
C#NET程序设计课程设计报告
辽宁工业大学
C#.NET程序设计课程设计报告
题目:
纸牌游戏管理系统
院(系):
软件学院
专业班级:
电子商务092班
学号:
091401038
学生姓名:
王颖
指导教师:
胡峰
教师职称:
助教
起止时间:
2010.12.20至2010.12.31
课程设计任务及评语
院(系):
软件学院教研室:
软件教研室
学号
091401039
学生姓名
王颖
专业班级
电子商务092班
课程设计题目
纸牌游戏管理系统
课程设计任务
1.要求根据程序设计的步骤和规范,完成各阶段的设计内容。
2.设计所选择的题目,对具体功能进行详细的分析,根据程序的要求设计窗体界面,使其合理化。
3.使用c#语言对应用程序进行设计。
课程设计过程中,要严格遵守课程设计的时间安排,听从指导教师的指导。
正确地完成上述内容,规范完整地撰写出课程设计报告。
指导教师评语及成绩
成绩:
指导教师签字:
2011年1月3日
目录
第1章课程设计目的与要求1
1.1课程设计目的1
1.2课程设计环境1
1.3主要参考资料1
1.4课程设计内容及要求1
第2章课程设设计内容2
2.1游戏介绍2
2.1.1游戏规则3
2.1.2游戏说明3
2.2游戏设计3
2.2.1界面设计4
2.2.2属性设置4
2.2.3编程思路及代码5
2.3游戏实现9
2.3.1程序调试及测试9
2.3.2游戏运行10
第3章课程设计总结12
参考文献13
第1章课程设计目的与要求
1.1课程设计目的
1.要求根据程序设计的步骤和规范,完成各阶段的设计内容。
2.设计所选择的题目,对具体功能进行详细的分析,根据程序的要求设计窗体界面,使其合理化。
3.使用c#语言对应用程序进行设计。
1.2课程设计环境
软件设计要求用C#语言开发,支持Windows操作系统,硬件需要一套完整的电脑,
包括键盘,鼠标,1GHZ最小硬盘空间。
1.3主要参考资料
c#.net应用程序开发书籍
1.4课程设计内容及要求
一、内容
1.要求根据程序设计的步骤和规范,完成各阶段的设计内容。
2.在access或sqlserver上实现设计的数据库模型。
3.使用c#语言对应用程序进行设计。
二、要求
课程设计过程中,要严格遵守课程设计的时间安排,听从指导教师的指导。
正确地完成上述内容,规范完整地撰写出课程设计报告。
第2章课程设设计内容
2.1游戏介绍
最早之一的扑克指南是JonathanHGreen在1834年写的,他提到了当时在密西西比河两岸流行的他称之为“欺骗游戏”的规则。
因为这种游戏没有确定的名字,他起名为扑克游戏。
扑克在欧洲的影响结束于1875年王牌成为万能牌。
人们开始争论扑克名字的起源,很多词典和游戏历史书提到它起源于十八世纪法国游戏,poque。
扑克游戏后来演化为包括32张牌,最终演化到今天的52张牌。
在1910年,内华达州将它定为一种赌博的重罪,加利福尼亚的首席检察官宣布玩扑克是一种技术,因此反赌博法无法令它停止。
但是梭哈扑克是违法的,因为它单存的取决于运气。
在该法律下,玩扑克得到了发展和成长。
这使得内华达州在1931年推翻了自己的并将娱乐赌博合法化。
今天,扑克根据赌博法得到了良好的规范,沙龙也推出了娱乐场和棋牌室,但是扑克却比世界上比任何一种牌都玩的多。
它已经成长为一种运动项目,在世界范围内展开了比赛和联赛。
几乎每个礼拜在世界的某个地方就会举行联赛。
三种游戏连续不断的主宰着扑克,尤其是美国的限制赌博游戏。
在一个半世纪扑克的历史中:
Draw、七张牌梭哈和holdem在他们上升期差不多占有2/3的市场。
Draw一直到20世纪初都一直大受欢迎,然后出现七张牌梭哈,一直保留到1980年,在二次世界大战的陆海空三军中十分兴盛。
然后在五六十年代内华达州娱乐场的上升期。
在七八十年代的后期,holdem取代了七张牌梭哈占据了主要位置,世界冠军的比赛使得它从早期的七十年代向前有了一个大的飞跃。
因而,holdem取得的巨大成功显示它是世界冠军比赛的一个很好选择。
远在古代周朝初,传说年幼的周成王在宫庭中与弟弟叔虞就曾玩一种“削桐叶为圭”的游戏。
那时尚未发明纸张,故以树叶为玩具。
唐、宋时代,中国的祖先发明了一种纸牌,既可游戏,亦可赌博,称“叶子戏”。
又有传说大将军韩信为了使士兵减少乡愁,在军中发明了一种供娱乐用的纸牌,因其只有树叶大小,故称之为叶子戏。
上自文人学士,下至平民百姓,均乐此不疲。
到了明、清时期,“叶子戏”纸牌,每副有40张,分4类。
牌上图案,品目甚多,有人物、飞禽、走兽、花、鸟、虫、鱼等。
清末至民国后,纸牌长约8厘米,宽约2厘米,人们称纸牌。
建国前后,潮汕民间还盛行纸牌赌博,玩法由简单的排列式而逐渐趋多种多样,每张纸牌上绘印1至10点的数码,或绘印上象棋上的“帅、仕、相、车等32字,分红、青、黑、白4色,共64张,作为排列式赌博。
2至4人共赌。
大约公元13世纪,这种纸牌戏,传到欧洲,经过一段时期,纸牌演变为卡片,逐渐形成了目前普遍的扑克牌,成为国际性纸牌。
2.1.1游戏规则
1.“三公”主要以牌A-9之间的这些牌来计算点数,以及公牌(J,Q,K)的组合来决定输赢。
牌10不算点数也不是公牌。
2.牌A-9对应1-9点,把三张牌的点数全部相加,取个位的数作为本方的点数。
如果有一方手里的三张牌都是公牌(J,Q,K),则为“三公”。
3.牌型比较:
三条>三公>点数大小(点数相同情况则为:
对子点数>公仔点数>点数)
4.点数比较:
9>8>7>6>5>4>3>2>1
5.花色比较:
黑桃>红心>梅花>方块
6.三条:
有三张同样大小的牌。
如果大家都是三条,比较三条大小。
7.三公:
公牌(J,Q,K)组合的三公。
如果大家也是“三公牌”的就以三张牌最大的那张牌的花色来决定输赢。
8.以点数大小来决定输赢:
点数大的一方则胜点数小的一方。
9.点数相等的情况(非“三公”)以最大的那张牌的花色来决定输赢。
2.1.2游戏说明
1.选择新游戏
2.玩家开始有1000的初始金额
3.玩家必须先下赌注,才能选择发牌,下注方式:
在快速下注的几个按钮中任意单击,当然不可以超过你拥有的最大金钱
4.确定自己的下注金额后,点击发牌
5.发完牌之后点击开牌
6.系统将自动判断您的牌面和庄家的牌面大小,然后告诉你是谁赢了,如果你拿到了“三公”的话那恭喜你,你得到的金额是你下注的两倍,这样一盘就算结束了。
7.结束了一盘当然要重新下注,然后发牌,开牌。
8.当你的金额为0时,那你就只能重新开始游戏或结束。
2.2游戏设计
我认为,一个好的纸牌游戏应该具备以下特征:
1.容易操作:
操作简单,不复杂
2.易于学习:
游戏是面向普通人而不是计算机专家,那么他们不可能深入的学习游戏技巧。
更不会去花费几个小时去研究。
3.可中断性:
一个好的游戏应该是提供短时间娱乐功能,并且允许用户在游戏和工作两者间顺利的切换。
4.简洁大方:
游戏界面强调不需要太多复杂效果,美观简洁,突出游戏本身为宜。
而本次课程设计设计的游戏,具备以上几个特点,方便了很多。
2.2.1界面设计
基于简洁大方的特点,界面采用灰色背景,没有过多的装饰,主要使用Label和Button两个控件,简洁明了,一目了然。
如图2.1
图2.1界面设计
2.2.2属性设置
纸牌游戏的难点在于洗牌和发牌次数的不确定,而会产生多种情况,从而我们就会利用随机函数的特点来处理这个问题,还有就是对于不同牌的比较,这是该题目的核心,实现了这几个功能,程序就基本弄好了。
该程序通过运用结构体和数组的相关知识来实现程序代码的,并且把随机函数运用到洗牌过程中,使每次都会产生不同的结果,最后运用if….else语句比较各牌大小,实现其功能。
2.2.3编程思路及代码
玩家开始有1000的初始金额。
必须先下赌注,才能选择发牌,下注方式:
在快速下注的几个按钮中任意单击,当然不可以超过你拥有的最大金钱。
确定自己的下注金额后,点击发牌。
发完牌之后点击开牌,系统将自动判断您的牌面和庄家的牌面大小,然后告诉你是谁赢了,如果你拿到了“三公”的话那恭喜你,你得到的金额是你下注的两倍,这样一盘就算结束了。
结束了一盘当然要重新下注,然后发牌,开牌。
当你的金额为0时,进行重新开始游戏或结束。
#include
#include
#include
#include
#include
#include
#defineOK1
#defineOVERFLOW-2
#defineNULL0
typedefstruct
{
inta;
intb;
intc;
intd;
inte;
intf;
}pocker;
intcmp(pocker,pocker);
intmax(pockeraa)
{
intmax;
if(aa.a>aa.b)
max=aa.a;
elsemax=aa.b;
if(aa.a>aa.c)
max=aa.a;
elsemax=aa.c;
if(aa.b>aa.c)
max=aa.b;
elsemax=aa.c;
returnmax;
}
voidmain()
{
intN;
pockera[3];
cout<<'\t'<<'\t'<<"游戏开始!
"<<'\n';
cout<<"输入洗牌次数:
"<<"N"<<'\n';
cin>>N;
printf("thecomputer_1:
***\n");
printf("thecomputer_2:
***\n");
srand((unsigned)time(NULL));//在掉用rand()之前首先调用该函数,并设置出值
for(inti=0;i<3;i++)
{
a[i].a=rand()%(13-1+1)+1;
a[i].b=rand()%(13-1+1)+1;
a[i].c=rand()%(13-1+1)+1;//随机产生1到13之间的随机数
a[i].d=rand()%(4-1+1)+1;
a[i].e=rand()%(4-1+1)+1;
a[i].f=rand()%(4-1+1)+1;//随机产生1到4之间的随机数
printf("%d,%d,%d%d%d%d\n",a[i].a,a[i].b,a[i].c,a[i].d,a[i].e,a[i].f);
}
intn=cmp(a[0],a[1]);
if(n==1)printf("computer_1>computer_2");
if(n==2)printf("computer_1==computer_2");
if(n==3)printf("computer_1}
intcmp(pockera,pockerb)
{
if(a.a==a.b==a.c)//如果是炸弹
{
printf("zhadan\n");
if(b.a==b.b==b.c)
{
if(a.a>b.b)
return1;
if(a.a==b.b)
return2
elsereturn3;
}
elsereturn1;
}
if(a.d==a.e==a.f)//如果是清一色
{printf("qingyise\n");
if(b.a==b.b==b.c)
return3;
if(b.d==b.e==b.f){
if(max(a)>max(b))
return1;
if(max(a)==max(b))
return2;
elsereturn3;
}
elsereturn1;
}
if((a.a+a.b)==2*a.c||(a.a+a.c)==2*a.b||(a.b+a.c)==2*a.a)//如果是一条龙
{
printf("long\n");
if((b.a==b.b==b.c)||(b.d==b.e==b.f))
return3;
if((b.a+b.b)==2*b.c||(b.a+b.c)==2*b.b||(b.b+b.c)==2*b.a){
if(max(a)>max(b))
return1;
if(max(a)==max(b))
return2;
elsereturn3;
}
elsereturn1;
}
if(a.a==a.b||a.a==a.c||a.b==a.c){//如果是对子
printf("duizi\n");
if((b.a==b.b==b.c)||(b.d==b.e==b.f)||(b.a+b.b)==2*b.c||(b.a+b.c)==2*b.b||(b.b+b.c)==2*b.a)
return3;
if(b.a==b.b||b.a==b.c||b.b==b.c){
if(max(a)>max(b))
return1;
if(max(a)==max(b))
return2;
elsereturn3;
}
elsereturn1;
}
else{
printf("putong\n");
if((b.a==b.b==b.c)||(b.d==b.e==b.f)||(b.a+b.b)==2*b.c||(b.a+b.c)==2*b.b||(b.b+b.c)==2*b.a||b.a==b.b||b.b==b.c||b.a==b.c)
return3;
else
if(max(a)>max(b))
return1;
if(max(a)==max(b))
return2;
elsereturn3;
}
}
2.3游戏实现
首先,执行该软件,系统并不需要很高的配置,cpu在1.0G以上,内存在512M以上就可以很流畅地执行。
其次,“三公”主要以牌A-9之间的这些牌来计算点数,以及公牌(J,Q,K)的组合来决定输赢。
牌10不算点数也不是公牌。
牌A-9对应1-9点,把三张牌的点数全部相加,取个位的数作为本方的点数。
如果有一方手里的三张牌都是公牌(J,Q,K),则为“三公”。
牌型比较:
三条>三公>点数大小(点数相同情况则为:
对子点数>公仔点数>点数),点数比较:
9>8>7>6>5>4>3>2>1,花色比较:
黑桃>红心>梅花>方块,三条:
有三张同样大小的牌。
如果大家都是三条,比较三条大小。
三公:
公牌(J,Q,K)组合的三公。
如果大家也是“三公牌”的就以三张牌最大的那张牌的花色来决定输赢,以点数大小来决定输赢:
点数大的一方则胜点数小的一方。
点数相等的情况(非“三公”)以最大的那张牌的花色来决定输赢。
2.3.1程序调试及测试
intcmp(pocker,pocker);
intmax(pockeraa)
{
intmax;
if(aa.a>aa.b)
max=aa.a;
elsemax=aa.b;
if(aa.a>aa.c)
max=aa.a;
elsemax=aa.c;
if(aa.b>aa.c)
max=aa.b;
elsemax=aa.c;
returnmax;
}
定义a,b,c,比较判断牌点数的大小。
for(inti=0;i<3;i++)
{
a[i].a=rand()%(13-1+1)+1;
a[i].b=rand()%(13-1+1)+1;
a[i].c=rand()%(13-1+1)+1;
a[i].d=rand()%(4-1+1)+1;
a[i].e=rand()%(4-1+1)+1;
a[i].f=rand()%(4-1+1)+1;\\产生在指定范围的随机数
a[i].a,a[i].b,a[i].c产生纸牌点数的随机性,a[i].d,a[i].e,a[i].f,产生随机牌的种类。
分别运用随机函数rand(),来产生在指定范围的随机数。
intcmp(pockera,pockerb)
通过定义cmp()函数来实现该游戏的具体游戏规则,并比较他们牌的大小。
2.3.2游戏运行
单击开始游戏后:
图2.2游戏开始
点击发牌:
图2.3点击发牌
纸牌结果图:
图2.4游戏结果
第3章课程设计总结
课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。
通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容;它的目的和任务就是训练学生对计算机加工的数据对象进行分析的能力,训练学生的编码以及调试能力,进而增加其对学习和应用相关专业课的兴趣。
通过本次实训,我们也可以对自己编程方面的能力和兴趣有了进一步的了解。
作为电子商务专业的学生,C#对我们来说是一门基础课程。
同学们的能力有差异,有人适合做编程。
本次实训有助于我们找准定位,对自己职业生涯有更明确、务实的规划。
古语云:
“逝者如斯夫,不舍昼夜”。
大学生活很快就过去,我们要珍惜时间,学习课内外知识。
在学习中积极进取,但是也不能够将自己框定在一个架子中,要为自己发掘多条道路。
能够将他们分别与计算机知识相结合,应对社会变化。
在社会激流中,“中流击水,浪遏飞舟”。
与其临渊羡鱼,不如退而结网。
这次课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。
从做这个开始无论遇到什么困难,我都没有一丝的放弃的念头。
出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。
我完成了这次数据库课程设计,不过这只是我学习路上的驿站,未来十年.net的核心技术就是xml,至少微软是这么宣传的,我会继续学习它,语言本来就是相通的,justdoit!
语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。
古语说的好:
学无止境啊!
从接到课题到完成课程设计,通过老师和同学以及自己的努力,让我学到了许多知识,提高了能力,为我今后的工作和学习打下了良好的基础,积累了许多宝贵的经验。
当我遇到错误的时候,感到很受打击。
值得欣慰的是,在同学的帮助和大量参考书的查阅下,我把自己的模块做好了。
这就是我收获最大的地方。
而且,我明白了遇到困难永不放弃的重要性,我知道了团队合作的重要性,我领悟了只有坚持不懈才会取得胜利。
知识的获得是无止境的,只要你想学,只要你行动,没有什么会难倒我们的。
回首这一个多星期的课程设计,我很欣慰。
因为我有了动力,有了勇气。
谢谢老师对我们的不懈帮助,谢谢老师给了我们这一次实践的机会。
这些美好的回忆美好的东西将永远伴随着我。
参考文献
1、SQLServer2000中文版完全实战.北京:
中国铁道出版社.章立民
2、数据库系统原理与应用.上海:
电子工业出版社.李卓玲主
3、数据库系统概论.北京:
高等教育出版社.王珊
4、数据库原理及应用.北京:
北京邮电大学出版社.钱雪忠
5、C#程序设计教程.浙江:
电子工业出版社.刘甫迎
6、VisualC#.NET程序设计.北京:
北方交通大学出版社.李兰友
7、VisualC#程序设计教程.北京:
清华大学出版社.王昊
8、VisualBasic.NET实用教程.北京:
电子工业出版社.佟伟光
9、C#语言程序设计教程.北京:
中国水利水电出版社.陈发吉
10、C#编程序起步.北京:
人民邮电出版社.HerbertSchildt
11、VisualC#.NET语言参考手册.北京:
清华大学出版社.李钦译