课程设计(大作业)报告
课程名称:算法设计与分析设计题目:姓名挑战游戏院 系:班 级:设 计 者:学 号:指导教师:设计时间:
目 录
1、课程设计目的 ............................................................................................................................1
2、课程设计题目分析 ....................................................................................................................1
3、课程设计要求 ............................................................................................................................1
4、总体设计、算法描述 ................................................................................................................1
4.1主方法分析........................................................................................................................1 4.2总体分析 ...........................................................................................................................2 4.4游戏细节设计....................................................................................................................3
4.4.1攻击招式统计........................................................................................................3 4.4.2治疗方法................................................................................................................3 4.4.3不明原因................................................................................................................3
5、实验总结 ....................................................................................................................................3
6、参考文献 .....................................................................................................................................4 附录 ..................................................................................................................................................4 运行结果:.....................................................................................................................................11
1、课程设计目的
课程设计是巩固所学理论知识、提高算法设计、分析能力的重要实践环节。算法设计与分析,主要目的是为解决某一问题而提出多种不同的解决方案,并且针对具体问题做细致的时间和空间复杂度分析,选取效率高的算法解决问题,从而达到优化的目的。
通过课程设计的训练,使我们能够巩固所学的算法分析基础理论知识,体会程序设计的全过程,培养我们处理数据的能力,提高我们分析问题、收集资料、解决问题的能力,最终培养理论联系实际,利用各种算法解决实际问题的应用能力。同时可以检测我们对这门课程的掌握情况,有助于查缺补漏。
2、课程设计题目分析
这次课程设计以JAVA语言为基础结合其图形应用界面来设计一个姓名挑战游戏,设计出的游戏有图形化界面,且界面简洁适用;在游戏界面中,输入两个姓名分别作为挑战者和被挑战者,随机产生属性值(战力指数,攻击力,防御力),当HP大于0时,两个名字进行对战,进行多轮攻击挑战后,用hp值决定双方输赢,hp值为0的一方战败,另一方则获胜,达到休闲益智的目的。
3、课程设计要求
程序设计以Java完成,配有图形界面。从分析题目的需求入手,按设计抽象数据类型、构思算法、通过类的设计实现抽象数据类型、编制上机程序代码并调试的步骤完成题目,最终写出完整的分析报告。最后提交作业包括:课程设计报告;完整程序,应该具有可显示界面;PPT及算法说明。
4、总体设计、算法描述
设计思路:为实现游戏的基本功能,必须首先定义一个工具面板,将各模块加入到工具面板中。
程序中用到的包如下:import java.awt.*;import java.awt.event.*; 程序中的类有:
cla Game extends Frame implements ActionListener,cla NPCC,cla text。
4.1主方法分析
public cla text /*建立一个公共类text */
1 { public static void main(String ars[]) {
new Game(\"姓名挑战游戏\"); } } 此部分为主方法部分,在本游戏中主函数主要起连接和导入的作用,对相应的方法进行说明、调用。 4.2总体分析
在Game框架中添加组件(Label,TextField,Button,Panel,TextArea,Menu)并布局管理器,使用的是BorderLayout管理器。 通过 ActionListener定义一个actionPerformed()方法。
创建一个shuxing()函数,随机产生HP,gongji,fangyu的初始值,对挑战者与被挑战者的属性进行随机处理映射到相应的攻击和反应,不断更新二者的属性值并获取。直到一方hp为0,挑战结束并输出挑战结果及双方最后属性值。
4.3使用到的方法
actionPerformed()方法:在事件分派awt线程中被调用; Thread.Start()方法:创建一个线程,使用Thread类创建线程; add():添加组件到框架中; damage(int gongji):嵌套调用; setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点; width:组件的宽度 height:组件的高度; shuxing():设置属性值; super():调用父类(Frame)构造函数,s为传入的参数,也就是调用了父类 public ; Frame(String s){ ...}构造函数get():读取数据;
2 set():设置属性; Random():随机数字产生方法; 游戏细节设计
4.4游戏细节设计
4.4.1攻击招式统计
1、不小心踩到香蕉皮,摔了一跤
2、中了情花剧毒
3、背部受到九阴白骨爪的伤害
4、手臂被射了一箭,中了七日贱骨头剧毒
5、过马路不小心撞到车了
6、身上被撒了痒痒粉,全身奇痒无比 4.4.2治疗方法
1、吃了一株断肠草,生命增加100
2、请求李时珍医治,生命增加300
3、擦了华佗送的999牌皮炎平,生命增加800
4.4.3不明原因
可能是皮炎平药效失效了,奇痒发作
5、实验总结
算法分析是一门面向设计,且理论性很强的科目。基于对本门课程的学习,将算法思想灵活运用到设计中来,解决实际问题。我们组设计的是:姓名挑战游戏,由于个人能力有限,编写的代码有一些问题,经过小组讨论,作了一定的改进,这说明我们在编程方面存在很多不足,有待于在以后的学习中不断提高和改进。通过用JAVA编写程序,掌握设计的算法和基本思想,加强了我调试程序的能力,培养了分析、解决问题的能力,提高自己的认识。
在老师的耐心指导和帮助下,我完成了这次课程设计,虽然要改进的地方还
3 有很多,对算法分析中的思想和原理理解的不够透彻,未能有效地与本次设计结合达到创新的目的。但也获得了小小的收获,我锻炼了实际动手能力,拓展了课外知识,积极运用图书馆、网络资源为设计服务。熟悉并灵活运用Editplus软件来编译程序,同时也培养了细心、耐心、虚心的学习态度,并积极与老师、同学进行沟通交流,增加了小组间的凝聚力。本着对自己负责的态度,认真对待本次设计。希望在以后的学习中,我能更好地将理论知识与实践相结合,学会学以致用,学有所用,完善自我,提高自身综合能力。
6、参考文献
[1]《算法设计与分析》王晓东,清华大学出版社。 [2]《java编程》张丹丹,人民邮电出版社。
附录
import java.awt.*; import java.awt.event.*; cla Game extends Frame implements ActionListener { Label l1,l2,label0,label1,label2,label3,label4,label5,label6,label7; TextField text1,text2,text3,text4,text5,text6; Button button,button1,button2; Panel p1,p2,p3,p4; TextArea area; Menu menu; MenuBar menubar; MenuItem item1,item2; int HP,gongji,fangyv; int count1=0,count2=0,count3=0,count4=0; Thread thread1; Game(String s) {
super(s);
thread1=new Thread();
label0=new Label(\"初始血量在2000-3000之间随机产生!\");
l1=new Label(\"姓名1\",Label.CENTER);
l2=new Label(\"姓名2\",Label.CENTER);
label1=new Label(\"姓名1\",Label.CENTER);
label2=new Label(\"姓名2\",Label.CENTER);
label3=new Label(\"属性1\",Label.CENTER);
label4=new Label(\"属性2\",Label.CENTER);
label5=new Label(\"PK状态\",Label.CENTER);
label6=new Label(\"得到治疗的次数:\"+count1+\"
受到攻击的次数:\"+count2);
label7=new Label(\"得到治疗的次数:\"+count3+\"
受到攻击的次数:\"+count4);
p1=new Panel();
p2=new Panel();
p3=new Panel();
p4=new Panel();
area=new TextArea(10,30);
text1=new TextField(5);
text2=new TextField(5);
text3=new TextField(34);
text4=new TextField(34);
text5=new TextField(27);
text6=new TextField(27);
button=new Button(\"确定\");
button1=new Button(\"重新输入\");
button2=new Button(\"退出\");
thread1.start();
add(p1,BorderLayout.NORTH);
add(p2,BorderLayout.CENTER);
p1.add(label0);
p2.add(label1);
p2.add(text1);
p2.add(button);
p2.add(label2);
p2.add(text2);
p2.add(label3);
p2.add(text3);
p2.add(label4);
p2.add(text4);
p2.add(label5);
p2.add(p3);
p2.add(label6);
p2.add(p4);
p2.add(label7);
p2.add(area);
p2.add(button1);
p2.add(button2);
p3.add(l1); p3.add(text5); p4.add(l2); p4.add(text6); l1.setLocation(0, 0); text5.setLocation(20,0); area.setEditable(false); text3.setEditable(false); text4.setEditable(false); text5.setEditable(false); text6.setEditable(false); button.setBackground(Color.LIGHT_GRAY); button1.setBackground(Color.LIGHT_GRAY); button2.setBackground(Color.LIGHT_GRAY); label0.setBackground(Color.orange); label3.setBackground(Color.cyan); label4.setBackground(Color.cyan); label5.setBackground(Color.cyan); button.addActionListener(this); button1.addActionListener(this); button2.addActionListener(this); menu=new Menu(\"菜单\"); item1=new MenuItem(\"打开\"); item2=new MenuItem(\"退出\"); p2.setBackground(Color.green); p1.setBackground(Color.blue); menubar=new MenuBar(); menu.add(item1); menu.addSeparator(); menu.add(item2); menubar.add(menu); setMenuBar(menubar); item2.addActionListener(this); area.setBackground(Color.yellow); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {
System.exit(0); } }); setBounds(500,100,285,590); setResizable(false);//设置窗口不可调整大小 setVisible(true);
validate(); } public void actionPerformed(ActionEvent e) {
if(e.getSource()==item2 ||e.getSource()==button2)
System.exit(0);
else if(e.getSource()==button)
{
String name1=text1.getText();
String name2=text2.getText();
NPCC npc1=new NPCC(name1);
NPCC npc2=new NPCC(name2);
npc1.shuxing();
npc2.shuxing();
l1.setText(name1);
l2.setText(name2);
int h1,h2;
h1=npc1.HP;
h2=npc2.HP;
text3.setText(name1+\"的属性: 战力指数:\"+npc1.HP+\" 攻击:\"+npc1.gongji+\" 防御:\"+npc1.fangyv);
text4.setText(name2+\"的属性: 战力指数:\"+npc2.HP+\" 攻击:\"+npc2.gongji+\" 防御:\"+npc2.fangyv);
int i=0;
while(npc1.HP>0 && npc2.HP>0)
{
if (i%2==0)
{
String s1=npc1.damage(npc2.gongji);
if(npc1.HPP!=0)
{
count1++;
}
else
{
count2++;
}
label6.setText(\"得到治疗的次数:\"+count1+\"
受到攻击的次数:\"+count2);
String s=s1;
npc1.HP=npc1.HP+npc1.HPP+npc1.fangyv-npc1.hurt;
if(npc1.HP>h1)
{
area.append(name1+s+\'\\n\');
text5.setText(name1+s);
try
{
thread1.sleep(1000);
}
catch(InterruptedException ee){}
npc1.HP=h1;
s1=\"血量已达最大值!!\";
}
if(npc1.HP
{
npc1.HP=0;
}
text3.setText(name1+\":战力指数:\"+npc1.HP+\" 攻击:\"+npc1.gongji+\" 防御:\"+npc1.fangyv);
text5.setText(name1+s1);
area.append(name1+s1+\'\\n\');
area.append(name1+\"剩余生命值:\"+npc1.HP+\'\\n\');
}
else
{
String s2=npc2.damage(npc1.gongji);
if(npc2.HPP!=0)
{
count3++;
}
else
{
count4++;
}
label7.setText(\"得到治疗的次数:\"+count3+\"
受到攻击的次数:\"+count4);
String s=s2;
npc2.HP=npc2.HP+npc2.HPP+npc2.fangyv-npc2.hurt;
if(npc2.HP>h2)
{
text6.setText(name2+s);
area.append(name2+s+\'\\n\');
try
{
thread1.sleep(1000);
}
catch(InterruptedException ee){}
npc2.HP=h2;
s2=\"血量已达最大值!!\";
}
if(npc2.HP
{
npc2.HP=0;
}
text4.setText(name2+\":战力指数:\"+npc2.HP+\" 攻击:\"+npc2.gongji+\" 防御:\"+npc2.fangyv);
text6.setText(name2+s2);
area.append(name2+s2+\'\\n\');
area.append(name2+\"剩余生命值:\"+npc2.HP+\'\\n\');
}
try
{
thread1.sleep(1000);
}
catch(InterruptedException ee){}
i++;
}
if(npc1.HP
{
text5.setText(\"哎呀妈呀,我太虚弱了!认输啦\\n\");
text6.setText(\"嘎嘎嘎,我太厉害啦!\"+name1+\",翘翘了。。。\\n\");
area.append(name1+\"被\"+name2+\"打败了\\n\");
}
else if(npc2.HP
{
text5.setText(\"嘎嘎嘎,我太厉害啦!\"+name2+\",翘翘啦。。。\\n\");
text6.setText(\"哎呀妈呀,我太虚弱了!认输啦\\n\\n\");
area.append(name2+\" 被\"+name1+\" 打败了\\n\");
}
}
else if(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(\"得到治疗的次数:\"+0+\"
受到攻击的次数:\"+0);
l1.setText(\"姓名1\");
l2.setText(\"姓名2\");
} } } cla NPCC { String name,s; int HP,gongji,fangyv; int HPP=0; int hurt=0; NPCC(String name) {
this.name=name; } public void shuxing() {
HP=(int)(Math.random()*1000)+2000;
gongji=(int)(Math.random()*150)+80;
fangyv=(int)(Math.random()*30)+50; } public String damage(int gongji) {
int a=(int)(Math.random()*10);
switch(a)
{
case 1:
s=\"不小心踩到香蕉皮,摔了一跤\";
hurt=gongji;
HPP=0;
break;
case 2:
s=\"中了情花剧毒\";
hurt=gongji*2;
HPP=0;
break;
case 3:
s=\"吃了一株断肠草,生命增加100\";
HPP=HPP+100;
hurt=0;
break;
case 4:
s=\"背部受到九阴白骨爪的伤害\";
hurt=gongji*3;
HPP=0;
break;
case 5:
s=\"请求李时珍医治,生命增加300\";
HPP=HPP+300;
hurt=0;
break;
case 6:
s=\"手臂被射了一箭,中了七日贱骨头剧毒\";
hurt=gongji*4;
HPP=0;
break;
case 7:
s=\"过马路不小心撞到车了\";
hurt=gongji*5;
HPP=0;
break;
case 8:
s=\"身上被撒了痒痒粉,全身奇痒无比\";
hurt=gongji*6;
HPP=0;
break;
case 9:
s=\"擦了华佗送的999牌皮炎平,生命增加800\";
HPP=HPP+800;
hurt=0;
break;
default:
s=\"可能是皮炎平药效失效了,奇痒发作\";
break;
}
return s; } } public cla text { public static void main(String ars[]) {
new Game(\"姓名挑战游戏\"); } } 运行结果: