当前位置:文档之家› 课程设计(24点游戏)

课程设计(24点游戏)

课程设计(24点游戏)
课程设计(24点游戏)

24点游戏课程设计报告

1 基本功能描述

24点游戏是一种使用扑克牌来进行的益智类游戏,游戏内容是:从一副扑克牌中抽去大小王剩下52张,任意抽取4张牌,把牌面上的数运用加、减、乘、除和括号等进行运算得出24。每张牌都必须使用一次,但不能重复使用。在不同版本中,对J、Q、和K的处理有些差异。一个常见的版本是把J、Q、和K去除,或当成10;还有一个版本是把J 表示11,Q表示12,K代表13。本次课程设计采用将J、Q、K去除,使四张牌在1~10这十张牌中随机取牌。具体功能如下:

[1]由三个难度级别数,分别为一级、二级和三级。每次发牌前可进行难度设置,若不设置,系统默认为难度级别数为二级。难度级别设置完后,点击“发牌”按钮,桌面上显示四张翻开的扑克牌,并且游戏开始计时,进度条开始前进。

[2]在规定的时间内,用户可以在输入算式编辑框中输入想好的算式,并按下“验算”按钮。如果不输入任何数字和算符,会弹出“表达式有问题!”,然后再弹出一个对话框,显示“对不起,您的输入不正确!”;如果输入的数字与给出的不符或者符号不合法,会弹出“对不起,您的输入不正确!”;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,就会出现“The result is: ! ”;如果输入算式经运算后所得答案正确,则会弹出“你做对了!”。点击弹出对话框的确定按钮,会出现本轮的用时和分数。

[3]如果在规定的时间内,没有点击验算按钮,则会弹出一个对话框,上面显示“Time Over!”。

[4]在结束本轮游戏后,如果用户想继续游戏,点击“重新发牌”按钮即可重新发牌;如果用户想结束游戏,点击“结束”按钮即可结束游戏。

2 设计思路

24点游戏的具体流程图如下图1所示,下面对流程图进行详细的说明。

在游戏开始前有难度设置选项,用户可根据自己的实际水平进行设置。难度级别有三个级别,分别为一级、二级和三级。三个级别是通过时间来区别的,级别越高,可用时间越少。三个级别的对应时间分别是100秒、60秒和50秒。该设置不是必选项。如果用户不设置,系统默认为难度级别二。

按下“发牌”,游戏开始,通过调用srand()和rand()函数,桌面上会随机显示出4张纸牌,这四张牌从1~10这10张牌中随机调出。同时,标识耗时时标的进度条开始前进(m_Progress1->SetPos(m_Progress1->GetPos()+1),计时同步开始(SpendTime++)。由于三

个等级设置的时间不一样,进度条在三种情况下的步长也不相同。

游戏设置了时间限制,该设置是通过比较函数m_Progress1->GetPos()的返回值和参数m_Hardlevel的大小。如果函数的返回值小于参数m_Hardlevel,代表游戏还没结束,用户还有时间进行思考。否则,本轮游戏结束,在函数OnTimer()的作用下,会弹出对话“Time Over!”。

若用户在规定时间内点击了“验算”按钮,系统通过对SubCompute()和TotalCompute()两函数的调用进行相应运算,紧接着系统调用OnYanSuan()函数对编辑框中运算出的结果进行验算,根据验算情况给出相应的结果。出现的结果有以下四中情况:(1)如果用户没在输入算式中输入算式,直接按“验算”按钮,会弹出“表达式不能为空白!”的提示对话框。(2)如果输入的数字与给出的不符或者符号不合法,会弹出“你的输入不正确!”的提示对话框。(3)如果输入的数字与四张牌相符、字符亦合法但是答案不正确,会弹出“The result is:!”。(4)如果输入算式经运算后所得答案正确,则会弹出“你做对了!”在以上任意一种情况下,点击弹出框中的“确定”按钮,系统会自动给出本局的得分和耗时。游戏的耗时使用SSpendTime.Format("%d",SpendTime)这个函数进行显示,游戏得分是在综合考虑游戏级别、游戏所耗费时间的基础上给出(m_score=100*(m_Hardlevel-SpendTime) /m_Hardlevel)。于是,本轮游戏结束。

本轮游戏结束后,用户可以选择重新开始,否则,可以点击“结束”按钮退出游戏。

3 软件设计

3.1 设计步骤

24点游戏的具体设计步骤如下:

[1]创建MFC AppWizard(exe)工程,键入对应的工程名(dinglu),在应用程序类型中选择基本对话框,其余的都采用默认选项,完成对话框的创建。

[2]通过插入-资源-Bitmap加载图片,图片通过拷贝和复制等操作加载完成。加载完成的图片在对应的工作区可以找到,选中对其名字进行修改。

在对话框中添加4个图像、9个按钮、3个编辑框、1个进度条和3个单选按钮。然后,根据属性对以上所添加的控件进行属性修改,主要是对其进行重命名。图像内的属性修改除改名外,还要添加位图。

[3]下一步是对以上控件建立类向导,主要包括Add Function、Add Variable和Edit Code 这三项的添加。

[4]在类的原文件中添加实现功能所需要的各种函数,并添加相应的代码,同时在头文件中添加对各种函数及变量的声明。

[5]对完成的程序进行保存,然后开始调试,根据错误进行修改,直至程序不在报错,并且可以实现预计的各种功能。

图2 24点游戏运行图

3.2 界面设计

24点游戏所用控件说明图如下:

表1 控件类型、ID及相关说明

对象ID Caption或说明变量名

进程IDC_PROGRESS1 耗时m_Progress1 静态文本IDC_STATIC 静态文字说明

一级单选按钮IDC_RADIO1 一级m_Hardleve

二级单选按钮IDC_RADIO2 二级

三级单选按钮IDC_RADIO3 三级

位图IDC_Picture0 位图

位图IDC_Picture1 位图

位图IDC_Picture2 位图

位图IDC_Picture3 位图

编辑框IDC_EDIT1 输入计算m_Edit1

编辑框IDC_STATIC10 时间SpendTime 编辑框IDC_STATIC11 得分m_score

按钮IDC_Start 开始

按钮IDC_YanSuan 验算

续表

3.3 关键功能的实现

3.3.1 发牌功能的实现

首先,通过BOOL CDingluDlg::OnInitDialog()中,根据纸牌对应的ID号加载纸牌,例如:Bitmap[7].LoadBitmap(IDB_BITMAP7)这条语句加载标有7的纸牌。利用该函数加载了标号1~10的十张纸牌和两张背景纸牌。然后运行中的以下一段代码,即可在图像框中得到四张铺开的纸牌。代码如下:

srand((int)time(0));

for(int i=0;i<4;i++)

Number[i]=rand()%13;//产生一个0—12的随机数

((CStatic*)GetDlgItem(IDC_Picture0))->SetBitmap(HBITMAP(Bitmap[Number[0]]));

((CStatic*)GetDlgItem(IDC_Picture1))->SetBitmap(HBITMAP(Bitmap[Number[1]]));

((CStatic*)GetDlgItem(IDC_Picture2))->SetBitmap(HBITMAP(Bitmap[Number[2]]));

((CStatic*)GetDlgItem(IDC_Picture3))->SetBitmap(HBITMAP(Bitmap[Number[3]]));

srand(seed)用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。

3.3.2 计时功能的实现

首先,在void CDingluDlg::OnStart()中,通过m_Progress->SetStep(1)和m_Progress ->SetPos(0)设置进度条的步长为1,进度条的初始位置居左。然后调用void CDingluDlg ::OnTimer(UINT nIDEvent)来完成计时功能。利用函数if(m_Progress1->GetPos()>=

m_Hardlevel)来判断即使结束了没有,如果括号中的条件满足,则计时结束,跳出“Time Over!”的提示框。如果括号中的条件不满足,则执行以下代码:

CProgressCtrl* m_Progress1=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);

m_Progress1->SetRange(0,m_Hardlevel);

m_Progress1->SetPos(m_Progress1->GetPos()+1); //进度条前进一步

上述代码表示,如果时间没到,时间每流逝1秒,进度条就前进一步。当游戏时间即将结束的时候,进度条亦前进到最后一步。

3.3.3 计算功能的实现

对于输入结果的验算,主要是通过int LastPos(CString Str),int FirstPos(CString Str),char FirstF(CString Str),int SubCompute(CString Str),int TotalCompute(CString Str)等函数来来确定运算式各符号优先级和最终计算出输入算式的结果。现摘两段代码进行详细说明。代码1:

int PluPos=Str.Find('+')+1;

int Pos=200;

if(PluPos==0)

PluPos=200;

if(Pos>PluPos)

Pos=PluPos;

char Result='-';

int tempPos=SubPos;

if(PluPos

{

Result='+';

tempPos=PluPos;

}

return Result;

代码1的作用是判断最先出现的符号是不是+号。Pluspos表示+号出现的位置,如果没有+号出现,对pluspos负一个不可能的值;如果+号存在,将pluspos与pos比较大小。

如果pluspos小于pos,将pluspos的值负给pos。pluspos再与tempos比较,如果在减号之前出现,显示的结果是+号。

代码2:

int CDingluDlg::TotalCompute(CString Str)

{

int First=Str.ReverseFind('(')+1;

while(First)

{ CString SubStr=Str.Mid(First,(Str.GetLength()-First));

int Last=SubStr.Find(')')+1;

Last+=First

CString Left=Str.Mid(0,First-1)

CString Middle=Str.Mid(First,Last-First-1)

CString Right=Str.Mid(Last,Str.GetLength()-Last)

int Result=SubCompute(Middle)

Middle.Format("%d",Result);

Str=Left+Middle+Right;

First=Str.ReverseFind('(')+1;

}

int Result=SubCompute(Str);

return Result;

}

代码2的作用是对于编辑框中输入的表达式进行计算,系统通过Str.ReverseFind('(')+1来反向查找定位第一个“(”所在的位置。然后通过while循环查找到表达式最内层的括号,又借助于Str=Left+Middle+Right;将有优先级差别同时不带括号的表达式传送到SubCompute()函数中,最终计算出输入到编辑框中的表达式结果Result,并将其返回。

3.3.4 验算功能的实现

1.弹出框的实现

在规定的时间内输入算式进行验算,根据不同的情况会出现不同的对话框。有以下四种情况:如果用户没在输入算式中输入算式,直接按“验算”按钮,会弹出“表达式不能为空白!”的提示对话框;如果输入的数字与给出的不符或者符号不合法,会弹出“你的输入不正确!”的提示对话框;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,会弹出“The result is:!”;如果输入算式经运算后所得答案正确,则会弹出“你做对了!”。具体代码如下:

if(Str=="") {MessageBox("表达式不能为空白!","Warning!",MB_OK);flag=0;}

if(Result==24) MessageBox("你输入正确!","TURE!",MB_OK);

由于代码太长,只摘取不输入与输入计算结果正确两种情况进行说明。当输入Str为空时,通过MessageBox()显示“表达式不能为空白!”。当输入算式正确,判断计算结果Result==24,通过MessageBox()显示“你输入正确!”。当输入字符有错,通过一段很长的程序判断,然后通过MessageBox()显示“你输入的不正确!”。

2.等分功能的实现

当用户在每局游戏结束后,如果没有计算出正确结果,得分会显示为0分;如果计算出了正确结果,则会显示一个0~100之间的整数值。用户最终得分的确定是由其选择的游戏级别和游戏所花费时间长短来确定的。实现代码如下:

if(Result==24)

{ CString Sscore;

m_score=100*(m_Hardlevel-SpendTime)/m_Hardlevel;

Sscore.Format("%d",m_score);

GetDlgItem(IDC_STATIC11)->SetWindowText(""+Sscore+"分"); UpdateData(FALSE);

}

OnYanSuan()函数来对编辑框中运算出的结果进行验算,如果Result==24,则if语句被执行。语句m_score=100*(m_Hardlevel-SpendTime)/m_Hardlevel;说明用户花费时间越长或者游戏剩余时间占总时间比重越小,则本局游戏得分也相应越小。而通过语句Sscore.Format("%d",m_score);的作用则将int量m_score转换为Cstring量Sscore。同时,SetWindowText()函数发挥作用,显示出分数Sscore。

4 结论与心得体会

VC++的课程设计终于接近尾声了,又到了写课程设计报告的时间了。这次课设比以往的课设任务重、安排紧。之所以这么安排,我是这么理解的,这次安排单片机的课设是为了巩固上课所学的知识,将其应用到实践中来,好歹也是这学期学的。至于安排VC++的课设,我开始是很不能理解,因为我们是大二上学期学的,丢了快一年了,现在做课设又得重新将它捡起来,这很费时间。后来做完课设,看着自己的游戏界面,可以像平时玩的小游戏一样玩,感觉还挺自豪的,觉得这一星期没有白过。这一星期走来,我感受颇多,大约有以下几点:

首先,这次课设对VC+起到温故知新的作用。课程设计之初,思路全无,举步维艰,对于理论知识学习不够扎实的我深感“书到用时方恨少”。于是,重新捡起课本,对照课本基本控件这一章,将计算器和菜单栏制作这两个范例做了几遍。对于进程条的设置不清楚,又找同学复制了以前的课件来看,经与同学的再三讨论,终于弄清了进程条的设置。至于编程这一块,那是忘得更多了,于是又借了基本参考书来看,遇到难处先是仔细的思考然后在向同学请教。可以说开始的那么几天都是在查找资料,翻阅相关的书籍。

其次,这次课设让我明白了实践出真理的道理。最初答辩弄完后,还有一些程序不知道怎么写。于是,又从网上收集相关程序,经分析、查询资料仍有一些地方看不懂。只能采用尝试往对话框中添加相应代码的方法。根据一大段的分析,感觉程序执行某个功能,将这段代码添加到对应位置。所有的代码添加完后,运行、调试,开始会有很多错误出现。我记得最多的时候有63个错误,逐条进行修改,再进行运行和调试。也不知道改了多少次和重做了多少次,终于做出了完美的游戏界面。

再者,让我学会了如何创新。得到游戏界面后,我又从网上下了几个24点游戏与我的相比较。相比较发现,网上的游戏出牌比较合理,我的游戏出牌很杂乱,很多情况都是无解,我也相应做了调整。再者,我发现很多游戏都是倒计时,我也进行了尝试。除此,我发现有些游戏也加了四张牌的按钮,一发牌,对应的牌就显示在快捷键上,这点我也做了尝试。以上三点,就是我关于本次课设的创新,虽然最后没能实现,但这个过程的实践是快乐的,代表我开动了脑筋。

最后,这是一场毅力的考验。课设开始给人感觉很难,但很庆幸我们都没有畏惧,还是尽力去查资料、想办法解决。怎么说,“态度决定一切”,我们终于跨越了这道障碍,圆满完成了课设。

5 参考文献

[1] 刘於勋等.C++程序设计.科学出版社,2007

[2] 荣钦科技.Visual C++游戏编程基础.电子工业出版社,2004

[3] 揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社,2005

[4] 罗伟坚.Visual C++经典游戏程序设计.人民邮电出版社,2006

6 思考题

1.改变难度可以变化游戏的限时和游戏加分的规则,如何实现?

游戏的限时是通过对进度条的设置来实现的,通过定义一个m_Hardlevel变量之后,用它来设置进度条的范围(SetRange(0,m_Hardlevel);),即当用户选择不同级别的游戏时,进度条的范围会随着m_Hardlevel的值而不同,游戏难度越大,m_Hardlevel的值越小(本游戏中共设置了100秒、60秒、50秒三个级别),时间也就越短,反之时间越长。

游戏的加分规则综合考虑了用户选择的游戏级别和一局游戏所花费时间的长短,即:m_score=100*(m_Hardlevel-SpendTime)/m_Hardlevel;也就是说难度的选择和用户所用时间同时决定最后的得分。

2.如何保证程序是根据给出的牌来书写算式的?

答:首先通过每张纸牌的ID号,将它们加载到Bitmap[]中,通过随机函数得到四个随机数之后,亦即得到四张系统随机发放的纸牌;然后利用指针将得到的纸牌在void CDingluDlg::OnStart()中进行相应设置;最后在void CDingluDlg:: OnYanSuan()中,通过Mid()和int m=(int)(int)(strtod(Mul1.GetBuffer(Mul1. GetLength()),&stopstring)); 获取用户输入到编辑框中的数据,将m和Number[i]进行比较,从而最终确保程序是根据给出的牌来书写算式的。

3.如何使用随机函数控制扑克牌的显示?

答:首先在BOOL CDingluDlg::OnInitDialog()中,用纸牌对应的ID号对纸牌进行加载(如Bitmap[12].LoadBitmap(IDB_BITMAP12)),然后在void CDingluDlg::OnStart()中,利用srand((int)time(0));和Number[i]=rand()%13;两条语句选出相对应的四张纸牌,即可得到随机发放的四张扑克牌了。

7 附录

7.1 调试报告

7.1.1 变量未定义造成错误

在代码添加过程中,由于涉及很多的函数和变量,可能会出现某几个变量忘定义的情况,这些变量有可能是在头文件中忘记定义或者在某个函数体中忘记定义。下面举一个在头文件中变量忘定义的例子,如下所示:

图3 因变量未定义而出现的错误截面图

在添加完各个函数的代码完毕后,以为头文件会自动对相应得变量进行定义,但头文件没有对所有的变量都定义,才出现了如上图所示的错误。打开头文件,双击dingluDlg.h,在class CDingluDlg : public Cdialog类定义函数中添加对m_Hardlevel参数的定义。添加完毕后,程序不再报这个错误。

7.1.2 关键类未添加

在画图对话框中,摆好各种控件后,逐一对每个控件添加类向导。对话框中出现的控件一般都不会忘记建立类向导,但有1个类向导是容易忘记的,它是IDC_PROGRESS1建立的类向导名称是OnOutofmemoryProgress1。下面用图形表示这个错误,如下所示:根据错误提示,重新选中图片,建立OnOutofmemoryProgress1的类向导。建立完毕后,重新运行程序,不再提示开错误。

图4 因关键类未添加而出现的错误截面图

7.1.3 进度条错误

类导向和代码添加完后,运行程序,出现游戏界面。点击游戏界面内的“发牌”按钮,出现四张扑克展开,但是没过2秒钟跳出“Time Over!”对话框,并且进度条不动。下面用图形表示这个错误,如下图所示:

图5 进度条设置错误而出现的错误截面图

这个错误可能是计时时间设置的太短,进度条的步长设置的不合理。重新设置计时时间范围和进度条步长,然后运行程序,错误仍然存在。再从头到尾把程序检查一遍,做相应修改,再运行,错误仍然存在。于是将所有类删除后重新添加,并且添加相应程序,重新运行,错误消失。

7.2 测试结果

7.2.1 在规定时间内完成点击“验算”按钮操作

测试过程中,由于既涉及到纸牌点数和运算符,又会涉及到运算式结果,于是相应地会显示出四种结果,分别是:如果用户没在输入算式中输入算式,直接按“验算”按钮,会弹出“表达式不能为空白!”的提示对话框;如果输入的数字与给出的不符或者符号不合法,会弹出“你的输入不正确!”的提示对话框;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,会弹出“The result is:!”;如果输入算式经运算后所得答案正确,则会弹出“你做对了!”。下面用图形做相应说明:

[1]输入算式为空,点击“验算”,显示“表达式不能为空白!”,如下图所示:

图6 输入表达式为空而出现的游戏界面

[2]输入的数字与给出的不符或者符号不合法,点击“验算”,会弹出“你的输入不正确!”,如下图所示:

图7 输入字符错误而出现的游戏界面

[3]如果输入的数字与四张牌相符、字符亦合法但是答案不正确,点击“验算”,会弹出“The result is:!”,如下图所示:

图8 输入字符正确而运算结果不正确出现的游戏界面

[4]如果输入算式经运算后所得答案正确,点击“验算”,则会弹出“你做对了!”,如下图所示:

图9 输入结果正确而出现的游戏界面

7.2.2 在规定时间内未完成点击“验算”按钮操作

规定时间内未进行输入,或输入后未完成点击“验算”按钮操作,显示“Time Over!”,如下图所示:

7.3 关键源代码

BOOL CDingluDlg::OnInitDialog()/程序初始化

{

CDialog::OnInitDialog();

Bitmap[0].LoadBitmap(IDB_BITMAP13);//为纸牌图片的数组加载13张初始图像Bitmap[1].LoadBitmap(IDB_BITMAP1);

Bitmap[2].LoadBitmap(IDB_BITMAP2);

Bitmap[3].LoadBitmap(IDB_BITMAP3);

Bitmap[4].LoadBitmap(IDB_BITMAP4);

Bitmap[5].LoadBitmap(IDB_BITMAP5);

Bitmap[6].LoadBitmap(IDB_BITMAP6);

Bitmap[7].LoadBitmap(IDB_BITMAP7);

Bitmap[8].LoadBitmap(IDB_BITMAP8);

Bitmap[9].LoadBitmap(IDB_BITMAP9);

Bitmap[10].LoadBitmap(IDB_BITMAP10);

Bitmap[11].LoadBitmap(IDB_BITMAP11);

Bitmap[12].LoadBitmap(IDB_BITMAP12);

CProgressCtrl*m_Progress1=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);/设置时间的指针

m_Progress1->SetRange(0,1000);/设置进度条的取值范围

m_Progress1->SetPos(0);//设置进度条的初值

GetDlgItem(IDC_YanSuan)->EnableWindow(FALSE);/使验算按钮无效CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO2);/测试选中的难度级别UpdateData(FALSE);/难度级别显示

void CDingluDlg::OnStart() /发牌代码

{

S=1;

m_Edit1= _T("");/对编辑框清空

m_score=0;/将等分初始化为0

UpdateData(FALSE);/用负给控件变量的值来刷新控件,让控件把操作后的变量显示出srand((int)time(0));/以(int)time(0)做为srand()函数的种子seed

for(int i=0;i<4;i++) /应用for语句来为四张牌赋值

Number[i]=rand()%13;/产生一个0—12的随机数

((CStatic*)GetDlgItem(IDC_Picture0))->SetBitmap(HBITMAP(Bitmap[Number[0]]));

((CStatic*)GetDlgItem(IDC_Picture1))->SetBitmap(HBITMAP(Bitmap[Number[1]]));

((CStatic*)GetDlgItem(IDC_Picture2))->SetBitmap(HBITMAP(Bitmap[Number[2]]));

((CStatic*)GetDlgItem(IDC_Picture3))->SetBitmap(HBITMAP(Bitmap[Number[3]]));

/将随机产生的四张图片加载在四张扑克牌位置

GetDlgItem(IDC_Start)->SetWindowText("重新开始");

/将“发牌”按钮的名字改为“重新开始”

GetDlgItem(IDC_YanSuan)->EnableWindow(TRUE);

/使验算按钮被鼠标点击有效

/设置三个难度级别

int iRADIO=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);

if(iRADIO==IDC_RADIO1) {m_Hardlevel=100;}/一级,允许时间为100秒

else if(iRADIO==IDC_RADIO2) {m_Hardlevel=60;}/二级,允许时间为60秒

else if(iRADIO==IDC_RADIO3) {m_Hardlevel=50;}/三级,允许时间为50秒CProgressCtrl* m_Progress=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);

