使用Java编写石头剪刀布游戏

简单的石头剪刀布小游戏

/**游戏规则

  • 猜拳游戏
  • 玩家和电脑进行猜拳(石头剪刀布)
  • 每回合分别由玩家和电脑依次出拳
  • 打印显示双方出拳的结果,并对结果进行判定
  • 回合结束后询问玩家是否要继续游戏
  • 如果玩家选择继续游戏则开启下一个回合的猜拳
  • 否则游戏结束
  • 游戏结束后统计前面回合的数据
  • 数据要求显示游戏的总局数,玩家胜利的场数,平局的场数以及失败的场数并显示胜率
  • 根据胜利的场数打印显示最终结果(玩家胜场大于电脑胜场则表示玩家胜利)
    */
    主要步骤
    在一个Package里new出四个class,四个class分别为
    Game,Computer,Player,GameApp
    1.在Game中编写游戏的方法包括执行游戏回合出拳数值转化为字符信息显示游戏统计结果两部分;接着再详细描写执行游戏的部分,让玩家和电脑先后出拳再判断出拳结果,一局结束后询问玩家是否要继续游戏,若继续游戏,递归执行游戏回合。由于电脑随机输入的是int类型,为了优化游戏需将int类型转化为String类型。
import java.util.Scanner;

/**
 * 游戏类 封装了游戏的业务内容
 */
public class Game {
    
    
    //玩家
    private Player player = new Player();
    //电脑
    private Computer cpu = new Computer();
    private Scanner scanner = new Scanner(System.in);
    //游戏的总局数
    private int count;

    /**
     * 开启游戏
     */
    public void start(){
    
    
        //执行游戏回合
        gameLogic();
        //显示游戏统计结果
        showResult();
    }

    /**
     * 每个回合的游戏内容
     */
    public void gameLogic(){
    
    
        //计算游戏的次数
        count++;
        //玩家出拳
        int n1 = player.showFinger();
        //电脑出拳
        int n2 = cpu.showFinger();
        //显示出拳结果
        String playerFinger = changeFinger(n1);
        String cpuFinger = changeFinger(n2);
        System.out.println("玩家出拳:"+playerFinger);
        System.out.println("电脑出拳:"+cpuFinger);
        //判定出拳结果
        if(n1 == n2){
    
    
            //平局
            player.setDogfallCount(player.getDogfallCount()+1);
            System.out.println("该轮平局!");
        }else if(n1 == 1 && n2 == 2 || n1 == 2 && n2 == 3 || n1 == 3 && n2 == 1){
    
    
            //胜局
            player.setWinCount(player.getWinCount()+1);
            System.out.println("该轮胜利!");
        }else{
    
    
            //败局
            player.setLoseCount(player.getLoseCount()+1);
            System.out.println("该轮失败!");
        }
        //询问玩家是否继续游戏
        System.out.println("是否要继续游戏?(Y/N)");
        String answer = scanner.next();
        if(answer.equalsIgnoreCase("Y")){
    
    
            //递归执行游戏回合
            gameLogic();
        }
    }

    /**
     * 将出拳的数值转换为字符信息(石头剪刀布)的方法
     * @param finger
     * @return
     */
    public String changeFinger(int finger){
    
    
        String fingerStr = "";
        switch(finger){
    
    
            case 1:
                fingerStr = "石头";
                break;
            case 2:
                fingerStr = "剪刀";
                break;
            case 3:
                fingerStr = "布";
        }
        return fingerStr;
    }

    /**
     * 游戏结果的显示统计
     */
    public void showResult(){
    
    
        //打印显示基本数据
        System.out.println("游戏总轮数:"+count);
        System.out.println("胜利场次:"+player.getWinCount());
        System.out.println("平局场次:"+player.getDogfallCount());
        System.out.println("失败场次:"+player.getLoseCount());
        //计算胜率
        int winRate = (int)(player.getWinCount()/(double)count*100);
        System.out.println("胜率:"+winRate+"%");
        //评定游戏最终结果
        if(player.getWinCount() > player.getLoseCount()){
    
    
            System.out.println("恭喜您最终获得胜利!");
        }else if(player.getWinCount() < player.getLoseCount()){
    
    
            System.out.println("很遗憾,您败给了电脑!");
        }else{
    
    
            System.out.println("此次游戏不分伯仲!");
        }
    }
}

2.在Computer类里编写出拳方法,需要用到Random类是电脑随机出拳

import java.util.Random;

/**
 * 电脑类
 */
public class Computer {
    
    
    /**
     * 出拳的方法
     */
    public int showFinger(){
    
    
        //使用随机数(1—3)出拳
        Random random=new Random();
        int finger2=random.nextInt(3)+1;
        return finger2;
    }
}

3.在Player类中定义玩家出拳的方法

import java.util.Scanner;

/**
 * 玩家类
 */
public class Player {
    
    
    //胜场
    private int winCount;
    //平场
    private int dogfallCount;
    //输场
    private int loseCount;

    public int getWinCount() {
    
    
        return winCount;
    }

    public void setWinCount(int winCount) {
    
    
        this.winCount = winCount;
    }

    public int getDogfallCount() {
    
    
        return dogfallCount;
    }

    public void setDogfallCount(int dogfallCount) {
    
    
        this.dogfallCount = dogfallCount;
    }

    public int getLoseCount() {
    
    
        return loseCount;
    }

    public void setLoseCount(int loseCount) {
    
    
        this.loseCount = loseCount;
    }
    Scanner scanner=new Scanner(System.in);
    /**
     *出拳的方法
     */
    public int showFinger(){
    
    
        //玩家通过键盘输入选择出拳结果
        System.out.println("请玩家出拳:(1.石头 2.剪刀 3.布)");
        int finger1=scanner.nextInt();
        return finger1;
    }
}

4.GameApp调用整个游戏的方法

public class GameApp {
    
    
    public static void main(String[] args) {
    
    
        Game game=new Game();
        game.start();
    }
}

猜你喜欢

转载自blog.csdn.net/wangyiebo/article/details/111396996