人人范文网 范文大全

名字PK小游戏

发布时间:2020-03-02 14:52:12 来源:范文大全 收藏本文 下载本文 手机版

课程设计(大作业)报告

课程名称:算法设计与分析设计题目:姓名挑战游戏院 系:班 级:设 计 者:学 号:指导教师:设计时间:

目 录

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(\"姓名挑战游戏\"); } } 运行结果:

小游戏

小游戏

小游戏

小游戏

小游戏

小游戏

小游戏

小游戏

小游戏

小游戏

名字PK小游戏
《名字PK小游戏.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档