/定义进度条指针变量m_Progress

m_Progress->SetStep(1);//设置步长值为1

m_Progress->SetPos(0);//进度条初始位置居左

SetTimer(1,1000,NULL);/设置计时器,每隔1秒发出一个消息映射

SpendTime=0;/游戏耗时初始化为0

GetDlgItem(IDC_RADIO1)->EnableWindow(FALSE);/游戏开始后,难度选择按钮禁用GetDlgItem(IDC_RADIO2)->EnableWindow(FALSE);

GetDlgItem(IDC_RADIO3)->EnableWindow(FALSE);

}

void CDingluDlg::OnTimer(UINT nIDEvent)

{

if(nIDEvent==1) /判断计时器

{

CProgressCtrl* m_Progress1=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);

/定义进度条指针变量m_progress1

m_Progress1->SetPos(m_Progress1->GetPos()+1);/进度条前进一步

m_Progress1->SetRange(0,m_Hardlevel);/进度条的变化范围在0与m_Hardlevel之间if(m_Progress1->GetPos()>=m_Hardlevel)/计时是否结束的判断语句

{

KillTimer(nIDEvent);/计时停止

AfxMessageBox("Time Over!",MB_OK);/显示“Time Over!”对话框

GetDlgItem(IDC_YanSuan)->EnableWindow(FALSE);/使验算按钮无效

GetDlgItem(IDC_RADIO1)->EnableWindow(TRUE);

GetDlgItem(IDC_RADIO2)->EnableWindow(TRUE);

GetDlgItem(IDC_RADIO3)->EnableWindow(TRUE);/使三个难度级别按钮无效

}

}

