一个猜拳的程序,这个程序是2个人猜拳,现在要修改成多人猜拳。该怎么做啊,请高手指点。具体要改那些地方啊?多人猜拳规则,石头剪刀布,只有2种的时候才能判定胜负。所有人出相同的拳的时候,和局。public class ObjectCaiquan{
public static void main(String[] args) {
Judge J = new Judge(); //judge J
Player a = new Player("a");//player 1
Player b = new Player("b");//player 2
J.startCaiquan(a, b);
}
}
//Judge class
public class Judge{
public void startCaiquan(Player player1, Player player2){
System.out.println("Start Caiquan (chapter 3 version)¥n");
//猜拳3次
for (int cnt = 0; cnt < 3; cnt++){
System.out.println("Game " + (cnt + 1));
Player winner = judgeCaiquan(player1, player2);//判断胜负
if (winner != null){
System.out.println(winner.getName() + " is winner!¥n");
winner.notifyResult(true);
}
else {
System.out.println("draw.¥n");
}
}
System.out.println("Game over.¥n");
//最终判断
Player finalWinner = judgeFinalWinner(player1, player2);
//表示结果
System.out.print( player1.getWinCount() + " vs " + player2.getWinCount() + ", ");
if (finalWinner != null) {
System.out.println(finalWinner.getName() + " is final winner!¥n");
}
else{
System.out.println("a draw game!¥n");
}
}
private Player judgeCaiquan(Player player1, Player player2) {
Player winner = null;
int player1hand = player1.showHand(); //player1出拳
int player2hand = player2.showHand(); //player2出拳
printHand(player1hand);
System.out.print(" vs. ");
printHand(player2hand);
System.out.print("¥n");
//player1取胜的条件
if ((player1hand == Player.STONE && player2hand == Player.SCISSORS)
|| (player1hand == Player.SCISSORS && player2hand == Player.PAPER)
|| (player1hand == Player.PAPER && player2hand == Player.STONE)){
winner = player1;
}
//player2取胜的条件
else if ( (player1hand == Player.STONE && player2hand == Player.PAPER)
|| (player1hand == Player.SCISSORS && player2hand == Player.STONE)
|| (player1hand == Player.PAPER
&& player2hand == Player.SCISSORS))
{
winner = player2;
}
return winner;
}
private Player judgeFinalWinner(Player player1, Player player2){
Player winner = null;
int player1WinCount = player1.getWinCount(); //player1取胜数
int player2WinCount = player2.getWinCount(); //player2取胜数
if (player1WinCount > player2WinCount) {
winner = player1; //player1取胜
}
else if (player1WinCount < player2WinCount) {
winner = player2; //player2取胜
}
return winner;//平局
}
private void printHand(int hand){//出拳
switch (hand)
{
case Player.STONE :
System.out.print("STONE");
break;
case Player.SCISSORS :
System.out.print("SCISSORS");
break;
case Player.PAPER :
System.out.print("PAPER");
break;
default :
break;
}
}
}
//player class
public class Player{
public static final int STONE = 0; //石头
public static final int SCISSORS = 1; //剪刀
public static final int PAPER = 2;//布
private String name;
private int winCount = 0;
public Player(String name){
this.name = name;
}
public int showHand(){//随机生成石头剪刀布
int hand = 0;
double randomNum = Math.random() * 3;
if (randomNum < 1){
hand = STONE;
}
else if (randomNum < 2){
hand = SCISSORS;
}
else if (randomNum < 3){
hand = PAPER;
}
return hand;
}
public void notifyResult(boolean result){//输赢结果,累计取胜数
if (true == result)
{
winCount += 1;
}
}
public int getWinCount()
{
return winCount; //返回取胜数
}
public String getName()//生成人名
{
return name;
}
}
public static void main(String[] args) {
Judge J = new Judge(); //judge J
Player a = new Player("a");//player 1
Player b = new Player("b");//player 2
J.startCaiquan(a, b);
}
}
//Judge class
public class Judge{
public void startCaiquan(Player player1, Player player2){
System.out.println("Start Caiquan (chapter 3 version)¥n");
//猜拳3次
for (int cnt = 0; cnt < 3; cnt++){
System.out.println("Game " + (cnt + 1));
Player winner = judgeCaiquan(player1, player2);//判断胜负
if (winner != null){
System.out.println(winner.getName() + " is winner!¥n");
winner.notifyResult(true);
}
else {
System.out.println("draw.¥n");
}
}
System.out.println("Game over.¥n");
//最终判断
Player finalWinner = judgeFinalWinner(player1, player2);
//表示结果
System.out.print( player1.getWinCount() + " vs " + player2.getWinCount() + ", ");
if (finalWinner != null) {
System.out.println(finalWinner.getName() + " is final winner!¥n");
}
else{
System.out.println("a draw game!¥n");
}
}
private Player judgeCaiquan(Player player1, Player player2) {
Player winner = null;
int player1hand = player1.showHand(); //player1出拳
int player2hand = player2.showHand(); //player2出拳
printHand(player1hand);
System.out.print(" vs. ");
printHand(player2hand);
System.out.print("¥n");
//player1取胜的条件
if ((player1hand == Player.STONE && player2hand == Player.SCISSORS)
|| (player1hand == Player.SCISSORS && player2hand == Player.PAPER)
|| (player1hand == Player.PAPER && player2hand == Player.STONE)){
winner = player1;
}
//player2取胜的条件
else if ( (player1hand == Player.STONE && player2hand == Player.PAPER)
|| (player1hand == Player.SCISSORS && player2hand == Player.STONE)
|| (player1hand == Player.PAPER
&& player2hand == Player.SCISSORS))
{
winner = player2;
}
return winner;
}
private Player judgeFinalWinner(Player player1, Player player2){
Player winner = null;
int player1WinCount = player1.getWinCount(); //player1取胜数
int player2WinCount = player2.getWinCount(); //player2取胜数
if (player1WinCount > player2WinCount) {
winner = player1; //player1取胜
}
else if (player1WinCount < player2WinCount) {
winner = player2; //player2取胜
}
return winner;//平局
}
private void printHand(int hand){//出拳
switch (hand)
{
case Player.STONE :
System.out.print("STONE");
break;
case Player.SCISSORS :
System.out.print("SCISSORS");
break;
case Player.PAPER :
System.out.print("PAPER");
break;
default :
break;
}
}
}
//player class
public class Player{
public static final int STONE = 0; //石头
public static final int SCISSORS = 1; //剪刀
public static final int PAPER = 2;//布
private String name;
private int winCount = 0;
public Player(String name){
this.name = name;
}
public int showHand(){//随机生成石头剪刀布
int hand = 0;
double randomNum = Math.random() * 3;
if (randomNum < 1){
hand = STONE;
}
else if (randomNum < 2){
hand = SCISSORS;
}
else if (randomNum < 3){
hand = PAPER;
}
return hand;
}
public void notifyResult(boolean result){//输赢结果,累计取胜数
if (true == result)
{
winCount += 1;
}
}
public int getWinCount()
{
return winCount; //返回取胜数
}
public String getName()//生成人名
{
return name;
}
}
int player1hand = player1.showHand(); //player1出拳
int player2hand = player2.showHand(); //player2出拳
printHand(player1hand);
System.out.print(" vs. ");
printHand(player2hand);
System.out.print(" ");
if ( player1hand == player2hand ) {
return null; // 平局
} else if( (player1hand + 1) % 3 == player2hand ) {
return player1; // player1 赢了
} else {
return player2; // player2 赢了
}
}
{
public static void main(String[] args)
{
Judge J = new Judge();//judge J Player a = new Player("a"); //player 1 Player b = new Player("b"); //player 2 J.startCaiquan(a, b);
}
}//Judge class
public class Judge
{
public void startCaiquan(Player player1, Player player2)
{
System.out.println("Start Caiquan (chapter 3 version)\n"); /*猜拳3回*/
for (int cnt = 0; cnt < 3; cnt++)
{
System.out.println("Game " + (cnt + 1)); Player winner = judgeCaiquan(player1, player2);//判断胜负 if (winner != null)
{
System.out.println(winner.getName() + " is winner!\n"); winner.notifyResult(true);
}
else
{
System.out.println("draw.\n");
}
} System.out.println("Game over.\n"); /*最终判定*/
Player finalWinner = judgeFinalWinner(player1, player2);
/*显示结果*/
System.out.print(
player1.getWinCount() + " vs " + player2.getWinCount() + ", "); if (finalWinner != null)
{
System.out.println(finalWinner.getName() + " is final winner!\n");
}
else
{
System.out.println("a draw game!\n");
}
}
private Player judgeCaiquan(Player player1, Player player2)
{
Player winner = null; int player1hand = player1.showHand();//出拳 int player2hand = player2.showHand(); printHand(player1hand);
System.out.print(" vs. ");
printHand(player2hand);
System.out.print("\n"); /*player1取胜的条件*/
if ((player1hand == Player.STONE && player2hand == Player.SCISSORS)
|| (player1hand == Player.SCISSORS && player2hand == Player.PAPER)
|| (player1hand == Player.PAPER && player2hand == Player.STONE))
{
winner = player1;
}
/*player2取胜的条件*/
else if (
(player1hand == Player.STONE && player2hand == Player.PAPER)
|| (player1hand == Player.SCISSORS && player2hand == Player.STONE)
|| (player1hand == Player.PAPER
&& player2hand == Player.SCISSORS))
{
winner = player2;
}
return winner;
}
private Player judgeFinalWinner(Player player1, Player player2)
{
Player winner = null; int player1WinCount = player1.getWinCount();//player1取胜数
int player2WinCount = player2.getWinCount();//player2取胜数 if (player1WinCount > player2WinCount)
{
winner = player1;//player1取胜
}
else if (player1WinCount < player2WinCount)
{
winner = player2;//player2取胜
}
return winner;//平局
}/*出拳*/
private void printHand(int hand)
{
switch (hand)
{
case Player.STONE :
System.out.print("STONE");
break; case Player.SCISSORS :
System.out.print("SCISSORS");
break; case Player.PAPER :
System.out.print("PAPER");
break; default :
break;
}
}
}
//player class
public class Player
{
public static final int STONE = 0; //石头
public static final int SCISSORS = 1; //剪刀
public static final int PAPER = 2; //布
private String name; private int winCount = 0;
public Player(String name)
{
this.name = name;
} /*随机生成石头剪刀布*/
public int showHand()
{
int hand = 0; double randomNum = Math.random() * 3;
if (randomNum < 1)
{
hand = STONE;
}
else if (randomNum < 2)
{
hand = SCISSORS;
}
else if (randomNum < 3)
{
hand = PAPER;
} return hand;
}
/*输赢结果,累计取胜数*/
public void notifyResult(boolean result)
{
if (true == result)
{
winCount += 1;
}
} /*自己取胜回数*/
public int getWinCount()
{
return winCount;
} /*生成名字*/
public String getName()
{
return name;
}
}
B 出 石头
C 出 剪刀
D 出 剪刀那 C 和 D 排第几名?排第 3 还是第 4?
设计A 猜拳者 只有一个方法 获取出的Q
设计B 管理者 {包含A的集合} 主要方法(获取集合中所有A的出Q,判断胜负)
public class ObjectCaiquan
{
/**
* 猜拳者数
*/
private static final int numOfPlayers=7;
public static void main(String[] args)
{
//裁判
Judge j = new Judge();
HashSet players=new HashSet();
if(!(numOfPlayers>=3)){
System.out.println("The number of players should be more than 3.");
return; .
} // Player1, 2, 3 ...
for(int i=0; i<numOfPlayers; i++){
Player p=new Player("Player"+(i+1));
players.add(p);
} // 猜拳游戏开始
j.startCaiquan(players, 5);
}
}
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;/**
* judge class
*/
public class Judge {
public void startCaiquan(Collection players, int round) {
// 开始猜拳
System.out.println("Start Caiquan (Exercise 3 version)"); //猜拳次数
for (int cnt = 0; cnt < round; cnt++) {
// 第几回战
System.out.println("\nGame " + (cnt + 1)); // 。
Collection winners = judgeCaiquan(players); if (winners != null) {
//表示胜者
for (Iterator i = winners.iterator(); i.hasNext();) {
Player p = (Player) i.next();
System.out.println(p.getName() + " is winner!");
p.notifyResult(true);
}
} else {
// 平局
System.out.println("draw.");
}
} // 猜拳结束
System.out.println("\nGame over."); // 最终判定胜者
Collection finalWinners = judgeFinalWinner(players); // 表示结果
System.out.println("\nwithin "+players.size()+" players, "); if (finalWinners != null) {
for (Iterator i = finalWinners.iterator(); i.hasNext();) {
Player p = (Player) i.next();
System.out.println(p.getName() + " is one of final winners!");
}
} else {
System.out.println("a draw game!");
}
} /**
* 判断出拳者的胜负
*/
private HashSet judgeCaiquan(Collection players) {
HashSet winner = null;
HashSet handkind=new HashSet(); // 判断手的种类. // 全部player的出拳
for(Iterator i=players.iterator(); i.hasNext(); ){
Player p=(Player)i.next();
p.showHand();
System.out.print(hand(p.getHand())+" ");
handkind.add(new Integer(p.getHand()));
}
System.out.println(".");
if(handkind.size()!=2) return winner; // 重新猜拳
winner=new HashSet();
int winHand=0; // 记录2者之中的胜者
// 石头胜
if(handkind.contains(new Integer(Player.STONE)) && handkind.contains(new Integer(Player.SCISSORS))){
winHand=Player.STONE;
}
// 剪刀胜
else if(handkind.contains(new Integer(Player.PAPER)) && handkind.contains(new Integer(Player.SCISSORS))){
winHand=Player.SCISSORS;
}
// 布胜
else if(handkind.contains(new Integer(Player.STONE)) && handkind.contains(new Integer(Player.PAPER))){
winHand=Player.PAPER;
}
else{
System.out.println("False!");
}
for(Iterator i=players.iterator(); i.hasNext(); ){
Player p=(Player)i.next();
if(p.getHand() == winHand){
winner.add(p);
}
} return winner;
} /**
* 判断最终胜者
*
*/
private HashSet judgeFinalWinner(Collection players) {
int maxwin=0;
// 最大胜数
for(Iterator i=players.iterator(); i.hasNext(); ){
Player p=(Player)i.next();
if(p.getWinCount()>maxwin){
maxwin=p.getWinCount();
}
}
// 胜者的集合
HashSet wins=new HashSet();
for(Iterator i=players.iterator(); i.hasNext(); ){
Player p=(Player)i.next();
if(p.getWinCount()==maxwin){
wins.add(p);
}
}
// 最高胜数判断,没有胜者
if(players.size() == wins.size()){
wins=null;
}
return wins;
} //表示出拳
enum Hand{
STONE,SCISSORS,PAPER
}
private String hand(Hand hand){
switch (hand) {
case STONE:
return ("STONE ");
case SCISSORS:
return ("SCISSORS");
case PAPER:
return ("PAPER ");
default:
return null;
}
}
}
//player class
public class Player
{
public static final int STONE = 0;
public static final int SCISSORS = 1;
public static final int PAPER = 2; private String name;
private int winCount = 0;
public Player(String name)
{
this.name = name;
}
public int showHand()
{
int hand = 0; // 随机生成0.0~3.0小数
double randomNum = Math.random() * 3;
if (randomNum < 1)
{
hand = STONE;
}
else if (randomNum < 2)
{
hand = SCISSORS;
}
else if (randomNum < 3)
{
hand = PAPER;
}
return hand;
}
}得不到正确的结果