策略模式的运用.docx

上传人:b****4 文档编号:4167226 上传时间:2022-11-28 格式:DOCX 页数:10 大小:117.43KB
下载 相关 举报
策略模式的运用.docx_第1页
第1页 / 共10页
策略模式的运用.docx_第2页
第2页 / 共10页
策略模式的运用.docx_第3页
第3页 / 共10页
策略模式的运用.docx_第4页
第4页 / 共10页
策略模式的运用.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

策略模式的运用.docx

《策略模式的运用.docx》由会员分享,可在线阅读,更多相关《策略模式的运用.docx(10页珍藏版)》请在冰豆网上搜索。

策略模式的运用.docx

策略模式的运用

实验报告

序号:

姓名:

学号:

专业:

日期:

成绩:

实验一策略模式的运用

一、实验目的:

策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

在熟悉策略模式相关理论知识的基础上,使用策略模式实现一个小游戏。

二、实验要求:

使用策略模式实现一个小游戏,要求如下:

1.游戏中有三个角色:

和尚,侠女,忍者;

2.每个角色都有生命值和魔法值,但各角色不同。

3.各角色外观不同。

4.每个角色具有魔法攻击和物理攻击;

5.物理攻击有三种:

用刀、用剑、用手;

6.魔法攻击也有三种:

火系魔法、金系魔法、水系魔法;

7.各角色可以动态更换物理、魔法攻击方式,也可以动态选择攻击方法。

1、设计并绘制该程序的类图;

2、依照设计的类图使用Java语言编写代码,并实现该程序;

3、除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:

a)控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;

b)控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出;

c)设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,运行结果文本输出;

三、实验内容:

类图

代码

Character.Java

importjava.util.Scanner;

publicabstractclassCharacter{

publicStringlook;

Magic_attackma;

Physical_attackpa;

publicvoidmagic_attack_way(){

ma.magic();

}

publicvoidphysical_attack_way(){

pa.physical();

}

publicvoidsetMa(Magic_attackm){

this.ma=m;

}

publicMagic_attackgetMa(){

returnma;

}

publicStringgetLook(){

returnlook;

}

publicvoidsetLook(Stringlook){

this.look=look;

}

publicPhysical_attackgetPa(){

returnpa;

}

publicvoidsetPa(Physical_attackpa){

this.pa=pa;

}

publicabstractvoiddisplay();

Scannersc=newScanner(System.in);

publicvoidchange(Characterx){

System.out.println("想更换物理、魔法攻击方式,和技能吗?

1yes2no");

for(intp=0;p<1;){

Stringk=sc.nextLine();

switch(k){

case"1":

System.out.println("输入你想要改变的攻击方法,1物攻,2法功");

Stringt=sc.nextLine();

switch(t){

case"1":

System.out.println("输入你想要改变的攻击方式,1手,2刀,3剑,4,不更改");

Stringpw=sc.nextLine();

switch(pw){

case"1":

x.setPa(newPhysical_hand());

System.out.println("更改后的效果");

x.physical_attack_way();

break;

case"2":

x.setPa(newPhysical_knife());

System.out.println("更改后的效果");

x.physical_attack_way();

break;

case"3":

x.setPa(newPhysical_sword());

System.out.println("更改后的效果");

x.physical_attack_way();

break;

default:

break;

}

break;

case"2":

System.out.println("输入你想要改变的攻击方式,1水,2火,3金,4,不更改");

Stringmw=sc.nextLine();

switch(mw){

case"1":

x.setMa(newMagic_gold());

System.out.println("更改后的效果");

x.magic_attack_way();

break;

case"2":

x.setMa(newMagic_fire());

System.out.println("更改后的效果");

x.magic_attack_way();

break;

case"3":

x.setMa(newMagic_gold());

System.out.println("更改后的效果");

x.magic_attack_way();

break;

default:

break;

}

break;

}

default:

p=1;

break;

}

}

}

}

Magic_attack.java

publicinterfaceMagic_attack{

publicvoidmagic();

}

Physical_attack.java

publicinterfacePhysical_attack{

publicvoidphysical();

}

Magic_fire.java

publicclassMagic_fireimplementsMagic_attack{

publicvoidmagic(){

//TODO自动生成的方法存根

System.out.println("正在用火魔法攻击");

}

}

Magic_gold.java

publicclassMagic_goldimplementsMagic_attack{

publicvoidmagic(){

System.out.println("正在用金魔法攻击");

}

}

Magic_water.java

publicclassMagic_waterimplementsMagic_attack{

publicvoidmagic(){

System.out.println("正在用水魔法攻击");

}

}

Physical_hand.java

publicclassPhysical_handimplementsPhysical_attack{

publicvoidphysical(){

System.out.println("用双手才是最强的表现");

}

}

Physical_knife.java

publicclassPhysical_knifeimplementsPhysical_attack{

publicvoidphysical(){

System.out.println("我是用刀的,屠龙在手,天下我有");

}

}

Physical_sword.java

publicclassPhysical_swordimplementsPhysical_attack{

publicvoidphysical(){

System.out.println("我是用剑的,倚天一出,谁与争锋");

}

}

Monk.java

publicclassMonkextendsCharacter{

publicMonk(){

ma=newMagic_fire();

pa=newPhysical_hand();

look="光头";

}

publicvoiddisplay(){

//TODO自动生成的方法存根

System.out.println("我是和尚,外观:

"+look);

}

}

Kungfuwoman.java

publicclassKungfuwomanextendsCharacter{

publicKungfuwoman(){

ma=newMagic_water();

pa=newPhysical_sword();

look="长剑配青衫";

}

publicvoiddisplay(){

//TODO自动生成的方法存根

System.out.println("我是侠女,外观:

"+look);

}

}

测试类

Test.Java

importjava.util.Scanner;

publicclasstest{

publicstaticvoidmain(String[]args){

//TODO自动生成的方法存根

Scannersc=newScanner(System.in);

for(inti=1;i<=2;)

{

System.out.println("请输入角色类型查看技能及属性1:

Monk2:

Kungfuwoman3:

Ninja任意键终止程序");

Stringflag=sc.nextLine();

switch(flag)

{

case"1":

Characterc=newMonk();

System.out.println("拥有技能展示");

c.magic_attack_way();

c.physical_attack_way();

c.display();

c.change(c);

break;

case"2":

Characterd=newKungfuwoman();

System.out.println("拥有技能展示");

d.magic_attack_way();

d.physical_attack_way();

d.display();

d.change(d);

break;

case"3":

Charactere=newNinja();

System.out.println("拥有技能展示");

e.magic_attack_way();

e.physical_attack_way();

e.display();

e.change(e);

break;

default:

i=4;

sc.close();

break;

}

}

}

}

运行显示

1.更换技能

 

2.角色信息展示

四、实验总结:

此次试验让我学到了策略模式的简单应用,把经常变化的东西分离开来,不变的放一块,总接口实现变化的部分,代码复用性号,便于修改和维护。

指导教师签名:

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

当前位置:首页 > 初中教育 > 政史地

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

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