各位同仁,小弟写了一段代码,模拟人与电脑猜拳-->人由控制台输入,电脑由随机数处理生成,但是发现每个回合电脑都在出一个拳。能否帮忙看下在随机数处理那块哪里出了问题?(这段代码还有其他小问题,不影响编译,属业务逻辑问题)不胜感激!
/**
* 功能:实现一个猜拳游戏,在控制台提供输入,电脑自动随机出拳;
* 要能够统计总共进行的次数和电脑赢得次数
* Created by Light on 2014-7-14
* Modified by Light on 2014-7-16
*/
package com.first;
import java.util.*;
public class FigureGuessing {
public static void main(String []args)
{
//创建游戏
FigureGuess fr = new FigureGuess();
//创建参与者
ComputerParty cp = new ComputerParty();
PersonParty pp = new PersonParty();
//开始游戏
fr.startGame(cp, pp);
}
}
/*****************************************************************************************/
//定义抽象游戏父类
abstract class Game
{
abstract public void startGame(ComputerParty cp,PersonParty pp);//开始游戏,调用actInGame()来操作;
abstract public void actInGame(ComputerParty cp,PersonParty pp);//游戏输赢判定,包含各种游戏规则实现
abstract public void stopGame(ComputerParty cp,PersonParty pp); //结束游戏,打印结束标签;
}
//定义抽象参与者类
abstract class Participate
{
public static int maxCount = 0;//最多参与回合数
public static int realCount = 0;//实际参与回合数
public static int winCount = 0;//赢的回合数
abstract public void setRounds(int rounds);//定义参与回合数(可选)
abstract public String playGame();//参与游戏,定义如何参与游戏
abstract void outOfGame();//停止参与游戏,定义停止后的操作,包括是否打印出参赛结果
}
/*****************************************************************************************/
//定义猜拳游戏类继承余Game
class FigureGuess extends Game
{
//开始游戏,调用actInGame()来操作;
public void startGame(ComputerParty cp,PersonParty pp)
{
actInGame(cp,pp);
}
//游戏输赢判定,包含各种游戏规则实现
public void actInGame(ComputerParty cp,PersonParty pp)
{
//调用参与者参与游戏
//首次接受游戏参与者输入---i-->ComputerParty; j-->PersonParty
int i = Integer.parseInt(cp.playGame());
int j = Integer.parseInt(pp.playGame());
//只要玩家输入非4、5,则游戏判定继续
while(j!=4 && j!=5)
{
//游戏输赢判定
//游戏规则判断,谁赢谁输,并输出结果
//重置两个参与者的输入,如果玩家输入4或者5,则在下一轮判定之前退出游戏
//人先出拳
j = Integer.parseInt(pp.playGame());
i = Integer.parseInt(cp.playGame());
}
//退出循环时,无论是主动还是被动,表示游戏已经结束了
stopGame(cp,pp);
}
//结束游戏,打印结束标签;
public void stopGame(ComputerParty cp,PersonParty pp)
{
pp.outOfGame();
cp.outOfGame();
ComputerParty.showWinCount();
}
}
/*****************************************************************************************/
//定义子类电脑继承于Participate
class ComputerParty extends Participate
{
//电脑随机产生一个数字,代表拳头(0)、布(1)、剪刀(2)
Random rd = new Random();
int figur = Math.abs(rd.nextInt(ComputerParty.realCount+1))%3 ;
//初始化回合数(可选),如果设置了回合数,在达到此数值时自动推出游戏;如果未设置,则根据输入判定是否继续游戏
public void setRounds(int rounds)
{
ComputerParty.maxCount = rounds;
}
//定义如何进行参与游戏,包含对何时退出游戏的定义,保证参与者的主动性;但是由于电脑是被动一方,不主动退出游戏
public String playGame()
{
//System.out.print(Participate.count);
ComputerParty.realCount++;
return String.valueOf(figur);
}
//showFigur
public void showFigur()
{
switch(figur){
case 0: System.out.println("电脑出拳头!"); break;
case 1: System.out.println("电脑出布!"); break;
case 2: System.out.println("电脑出剪刀!"); break;
default:System.out.println("出的啥啊,没看见!");break;
}
}
//退出游戏操作
public void outOfGame()
{
System.out.println("对手退出了游戏,电脑自动退出游戏!");
}
//定义showWinCount方法
public static void showWinCount()
{
System.out.println("电脑总共赢了"+ComputerParty.winCount+"回合");
}
}
/*****************************************************************************************/
//定义人参与者类继承于Participate类
class PersonParty extends Participate
{
int figur = 0;
//初始化回合数(可选),如果设置了回合数,在达到此数值时自动推出游戏;如果未设置,则根据输入判定是否继续游戏
public void setRounds(int rounds)
{
PersonParty.realCount=rounds;
}
//定义如何进行参与游戏,包含对何时退出游戏的定义,保证参与者的主动性;
public String playGame()
{
//提示输入数字来代表出拳
System.out.println("请出拳(0-拳头;1-布;2-剪刀;4-退出):");
//接受输入
Scanner sr = new Scanner(System.in);