策略模式的运用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
序号:姓名:学号:专业:日期:成绩:
实验一策略模式的运用
一、实验目的:
策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。在熟悉策略模式相关理论知识的基础上,使用策略模式实现一个小游戏。
二、实验要求:
使用策略模式实现一个小游戏,要求如下:
1.游戏中有三个角色:和尚,侠女,忍者;
2.每个角色都有生命值和魔法值,但各角色不同。
3.各角色外观不同。
4.每个角色具有魔法攻击和物理攻击;
5.物理攻击有三种:用刀、用剑、用手;
6.魔法攻击也有三种:火系魔法、金系魔法、水系魔法;
7.各角色可以动态更换物理、魔法攻击方式,也可以动态选择攻击方法。
1、设计并绘制该程序的类图;
2、依照设计的类图使用Java语言编写代码,并实现该程序;
3、除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:
a)控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;
b)控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出;
c)设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,
运行结果文本输出;
三、实验内容:
类图
代码
Character.Java
import java.util.Scanner;
public abstract class Character {
public String look;
Magic_attack ma;
Physical_attack pa;
public void magic_attack_way(){
ma.magic();
}
public void physical_attack_way(){
pa.physical();
}
public void setMa(Magic_attack m) {
this.ma = m;
}
public Magic_attack getMa() {
return ma;
}
public String getLook() {
return look;
}
public void setLook(String look) {
this.look = look;
}
public Physical_attack getPa() {
return pa;
}
public void setPa(Physical_attack pa) {
this.pa = pa;
}
public abstract void display();
Scanner sc = new Scanner(System.in);
public void change(Character x){
System.out.println("想更换物理、魔法攻击方式,和技能吗? 1 yes 2no");
for(int p=0;p<1;){
String k = sc.nextLine();
switch(k){
case "1":
System.out.println("输入你想要改变的攻击方法,1物攻,2法功");
String t = sc.nextLine();
switch(t){
case "1":
System.out.println("输入你想要改变的攻击方式,1手,2刀,3剑,4,不更改");
String pw= sc.nextLine();
switch(pw){
case "1":
x.setPa(new Physical_hand());
System.out.println("更改后的效果");
x.physical_attack_way();
break;
case "2":
x.setPa(new Physical_knife());
System.out.println("更改后的效果");
x.physical_attack_way();
break;
case "3":
x.setPa(new Physical_sword());
System.out.println("更改后的效果");
x.physical_attack_way();
break;
default:
break;
}
break;
case "2":
System.out.println("输入你想要改变的攻击方式,1水,2火,3金,4,不更改");
String mw= sc.nextLine();
switch(mw){
case "1":
x.setMa(new Magic_gold());
System.out.println("更改后的效果");
x.magic_attack_way();
break;
case "2":
x.setMa(new Magic_fire());
System.out.println("更改后的效果");
x.magic_attack_way();
break;
case "3":
x.setMa(new Magic_gold());
System.out.println("更改后的效果");
x.magic_attack_way();
break;
default:
break;
}
break;
}
default:
p=1;
break;
}
}
}
}