Writted by Bruth_Lee in Southwest University of Science And Technology.
这个游戏主要是练习使用框架。
Game类:
package castle;
import java.util.HashMap;
import java.util.Scanner;
public class Game {
private Room currentRoom;
private HashMap<String, Handler> handlers = new HashMap<String, Handler>();
public Game()
{
handlers.put("bye", new HandlerBye(this));
handlers.put("help", new HandlerHelp(this));
handlers.put("去", new HandlerGo(this));
handlers.put("list",new Handlerlist(this));
createRooms();
}
private void createRooms()
{
Room outside, lake, pub, study, bedroom;
// 制造房间
outside = new Room("107广场");
lake = new Room("中心湖");
pub = new Room("老区图书馆");
study = new Room("新区图书馆");
bedroom = new Room("科技之光");
Room eatery2 = new Room("二食堂");
Room eatery3 = new Room("三食堂");
Room eatery4 = new Room("四食堂");
Room eatery5 = new Room("五食堂");
Room eatery6 = new Room("六食堂");
Room eatery7 = new Room("七食堂");
Room eatery1 = new Room("一食堂");
// 初始化房间的出口
outside.setExit("中心湖", lake);
outside.setExit("新区图书馆", study);
outside.setExit("老区图书馆",pub);
outside.setExit("科技之光",bedroom);
outside.setExit("一食堂",eatery1);
lake.setExit("107广场", outside);
lake.setExit("科技之光",bedroom );
lake.setExit("新区图书馆", study);
lake.setExit("五食堂", eatery5);
pub.setExit("107广场", outside);
pub.setExit("一食堂", eatery1);
study.setExit("107广场",outside);
study.setExit("科技之光", bedroom);
bedroom.setExit("新区图书馆", study);
currentRoom = outside; // 从城堡门外开始
}
private void printWelcome() {
System.out.println("Written by Bruth_Lee in Southwest University of Science And Technology.");
System.out.println("欢迎来到西南科技大学幻想城!");
System.out.println("让我们回到古老的网页游戏时代");
System.out.println("如果需要帮助,请输入 'help' 。");
System.out.println();
ShowPromt();
}
protected void goRoom(String direction)
{
Room nextRoom = currentRoom.getExit(direction);//获得出口处的房间
if (nextRoom == null) {
System.out.println("那里没有门!");
}
else {
currentRoom = nextRoom;
ShowPromt();
}
}
public void ShowPromt() {
System.out.println("你现在在" + currentRoom);
System.out.print("你可以直接前往: ");
System.out.println(currentRoom.getExits());//获得出口
System.out.println();
}
public void play() {//创建人物并显示基本信息
Scanner in = new Scanner(System.in);
String name=in.nextLine();
Charactor charactor= new Charactor(name);
charactor.show();
while ( true ) {
String line = in.nextLine();
String[] words = line.split(" ");
Handler handler = handlers.get(words[0]);
String value = "";
if(words.length>1) {
value = words[1];
charactor.uplevel();
}
if(handler!=null) {
handler.doCmd(value);
if(handler.isBye()) break;
}else {
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("恭喜你成功加入:"+line+", 赶紧上车,小司机开车之横冲直撞,滴滴滴、、、、、");
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
charactor.show();
}
}
public static void main(String[] args) {
Game game = new Game();
game.printWelcome();
System.out.println("请输入您的游戏昵称:");
System.out.println("注意:一次输入,无法修改哦!!!");
game.play();
System.out.println("感谢您的光临。再见!");
}
}
Charactor:
package castle;
public class Charactor extends Game {
private String name;
private String skill = "力劈华山,巫蛊极毒,要火燎原";
private int blood_volume=100;
private int aggressivity=50;
private int defenses=50;
private int level=1;
private int experience=100;
final int exp=100;
public void uplevel() {
this.experience -= (int)Math.sqrt(this.experience)*6+5;
if(this.experience<=0) {
this.level++;
this.aggressivity+=level*2;
this.defenses+=level;
System.out.println("***********************");
System.out.println("恭喜你升至"+this.level+"级->->->\t攻击力增加至:"+this.aggressivity+"->->->####防御力增加至:"+this.defenses);
this.experience = exp*2+8;
}
}
public Charactor(String name) {
super();
this.name = name;
}
public void show() {
System.out.print("玩家:");
System.out.print(name);
System.out.print("\t\t");
System.out.print("等级:");
System.out.print(level);
System.out.print("\t\t");
System.out.print("升级所需要的Exp: ");
System.out.println(experience);
System.out.print("攻击力:");
System.out.print(aggressivity);
System.out.print("\t\t");
System.out.print("防御力:");
System.out.print(defenses);
System.out.print("\t\t");
System.out.print("技能:");
System.out.println(skill);
}
}
Handler:
package castle;
public class Handler {
protected Game game;
public Handler(Game game) {
this.game = game;
}
public void doCmd(String word) {
}
public boolean islist() {
return false;
}
public boolean isBye(){
return false;
}
}
HandlerBye
package castle;
public class HandlerBye extends Handler {
public HandlerBye(Game game) {
super(game);
// TODO Auto-generated constructor stub
}
@Override
public boolean isBye() {
// TODO Auto-generated method stub
return true;
}
}
HandlerGo
package castle;
public class HandlerGo extends Handler {
public HandlerGo(Game game) {
super(game);
}
@Override
public void doCmd(String word) {
// TODO Auto-generated method stub
game.goRoom(word);
}
}
HandlerHelp
package castle;
public class HandlerHelp extends Handler {
public HandlerHelp(Game game) {
super(game);
// TODO Auto-generated constructor stub
}
@Override
public void doCmd(String word) {
System.out.println("迷路了吗?你可以做的命令有:去 ~");
System.out.println("如:\t去 科技之光");
System.out.println("如果想要结束游戏,请输入bye");
System.out.println("如果你想加入教派,^*^可以输入list,查看教派信息!");
// super.doCmd(word);
}
}
Handlerlist:
package castle;
public class Handlerlist extends Handler {
public Handlerlist(Game game) {
super(game);
// TODO Auto-generated constructor stub
}
@Override
public void doCmd(String word) {
Sect_print();
}
public void Sect_print() {
System.out.println("教派名称\t\t教主\t\t入教等级\t个性宣言");
System.out.println("老王派\t\t社会王\t\t 1\t请千万当心隔壁那个老王!!!");
System.out.println("骑士教\t\t唐纳德\t\t 1\t天下唯我教独尊~!");
System.out.println("圣女派\t\t沃伦·巴菲特\t\t 1\t是剩女也是圣女…………");
System.out.println("丐帮\t\t比尔·盖茨\t\t 1\t首富不是我的追求,就像马云所说:我对钱没有兴趣!");
System.out.println("罗斯切尔德家族" +
"\t查尔斯·科赫\t\t \t本家族的总资产就那么几百(亿美元)。。。。。");
}
@Override
public boolean islist() {
// TODO Auto-generated method stub
return true;
}
}
Room:
package castle;
import java.util.HashMap;
public class Room {
private String description;
private Room northExit;
private Room southExit;
private Room eastExit;
private Room westExit;
HashMap<String, Room> exit = new HashMap<String,Room>();
public void setExit(String direction, Room room) {//初始化
exit.put(direction, room);
}
public Room(String description)
{
this.description = description;
}
public Room getExit(String direction) {
return exit.get(direction);
}
public String getExits() {
StringBuffer sb = new StringBuffer();
for(String str : exit.keySet()) {
sb.append(str);
sb.append('、');
}
sb.deleteCharAt(sb.length()-1);
// sb.append("south ");
return sb.toString();
}
@Override
public String toString()
{
return description;
}
}