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

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

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

 

1、背景

 

   这是java老师布置的本周作业,具体题目截图如下

 

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

 

2、分析

 

    在UML图已经给出的前提下,此作业很容易。自己在此基础上,加了个简单的界面设计和玩家设定的历史记录设计。整体设计见下面自己画的UML图(未加联系的模块间为组合关系),具体设计代码附在下面,加上了详细注释。

 

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

 

 

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)

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

 

(2)

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

 

(3)

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

 

(4)

 

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

 

 

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

 

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