Random rd = new Random(); int figur = Math.abs(rd.nextInt(ComputerParty.realCount+1))%3 ; 这两句我没看错的话,应该是电脑类ComputerParty 的成员方法把,在new的时候初始化了一次,貌似以后就没再变把,你放到showFigur方法中看看!
就是这里,figur应该每一回合都重新计算一次,不然你初始化了以后这个值就永远不变了。
package perfect;import java.util.Random;public class Computer { // private String name; // private int score; int a,m; String name2; public void showFist()// 电脑出拳方法 { Random r1 = new Random(); a = r1.nextInt(3);// 随机生成一个1~3的数字,对应石头剪刀布。 Random r2 = new Random();//生成电脑姓名的随机数。 m = r2.nextInt(3); if (m == 0) { name2 = "曹操"; // System.out.print("曹操"); // c.showFist(); } else if (m == 1) { name2 = "孙权"; // System.out.print("孙权"); // c.showFist(); } else if (m == 2) { name2 = "刘备"; System.out.print("刘备"); // c.showFist(); } if (a == 0)//生成随机数,对应前面的人名 { System.out.println(name2 + "出的是 石头!"); } else if (a == 1) { System.out.println(name2 + "出的是 剪刀!"); } else if (a == 2) { System.out.println(name2 + "出的是 布!"); }// Computer c = new Computer();//对computer进行实例化,用于调取showFist方法。
// score ++; } }package perfect;import java.util.Scanner;public class Game { // private Person person; // 甲方 // private Computer computer; // 乙方 // private int count;// 对战次数 String str2, str3; static String name,cycle;// 关于姓名输入的字符串 public int lost, win, deuce; // /** * 初始化 */ public void initial() { // 初始化工作 for (int i = 0; i <= 16; i++) { System.out.print("*"); } System.out.println(); System.out.println("**" + " 开始 " + " 游戏 " + " ** "); for (int i = 0; i <= 16; i++) { System.out.print("*"); } System.out.println(); System.out.println("出拳规则:0、石头 ,1、剪刀 ,2、布"); System.out.print("请输入你的姓名:"); Scanner s = new Scanner(System.in); boolean b = true; while (b)// 对所输入的姓名的字符串进行非空循环 { name = s.nextLine();//定义name的值 setName(name);//设置姓名 // System.out.println("name = " + name);//程序初期用于测试是否讲name的值传入Person的showFist()方法 if (!name.equals(""))// 判断所输入的字符串是后为空 { b = false; // System.out.println("name = " + name);//初期用于测试是否传入name的值 } else // 若为空则重新输入 { System.out.print("你没有输入姓名,无法开始游戏,是否继续(y/n):"); Scanner s2 = new Scanner(System.in); String str = s2.next(); if ("y".equals(str)) { b = true; System.out.print("请输入你的姓名:"); } else { b = false; System.exit(0); } } } } public String getName() { return this.name; } public void setName(String name) { this.name = name; } /** * 开始游戏 */ public void startGame()// 开始游戏,控制游戏逻辑 { Person p = new Person(); Computer c = new Computer(); Scanner s = new Scanner(System.in); Game game = new Game(); boolean b = true; while (b)//对有事是否重新开始游戏进行一个循环对“n”则结束,“y”执行下一轮。 { System.out.println("是否继续游戏(y/n)?"); String cycle = s.nextLine(); if (cycle.equals("n")) { b = false; break; } else if (cycle.equals("y")) { p.showFist(); c.showFist(); // System.out.println(p.n);//程序初期用于检查n的值时候传进来。 // System.out.println(c.a);//程序初期用于检查a的值时候传进来。 if (p.n == c.a)// 首先经过计算,确定了所有返回的可能值,通过if语句判断输出的值 { System.out.println("deuce"); deuce++; } else if (p.n - c.a == 1 || p.n - c.a == -2) { System.out.println("lost"); lost++; // System.out.println(p.n);//程序初期用于检查n的值时候传进来。 // System.out.println(c.a);//程序初期用于检查a的值时候传进来。 } else { System.out.println("win"); win++; } for (int i = 0; i <= 16; i++) { System.out.print("-"); } System.out.println(); System.out.println("deuce:\t" + deuce); System.out.println("win:\t" + win); System.out.println("lost:\t" + lost); b = true; } else{ System.out.println("输入有误,是否重新输入(y/n)"); Scanner s7 = new Scanner(System.in); String str7 = s7.next(); } } } /** * 显示比赛结果 */ public void showResult() { /* 显示最后结果 */ // 打印玩了多少局,电脑获胜还是人获胜 Game game = new Game(); game.startGame(); for (int i = 0; i <= 16; i++) { System.out.print("-"); } System.out.println(); if (game.win > game.lost) { System.out.println("You are winner"); } else if (game.win < game.lost) { System.out.println("You are loser"); } else { System.out.println("You are deuce"); } } /** * 计算比赛结果 */ // public int calcResult() // { // return 0; // } }package perfect; import java.util.InputMismatchException; import java.util.Scanner;public class Person { // private String name = "匿名"; // private int score; int n; public void showFist() // 人出拳 { System.out.print("你将出:"); Scanner s = new Scanner(System.in); Game game = new Game(); // 对用户输入的数字进行判断 boolean b = true; while (b) { boolean b1 = false; do{ try//捕获程序输入字符串异常。 { n = s.nextInt(); b1 = true; } catch (InputMismatchException n)//取出异常 { s.next(); System.out.println("输入有误,是否重新输入(y/n)"); Scanner s5 = new Scanner(System.in); String str5 = s5.next(); if ("y".equals(str5))//对异常进行判断,满足条件则继续执行 { b = true; System.out.print("你将出:"); } else if("n".equals(str5)) { b = false; System.exit(0); } else//不满足条件则停止程序运行 { System.out.println("输入有误,是否重新输入(y/n)"); // Scanner s6 = new Scanner(System.in); String str6 = s5.next(); } } }while(!b1);//直到不满足条件(!false = true)退出循环 if (n < 3)//随机出石头剪刀布 { switch (n) { case 0: System.out.print(game.name + "出的是 石头!"); break; case 1: System.out.print(game.name + "出的是 剪刀!"); break; case 2: System.out.print(game.name + "出的是 布!"); break; } b = false; // 用户输入错误,让其选择是否重新输入 }
else//输入错误后重新输入 { System.out.print("您的输入错误,是否继续(y/n):"); Scanner s2 = new Scanner(System.in); String str = s2.next(); if ("y".equals(str)) { b = true; System.out.print("你将出:"); } else { b = false; System.exit(0); } } } } }package perfect;public class StartGuess { /** * 人机互动版猜拳游戏 * @param args */ public static void main(String[] args) { //游戏入口 Game game = new Game(); game.initial(); game.showResult(); game.startGame(); } }这个是我在学校写的猜拳游戏的代码,希望对楼主有帮助
int figur = Math.abs(rd.nextInt(ComputerParty.realCount+1))%3 ;
这两句我没看错的话,应该是电脑类ComputerParty 的成员方法把,在new的时候初始化了一次,貌似以后就没再变把,你放到showFigur方法中看看!
package perfect;import java.util.Random;public class Computer
{
// private String name;
// private int score;
int a,m;
String name2;
public void showFist()// 电脑出拳方法
{
Random r1 = new Random();
a = r1.nextInt(3);// 随机生成一个1~3的数字,对应石头剪刀布。
Random r2 = new Random();//生成电脑姓名的随机数。
m = r2.nextInt(3);
if (m == 0)
{
name2 = "曹操";
// System.out.print("曹操");
// c.showFist();
}
else if (m == 1)
{
name2 = "孙权";
// System.out.print("孙权");
// c.showFist();
}
else if (m == 2)
{
name2 = "刘备";
System.out.print("刘备");
// c.showFist();
}
if (a == 0)//生成随机数,对应前面的人名
{
System.out.println(name2 + "出的是 石头!");
}
else if (a == 1)
{
System.out.println(name2 + "出的是 剪刀!");
}
else if (a == 2)
{
System.out.println(name2 + "出的是 布!");
}// Computer c = new Computer();//对computer进行实例化,用于调取showFist方法。
// score ++;
}
}package perfect;import java.util.Scanner;public class Game
{
// private Person person; // 甲方
// private Computer computer; // 乙方
// private int count;// 对战次数
String str2, str3;
static String name,cycle;// 关于姓名输入的字符串
public int lost, win, deuce; // /**
* 初始化
*/
public void initial()
{
// 初始化工作 for (int i = 0; i <= 16; i++)
{
System.out.print("*");
}
System.out.println();
System.out.println("**" + " 开始 " + " 游戏 " + " ** ");
for (int i = 0; i <= 16; i++)
{
System.out.print("*");
}
System.out.println();
System.out.println("出拳规则:0、石头 ,1、剪刀 ,2、布");
System.out.print("请输入你的姓名:");
Scanner s = new Scanner(System.in);
boolean b = true;
while (b)// 对所输入的姓名的字符串进行非空循环
{
name = s.nextLine();//定义name的值
setName(name);//设置姓名
// System.out.println("name = " + name);//程序初期用于测试是否讲name的值传入Person的showFist()方法
if (!name.equals(""))// 判断所输入的字符串是后为空
{
b = false;
// System.out.println("name = " + name);//初期用于测试是否传入name的值
}
else
// 若为空则重新输入
{
System.out.print("你没有输入姓名,无法开始游戏,是否继续(y/n):");
Scanner s2 = new Scanner(System.in);
String str = s2.next();
if ("y".equals(str))
{
b = true;
System.out.print("请输入你的姓名:");
}
else
{
b = false;
System.exit(0);
} } } } public String getName()
{
return this.name;
} public void setName(String name)
{
this.name = name;
} /**
* 开始游戏
*/
public void startGame()// 开始游戏,控制游戏逻辑
{
Person p = new Person();
Computer c = new Computer();
Scanner s = new Scanner(System.in);
Game game = new Game();
boolean b = true;
while (b)//对有事是否重新开始游戏进行一个循环对“n”则结束,“y”执行下一轮。
{
System.out.println("是否继续游戏(y/n)?");
String cycle = s.nextLine();
if (cycle.equals("n"))
{
b = false;
break;
}
else if (cycle.equals("y"))
{
p.showFist();
c.showFist(); // System.out.println(p.n);//程序初期用于检查n的值时候传进来。
// System.out.println(c.a);//程序初期用于检查a的值时候传进来。
if (p.n == c.a)// 首先经过计算,确定了所有返回的可能值,通过if语句判断输出的值
{
System.out.println("deuce");
deuce++;
}
else if (p.n - c.a == 1 || p.n - c.a == -2)
{
System.out.println("lost");
lost++;
// System.out.println(p.n);//程序初期用于检查n的值时候传进来。
// System.out.println(c.a);//程序初期用于检查a的值时候传进来。
}
else
{
System.out.println("win");
win++;
} for (int i = 0; i <= 16; i++)
{
System.out.print("-");
}
System.out.println();
System.out.println("deuce:\t" + deuce);
System.out.println("win:\t" + win);
System.out.println("lost:\t" + lost);
b = true; }
else{ System.out.println("输入有误,是否重新输入(y/n)");
Scanner s7 = new Scanner(System.in);
String str7 = s7.next();
}
}
} /**
* 显示比赛结果
*/
public void showResult()
{
/* 显示最后结果 */
// 打印玩了多少局,电脑获胜还是人获胜
Game game = new Game();
game.startGame();
for (int i = 0; i <= 16; i++)
{
System.out.print("-");
}
System.out.println();
if (game.win > game.lost)
{
System.out.println("You are winner");
}
else if (game.win < game.lost)
{
System.out.println("You are loser");
}
else
{
System.out.println("You are deuce");
}
} /**
* 计算比赛结果
*/
// public int calcResult()
// {
// return 0;
// }
}package perfect;
import java.util.InputMismatchException;
import java.util.Scanner;public class Person
{
// private String name = "匿名";
// private int score;
int n; public void showFist() // 人出拳
{
System.out.print("你将出:");
Scanner s = new Scanner(System.in);
Game game = new Game();
// 对用户输入的数字进行判断
boolean b = true;
while (b)
{
boolean b1 = false;
do{
try//捕获程序输入字符串异常。
{
n = s.nextInt();
b1 = true;
}
catch (InputMismatchException n)//取出异常
{
s.next();
System.out.println("输入有误,是否重新输入(y/n)");
Scanner s5 = new Scanner(System.in);
String str5 = s5.next();
if ("y".equals(str5))//对异常进行判断,满足条件则继续执行
{
b = true;
System.out.print("你将出:");
}
else if("n".equals(str5))
{
b = false;
System.exit(0);
}
else//不满足条件则停止程序运行
{
System.out.println("输入有误,是否重新输入(y/n)");
// Scanner s6 = new Scanner(System.in);
String str6 = s5.next();
}
}
}while(!b1);//直到不满足条件(!false = true)退出循环
if (n < 3)//随机出石头剪刀布
{
switch (n)
{
case 0:
System.out.print(game.name + "出的是 石头!");
break;
case 1:
System.out.print(game.name + "出的是 剪刀!");
break;
case 2:
System.out.print(game.name + "出的是 布!");
break;
}
b = false;
// 用户输入错误,让其选择是否重新输入
}
else//输入错误后重新输入
{
System.out.print("您的输入错误,是否继续(y/n):");
Scanner s2 = new Scanner(System.in);
String str = s2.next();
if ("y".equals(str))
{
b = true;
System.out.print("你将出:");
}
else
{
b = false;
System.exit(0);
}
}
}
}
}package perfect;public class StartGuess { /**
* 人机互动版猜拳游戏
* @param args
*/
public static void main(String[] args) {
//游戏入口
Game game = new Game();
game.initial();
game.showResult();
game.startGame();
}
}这个是我在学校写的猜拳游戏的代码,希望对楼主有帮助
仁兄,我原本是认为每次进入playGame方法后,执行到int figur = xxxx 的视乎,rd.nextInt(xx)能重新取一次随机数,能否帮忙解释下为什么不会重新取么?多谢!
仁兄,我原本是认为每次进入playGame方法后,执行到int figur = xxxx 的视乎,rd.nextInt(xx)能重新取一次随机数,能否帮忙解释下为什么不会重新取么?多谢!
它们是成员变量呀,成员变量会在类实例话的时候,进行初始化,以后再使用这实例的时候,就不会初始化了,如果想改变他的值,需要提供相应的方法!
仁兄,我原本是认为每次进入playGame方法后,执行到int figur = xxxx 的视乎,rd.nextInt(xx)能重新取一次随机数,能否帮忙解释下为什么不会重新取么?多谢!
它们是成员变量呀,成员变量会在类实例话的时候,进行初始化,以后再使用这实例的时候,就不会初始化了,如果想改变他的值,需要提供相应的方法!多谢多谢!