计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx

上传人:b****6 文档编号:19535059 上传时间:2023-01-07 格式:DOCX 页数:14 大小:69.44KB
下载 相关 举报
计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx_第1页
第1页 / 共14页
计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx_第2页
第2页 / 共14页
计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx_第3页
第3页 / 共14页
计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx_第4页
第4页 / 共14页
计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx

《计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx

对题目要求进行分析,写出游戏的算法思想。

第三、四天:

进行代码的编写、调试过程,写报告。

第五天:

提交设计结果及设计报告,进行PPT演示,并且进行答辩。

合计:

5天

指导教师签字

年月日

课程设计(大作业)成绩

学号:

L120004姓名:

艾维指导教师:

马宏

姓名挑战游戏

总结:

算法分析是一门面向设计,且理论性很强的科目。

算法设计与分析已经学了一个学期,有许多知识都存在似懂非懂的现象,有很多问题还是不能解决,比如所加入的表情图不能切换,做不出来。

最后没有使用挑战表情。

基于对本门课程的学习,将算法思想灵活运用到设计中来,解决实际问题。

我们组设计的是:

姓名挑战游戏,由于个人能力有限,编写的代码有一些问题,经过小组讨论,作了一定的改进,这说明我们在编程方面存在很多不足,有待于在以后的学习中不断提高和改进。

通过用JAVA编写程序,掌握设计的算法和基本思想,加强了我调试程序的能力,培养了分析、解决问题的能力,提高自己的认识。

这次实训,不仅检验了我所学的知识,也培养了我如何去把握一件事,如何去做一件事,又如何完成一件事情。

在设计过程中,和同学们相互探讨,相互学习,相互监督。

实训是我们专业课程知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一个必不可少的过程。

“千里之行始于足下”,通过这次实训,我深深体会到这句千古名言的真正含义。

我今天认真的进行实训,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。

通过这次实训,我在多方面都有所提高。

学习到了很多理论知识,加强了实践的能力。

指导教师评语:

成绩:

填表时间:

指导教师签名:

一、设计目的

课程设计是巩固所学理论知识、提高算法设计、分析能力的重要实践环节。

算法设计与分析,主要目的是为解决某一问题而提出多种不同的解决方案,并且针对具体问题做细致的时间和空间复杂度分析,选取效率高的算法解决问题,从而达到优化的目的。

通过课程设计的训练,使我们能够巩固所学的算法分析基础理论知识,体会程序设计的全过程,培养我们处理数据的能力,提高我们分析问题、收集资料、解决问题的能力,最终培养理论联系实际,利用各种算法解决实际问题的应用能力。

同时可以检测我们对这门课程的掌握情况,有助于查缺补漏。

二、题目分析

这次课程设计以JAVA语言为基础结合其图形应用界面来设计一个姓名挑战游戏,设计出的游戏有图形化界面,且界面简洁适用;

在游戏界面中,输入两个姓名分别作为挑战者和被挑战者,由姓名产生其属性值(战力指数,攻击力,防御力),当HP大于0时,两个名字进行对战,进行多轮攻击挑战后,用HP值决定双方输赢,HP值为0的一方战败,另一方则获胜,达到休闲益智的目的。

三、设计要求

四、总体设计、算法描述

4.1算法思想

对于姓名挑战游戏,必须需要两位玩家输入姓名参与,且参与游戏的玩家具有不同的血量(范围:

2000—3000)、攻击力(范围:

155—300)、防御力(范围:

100—200)[其属性数值通过姓名产生]。

在游戏对决中,每个回合两个玩家各攻击对方一次(以玩家1开始)。

在被攻击之前,玩家可以通过自己的运气随机产生本回合最后所受到伤害(伤害可能为0)或增加血量的机会。

最终血量=现有血量+增加的血量+防御力-伤害,根据最终的血量值来判断输赢。

若玩家1最终血量值小于等于0时,说明玩家1失败,玩家2获胜;

反之,玩家1获胜,玩家2失败。

游戏过程是不断循环过程,要直到分出胜负为止程序才能结束。

4.2主方法分析

publicclassTest/*建立一个公共类Test*/

{

publicstaticvoidmain(Stringars[])

{

newGame("

姓名挑战游戏"

);

}

}

此部分为主方法部分,在本游戏中主函数主要起连接和导入的作用,对相应的方法进行说明、调用。

4.3总体分析

在Game框架中添加组件(Label,TextField,Button,Panel,TextArea,Menu)并布局管理器,使用的是BorderLayout、GridLayout管理器。

通过ActionListener定义一个actionPerformed()方法。