SpendTime++; /时间的流逝,执行一次,自加一次

CString SSpendTime;/定义指针变量SSpendTime

SSpendTime.Format("%d",SpendTime);/输出SSpendTime字符串中的内容

GetDlgItem(IDC_EDIT3)->SetWindowText(""+SSpendTime+"秒");/显示时钟秒的时间CString Sscore;/定义指针变量Sscore

Sscore.Format("%d",m_score);/输出字符串Sscore中的内容

GetDlgItem(IDC_EDIT4)->SetWindowText(""+Sscore+"分");/显示时钟分的时间

CDialog::OnTimer(nIDEvent);

}

/判断最先出现的符号是+号、-号、*号还是/号

char CDingluDlg::FirstF(CString Str)

{

int SubPos=Str.Find('-')+1;/从字符串Str中查找减号的位置

int PluPos=Str.Find('+')+1;/从字符串Str中查找加号的位置

int MulPos=Str.Find('*')+1;/从字符串Str中查找乘号的位置

int DivPos=Str.Find('/')+1;/从字符串Str中查找除号的位置

int Pos=200;/设定一个变量,并赋初值200

if(SubPos==0)

SubPos=200;/如果没有减号,给SubPos赋一个不可能的值if(PluPos==0)

PluPos=200; /如果没有加号,给PluPos赋一个不可能的值if(MulPos==0)

MulPos=200; /如果没有乘号,给MulPos赋一个不可能的值if(DivPos==0)

DivPos=200; /如果没有除号,给DivPos赋一个不可能的值if(Pos>SubPos)

Pos=SubPos;/减号存在,并且把SubPos的值赋给Pos

if(Pos>PluPos)

Pos=PluPos; /加号存在,并且把PlusPos的值赋给Pos

if(Pos>MulPos)

Pos=MulPos; /乘号存在,并且把MulPos的值赋给Pos

if(Pos>DivPos)

Pos=DivPos; /除号存在,并且把DivPos的值赋给Pos

char Result='-';/将'-'赋给Result

int tempPos=SubPos;/定义变量tempPos,并将SubPos的值赋给tempPos

if(PluPos

{

Result='+';

tempPos=PluPos;/如果+号在-号之前出现,Result的值为'+' }

if(MulPos

{

Result='*';

tempPos=MulPos;/ 如果*号在-号之前出现,Result的值为'*' }

if(DivPos

{

Result='/';

tempPos=DivPos;/ 如果/号在-号之前出现,Result的值为'/' }

return Result;/将Result的值返回

}

/定位第一个算术符号的位置

int CDingluDlg::FirstPos(CString Str)

{

int SubPos=Str.Find('-')+1; /从字符串Str中查找减号的位置

int PluPos=Str.Find('+')+1; /从字符串Str中查找加号的位置

int MulPos=Str.Find('*')+1; /从字符串Str中查找乘号的位置

int DivPos=Str.Find('/')+1; /从字符串Str中查找除号的位置

int Pos=200;

if(SubPos==0) /如果没有-号

SubPos=200; /将SubPos设置成一个不可能的值if(PluPos==0) /如果没有+号

PluPos=200; /将PluPos设置成一个不可能的值if(MulPos==0) /如果没有*号

MulPos=200; /将MulPos设置成一个不可能的值if(DivPos==0) /如果没有/号

DivPos=200; /将DivPos设置成一个不可能的值if(Pos>SubPos)

Pos=SubPos; /减号存在,并且把SubPos的值赋给Pos if(Pos>PluPos)

Pos=PluPos; /加号存在,并且把PlusPos的值赋给Pos if(Pos>MulPos)

Pos=MulPos; /乘号存在,并且把MulPos的值赋给Pos if(Pos>DivPos)

Pos=DivPos; /除号存在,并且把DivPos的值赋给Pos return Pos;/将Pos的值返回

}

/定位最后一个算术符号的位置

int CDingluDlg::LastPos(CString Str)

{

int SubPos=Str.ReverseFind('-')+1;/从字符串Str中查找减号的位置

贪吃蛇游戏课程设计实验报告全解

辽宁科技大学课程设计说明书 设计题目:基于C#的贪吃蛇游戏 学院、系:装备制造学院 专业班级:计算机科学与技术 学生姓名:叶佳佳 指导教师:丁宁 成绩: 2015年12月12日

目录 一、概述 (1) 1、用C#实现该设计的方法 (1) 2、贪吃蛇游戏说明 (1) 二、实验目的及设计要求 (1) 1、实验目的 (1) 2、实验要求 (2) 三、课程设计具体实现 (2) 1、概要设计 (2) 1.1、设计思想 (2) 1.2、主模块实现 (2) 1.3、主函数流程图 (4) 2、详细设计 (5) 2.1、设计思想 (5) 2.2、具体模块实现: (5) 四、调试过程及运行结果 (10) 1、调试过程 (10) 2、实验结果 (11) 五、实验心得 (12) 六、参考资料 (13) 七、附录:源代码 (13)

一、概述 1、用C#实现该设计的方法 首先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的高内聚,低耦合。设计模块是一个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图。流程图要尽可能的简单且容易理解,多使用中文,补一些过长的代码,增加理解难度。此外,流程图应容易转换成代码。 根据流程图编写好代码后在WindowsXP操作系统,https://www.doczj.com/doc/8b14373708.html,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。 2、贪吃蛇游戏说明 游戏操作要尽可能的简单,界面要尽可能的美观。 编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。游戏结束时输出相应得分。 具体要求有以下几点: (1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; (2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面; (3)说明书、流程图要清楚; 二、实验目的及设计要求 1、实验目的 .NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握; 提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质; 培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新 1

《贪吃蛇游戏课程设计》报告资料整理

贪吃蛇游戏程序设计 一、课程设计任务 贪吃蛇小游戏程序设计 二、设计要求 通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。 (1).收集资料,分析课题,分解问题,形成总体设计思路; (2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍; (3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行; (4).完成课程设计报告,并进行答辩 三、需求分析 3.1、程序功能 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

3.2、设计思想 程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。

3.3、流程图

四、设计的具体实现 (1)函数定义 函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用 #define N 200 #define M 200 #include"graphics.h" #include #include #include #include #include #include #include #define LEFT 97//A #define RIGHT 100//D #define DOWN 115//S #define UP 119//W #define Esc 0x011b int i,key; int score=0; int gamespeed=250;//游戏速度可根据实际情况自行调整 struct Food { int x;//食物的横坐标 int y;//食物的纵坐标 int yes;//判断是否要出现食物的变量 }food;//食物的结构体 struct Snake { int x[M]; int y[M]; int node;//蛇的节数 int direction;//蛇的移动方向 int life;//蛇的生命,0表示活着,1表示死亡 }snake; void Init();//图形驱动

游戏24点课程设计报告

游戏24点课程设计报告 一.题目: 分析类: 计算24点:任意输入4位数字,利用+,-,*,/四则运算使之得到结果 24。输出所有不同算法的计算表达式,可为运算优先级而使用括号。 二.问题分析: 1.全面性: 此问题要求输出结果为24的计算表达式,并且要求输出要全面,我考虑用for循环与递归实现遍历来保证输出的全面性,考虑到递归的‘一归到底',每一次完整递归都代表一种算法(详情见算法)。 2.输出的判定和四位数字的类型: 在输出的时候对最后结果等于24的判别,因为考虑到有除法,有可能中途结果可能会出现不能整除的情况与小数,所以输出的四个数都设为float型,且输出判定的时候用近似判定法,而不直接写让最后结果等于24(详情见算法)。 3.重复性: 如果用循环与递归保证了输出24的表达式的全面性,但不可避免的会出现重复,才开始我想在遍历与递归时,加一些限定条件来消除重复但是这样做不但会出错,还不能保证它的输出全面性。于是我想在输出的时候加限定条件,使重复的只输出一遍。 但是对于输入的那4位数字中如果有重复的话,程序结果还是会出现重复的,此问题尚未解决.(详情见算法)。 4.括号问题的处理: 对于括号问题,我规定对每一步的计算表达式,除了*之外,+,-,\都加上括号,即让程序按自己规定的方向执行,输出的括号只是让人能看懂,其实在运算时不起作用(详情见算法)。 5.输出: 输出方面我以为用了遍历所以在每一层遍历都把运算表达式存到一个较大的数组中,在输出的时候如果满足输出条件(在遍历时纪录每次递归的第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符),就直接把那个数组里的内容输出,遍历会直接去寻找表达式里的表达式(详情见算法)。 三.算法描述(源代码里有更详尽解释): 1.主要方法: 遍历与递归。 2.主要思路: 把输入的四个数放在一个数组n[4]中,然后任取其中任意两个(不能取同一个--既不能出现自己和自己运算的情况),然后用一个for和一个switch语句来实现这两个数的加减乘除运算,然后把运算的结果放到另一个数组b[4]中并记录此运算的表达式(放到一个大一点的数组tm[4][25]中),同时把其他两个没用到的数也放到该数组中,然后重复以上过程(用遍历实现),最后先判定是不是最后一层运算,是的话在判定最后结果是不是等于24,等于24的话就把那个纪录运算式的数组输出。然后考虑到不能出现重复的(例如:1*2*3*4和2*4*3*1等等)我在遍历的同时记录了第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符,对输出的时候做限定(例如:对运算符全*的只输出一遍等等)。在有一次输出后我还定义了另外两个数组用来分别保存上一次输出的第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符,来解决重复输出的问题,不过此种做法有可能导致输出的时候不全。(此问题尚未解决)即还不能同时保证全面性与不重复性。 3.主要函数与数组:

数电课程设计报告 乒乓球游戏设计

电子线路综合设计 乒乓球比赛模拟及计分器设计 2014年6月

摘要 在信息社会高速发展的今天,数字电路芯片已经实现高度集成化,并逐步渗透到医学、计算机等各个领域,对人类的生活有着深远的影响。本设计采用基本门电路以及74LS系列芯片的搭建,以multisim 12.0软件为平台进行仿真,实现了对乒乓球游戏的模拟。主要解决的问题有: (1)模拟乒乓球的轨迹:用双向移位4位寄存器74194以及基本门电路实现;(2)球速的调节:利用555电路实现; (3)球被击中、犯规的判断; (4)计数器的使用:采用74LS90和74LS161的组合,给玩家计分; (5)关于比分的显示:通过CD4511译码芯片将计数器的输出状态显示到2位共阴极数码管上。 关键词:双向移位4位寄存器、555电路、译码电路、计数器系统

目录 1 设计任务 (1) 2 电路整体设计 (2) 2.1 译码显示电路设计 (4) 2.2 555定时器组成脉冲发生器 (5) 2.3模拟乒乓球电路的设计 (6) 3 电路整体性能的检测 (7) 3.1 译码显示电路的检测 (7) 3.2 脉冲发生器电路的检测················································································· 3.3模拟乒乓球电路的检测··················································································4实验结论····················································································································5课程设计心得体会以及建议····················································································6 Abstract ······················································································································7附录(包含元器件清单以及各元器件功能表) ······················································8参考文献····················································································································

《c语言课程设计报告--小游戏“石头剪子布”》

《C语言课程设计》报告题目:石头剪子布 班级: 学号: 姓名: 指导教师: 成绩:

目录: 一、选题背景...................................................................................................................... - 2 - 二、设计思路...................................................................................................................... - 2 - 三、主要问题的解决方法及关键技术.............................................................................. - 3 - 四、程序流程图.................................................................................................................. - 3 - 五、源程序清单.................................................................................................................. - 6 - 六、程序运行结果.............................................................................................................. - 8 - 七、设计总结...................................................................................................................... - 9 - 八、教师评语.................................................................................................................... - 10 - 一、选题背景 通过一个学期的C语言课程的学习,《C语言程序设计》课程已结束,根据学校课程学习的安排,要进行一周的C语言实习,自己动手编写游戏和系统。根据老师布置的设计任务书,按照学委的安排,根据个人的能力及意愿,我选择了设计一格小游戏:石头剪子布。 实验准备:做游戏前,首先,自己详细看了《C语言程序设计》(教科书),理解了相关函数的用法和作用;另外,上网查询了很多相关资料,还有找了很多相关的游戏设计的代码,都详细的看了一遍,加深了对C语言以及相关内容进一步理解。根据实际情况设计出一款比较理想的小游戏。 设计题目的要求: ①游戏要设置开始,结束操作控制 ②游戏要有时间提示即相关结果的提示语 ③游戏要能自动判断输赢,并显示最终比赛结果 二、设计思路 系统功能模块图: 输入:计算机随机输入选择,用户输入选择,并将数据储存。 计算:根据计算机和用户的选择,计算大小,并判断输赢,计算用户的胜负率,并储存。 输出:根据用户的输入,将用户的游戏结果显示在屏幕上。

算24点小游戏

研究生课程论文 课程名称C++面向对象程序设计 授课学期2013 学年至2014 学年 第一学期 学院电子工程学院 专业电子与通信 学号 姓名 任课教师 专题算24点小游戏 交稿日期2014年01月10日 成绩 阅读教师签名 日期 广西师范大学研究生学院

目录 1 引言 (2) 1.1 设计任务与要求 (2) 1.2 设计目的 (2) 1.3 C++面向对象语言简介 (2) 2 C++课程设计原理及方案选择 (3) 2.1 概述 (3) 2.1.1 方案设计与论证 (3) 2.2 二十四点游戏的原理 (4) 2.2.1 主函数设计 (4) 2.2.2 子函数的设计 (4) 2.2.3 类体的设计 (5) 3 程序流程及演示 (6) 3.1 程序流程图,程序清单与调用关系 (6) 3.2 程序 (7) 3.3 运行结果 (9) 4 结论 (10)

1引言 随着网络技术的发展,小游戏在网络发展如火如荼。二十四点小游戏是一个不仅能放松认得神经而且益智的趣味小游戏。对于21世纪的今天,作为一个社会工作者来说,面对日益剧烈的竞争,工作压力都是很大的,为了释放压力就需要一个很好的减压平台,那么网络上的小游戏首当其冲,24点小游戏受到了欢迎。 1.1设计任务与要求 题目要求在输入4个数后,程序对这个4个数进行运算,若能计算出结果等于24,即输出运算过程。目标是在输入四个数之后,先进行全排列,然后进行全运算,从而最终得到结果以输出。 1.2设计目的 本次设计的目的就是在掌握c++编程语言和visual c++编译软件的基础上。完成一个算24的小游戏程序设计,在系统提示下输入4个数后,程序对这4个数进行运算,若能计算出结果等于24,即输出运算过程。程序设计目标很明确,在输入4个数之后,先进行全排列,然后进行全运算,重而得到最终结果输出。 1.3C++面向对象语言简介 C++是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。其编译器比目前其他计算机语言的编译技术更复杂。类是C++中十分重要的概念,它是实现面向对象程序设计的基础。类是所有面向对象的语言的共同特征,所有面向对象的语言都提供了这种类型。一个有一定规模的C++程序是由许多类所构成的。 C++支持面向过程的程序设计,也支持基于对象的程序设计,又支持面向对象的程序设计。以后我们将介绍基于对象的程序设计。包括类和对象的概念、类的机制和声明、类对象的定义与使用等。这是面向对象的程序设计的基础。基于对象就是基于类。与面向过程的程

猜数字游戏课程设计报告

XXXX学校 《C程序设计》 课程设计报告 设计题目:猜数字游戏 附录完整源代码 专业: 班级: 学生: 学号: 指导教师: 起止时间: xxx.x.x -xxx.x.x xxxx-xxxx年 xx 学期

目录 1 、程序设计描述 1.1 程序设计目的: 1.2 程序设计要求: 1.3、猜数字游戏的简介: 2 、程序设计内容: 2.1、游戏主要框架图: 2.2、开始游戏框架: 2.3、最佳排行框架: 2.4、游戏操作说明模块: 2.5、退出游戏系统: 2.6、游戏系统总流程图: 3、猜数字游戏源代码: 3.1、void main()函数函数功能: 3.2、void game();//双人游戏 void pgame();//单人游戏 3.4、排行榜模块函数功能: 3.5、继续游戏模块函数功能: 3.6、操作说明模块函数功能: 4、调试与测试: 4.1、调试方法 4.2、测试结果的分析与讨论 4.3、测试过程中遇到的主要问题及采取的解决措施 5、程序具体说明书: 6、程序设计心得: 7、参考文献

1 、程序设计描述 1.1 程序设计目的: 综合使用所学过的C语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。 1.2 程序设计要求: 1、巩固和加强《C语言程序设计》课程的理论知识。 2、掌握C语言的基本概念、语法、语义和数据类型的使用特点。 3、掌握C语言程序设计的方法及编程技巧,能正确使用C语言编写程序。 4、进一步理解和运用结构化程设计的思想和方法;学会利用流程图。 5、掌握调试程序的基本方法及上机操作方法。 6、掌握书写程设计开发文档的能力,学会撰写课程设计总结报告。课程设计的思想和方法还可以作为做毕业论文时的参考资料。 7、通过查阅手册和文献资料,培养独立分析问题和解决问题的能力。为做毕业设计打好基础。 8、培养自己的创新能力和创新思维。可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。 9、培养自己良好的程序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。 1.3、猜数字游戏的简介: 猜数字游戏(又称 Bulls and Cows )是一种大概于20世纪中期兴起于的益智类小游戏。一般由两个人玩,也可以由一个人和电脑玩,在纸上、在网上都可以玩。这种游戏规则简单,但可以考验人的严谨和耐心。 2 、程序设计内容: 2.1、游戏主要框架图: 该模块为玩家提供猜数字游戏的主体功能,即开始游戏、继续游戏、最佳排行、操作说明、退出游戏。给用户一个清晰明了的操作界面!流程图如下:

动画与游戏设计-课程设计报告

《动画与游戏开发》 课程报告 学号:111102020103 姓名:张慧 专业班级:11级计科本01班 日期:2013-12-9

电子信息工程学院 目录 一、课程内容及应用领域 1.1基于DirectX的粒子系统 (3) 1.1.1 粒子系统简介 (3) 1.1.2广告板技术 (3) 1.1.3粒子系统的基本原理 (3) 1.2粒子系统的应用领域 (3) 二、课程内容的难点、疑点 2.1课程要点 (4) 2.2课程难点 (4) 2.3课程疑点 (4) 三、实例开发 3.1实例题目及说明 (4) 3.2关键技术 (5) 3.2.1系统完成的四部曲 (5) 3.2.2星光粒子结构构成技术 (5) 3.2.3 MyPaint()绘图函数 (5) 3.3开发过程 (9) 3.3.1案例所需背景图 (10) 3.3.2程序部分代码 (10) 3.3.3运行结果截图 (15)

3.4总结..........................................................17四、谈谈自己对课程内容的掌握程度

一、课程内容及应用领域 1.课程内容:基于DirectX的粒子系统 相关内容简介: (1)粒子系统简介 粒子系统是三维图形编程领域中用于实现特殊效果的一种非常重要的技术.该技术是由Reeves于1983年首次提出来的.通过粒子系统可以使用非常简单的粒子来构造复杂的物体,它为模拟动态的不规则物体,提供了强有力的技术手段。一般情况下,粒子的几何特征十分简单,可以用一个像素或一个小的多边形来表示.如果给出了粒子中心点的坐标和粒子大小,不难计算出绘制粒子所需要的四个顶点的位置坐标. (2)广告板技术 由于通常使用平面图形而不是立体图形表示一个粒子,所以需要使用的粒子四边形始终面向观察者.这就要使用广告板技术.广告板技术的原理是,在渲染一个多边形时,首先根据观察方向构造一个旋转矩阵,利用该矩阵旋转多边形使其面向观察者,如果观察方向不断变化,就要不断旋转多边形. (3)粒子系统的基本原理 粒子通常都是一个带有纹理的四边形。我们通过这个使用了纹理映射的四边形,可以认为粒子实际上是一个很小的网格模型,只不过是纹理赋予了它特殊的外表罢了。绘制粒子就如果绘制多边形一样简单,因为一个粒子说白了就是一个可改变大小并映射了纹理的四边形罢了。 粒子系统由大量的粒子构成,粒子是一种微小的物体,每个粒子都具有一定的属性,如位置、大小以及纹理,可能还需要颜色、透明度、运动速度、加速度、生命期等属性。我们可以把粒子想象成颗粒状的物体,如雪花,雨滴,沙尘,烟雾等特殊的事物。又比如游戏中的

计算24点游戏c++

24点游戏软件的开发 1 概述 1.1 课程设计目的 a、巩固并加深学生对C++语言程序设计知识的理解; b、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别; c、进一步掌握和应用VC++ 6.0集成开发环境; d、提高运用C++语言解决实际问题的能力; e、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统; f、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。 1.2 课程设计内容 课题名称:24点游戏软件的开发 说明:24点游戏是一种常见的纸牌游戏说明 要求: a)实现随机发牌; b)能进行结果验算; c)计分; d)难度设置。 2 系统需求分析 2.1 系统目标 24点游戏是个流行的数学运算游戏。本次课程设计通过24点游戏来加深我们对对话框编程的认识和理解,并介绍Visual C++在数学计算方面的应用,以及在按钮上设置位图和设置计时器的方法。 24点扑克游戏的规则是:由系统发出4张扑克牌,要求用户利用扑克牌上显示的数字(JQKA算10),通过加减乘除运算得出24。 2.2 主体功能 a.对游戏设计三个难易级别,分别为低级、中级和高级。每次开始游戏前可以根据玩家的需要进行难度设置,如若不设置,系统默认难度级别为中级,设置完难度级别之后就可以开始游戏了,单击“发牌”按钮,桌面上出现四张翻开的扑克牌,与此同时,游戏开始计时,进度条开始前进。 b.在规定的时间内,玩家可以在“输入算式”的编辑框中输入自己想好的算式,然后点击“验算”按钮:如果输入的算式经运算后所的答案正确,则会在编辑框中

显示“正确!”;如果输入的数字与给出的牌的数字不符或者符号不合法,则会弹出“内部错误!”的窗口;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,则会在编辑框中显示“错误”;如果未输入任何的数字和算符,则会弹出“内部错误!”的窗口。 c.如果在规定的时间内,玩家没有点击验算按钮,则会弹出“内部错误”的窗口。 d.在结束本轮游戏后,如果玩家想继续游戏,则可点击“发牌”按钮即可重新发牌,开始下一轮的游戏;如果玩家想结束游戏,则可点击“结束”按钮即可结束游戏。 2.3 开发环境 Microsoft Visual C++ 6.0 3 系统概要设计 3.1 系统功能模块划分 a.建立一个随机产生扑克牌的模块。由程序随机产生4张扑克牌,每张牌对应一个整数。 b.计时的模块。定义一个计时器,以便对使用时间进行计数。 c.计算表达式的模块。主要是通过函数来确定运算式各符号优先级和最终计算出输入算式的结果。 d.验算表达式正误的模块。在规定的时间内输入算式进行验算,根据不同的情况会出现不同的对话框。

数独游戏课程设计报告

数独游戏课程设计报告 将“数独”智力游戏的难度划分与创建问题分解为建立终盘和初盘、难度评分、游戏创建。首先采用行列变换的方法建立终盘,然后隐去部分数字并检验解唯一性,得到初盘。 在已得到初盘的基础上,根据求解时初级方法和高级方法使用的次数确定难度评分,从而依据分数对题目的难度进行划分,以此创建例外等级难度的“数独”游戏。最后通过实验验证了模型的实用性。下面是整理的数独游戏课程设计报告,欢迎来参考! “数独”是18世纪瑞士数学家欧拉发明。该游戏是在9×9的单元网格中进行,这些网格被分9行、9列和3×3个九宫格。单元网格中已有若干数字,其余均为空格。玩家需要推理出所有剩余空格的数字,并满足每一行、每一列、每一个小九宫格内的数字均含1-9且不重复。每一道合格的“数独”谜题都有且仅有唯一答案。 目前,“数独”作为一种智力游戏已经盛行世界,国内外许多学者已对数独的求解算法做了深入研究,例如递归法、回溯候选数法、枚举算法等,但在数独的难度划分与创建方面的研究还很少。由于影响“数独”难度的因素有很多,就问题本身而言,难度因素包括最高难度的技巧、各种技巧所用次数、是否有隐藏及隐藏的深度和广度的技巧组合、当前盘面可逻辑推导出的个数等等;就玩家而言,了解的技巧数量、熟练程度、观察力等也属于难度划分应考虑的因素。因此,单单利用空格数或求解时间对题目难度进行划分是不全面的,其难度指标定义过于主观,讨论也不够细密,无法真正划分难度的级别。 本文首先创建符合要求的“数独”终盘,然后在终盘的基础上生成具有数独特性的初盘,根据求解时初级方法和高级方法使用的次数确定难度评分,从而依据分数对题目的难度进行划分,以此创建例外等级难度的“数独”游戏。 首先运用初等行、列变换,构造一个新的简单明了的终盘生成算法,具体步骤如下: Step1:从行的角度出发,在第一行随机输入1-9的数字。以一个小九宫为单位,将相邻三个数字作为一个集体进行交替,由此获得第二行的数字,再由

unity3d游戏课程设计报告

游戏程序设计课程报告 课程: Unity3D课程设计题目:探索迷宫 班级: 学号: 姓名:

日期:2014.12 一、摘要 1 UNITY游戏是一种新型的IT引擎。我们研究主要内容是UNITY游戏设计方法。指以游戏客户端软件为信息交互窗口的旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性单人游戏。 本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D软件 的感受和总结。设计过程中,首先建立自己想要的模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的小游戏。 基于UNITY基础,构建了一个益智游戏风格的游戏,并有主角与关卡、游戏逻辑、游戏环境界面等设计,使得玩家可以在场景中进行寻找神龛的冒险游戏。 本游戏的控制很简单,及用键盘的W ASD及SPACE五个控制人物的上下左右跳跃五个方向,用户根据自己的战略方式选择寻找油桶点亮煤油灯然后寻找神龛。

二、概述 《UNITY游戏程序设计》这一课程以大作业形式进行考核,能更好地锻炼学生综合运用本课程所授知识的能力。大作业主要内容为设计完成面向某一主题内容的游戏演示程序。 自选游戏主题,并根据所选定的主题内容设计一个典型的游戏场景及玩家逻辑,其中包含主角与关卡,游戏逻辑,游戏环境界面与交2 互过程等的设计;开发完成与设计相符的游戏Demo。 要求使用Unity3D游戏开发软件实现上述游戏Demo。 三、具体要求 1、每人单独完成,特殊可由多人合作完成。 2、游戏主题自拟。 3、根据所设游戏主题、场景及玩家逻辑,实现完成相应的游戏Demo,并撰写设计开发报告。 四、设计主题 基于视频教程“平衡球”的基础,构建了一个益智游戏风格的游戏,并有主角与关卡(一关)、游戏逻辑(触碰油桶、神龛)、游戏环境界面(通道)等设计,使得玩家可以在场景轨道中进行吃油桶、神龛的冒险游戏。 五、设计思路 本游戏以几个环环相扣的通道作为人物运动的轨迹,在通道上分

17 24点游戏系统设计

中北大学 课程设计说明书 学生姓名:学号: 学生姓名:学号: 学生姓名:学号: 学院:信息与通信工程学院 专业:电子信息工程 题目:多媒体技术和程序设计实践: 24点游戏系统设计 指导教师:陈友兴赵英亮职称:副教授 2011年1月7日

中北大学 课程设计任务书 10/11学年第一学期 学院:信息与通信工程学院 专业:电子信息工程 学生姓名:学号: 学生姓名:学号: 学生姓名:学号: 课程设计题目:多媒体技术和程序设计实践: 24点游戏系统设计 起迄日期:2010年12月18日~2011年1月7日课程设计地点:电子信息工程专业实验室 信息工程系实验室 指导教师:陈友兴赵英亮 系主任:王浩全 下达任务书日期:2010年12月17日

1.设计目的: (1)掌握VC++程序开发平台; (2)掌握对话框模式的可视化实现和按钮消息的响应; (3)掌握应用VC++库函数实现数据的输入、计算等功能。 2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):(1)查阅相关资料,掌握基于面向对象的编程方法; (2)主界面采用对话框模式,编辑24点游戏的相应控件; (3)实现发牌、计算和验证的功能; (4)要求3位同学各自实现不同分工。 3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕: (1)要求设计组的每个成员都要了解设计的要求和思路; (2)编写详细的设计说明书一份; (3)要求有正确的运行结果及结果分析。

4.主要参考文献: 1王华,叶爱亮,祁立学等.Visual C++6.0编程实例与技巧.北京:机械工业出版社,1999. 2李光明.Visual C++6.0经典实例大制作.北京:中国人事出版社,2000. 3严华峰.Visual C++课程设计案例精编.北京:中国水利水电出版社,2002. 4官章全,刘加明.Visual C++6.0类库大全.北京:电子工业出版社,1999. 5张荣梅,梁晓林.Visual C++实用教程.北京:冶金工业出版社,2004. 6魏亮,李春葆.Visual C++程序设计例学与实践.北京:清华大学出版社,2006. 7陈清华,朱红.Visual C++课程设计案例精选与编程指导.南京:东南大学出版社,2004. 5.设计成果形式及要求: 提供详细的设计说明书一份 软件设计结果 6.工作计划及进度: 2010年 12月18日~12月22日:学习VC有关编程方法; 12月23日~2011年1月3日:在指导教师指导下实现程序设计; 2011年1月4日~1月6日:撰写课程设计说明书; 1月7日:答辩 系主任审查意见: 签字: 年月日

大学课程设计报告小小打字游戏设计-课程设计报告

2016-2017学年第一学期 《Windows程序设计》 课程设计报告 题目:小小打字游戏设计 专业: 班级: 姓名: 指导教师: 成绩: 二0一六年十一月十五日

目录 1 设计内容及要求 (1) 1.1 设计内容 (1) 1.2 系统功能 (1) 1.3 信息存储功能 (1) 2 系统设计 (1) 2.1 数据库设计 (1) 2.1.1 GameUser表 (1) 2.1.2 GameInfo表 (2) 2.2 游戏系统设计 (2) 2.2.1 程序项目设计 (2) 2.2.2 功能模块设计 (2) 3 C#系统实现 (5) 3.1 类图 (5) 3.2 核心代码 (6) 3.3 MySqlConn类 (10) 3.4 MainForm类 (11) 3.5 菜单事件 (12) 3.6 窗体键盘事件 (13) 3.7 MyRandom类 (15) 3.8 Program类 (16) 4 总结 (17) 4.1 收获 (17) 4.2 反思 (17) 5 参考文献: (18)

1 设计内容及要求 1.1 设计内容 软件名称:小小打字游戏 需求分析:使用VS2010开发环境,用C#语言编写一个打字游戏,游戏界面随机出现下落的A到Z的26个字母,当用户按下相应的键,游戏屏幕上正在下落的字母就会被消除,游戏分数将相应增加。 1.2 系统功能 (1)、登录功能:启动软件,出现登录界面,用户输入账号密码,正确后方可进入游戏; (2)、注册功能:不存在的用户,可以注册; (3)、软件互斥:通过创建互斥变量,使打字游戏软件只能单独开启一个; (4)、游戏控制:按F1开启游戏,F2暂停游戏,F3继续游戏,F4使用游戏积分兑换生命值; (5)、游戏显示:游戏窗口随机下落颜色不定的A到Z 26个字母,并根据游戏得分实时增加字母下落的速度; (6)、游戏操作:按下键盘上的A-Z 26个字母键,游戏窗口上正在下落的对应字母被消除,并使游戏分数增加1; (7)、数据保存和清除:使用数据库保存用户的游戏数据,并可调用数据库数据显示在游戏界面上显示,管理员账号可以清除游戏数据记录; (8)、游戏界面信息显示:显示相应的游戏状态信息,暂停游戏提示,结束游戏提示以及游戏排名。 1.3 信息存储功能 需要存储的信息: (1)游戏分数、(2) 游戏等级、 (3) 用户、 (4)密码、(5)游戏开始时间、(6)游戏结束时间。 2 系统设计 2.1 数据库设计 2.1.1 GameUser表 表1 GameUser表

快速配对游戏_课程设计报告

Visual Basic 课程设计报告 所属课程名称:Visual Basic程序设计 课程设计题目:快速配对游戏 课程设计难度:两星 课程设计时间:2012.2.27 ~ 4.18 学号:9121091601XX 姓名:XXX 南京理工大学机械工程学院 二〇一三年X月

一、程序功能 (1)运行程序,显示如图1的开始界面,图片均为“背对”用户。单击“开始”按钮,图片显示1.5秒(如图2,图片均随机安排),然后翻过去。用户使用鼠标将图片翻起,如果连续 单击的两个图片内容相同则会保持显示状态;如果两图片不同,两张图片0.5秒后自动翻 过去。用户凭记忆在尽量短的时间内将8对图片全部“翻起”,游戏完成。 图1 图2 (2)从用户第一次单击图片是,程序开始计时(以秒为单位),并在窗口的右上角显示已用时间。 没击中一对图片,窗口中显示一个“笑脸”图标,否则显示一个“严肃的脸”图标(见图 3)。 图3 (3)程序自动记录前三个最短完成时间,在游戏结束时一图4所示的消息框显示所用的时间,

并请玩家输入名字。单击“排行榜”按钮时可以弹出“排行榜”窗体,如图5所示,显示 前三名所用的时间。 图4 图5 (4)在游戏中,窗口的“开始”和“排行榜”按钮成无效态,游戏完成后,“开始”按钮变为“重来”,单击该按钮可以从头再来一局。 二、课程设计的详细设计 游戏主界面:(1)窗体的顶部要放置“开始”、“排行榜”和“退出”按钮。在放置一个两个重合的图像控件用来显示游戏中的“笑脸”和“严肃的脸”。再放置一个标签控件来显 示用户所用的时间。加入三个定时器控件“Timershow”、“Timercompare”和 “Timercounter”分别来控制展示图片的时间、点击不同图片后图片的展示时 间和记录玩家的所用时间。 (2)窗体的中部放置16个图像框控件数组“”来放置游戏中的图片。和一个放置“背面”图片的图像框控件“Imageback” 在案安排游戏使用图片时使用的是随机函数Rnd随机的将“Imagepicture()” 的Index值赋给数组,然后将这些选中的图片的“Picture”属性赋给“Imageshow ()” 图像框达到随机安排图片的目的。 (3)窗体的下部放置31个图像框控件“Imagepicture()”来放置31种不同的候选图片。 排行榜窗体:(1)加入12个标签控件用来显示“排行榜”。“LabelWanjia()”控件组显示玩家姓名,“LabelChengji()”控件组显示玩家成绩。 (2)添加“返回”按钮,单击按钮时返回游戏主界面。 游戏加载时将“chengji”文件中的已存入的成绩和玩家姓名加载到“排行榜”窗体的相应位置上。 在游戏完成时用消息框提示你的成绩,如果你的成绩进入前三名则可以再“Inputbox”里面输入自己的姓名。 在游戏程序结束时将“排行榜”窗体上的内容存入成绩文件中。 全程序中使用控件数组和数组使程序的编写简单、明了。

课程设计24点小游戏

课程设计报告课程名称:面向对象程序设计C++ 设计题目: 24点小游戏 专业:计算机科学与技术 姓名: 学号: 指导教师:李晓虹 2016 年 1 月 4 日 课程设计报告模块内容要求: (1)系统需求分析:基本简单小游戏通过c++实现 (2)总体设计: 1. 系统自动给出4个数字(1-k,其中J,Q,K按一点算) 2. 由玩家自主计算,当给出数字不能算出24点时,按任意 键继续; 3. 由玩家自行决定是否继续游戏; 4. 在任何情况下都可以按Esc键结束游戏; (3)系统调试: 程序实现代码: 1.主函数: 2.#include "stdio.h" 3.#include "conio.h"

4.#include "stdlib.h" 5.#include "time.h" 6.#include "math.h" 7.#include "string.h" 8./* 9.从一副扑克牌中,任取4张。 10.2-10 按其点数计算(为了表示方便10用T表示),J,Q,K,A 统一按 1 计算 11.要求通过加减乘除四则运算得到数字24。 12.本程序可以随机抽取纸牌,并用试探法求解。 13.*/ 14.v oid GivePuzzle(char* buf) 15.{ 16.int i; 17.char card[] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'}; 18.for(i=0;i<4;i++) 19.{ 20.buf[i]=card[rand()%13]; 21.} 22.} 23.v oid shuffle(char * buf) 24.{

五子棋游戏__课程设计报告(含源代码可以运行)

《软件基础》大作业 项目名称:五子棋游戏 学号:201046820510 201046820605 姓名:校建林 朱颖 完成时间:2011年11月28日指导教师:鲁可

目录 一需求分析 (1) 1.1开发背景 (1) 1.2项目目标五子棋与游戏开发成员和具体日期完成任务以及任务的具体分配. . . . . . . . . . . . . . . . . . . . 1 1.3运行环境...初始化. (3) 1.4项目任务书主循环控制模块 (3) 1.5玩家下子 (3) 1.6盘面分析填写棋型表 (3) 1.7对方下子 (4) 1.8胜负判断 (4) 二技术线路 (4) 2.1采用的软件及开发平台是什么 2.2项目的总体方案—包括模块及模块间的联系、信息流、数据流等 2.3项目的详细设计—包括模块的功能、数据结构及算法等 2.1技术线路模块图 (4) 2.2技术线路说明 (5) 三工程进度 第三章系统设计 (5) 3.1流程图 (6) 3.2流程图说明 (6) 四程序测试分析 (7) 4.1阶段性测试 4.2总体测试 五个人总结 (9) 附录源代码 (10)

五子棋游戏 第一章需求分析 1.1开发背景 软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。对于任何一个软件而言,需求分析工作都是至关重要的一步。只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。 软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。 基于本游戏,首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个15*15的二维数组Table[15][15](15*15是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’代表对方的子;这张表也是今后分析的基础。在此之后还要为两个玩家双方各建立一张棋型表Computer[15][15][4]和Player[15][15][4],用来存放棋型数据。 1.2 项目目标五子棋与游戏开发具体任务完成日期以及任务的具体分配 五子棋游戏开发成员:校建林、朱颖。 五子棋游戏开发具体的任务步骤: 1.需求分析 内容包括:总体分析、五子棋与游戏开发成员和具体任务完成日期以及任务的具体分配、初始化、主循环控制模块、玩家下子、盘面分析填写棋型表、对方下子、胜负判断。 2.技术线路 内容包括:采用的软件及开发平台是什么。 项目的总体方案—包括模块及模块间的联系、信息流、数据流等。

相关主题
文本预览
相关文档 最新文档