public interface GameState {
/*打怪*/
public void killMonster();
/*获得经验*/
public void gainExperience();
/*进入下一关*/
public void next();
/*捡拾物品*/
public void pick();
}
那么接下来就可以根据不同的状态开始展开不同的行为实现了:
游戏开始状态
public class GameStartState implements GameState {
/*击杀一只怪物*/
@Override
public void killMonster() {
System.out.println("Kill a Monster");
}
/*获得5经验值*/
@Override
public void gainExperience() {
System.out.println("Gain 5 EXP");
}
/*进入下一关*/
@Override
public void next() {
System.out.println("Good! please enter next level");
}
/*捡到一件好东西*/
@Override
public void pick() {
System.out.println("Wow! You pick a good thing");
}
}
游戏结束状态
public class GameOverState implements GameState {
/*游戏没开始,无法打怪*/
@Override
public void killMonster() {
System.out.println("Please start game first");
}
/*游戏没开始,无法获得经验*/
@Override
public void gainExperience() {
}
/*游戏已经结束,下一步就是选择是否重新开始*/
@Override
public void next() {
System.out.println("You want to challenge again?");
}
/*游戏没开始,无好东西可以捡*/
@Override
public void pick() {
System.out.println("Please start game first");
}
}
什么状态下该干什么都已经想好了,下一步就是来一个玩家开始游戏了
public class Player {
/*游戏状态*/
GameState state;
/*游戏状态的设置*/
public void setState(GameState state) {
this.state = state;
}
/*游戏开始*/
public void gameStart() {
setState(new GameStartState());
System.out.println("\n-----Game Start, ready to fight-----\n");
}
/*游戏结束*/
public void gameOver(){
setState(new GameOverState());
System.out.println("\n----- Game Over -----\n");
}
/*打怪*/
public void killMonster(){
state.killMonster();
}
/*获得经验*/
public void gainExperience() {
state.gainExperience();
}
/*下一关*/
public void next(){
state.next();
}
/*捡东西*/
public void pick(){
state.pick();
}
public static void main(String[] args) {
/*游戏开始后的一系列操作和结束后的操作*/
Player player = new Player();
player.gameStart();
player.killMonster();
player.gainExperience();
player.next();
player.pick();
player.gameOver();
player.next();
player.killMonster();
player.pick();
}
}
-----Game Start, ready to fight-----
Kill a Monster
Gain 5 EXP
Good! please enter next level
Wow! You pick a good thing
----- Game Over -----
You want to challenge again?
Please start game first
Please start game first