计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx
- 文档编号:19535059
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:14
- 大小:69.44KB
计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx
《计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机算法与分析《姓名挑战游戏金》Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
对题目要求进行分析,写出游戏的算法思想。
第三、四天:
进行代码的编写、调试过程,写报告。
第五天:
提交设计结果及设计报告,进行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年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 姓名挑战游戏金 计算机 算法 分析 姓名 挑战 游戏