Java小游戏 猜丁壳( 石头、剪刀、布)

本文分享了如何使用Java编程实现猜丁壳游戏,玩家与电脑通过输入数字选择石头、剪刀或布进行比拼,率先赢得5局的玩家获胜。文章详细介绍了代码组织结构,包括util工具包、service包和test包中的类和接口实现。

用Java实现猜丁壳(石头剪刀布)

我们在控制台输入数字1,2,3分别代表石头,剪刀,布。让后人机(电脑玩家)随机生成石头剪刀布中的一个,比较后得出比分与赢的一方。率先获得5场胜利的玩家获胜。



前言

首先创建如下图所示的包、类、接口。

运行时仅需要运行TestGame即可




运行界面如下:

在这里插入图片描述

一、代码实现

1.util工具包

util工具包中的Constants类

package guessgame.util;

/**
 * 常量类
 */
public class Constants {
    public static final int STONE=0;//石头
    public static final int SCISSORS=1;//剪刀
    public static final int CLOTH=2;//布

    public static final int WIN_COUNT=5;

    public static final String [] names={"石头","剪刀","布"};

}

util工具包中的MyUtils类


package guessgame.util;

import java.util.Random;

/**
 * 工具类
 */
public class MyUtils {
    private MyUtils(){}

    public static int getRandom(int n){
        return new Random().nextInt(n+1);//(0,n+1)
    }
    public static int getRandom(int min,int max)//(10,30)
    {
        //return Math.random();//(0,1)  0.112233
        return (int)(Math.random()*(max-min+1))+min;
    }
}

2.service包

Player玩家类:

package guessgame.service;

/**
 * 玩家类
 */
public abstract class Player {
    private String name;
    private int value;//出拳  0,1,2
    private int winCount;//取胜的局数

    public Player() {
    }

    public Player(String name) {
        this.name = name;
    }

    public Player(String name, int value, int winCount) {
        this.name = name;
        this.value = value;
        this.winCount = 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;
    }

    /**
     * 获取玩家的手势对应的数组,赋给成员变量value
     * @return
     */
    public abstract int getInputValue();
}

UserPlayer玩家类:

package guessgame.service;

import guessgame.util.MyUtils;

import java.util.Scanner;

/**
 * 用户玩家
 */
public class UserPlayer extends Player{
    public UserPlayer() {
    }

    public UserPlayer(String name) {
        super(name);
    }

    public UserPlayer(String name, int value, int winCount) {
        super(name, value, winCount);
    }

    @Override
    public int getInputValue() {
        //从键盘获取随机数
        Scanner input=new Scanner(System.in);
        System.out.println("请选择你的手势 :[0-石头],[1-剪刀],[2-布]"
        );
        int value = input.nextInt();


        //赋给电脑玩家的value
        this.setValue(value);



        //
        return value;
    }
}

ComputerPlayer玩家类:

package guessgame.service;

import guessgame.util.MyUtils;

/**
 *
 */
public class ComputerPlayer extends Player{

    public ComputerPlayer() {
    }

    public ComputerPlayer(String name) {
        super(name);
    }

    public ComputerPlayer(String name, int value, int winCount) {
        super(name, value, winCount);
    }

    @Override
    public int getInputValue() {
        //获取工具类
        int value = MyUtils.getRandom(2);


        //赋给电脑玩家的value
        this.setValue(value);



        //
        return value;
    }
}

Judger裁判类

package guessgame.service;

/**
 * 裁判类
 */
public class Judger {
    /**
     * 根据两个玩家的出拳,判断这局两个玩家的胜负
     *
     * @param computerValue 电脑玩家
     * @param userValue     用户玩家
     * @return 0 和局     1 电脑玩家赢      2 电脑玩家输
     */
    public int compare(int computerValue, int userValue)
    {
        if (computerValue == userValue) {
            return 0;
        } else if (computerValue == 0) {
            if (userValue == 1) {
                return 1;
            } else {
                return 2;
            }

        } else if (computerValue == 1) {
            if (userValue == 0) {
                return 2;
            } else {
                return 1;
            }

        } else if (computerValue == 2) {
            if (userValue == 1) {
                return 2;
            } else {
                return 1;
            }

        }
        return 0;
    }
}



GameInterface接口

package guessgame.service;

public interface GameInterface {
    public void initGame();
    public void startGame();
    public void endGame();
}

GuessGame类

package guessgame.service;

import guessgame.util.Constants;

public class GuessGame implements GameInterface{
    private Player computerPlayer;
    private Player userPlayer;
    private Judger judger;
    private int count;//当前是第几局;


    @Override
    public void initGame() {
        computerPlayer = new ComputerPlayer("王会强");
        userPlayer =new UserPlayer("王会强他爹");
        judger =new Judger();
        count =1;
    }

    @Override
    public void startGame()
    {
        while(true)
        {
           //用户玩家出拳
           int userValue=userPlayer.getInputValue();
           //电脑玩家出拳
            int comValue=computerPlayer.getInputValue();
           //输出两方的出拳
            System.out.println(userPlayer.getName()+":"+ Constants.names[userValue]+":"+"\t"+computerPlayer.getName()+":"+Constants.names[comValue]);
           //数列进行比较
            int result=judger.compare(comValue,userValue);
           //修改winCount
            modifyWinCount(result);
            //输出本局比赛结果
            showResult(result);
            //判断胜负
            if(userPlayer.getWinCount()==Constants.WIN_COUNT||computerPlayer.getWinCount()==Constants.WIN_COUNT){
                break;
            }

    }
    }

    @Override
    public void endGame() {

        System.out.println("=======================");
        System.out.println("最终比分");
        System.out.println(userPlayer.getName()+"\t"+userPlayer.getWinCount()+"\t"+computerPlayer.getWinCount()+"\t"+computerPlayer.getName());
        if(userPlayer.getWinCount()==Constants.WIN_COUNT)
            System.out.println(userPlayer.getName()+"赢");
        if(computerPlayer.getWinCount()==Constants.WIN_COUNT)
            System.out.println(computerPlayer.getName()+"赢");
    }

    private void showResult(int result) {
        switch (result){
            case 0:
                System.out.println("本局:和局");
                break;
            case 1:
                System.out.println("本局:"+computerPlayer.getName()+"赢");
                break;
            case 2:
                System.out.println("本局:"+userPlayer.getName()+"赢");
        }
        System.out.println("当前比分为:"+userPlayer.getName()+"\t"+userPlayer.getWinCount()+"\t"+":"+computerPlayer.getWinCount()+"\t"+computerPlayer.getName());
    }

    private void modifyWinCount(int result) {
        if(result==1){//电脑玩家赢了
            computerPlayer.setWinCount(computerPlayer.getWinCount()+1);
        }else if(result==2){
            userPlayer.setWinCount(userPlayer.getWinCount()+1);
        }
    }
    }

3.test包

TsetGame类

package guessgame.test;

import guessgame.service.GameInterface;
import guessgame.service.GuessGame;

/**
 * 启动类
 */
public class TestGame {
    public static void main(String[] args) {
        GameInterface gameInterface=new GuessGame();
        gameInterface.initGame();
        gameInterface.startGame();
        gameInterface.endGame();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值