创建一个shuxing()函数,随机产生HP,attack,defense的初始值,对挑战者与被挑战者的属性进行随机处理映射到相应的攻击和反应,不断更新二者的属性值并获取。

直到一方hp为0,挑战结束并输出挑战结果及双方最后属性值。

4.4使用到的方法

actionPerformed()方法:

在事件分派awt线程中被调用;

Thread.Start()方法:

创建一个线程,使用Thread类创建线程;

add():

添加组件到框架中;

damage(intattack):

嵌套调用;

setBounds(x,y,width,height);

x:

组件在容器X轴上的起点y:

组件在容器Y轴上的起点;

width:

组件的宽度height:

组件的高度;

shuxing():

设置属性值;

super():

调用父类(Frame)构造函数,s为传入的参数,也就是调用了父类public;

Frame(Strings){...}构造函数get():

读取数据;

set():

设置属性;

Random():

随机数字产生方法;

4.5游戏细节设计

4.5.1攻击招式统计

1、不小心踩到香蕉皮,摔了一跤

2、吃了毒蘑菇

3、受到空中落石伤害

4、落水被淹

5、过马路不小心撞到车了

6、身上被撒了痒痒粉,全身奇痒无比

4.5.2治疗方式

1、喝了红牛,生命增加100

2、吃了万能解药,生命增加300

3、擦了神药,生命增加800

4.5.3不明原因

可能是神药效失效了,奇痒发作

五、实验总结

课程设计终于做完了,虽然有些疲劳和困倦,但带给我很多的收获。

算法设计与分析已经学了一个学期,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,实际应用,已经减少了许多。

这些知识也有了更深的理解和很好的掌握。

许多困惑,有许多已经通过实际操作解决了,并能够深刻认识,但也有很多没有明白。

通过课程设计,明白做一件事需要考虑到很多方面的问题的,这些都是要在实践中摸索的,这与平时做练习是不同的,但也因为平时有许多的练习基础,会使你做起程序来,更加得心应手。

另外就是要把错误总结,有许多错误或者陷阱是平时自己陷进去的,因此很深刻,但也有些错误或者陷阱是自己还没有接触或者犯过的,这就应该看多些别人的总结,使自己不犯这些错误。

不让自己掉进这些陷阱。

通过这次课程设计我锻炼了实际动手能力,拓展了课外知识,积极运用图书馆、网络资源为设计服务。

熟悉并灵活运用Editplus软件来编译程序,同时也培养了细心、耐心、虚心的学习态度,并积极与老师、同学进行沟通交流,增加了小组间的凝聚力。

本着对自己负责的态度,认真对待本次设计。

希望在以后的学习中,我能更好地将理论知识与实践相结合,学会学以致用,学有所用,完善自我,提高自身综合能力。

六、源程序及运行结果

6.1源程序

/*决斗算法*/

publicvoidactionPerformed(ActionEvente)

if(e.getSource()==item2||e.getSource()==button2)

System.exit(0);

//选中退出按钮结束程序

elseif(e.getSource()==button)

