使用面向对象的思想实现:
玩家和电脑游戏比赛,比赛内容。石头剪刀布的比赛。三局两胜。输出整个比赛的每个回合的过程,并输出最后的结果。
import java.util.Comparator;
import java.util.Scanner;
/**
* 用面向对象思想实现石头剪刀布游戏v2.0(这个版本好,把问题分解开,使逻辑变的简单,实现起来简单。但是设计难)
*/
public class FingerGuess {
public static void main(String[] args) {
MyGame myGame=new MyGame();
myGame.initGame();
myGame.startGame();
myGame.endGame();
}
}
//创建一个常数类
class Constant{
public static final int STONEVALUE = 0;
public static final int SCISSORVALUE = 1;
public static final int STEPVALUE = 2;
public static final String[] ARR={
"石头","剪刀","布"};
public static int MAXTIME = 3;//最大的胜利常数3
private Constant(){
}
}
//创建一个产生随机数的工具类
class MyUtil{
private MyUtil(){
}
public static int getRandomNumber(int min,int max){
return (int)(Math.random()*(max-min)+min);//产生一个随机数[min,max)
}
}
//抽取的父类对象GamePlayer
abstract class GamePlayer{
private String name;
private int value;//代表出的是哪个数字0,1,2,
private int winCount;//赢的局数
//访问器和生成器
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public int getWinCount() {
return winCount;
}
public void setWinCount(int winCount) {
this.winCount = winCount;
}
//展示玩家和电脑选择的手势
public void show(){
System.out.println(name+"选择的手势是:"+Constant.ARR[value]);
}
//定义一个抽象方法,让子类去实现。这个方法用来出数字(玩家通过输入,电脑通过随机数)
abstract int getInputValue();
//判断当前玩家是否达到了胜利的次数
public boolean isWin(){
/*
if(winCount==Constant.MAXTIME){
return true;
}else{
return false;
}
*/
return winCount==Constant.MAXTIME;//这个写法更好
}
}
//创建玩家player类
class Player extends GamePlayer{
public Player(String name){
setName(name);
}
//实现父类的抽象方法,通过手动输入获得一个数字
@Override
int getInputValue() {
System.out.println("请选择你的手势:"
+Constant.STONEVALUE+"-"+Constant.ARR[0]+"\t"
+Constant.SCISSORVALUE+"-"+Constant.ARR[1]+"\t"
+Constant.STEPVALUE+"-"+Constant.ARR[2]);
Scanner sc=new Scanner(System.in);
//如果玩家输入的不是数值,数值的话不在0-2 如何处理。
int value=sc.nextInt();
setValue(value);
return getValue();
}
}
//创建computer类
class Computer extends GamePlayer{
public Computer(String name){
setName(name);
}
//实现父类的抽象方法,通过产生随机数获得一个数字
@Override
int getInputValue() {
setValue(MyUtil.getRandomNumber(Constant.STONEVALUE,Constant.STEPVALUE+1));
return getValue();
}
}
//定义用于比较功能的接口
interface GameComparator{
/**
* 对象o1和对象2进行比较
* @param o1 第一个比较对象
* @param o2 第二个比较对象
* @return 如果o1大于o2,返回1,小于返回-1.相等返回0;
*/
int compare(Object o1,Object o2);
}