用java设计实现一个容易的动作冒险类游戏
用java设计实现一个简单的动作冒险类游戏
用java设计实现一个简单的动作冒险类游戏
1、背景
这是java老师布置的本周作业,具体题目截图如下
2、分析
在UML图已经给出的前提下,此作业很容易。自己在此基础上,加了个简单的界面设计和玩家设定的历史记录设计。整体设计见下面自己画的UML图(未加联系的模块间为组合关系),具体设计代码附在下面,加上了详细注释。
3、具体代码设计(附详细注释,共13个.java文件)
(1)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public interface WeaponBehavior { // 武器接口 void useWeapon(); // 玩家使用的武器 }
(2)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class AxeBehavior implements WeaponBehavior { // 斧头类,实现接口WeaponBehavior @Override public void useWeapon() { // TODO Auto-generated method stub System.out.println("选择技能:使用斧头劈砍"); } }
(3)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class BowAndArrowBehavior implements WeaponBehavior { // 弓箭类,实现接口WeaponBehavior @Override public void useWeapon() { // TODO Auto-generated method stub System.out.println("选择技能:使用弓箭射击"); } }
(4)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class KnifeBehavior implements WeaponBehavior { // 匕首类,实现接口WeaponBehavior @Override public void useWeapon() { // TODO Auto-generated method stub System.out.println("选择技能:使用匕首刺杀"); } }
(5)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class SwordBehavior implements WeaponBehavior { // 剑类,实现接口WeaponBehavior @Override public void useWeapon() { // TODO Auto-generated method stub System.out.println("选择技能:使用剑刺杀"); } }
(6)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class Character { // 超类,人物角色 WeaponBehavior weaponBehavior; // 武器接口对象 void display() {} // 显示玩家角色设定 void fight() {} // 说明玩家战斗所使用的武器技能 void setWeponBehaivor(WeaponBehavior weaponBehavior) { // 设定人物角色的武器行为 this.weaponBehavior = weaponBehavior; } }
(7)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class King extends Character { // 国王类,用于继承父类Character,并重写其中的两方法 void display() { System.out.println("我是一位国王"); } void fight() { weaponBehavior.useWeapon(); } }
(8)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class Queen extends Character {// 女王类,用于继承父类Character,并重写其中的两方法 void display() { System.out.println("我是一位女王"); } void fight() { weaponBehavior.useWeapon(); } }
(9)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class Knight extends Character {// 骑士类,用于继承父类Character,并重写其中的两方法 void display() { System.out.println("我是一位骑士"); } void fight() { weaponBehavior.useWeapon(); } }
(10)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class Troll extends Character {// 巨魔战将类,用于继承父类Character,并重写其中的两方法 void display() { System.out.println("我是巨魔战将"); } void fight() { weaponBehavior.useWeapon(); } }
(11)
package ActionRisk; import java.util.Scanner; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class SurfaceDesign { // 界面设计 public void setSurface(){ // 设定显示的界面 Character character = null; // 人物类对象 int chooseCharacter = 0; // 人物选项 int chooseWeapon = 0; // 武器选项 Scanner input = new Scanner(System.in); String playerName = null; // 玩家姓名 System.out.println("请输入玩家姓名"); if(input.hasNext()){ playerName = input.next(); } // 选择游戏角色操作 System.out.println("\n请选择游戏角色:"); System.out.println(" 1.国王"); System.out.println(" 2.女王"); System.out.println(" 3.骑士"); System.out.println(" 4.巨魔战将"); System.out.println("请输入选择"); String setCharacter = "设置游戏角色为:"; if(input.hasNext()){ chooseCharacter = input.nextInt(); } switch(chooseCharacter){ case 1: character = new King(); // 使用对象的上转型对象 setCharacter += "国王"; break; case 2: character = new Queen(); // 使用对象的上转型对象 setCharacter += "女王"; break; case 3: character = new Knight(); // 使用对象的上转型对象 setCharacter += "骑士"; break; case 4: character = new Troll(); // 使用对象的上转型对象 setCharacter += "巨魔战将"; break; default: System.out.println("您的选择出错,请重新选择"); } // 选择武器操作 System.out.println("\n请选择使用的武器"); System.out.println(" 1.斧头"); System.out.println(" 2.匕首"); System.out.println(" 3.剑"); System.out.println(" 4.弓箭"); System.out.println("请输入您的选择:"); String setWeapon = "选择武器为:"; if(input.hasNext()){ chooseWeapon = input.nextInt(); } switch(chooseWeapon){ case 1: character.setWeponBehaivor(new AxeBehavior()); // 使用接口回调 setWeapon += "斧头"; break; case 2: character.setWeponBehaivor(new KnifeBehavior()); // 使用接口回调 setWeapon += "匕首"; break; case 3: character.setWeponBehaivor(new SwordBehavior()); // 使用接口回调 setWeapon += "剑"; break; case 4: character.setWeponBehaivor(new BowAndArrowBehavior()); // 使用接口回调 setWeapon += "弓箭"; break; default: System.out.println("您的选择出错,请重新选择"); } // 人物行为演示 System.out.println(); character.display(); // 显示玩家角色设定 character.fight(); // 说明玩家战斗所使用的武器技能 // 对当前玩家游戏设定信息进行存档 System.out.println("\n提示:"); System.out.println(playerName + "您的当前游戏设定已经存档,历史记录放在history.txt文件中"); SaveHistory history = new SaveHistory(); history.setRole(playerName, setCharacter, setWeapon); // 初始化 history.doSaveHistory(); // 具体保存操作 } }
(12)
package ActionRisk; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class SaveHistory { String playerName = null; // 玩家姓名 String setCharacter = null; // 设定的人物角色 String setWeapon = null; // 设定的武器 public void setRole(String playerName,String setCharacter,String setWeapon){ // 初始化 this.playerName = playerName; this.setCharacter = setCharacter; this.setWeapon = setWeapon; } public void doSaveHistory(){ // 进行存储信息操作 try{ // 游戏设定时间设置 Date nowTime = new Date(); SimpleDateFormat matter = new SimpleDateFormat("'游戏设定时间为:'y年M月d日H时m分s秒"); String setPlayerTime = matter.format(nowTime); // 文件缓冲流输出操作 File file = new File("history.txt"); // 若无名为history.txt的文件,则创建一个 FileWriter outOne = new FileWriter(file,true); BufferedWriter outTwo = new BufferedWriter(outOne); // 写入玩家姓名信息 outTwo.write(playerName); outTwo.newLine(); // 写入游戏设定时间 outTwo.write(setPlayerTime); outTwo.newLine(); // 写入设定的人物角色信息 outTwo.write(setCharacter); outTwo.newLine(); // 写入设定的武器信息 outTwo.write(setWeapon); outTwo.newLine(); outTwo.newLine(); // 关闭文件 outTwo.close(); outOne.close(); }catch(IOException e){ } } }
(13)
package ActionRisk; /** * * @Author 孙琨 * @Date 2013-11-3 * @At XUST * @All Copyright by 孙琨 * */ public class MainClass { // 测试类 public static void main(String[] args) { // TODO Auto-generated method stub SurfaceDesign surface = new SurfaceDesign(); // 创建界面设计对象 surface.setSurface(); // 具体设定界面操作 } }
4、测试结果截图
(1)
(2)
(3)
(4)
5、打包成可执行文件(jar和exe)
具体操作方法可见博客,链接为: http://blog.****.net/u010043538/article/details/13167099