综合应用面向对象编程思想实现一款基于控制台的小游戏。

游戏玩家父类 Player.java
package entity;
/*
* 游戏玩家类设计
* */
public abstract class Player {
protected String name; //玩家的昵称;
protected int score; //玩家的得分
protected static final String[] handsTypes = {"石头", "剪刀", "布"};
//出拳的方法
public abstract String showHand();
public Player(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
游戏玩家类的子类,人类游戏玩家和电脑游戏玩家类设计。
//ComputerPlayer.java
package entity;
import java.util.Random;
public class ComputerPlayer extends Player{
public ComputerPlayer(String name) {
super(name);
}
//电脑玩家每次是通过生成一个随机数返回一个出拳结果
@Override
public String showHand() {
return Player.handsTypes[ new Random().nextInt(3)];
}
}
//HumanPlayer.java
package entity;
import java.util.Scanner;
public class HumanPlayer extends Player{
public HumanPlayer(String name) {
super(name);
}
@Override
public String showHand() {
System.out.println("请选择您的出拳:1.石头 2.剪刀 3.布");
int choice = new Scanner(System.in).nextInt();
choice--;
return Player.handsTypes[choice];
}
}
游戏逻辑类GameLogic.java
package logic;
import entity.ComputerPlayer;
import entity.HumanPlayer;
/*
* 游戏逻辑类
* */
public class GameLogic {
private static final int WIN_SCORE = 3; //五局三胜制,先得三分的玩家胜利。。
private HumanPlayer humanPlayer; //人类玩家
private ComputerPlayer computerPlayer; //电脑玩家
public GameLogic(HumanPlayer humanPlayer, ComputerPlayer computerPlayer) {
this.humanPlayer = humanPlayer;
this.computerPlayer = computerPlayer;
}
public void startPK() {
int iCount = 0;
do {
String humanHand = humanPlayer.showHand();
String computerHand = computerPlayer.showHand();
System.out.println("-----------第" + (++iCount) + "回合------------");
System.out.println(humanPlayer.getName() + "的出拳是:" + humanHand);
System.out.println(computerPlayer.getName() + "的出拳是:" + computerHand);
if (humanHand.equals(computerHand)) {
System.out.println("不分胜负呀,咱们再战三百回合.....");
} else if (humanHand.equals("石头")) {
if (computerHand.equals("剪刀")) {
System.out.println("小样看你还嚣张不....");
humanPlayer.setScore(humanPlayer.getScore() + 1);
} else {
System.out.println("你不过是运球好点罢了....");
computerPlayer.setScore(computerPlayer.getScore() + 1);
}
} else if (humanHand.equals("剪刀")) {
if (computerHand.equals("布")) {
System.out.println("小样看你还嚣张不....");
humanPlayer.setScore(humanPlayer.getScore() + 1);
} else {
System.out.println("你不过是运球好点罢了....");
computerPlayer.setScore(computerPlayer.getScore() + 1);
}
} else if (humanHand.equals("布")) {
if (computerHand.equals("石头")) {
System.out.println("小样看你还嚣张不....");
humanPlayer.setScore(humanPlayer.getScore() + 1);
} else {
System.out.println("你不过是运球好点罢了....");
computerPlayer.setScore(computerPlayer.getScore() + 1);
}
}
System.out.println("---------------当前比分---------------");
System.out.println(humanPlayer.getName() + " " + humanPlayer.getScore() + ":" + computerPlayer.getScore() + " " + computerPlayer.getName());
} while (!this.isGameOver());
//如果PK结束显示游戏结果.
this.showResult();
}
//判断游戏是否结束
public boolean isGameOver() {
return humanPlayer.getScore() >= WIN_SCORE || computerPlayer.getScore() >= WIN_SCORE;
}
//显示游戏结果
public void showResult() {
if (humanPlayer.getScore() >= WIN_SCORE) {
System.out.println("别羡慕哥,哥只是个传说....");
} else {
System.out.println("君子报仇十年不晚,咱们后会有期....");
}
}
}
游戏主界面类GuessGame.java
import entity.ComputerPlayer;
import entity.HumanPlayer;
import logic.GameLogic;
import java.util.ArrayList;
import java.util.*;
public class GuessGame {
public static final Scanner scanner = new Scanner(System.in);
public static final String[] heros={"曹操","刘备","周瑜"};
private static GameLogic gameLogic;
//游戏初始化方法
private static void init(){
System.out.println("请选择电脑玩家角色:1.曹操 2.刘备 3.周瑜");
int herosChoice = scanner.nextInt();
herosChoice--;
ComputerPlayer computerPlayer = new ComputerPlayer(heros[herosChoice]);
System.out.println("请输入您的昵称:");
String alias = scanner.next();
HumanPlayer humanPlayer = new HumanPlayer(alias);
GuessGame.gameLogic = new GameLogic(humanPlayer,computerPlayer);
}
public static void main(String[] args) {
GuessGame.init();
GuessGame.gameLogic.startPK();
}
}
运行效果:
请选择电脑玩家角色:1.曹操 2.刘备 3.周瑜
1
请输入您的昵称:
王大锤
请选择您的出拳:1.石头 2.剪刀 3.布
1
-----------第1回合------------
王大锤的出拳是:石头
曹操的出拳是:石头
不分胜负呀,咱们再战三百回合.....
---------------当前比分---------------
王大锤 0:0 曹操
请选择您的出拳:1.石头 2.剪刀 3.布
1
-----------第2回合------------
王大锤的出拳是:石头
曹操的出拳是:剪刀
小样看你还嚣张不....
---------------当前比分---------------
王大锤 1:0 曹操
请选择您的出拳:1.石头 2.剪刀 3.布
1
-----------第3回合------------
王大锤的出拳是:石头
曹操的出拳是:布
你不过是运球好点罢了....
---------------当前比分---------------
王大锤 1:1 曹操
请选择您的出拳:1.石头 2.剪刀 3.布
1
-----------第4回合------------
王大锤的出拳是:石头
曹操的出拳是:布
你不过是运球好点罢了....
---------------当前比分---------------
王大锤 1:2 曹操
请选择您的出拳:1.石头 2.剪刀 3.布
1
-----------第5回合------------
王大锤的出拳是:石头
曹操的出拳是:石头
不分胜负呀,咱们再战三百回合.....
---------------当前比分---------------
王大锤 1:2 曹操
请选择您的出拳:1.石头 2.剪刀 3.布
1
-----------第6回合------------
王大锤的出拳是:石头
曹操的出拳是:布
你不过是运球好点罢了....
---------------当前比分---------------
王大锤 1:3 曹操
君子报仇十年不晚,咱们后会有期....