{//点击确定按钮

Stringname1=text1.getText();

//获取玩家1的姓名

Stringname2=text2.getText();

//获取玩家2的姓名

if(name1.equals(name2))

//玩家1与玩家2姓名相同

area.setText("

请不要自相残杀!

"

else

{

Playernpc1=newPlayer(name1);

//创建玩家1

Playernpc2=newPlayer(name2);

//创建玩家2

npc1.shuxing();

//得到玩家1的属性

npc2.shuxing();

//得到玩家2的属性

l1.setText(name1);

l2.setText(name2);

inth1,h2;

h1=npc1.HP;

//记录玩家1最初血量

h2=npc2.HP;

//记录玩家2最初血量

text3.setText(name1+"

的属性:

战力指数:

+npc1.HP+"

攻击:

+npc1.attack+"

防御:

+npc1.defense);

//在玩家1属性文本框中显示玩家1的血量、攻击力、防御力

text4.setText(name2+"

+npc2.HP+"

+npc2.attack+"

+npc2.defense);

//在玩家2属性文本框中显示玩家2的血量、攻击力、防御力

inti=0;

//进行玩家间PK的循环标记(偶数轮到玩家1,奇数轮到玩家2)

while(npc1.HP>

0&

&

npc2.HP>

0)

{//玩家1、玩家2血量不为负数

if(i%2==0)//玩家1

{

area.append("

\n"

Strings1=npc1.damage(npc2.attack);

//玩家1本轮受到的状态

if(npc1.HPP!

=0)

{

count1++;

//记录玩家1治疗次数加1

}

else

count2++;

//记录玩家1受到攻击次数加1

label6.setText("

得到治疗的次数:

+count1+"

受到攻击的次数:

+count2);

//刷新玩家1治疗、受到攻击的次数

Strings=s1;

npc1.HP=npc1.HP+npc1.HPP+npc1.defense-npc1.hurt;

//玩家1最终血量=当前血量+运气+防御力-伤害

if(npc1.HP>

h1)

area.append(name1+s+'

\n'

text5.setText(name1+s);

try

{

thread1.sleep(1000);

//间隔1秒

}

catch(InterruptedExceptionee){}

npc1.HP=h1;

s1="

血量已达最大值!

;

if(npc1.HP<

npc1.HP=0;

//玩家1血量为0

战力指数:

text5.setText(name1+s1);

area.append(name1+s1+'

area.append(name1+"

剩余生命值:

+npc1.HP+'

}

else//玩家2

{

Strings2=npc2.damage(npc1.attack);

//玩家2本轮受到的状态

if(npc2.HPP!

count3++;

//记录玩家2治疗次数加1

count4++;

//记录玩家2受到攻击次数加1

label7.setText("

+count3+"

+count4);

//刷新玩家2治疗、受到攻击的次数

Strings=s2;

npc2.HP=npc2.HP+npc2.HPP+npc2.defense-npc2.hurt;

//玩家2最终血量=当前血量+运气+防御力-伤害

if(npc2.HP>

h2)

text6.setText(name2+s);

area.append(name2+s+'

npc2.HP=h2;

s2="

if(npc2.HP<

npc2.HP=0;

//玩家血量为0

text6.setText(name2+s2);

area.append(name2+s2+'

area.append(name2+"

+npc2.HP+'

try

thread1.sleep(1000);

catch(InterruptedExceptionee){}

i++;

//进行PK的循环直到分出胜负

}

if(npc1.HP<

{//玩家1失败,玩家2获胜

text5.setText("

哎呦,我认输了!

text6.setText("

哈哈,我赢了!

area.append('

+name1+"

被"

+name2+"

打败了!

elseif(npc2.HP<

{//玩家2失败,玩家1获胜

被"

打败了!

}

}

//重新开始,清屏

elseif(e.getSource()==button1)

{//点击重新开始按钮

text1.setText(null);

text2.setText(null);

text3.setText(null);

text4.setText(null);

text5.setText(null);

text6.setText(null);

area.setText(null);

label6.setText("

+0+"

+0);

label7.setText("

l1.setText("

姓名1"

l2.setText("

姓名2"

//所有文本框内容清除

/*属性值产生算法*/

publicvoidshuxing(Strings)

Stringstr="

for(inti=0;

i<

s.length();

i++)

{

intch=(int)s.charAt(i);

Strings4=Integer.toHexString(ch);

str=str+s4;

StringsHP;

Stringsattack;

Stringsdefense;

sHP=str.substring(0,3);

sattack=str.substring(3,6);

sdefense=str.substring(6,8);

HP=Integer.parseInt(sHP,16);

attack=Integer.parseInt(sattack,16);

defense=Integer.parseInt(sdefense,16);

//产生2000——3000以内的血量

if(HP<

10)

HP+=2000;

//产生2000——2009

if(HP>

=10&

HP<

100)

HP+=2901;

//产生2911——3000

=100&

1000)

HP+=2001;

//产生2101——3000

=1000&

=2000)

HP+=1000;

//产生2000——3000

=3000&

=4000)

HP-=1000;

4000)

HP-=2000;

//产生2000——2095

//产生155——300以内的攻击力

if(attack<

attack=(attack+391)/2;

//产生195——200

if(attack>

attack<

attack=(attack+301)/2;

//产生155——200

attack=(attack/100+400)/2;

//产生200——205

=1000)

attack=(attack/1000+450)/2;

//产生225——227

//产生100——200以内的防御力

if(defense<

defense+=100;

//产生100——199

if(defense>

200)

defense-=100;

//产生100——155

6.2运行前结果分析

图6.2.1运行初始界面

6.3运行后结果分析

图6.2.2运行结果

七、参考文献

[1]《算法设计与分析》王晓东,清华大学出版社。

[2]《java编程》张丹丹,人民邮电出版社。

[3]《算法设计与分析》(第二版)霍红卫编著,西安电子科技大学出版社,2010

[4]《算法设计与题解》王晓东编著电子工业出版社

[5]毕广吉.Java程序设计实例教程[M].北京:

冶金工业出版社,2007年

[6]王保罗.Java面向对象程序设计[M].北京:

清华大学出版社,2003年

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1