我的c#课程设计报告书.docx
《我的c#课程设计报告书.docx》由会员分享,可在线阅读,更多相关《我的c#课程设计报告书.docx(11页珍藏版)》请在冰豆网上搜索。
我的c#课程设计报告书
课程设计任务书
课程名称:
计算机语言C#课程设计
起讫时间:
2011-6-20~~2011-7-1
院系:
计算机工程系
班 级:
指导教师:
系主任:
一、课程设计课题
本课程设计要求学生运用C#.NET独立设计、编程开发一个完整的Windows应用程序,并完成课程设计报告。
可以从以下题目中选择:
①绘图板 ②二十一点游戏 ③科学计算器 ④弹珠游戏 ⑤日记本 ⑥屏幕保护程序 ⑦挖地雷游戏 ⑧调色板 ⑨文本编辑器 ⑩井字棋
也可自选课题(须征得指导教师同意)不建议选择贪吃蛇、华容道等难度比较高的题目,需要由本人完成大部分代码,不建议根据网上或书上的现成代码调试编写。
二、课程设计要求
1、设计选题:
学生可以在“《Windows应用程序设计》课程设计选题”指定的题目中选取课程设计题目,具体题目以此文件为准。
也可以自选,但自选的题目必须在课程设计开始前得到指导教师的认可。
2、设计结果:
学生需按所选题目的具体要求使用C#完成程序设计,同时还要完成课程设计说明书,以介绍课程设计的情况,说明书中应该至少包括以下几部分:
●题目说明
●总体设计:
概述程序的基本结构和主要技术。
●详细说明:
选择几个功能模块详细说明设计时的想法和所用的技术。
●遇到的问题和解决方法
●心得体会
3、考核要求
学生需提交完整的C#源程序(电子版)和课程设计说明书(打印稿),要求程序运行稳定可靠,能实现题目中所要求的功能。
课程设计说明书符合要求,并能对程序的设计思路或具体代码做出正确的解释。
三、课程设计工作量
1、程序中应有不少于100~300行的自行编写的代码。
2、软件界面美观大方,操作简洁易用,功能完备可靠。
3、说明书中摘用关键代码部分,应标注详细的代码说明。
4、课程设计报告以A4纸打印,其中正文不少于6页,正文主要用于解释实现思路和关
键代码,完整代码作附件。
四、课程设计说明书内容(有指导书的可省略)
课程设计说明书中至少应该包括以下几部分:
1、封面
2、摘要
3、目录
4、选题说明
5、总体设计:
概述程序的基本结构和主要技术。
6、详细说明:
关键技术模块的详细说明,列出主要方法的声明、功能、调用参数及使用场合和方法,对其作用和实现思路进行解释。
7、遇到的问题和解决方法
8、心得体会
9、参考文献
10、附件:
源程序
课程设计说明书正文不少于6页,源程序只算附页。
课程设计说明书
名称计算机语言C#课程设计
21点扑克牌游戏软件的设计与实现
2011年6月20日至2011年7月1日共2周
院 系计算机工程系
班级
姓名
学号
系 主 任
教研室主任
指导教师
目录
一、系统功能分析3
1.1.主体功能分析3
1.2.异常情况分析3
二、<按钮的可用性及随机发牌>功能的设计与实现3
2.1.功能设计3
2.2.代码实现3
2.3.技术细节4
2.4.实现效果4
三、<点数计算及显示>功能的设计与实现5
3.1.功能设计5
3.2.代码实现5
3.3.技术细节6
3.4.实现效果6
四、<结果的判断及其他按钮>功能的设计与实现6
4.1.功能设计6
4.2.代码实现7
4.3.技术细节7
4.4.实现效果8
五、遇到的问题和解决方法8
六、总结9
附录:
参考文献9
一、系统功能分析
1.1.主体功能分析
这个游戏的设计主要包括两个界面:
一个是游戏的开始与进行界面,另一个是游戏的规则界面。
在游戏进行的这个界面上有游戏的开始(Go)、两个重复的玩家发牌按钮、一个电脑发牌按钮,还有一个重新开始按钮(Again),双方各有四张牌。
a)开始按钮的主要操作是先玩家和庄家各出两张牌。
b)发牌按钮就是玩家选择是否要出牌,要是出牌了(一次就只能出一张),就要开始判断玩家的点数是否超过了21点,如果此时就超过了21点,结果是玩家爆了,电脑赢了,那么整个游戏结束。
c)不要牌就是玩家不想要牌了或者是玩家的牌已经出完了,要电脑出牌了(此时电脑的牌全部出了),再判断电脑的牌的点数是否超过了21点,超过了21点,就是电脑爆了,玩家赢了。
如果牌都出完了的时候双方的点数都不大于21点,那么就进行比较,点数多的就获胜。
d)Again再一次出牌,这个主要斯用在了,双方那个已经判断出结果后向再一次进行游戏。
除了这几个主要的按钮外,还设定了一个可以直接进入游戏规则的按钮,可以查看游戏规则,和一个退出游戏的按钮,直接退出游戏。
还有最主要的一点是点数的显示,通过按钮所的实现,而后对牌的点数进行一步一步的相加,每次加牌都要让点数自动相加起来,显示在庄家与玩家的对应位置。
1.2.异常情况分析
当进入游戏界面是,只有Go开始游戏和游戏规则这两个按钮可以用,其他的按钮都是处于无法操作状态。
还有只要有一方的点数爆了,即使时双方的牌还没出完,Go、发牌、不要了这几个都处于不可用状态,就只有Again这个键可以用。
二、<按钮的可用性及随机发牌>功能的设计与实现
2.1.功能设计
当刚进入游戏的窗体的时候就应该设置哪些按钮是可以用的而哪些按钮是暂时不可以用的,我在这个界面中就设置了发牌和不要了这两个按钮此时不可用,因为一旦这两个按钮可以用,就会出现游戏还没开始的时候就有机会发牌的状况。
游戏开始的时候,按下按钮Go就可以进入游戏的开始状态了,此时电脑和玩家各有随机出的两张牌。
下面由玩家选择是否要牌了,每要一次牌,玩家就会增加一张牌,还要通过计算看看游戏是否可以结束,在没结束的状态下,玩家还可以选择不要牌了,那么此时就相当于电脑出牌,而且是电脑的牌全部出完,同时也计算最终的结果了。
不过在这个思路中,我也明确了在牌都还没发完的情况下有一方出现爆的时候,我也要设置好按钮的可用性。
2.2.代码实现
privatevoidForm1_Load(objectsender,EventArgse)//这是在游戏还未开始的时候的按
{//钮的状态。
button10.Enabled=false;
button4.Enabled=true;
button5.Enabled=false;
button6.Enabled=false;
button7.Enabled=true;
}
Randomran=newRandom();//这里主要实现的时随机出牌
RandKey6=ran.Next(0,51);
if(RandKey6==RandKey1||RandKey6==RandKey2||RandKey6==RandKey5)
RandKey6=ran.Next(0,51);//判断牌不能重复以及重复的时候又该怎样出牌。
this.pictureBox3.Image=this.imageList1.Images[RandKey1];//这个是出牌时的代码
if(sum2>21)//出牌当中按钮
{
textBox3.Text="玩家你爆了,电脑赢了,你要加油啦!
";
button4.Enabled=false;
button5.Enabled=false;
button6.Enabled=false;
button7.Enabled=true;
button10.Enabled=false;
}
Else
{
button4.Enabled=false;
button5.Enabled=false;
button6.Enabled=true;
button7.Enabled=true;
button10.Enabled=true;
}
2.3.技术细节
随机出牌的代码的实现,还要注意牌是不能重复的。
在玩家发牌也就是出第三张随机牌的时候,就必须要判断玩家的牌是否超过了21点,超过了的话,就要让Go、发牌、不要了这三个按钮处于不可以操作状态,出第四张牌同样也要做这样的判断,结果亦然。
还有在不要牌的时候,电脑出了两张牌,还要判断是否超过了21点,
2.4.实现效果
//实现了按钮的可用于不可用
//下面的这张图实现了在发牌过程中进行判断是否超过21点的效果,超过了
就显示结果,结束游戏而也只有Again这个键可用,其他的不可用了。
三、<点数计算及显示>功能的设计与实现
3.1.功能设计
电脑和玩家的点数的设计用于显示在linklabel1和linklabel2中,我们的牌是放在了imagelist中的。
点数的根本计算的思路是根据数组的下标的数,然后通过下标与13的余数再加上一九可以算出某张牌的对应的点数,而且J、Q、K的点数大小都按照大小为10来计算的。
当每出一张牌的时候就要把牌的相应的点数相加起来,然后显示在对应的linklabel中。
3.2.代码实现
doublesum1=0,sum2=0;//sum1代表庄家,sum2代表玩家。
privatevoidbutton4_Click_1(objectsender,EventArgse)//说明了sum2在整个代码中的联系
{
sum2=a+b;
linkLabel2.Text=sum2.ToString();
}
privatevoidbutton5_Click_1(objectsender,EventArgse)
{
sum2+=c;
linkLabel2.Text=sum2.ToString();
}
c=RandKey7%13+1;//计算点数
while(c>10)
c=10;//J、Q、K按照点数为10来计算
sum2+=c;//把每出一张牌的点数相加起来
linkLabel2.Text=sum2.ToString();//把点数显示在linklabel上
3.3.技术细节
对于各个变量的声明要放在整个类的上面,而不单单是放在某一个方法中,如果就是放在了某个方法中,虽然说我们可以每次都在方法中声明一下,但是有的变量是要在整个类及每个方法中都是有联系的使用的,比如说sum1和sum2,它们在button4中得到了结果,而这个结果也要用在button5中的及还有更多方法中。
3.4.实现效果
//实现了把点数显示在linklabel上
//下面的图实现了JQK都是代表10点
四、<结果的判断及其他按钮>功能的设计与实现
4.1.功能设计
用了一个textbox来显示最后胜负的结果的,这个主要是根据各自的点数来判断结果的。
从Go以后,玩家出牌的话就要计算玩家是否有可能总的点数大于21点,就要在textbox上面显示“玩家爆了,电脑赢了”的结果,然后游戏就可以结束了。
而如果玩家在不要牌之前的牌的点数总和就大于21点,textbox上就不显示任何结果。
在电脑出牌的时候同样也要判断电脑方的总店书是否大于21点,大于的话就显示“电脑爆了,玩家赢了”,否则两方就进行比较,在显示相应的结果即可。
除了这几个主要的按钮,我还设计了供游戏者参考的游戏规则,这个游戏规则按钮的作用就在这里了。
4.2.代码实现
if(sum2>21)//玩家发牌的时候进行的比较,看其是否大于21点
{
textBox3.Text="玩家你爆了,电脑赢了,你要加油啦!
";
button4.Enabled=false;
button5.Enabled=false;
button6.Enabled=false;
button7.Enabled=true;
button10.Enabled=false;
}
if(sum1>21)
textBox3.Text="电脑爆了,玩家你赢了!
";
else
{
if(sum1>sum2)
textBox3.Text="电脑赢了,你要加油哦!
";
elseif(sum1==sum2)
textBox3.Text="平局";
else
textBox3.Text="玩家你赢了哦,继续加油!
";
}
4.3.技术细节
双方发两张牌的时候不用比较因为两张牌的最大点数也不回超过20点的,但是到发第三张的时候就一定要进行比较,此时就有能有21点的可能性,只要有了大于21点的情况,就会结束游戏,如果不判断就会使游戏失去其21点的真正的目的。
4.4.实现效果
五、遇到的问题和解决方法
A)一开始是按钮的问题,当玩家发牌的时候,我只能发一张牌出去,然后再想发牌的时候,按钮就不好用了;我的解决方法是用了两个重复的按钮,一个用的时候另一个是不可用的,这样两个按钮就交互使用而不会出现同时出现的状况。
B)无法计算点数,每次计算出来都只能得出此时单张牌的面值而不是同时也能把前面出过的牌的点数也加上去;解决这个问题的方法是要把计算总数的这个变量放在整个类的上面而不是单单是放在某个方法里面,这样过后每次sum1和sum2都可以连续再用了。
C)还有就是把获得的点数放到linklabel中时出现错误,我是直接就用linklabel.text=”sum1”这个代码的;而最终的解决方法是linklabel.text=sum1.tostring();以至于这个问题就可以解决了。
D)把牌放在imagelist是没按照一定的顺序,以致我在随机发牌的时候,虽然有能计算点数的代码,但是随机出现的牌根本就不能和点数相对应;最后的解决办法是把牌按相同的花色从A-K都一次向下排列就可以了
六、总结
对于做这个游戏程序,我有几点感受。
首先,是自己能充分发现自己的问题,我在做这个游戏时就发现了许多我自己无法解决的问题,但针对这些问题,我又必须要寻找解决的办法解决。
能解决一点就能收获一点,或者是通过同学的指教,或者是自己去查找一些资料都能让我有意外的收获。
在做这个小游戏的整个过程中,可以说花了我很长时间,也许对于别人来说着知识一个简单的小任务,但对于我来说,我对编程的基础还不算怎么好,可我能一步一步的做完,还在最后做成功了,使我深深的感受到了一种喜悦的感觉。
第二就是很能体会到一种合作的精神,做这个游戏的我们几个女生都在开始的一个阶段陷入了困境,因为我们也好像找不到什么平时讲过的东西可以参考,而且我们对编程这个东西也不是怎么的了解,然后就相互的交流着,只要有一个人能发现点什么就会在一起讨论,最后是我们就通过这样的一步一步的发现与解决而解决了最终的问题。
最后的一点就是发现了学习还是要与实践结合才有用,我们平时学的都是理论,虽说也有上机课,但是老师都会把那些程序代码给我们,而我们就只照上面写,那时候我们根本就不想思考,以致我感觉我现在什么都不会似的。
所以平时学的东西要自己主动的去操作,而不总要等老师布置,也许老师就不会布置,那我们要想学好,还是离不开主动的。
附录:
参考文献
1.c#.NET程序设计项目教程
2.c#程序设计-基础教程与实验指导