使用面向对象的思想实现:石头剪刀布的比赛。

本文介绍如何使用面向对象编程思想设计并实现一个石头剪刀布比赛。包括常量类、GamePlayer抽象类、Player和Computer子类、GameComparator接口、GameComparatorImpl实现类以及GameInterface和MyGame游戏类。比赛规则为三局两胜,全程记录并输出每个回合的过程及最终结果。
摘要由CSDN通过智能技术生成

使用面向对象的思想实现:
玩家和电脑游戏比赛,比赛内容。石头剪刀布的比赛。三局两胜。输出整个比赛的每个回合的过程,并输出最后的结果。

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);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值