您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 云南大学设计模式实验报告1-策略模式
云南大学软件学院实验报告序号:姓名:学号:专业:软件工程日期:2015.12.03成绩:实验一策略模式的运用一、实验目的:策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。在熟悉策略模式相关理论知识的基础上,使用策略模式实现一个小游戏。二、实验要求:使用策略模式实现一个小游戏,要求如下:1.游戏中有三个角色:和尚,侠女,忍者;2.每个角色都有生命值和魔法值,但各角色不同。3.各角色外观不同。4.每个角色具有魔法攻击和物理攻击;5.物理攻击有三种:用刀、用剑、用手;6.魔法攻击也有三种:火系魔法、金系魔法、水系魔法;7.各角色可以动态更换物理、魔法攻击方式,也可以动态选择攻击方法。1、设计并绘制该程序的类图;2、依照设计的类图使用Java语言编写代码,并实现该程序;3、除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:a)控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;b)控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出;c)设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,运行结果文本输出。三、实验内容:类图实验代码魔法攻击packageMagic;publicinterfacemagic{publicvoidmagic();}火系魔法packageMagic;publicclassfireimplementsmagic{publicvoidmagic(){System.out.println(火系魔法攻击);}}金系魔法packageMagic;publicclassmetalimplementsmagic{publicvoidmagic(){System.out.println(金系魔法攻击);}}水系魔法packageMagic;publicclasswaterimplementsmagic{publicvoidmagic(){System.out.println(水系魔法攻击);}}物理攻击packagePhysic;publicinterfacephysic{publicvoidphysic();}徒手packagePhysic;publicclasshandimplementsphysic{publicvoidphysic(){System.out.println(徒手攻击);}}用刀packagePhysic;publicclassknifeimplementsphysic{publicvoidphysic(){System.out.println(用刀攻击);}}用剑packagePhysic;publicclassswordimplementsphysic{publicvoidphysic(){System.out.println(用剑攻击);}}角色packageRole;importMagic.magic;importPhysic.physic;publicabstractclassrole{magicMattack;physicPattack;intmagicValue=0;intlifeValue=0;publicrole(){}publicabstractvoiddisplay();publicvoidMattack(){Mattack.magic();}publicvoidPattack(){Pattack.physic();}publicvoidsetP(physicp){Pattack=p;}publicvoidsetM(magicm){Mattack=m;}}和尚packageRole;importPhysic.physic;publicclassBuddhistmonkextendsrole{publicBuddhistmonk(){magicValue=90;lifeValue=150;}publicvoiddisplay(){System.out.println(****************************);System.out.println(角色:和尚);System.out.println(外观:身披袈裟,手持钵盂);System.out.println(生命值:+lifeValue++魔法值:+magicValue);System.out.println(****************************);}}忍者packageRole;publicclassNinjiaextendsrole{publicNinjia(){magicValue=100;lifeValue=120;}publicvoiddisplay(){System.out.println(****************************);System.out.println(角色:忍者);System.out.println(外观:身着白衣,腰佩宝剑);System.out.println(生命值:+lifeValue++魔法值:+magicValue);System.out.println(****************************);}}侠女packageRole;publicclassSwordswomenextendsrole{publicSwordswomen(){magicValue=140;lifeValue=80;}publicvoiddisplay(){System.out.println(****************************);System.out.println(角色:侠女);System.out.println(外观:身穿黑色忍者服,头戴面具);System.out.println(生命值:+lifeValue++魔法值:+magicValue);System.out.println(****************************);}}测试函数packagetest;importjava.util.Scanner;importMagic.fire;importMagic.metal;importMagic.water;importPhysic.hand;importPhysic.knife;importPhysic.sword;importRole.Buddhistmonk;importRole.Ninjia;importRole.Swordswomen;importRole.role;publicclasstest{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(请选择角色:1、和尚2、女侠3、忍者);Scannerin=newScanner(System.in);intselectRole=in.nextInt();roletheRole=null;if(selectRole==1)theRole=(Buddhistmonk)newBuddhistmonk();elseif(selectRole==2)theRole=(Swordswomen)newSwordswomen();elseif(selectRole==3)theRole=(Ninjia)newNinjia();else{System.out.println(输入错误!);}theRole.display();System.out.println(攻击方式:1、魔法攻击2、物理攻击);System.out.println(魔法攻击方法:4、火系魔法5、水系魔法6、金系魔法);System.out.println(物理攻击方法:7、用刀攻击8、用剑攻击9、徒手攻击);System.out.println(开始攻击!);System.out.println(选择攻击方式:);intMroP=in.nextInt();while(true){if(MroP==1){System.out.println(正在进行魔法攻击,选择魔法攻击方法:4,5,6);while(MroP!=2){MroP=in.nextInt();switch(MroP){case4:theRole.setM(newfire());break;case5:theRole.setM(newwater());break;case6:theRole.setM(newmetal());break;case2:System.out.println(切换为物理攻击);break;default:System.out.println(输入错误!);continue;}if(MroP!=2)theRole.Mattack();};}elseif(MroP==2){System.out.println(正在进行物理攻击,选择物理攻击方法:7,8,9);while(MroP!=1){MroP=in.nextInt();switch(MroP){case7:theRole.setP(newknife());break;case8:theRole.setP(newsword());break;case9:theRole.setP(newhand());break;case1:System.out.println(切换为魔法攻击);continue;default:System.out.println(输入错误!);continue;};if(MroP!=1)theRole.Pattack();};}}}}实验结果请选择角色:1、和尚2、女侠3、忍者2****************************角色:侠女外观:身穿黑色忍者服,头戴面具生命值:80魔法值:140****************************攻击方式:1、魔法攻击2、物理攻击魔法攻击方法:4、火系魔法5、水系魔法6、金系魔法物理攻击方法:7、用刀攻击8、用剑攻击9、徒手攻击开始攻击!选择攻击方式:2正在进行物理攻击,选择物理攻击方法:7,8,97用刀攻击8用剑攻击9徒手攻击4输入错误!1切换为魔法攻击正在进行魔法攻击,选择魔法攻击方法:4,5,64火系魔法攻击5水系魔法攻击7输入错误!6金系魔法攻击2切换为物理攻击正在进行物理攻击,选择物理攻击方法:7,8,91切换为魔法攻击正在进行魔法攻击,选择魔法攻击方法:4,5,64火系魔法攻击四、实验总结:通过本次实验,我加深了对策略模式的理解,了解了接口和继承的优缺点。算法和使用算法的对象各自独立,分离开来,客户程序可以在运行时动态选择算法,代码的重用性好,利于代码的改进和维护。可见减少代码的重复率,从而减少代码量,还可以减少修改代码时出现不一致的情况。指导教师签名:
本文标题:云南大学设计模式实验报告1-策略模式
链接地址:https://www.777doc.com/doc-4539810 .html