用java设计实现一个简单的动作冒险类游戏

来源:互联网 发布:php源码分析鸟哥 编辑:程序博客网 时间:2024/05/17 04:42

用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@Overridepublic void useWeapon() {// TODO Auto-generated method stubSystem.out.println("选择技能:使用斧头劈砍");}}

 

(3)

package ActionRisk;/** *  * @Author 孙琨 * @Date   2013-11-3 * @At     XUST * @All Copyright by 孙琨 * */public class BowAndArrowBehavior implements WeaponBehavior {   // 弓箭类,实现接口WeaponBehavior@Overridepublic void useWeapon() {// TODO Auto-generated method stubSystem.out.println("选择技能:使用弓箭射击");}}

 

(4)

package ActionRisk;/** *  * @Author 孙琨 * @Date   2013-11-3 * @At     XUST * @All Copyright by 孙琨 * */public class KnifeBehavior implements WeaponBehavior {   // 匕首类,实现接口WeaponBehavior@Overridepublic void useWeapon() {// TODO Auto-generated method stubSystem.out.println("选择技能:使用匕首刺杀");}}

 

(5)

package ActionRisk;/** *  * @Author 孙琨 * @Date   2013-11-3 * @At     XUST * @All Copyright by 孙琨 * */public class SwordBehavior implements WeaponBehavior {   // 剑类,实现接口WeaponBehavior@Overridepublic void useWeapon() {// TODO Auto-generated method stubSystem.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 stubSurfaceDesign surface = new SurfaceDesign();  // 创建界面设计对象surface.setSurface(); // 具体设定界面操作}}

 

4、测试结果截图

(1)

 

(2)

 

(3)

 

(4)

 

 

 

5、打包成可执行文件(jar和exe)

 

具体操作方法可见博客,链接为: http://blog.csdn.net/u010043538/article/details/13167099