用java设计实现一个简单的动作冒险类游戏
1、背景
这是java老师布置的本周作业,具体题目截图如下
2、分析
在UML图已经给出的前提下,此作业很容易。自己在此基础上,加了个简单的界面设计和玩家设定的历史记录设计。整体设计见下面自己画的UML图(未加联系的模块间为组合关系),具体设计代码附在下面,加上了详细注释。
3、具体代码设计(附详细注释,共13个.java文件)
(1)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public interface WeaponBehavior { // 武器接口void useWeapon(); // 玩家使用的武器}
(2)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public class AxeBehavior implements WeaponBehavior { // 斧头类,实现接口WeaponBehavior@Overridepublic void useWeapon() {// TODO Auto-generated method stubSystem.out.println("选择技能:使用斧头劈砍");}}
(3)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public class BowAndArrowBehavior implements WeaponBehavior { // 弓箭类,实现接口WeaponBehavior@Overridepublic void useWeapon() {// TODO Auto-generated method stubSystem.out.println("选择技能:使用弓箭射击");}}
(4)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public class KnifeBehavior implements WeaponBehavior { // 匕首类,实现接口WeaponBehavior@Overridepublic void useWeapon() {// TODO Auto-generated method stubSystem.out.println("选择技能:使用匕首刺杀");}}
(5)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public class SwordBehavior implements WeaponBehavior { // 剑类,实现接口WeaponBehavior@Overridepublic void useWeapon() {// TODO Auto-generated method stubSystem.out.println("选择技能:使用剑刺杀");}}
(6)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public class Character { // 超类,人物角色WeaponBehavior weaponBehavior; // 武器接口对象void display() {}// 显示玩家角色设定void fight() {} // 说明玩家战斗所使用的武器技能void setWeponBehaivor(WeaponBehavior weaponBehavior) { // 设定人物角色的武器行为this.weaponBehavior = weaponBehavior;}}
(7)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public class King extends Character { // 国王类,用于继承父类Character,并重写其中的两方法void display() {System.out.println("我是一位国王");}void fight() {weaponBehavior.useWeapon();}}
(8)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public class Queen extends Character {// 女王类,用于继承父类Character,并重写其中的两方法void display() {System.out.println("我是一位女王");}void fight() {weaponBehavior.useWeapon();}}
(9)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @All Copyright by 孙琨**/public class Knight extends Character {// 骑士类,用于继承父类Character,并重写其中的两方法void display() {System.out.println("我是一位骑士");}void fight() {weaponBehavior.useWeapon();}}
(10)
package ActionRisk;/*** * @Author 孙琨* @Date -11-3* @AtXUST* @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 -11-3* @AtXUST* @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 -11-3* @AtXUST* @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 -11-3* @AtXUST* @All Copyright by 孙琨**/public class MainClass { // 测试类public static void main(String[] args) {// TODO Auto-generated method stubSurfaceDesign surface = new SurfaceDesign(); // 创建界面设计对象surface.setSurface(); // 具体设定界面操作}}
4、测试结果截图
(1)
(2)
(3)
(4)
5、打包成可执行文件(jar和exe)
具体操作方法可见博客,链接为: /u010043538/article/details/13167099