為了讓游戲有參與感,并體現java面對對象的思想,我先創建一個Player選手類,包含選手的名字playerName還有出拳方法guess()。出拳時采用隨機獲取0、1和2的方式分別代表石頭、剪刀和布,代碼如下:
public class Player{
private String playerName;
public Player(String playerName){
this.playerName= playerName;
}
public String getPlayerName(){
return playerName;
}
//出拳方法 0-石頭 1-剪刀 2-布
public int guess(){
//隨機獲取0、1、2
int num= new Random().nextInt(3);
if(num== 0){
System.out.print("選手"+ this.playerName+"出的是石頭");
} else if(num== 1){
System.out.print("選手"+ this.playerName+"出的是剪刀");
} else if(num== 2){
System.out.print("選手"+ this.playerName+"出的是布");
}
return num;
}
}
然后在主類中,首先要輸入對局的總數,然后創建兩名選手進行pk,在pk()方法中制定了獲勝規則,詳見代碼注釋。最終統計并利用BigDecimal計算勝率(BigDecimal可以很完美的解決整數除法及其四舍五入保留小數的問題):
public class Main{
public static void main(String[] args){
System.out.println("請輸入本局局數:");
Scanner scanner= new Scanner(System.in);
int sum= scanner.nextInt();
//創建結果數組,resultArray[0]代表p1的獲勝局數,resultArray[1]代表p2的獲勝局數,resultArray[2]代表平局局數
int[] resultArray= new int[3];
//創建兩名選手
Player p1= new Player("張三");
Player p2= new Player("李四");
for(int i= 0; i< sum; i++){
//根據總局數進行pk
int result= pk(p1, p2);
if(result== 1){
resultArray[0]++;
} else if(result==-1){
resultArray[1]++;
} else{
resultArray[2]++;
}
}
System.out.println("");
System.out.println("最終結果統計:");
System.out.println("選手["+ p1.getPlayerName()+"]獲勝局數為:"+ resultArray[0]+",勝率為:"+
new BigDecimal(resultArray[0]).multiply(new BigDecimal(100).divide(new BigDecimal(sum), 2, BigDecimal.ROUND_HALF_UP))+"%");
System.out.println("選手["+ p2.getPlayerName()+"]獲勝局數為:"+ resultArray[1]+",勝率為:"+
new BigDecimal(resultArray[1]).multiply(new BigDecimal(100).divide(new BigDecimal(sum), 2, BigDecimal.ROUND_HALF_UP))+"%");
System.out.println("平局局數為:"+ resultArray[2]+",平局率為:"+
new BigDecimal(resultArray[2]).multiply(new BigDecimal(100).divide(new BigDecimal(sum), 2, BigDecimal.ROUND_HALF_UP))+"%");
}
//0-石頭 1-剪刀 2-布
//return 0:平局 1:p1獲勝-1:p2獲勝
private static int pk(Player p1, Player p2){
System.out.println("--------------------");
int a= p1.guess();
int b= p2.guess();
System.out.print("\n對局結果:");
//出拳相同平局
if(a== b){
System.out.println("平局");
return 0;
}
//p1獲勝條件:p1出石頭時p2出剪刀,p1出剪刀時p2出步,p1出布時p2出石頭
else if((a== 0&& b== 1)||(a== 1&& b== 2)||(a== 2&& b== 0)){
System.out.println("選手["+ p1.getPlayerName()+"]獲勝");
return 1;
}
//p2獲勝條件:p1出石頭時p2出布,p1出剪刀時p2出石頭,p1出布時p2出剪刀
else if((a== 0&& b== 2)||(a== 1&& b== 0)||(a== 2&& b== 1)){
System.out.println("選手["+ p2.getPlayerName()+"]獲勝");
return-1;
} else{
//因為規定了隨機數產生0、1、2,所以其實不會走到本分支
throw new IllegalArgumentException("本局無效");
}
}
}
對局5局的運行結果:
我這里就只能統計當前游戲的數據了,如果你想統計多局游戲總的勝率信息,那么需要將每一局的比賽結果寫到txt文件里,最終根據txt文件內容統計即可。
java實現的簡單猜數字游戲代碼,通過隨機數與邏輯判斷來實現游戲功能
代碼如下:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//產生一個隨機數
int number=(int)(Math.random()* 100)+ 1;
//加入count
int count= 0;
//在這里加入最大值,和最小值
int max= 100;
int min= 1;
while(true){
//鍵盤錄入數據
Scanner sc= new Scanner(System.in);
System.out.println("請輸入你要猜的數據:("+ min+"~"+ max+")");
try{
count++;
int guessNumber= sc.nextInt();
//判斷
if(guessNumber> number){
max= guessNumber;
System.out.println("你猜大了");
} else if(guessNumber< number){
min= guessNumber;
System.out.println("你猜小了");
} else{
System.out.println("恭喜你,花了"+ count+"次就猜中了");
//問是否繼續
System.out.println("請問還要繼續嗎?(yes)");
sc= new Scanner(System.in);
String str= sc.nextLine();
if("yes".equals(str)){
//重寫賦值隨機數
number=(int)(Math.random()* 100)+ 1;
count= 0;
max= 100;
min= 1;
} else{
break;
}
}
} catch(InputMismatchException e){
System.out.println("你輸入的數據有誤");
}
}
}
}
1)把記錄的東西存到一個ArrayList里但是退出以后再進入就沒了。
2)把記錄的東西存到一個txt文件中用特殊的方式存再用特殊的方式取
比如說存的時候用“,”隔開名字和分數,在取的時候用split方法去分割
名字和分數。
3)把名字和分數存到數據庫要的時候調用就是了(這個是最好的方法)
至于排行的話重寫compareTo方法然后用Collections.sort去排序。
上一篇:dnf手游套裝強度排行榜
下一篇:dnf手游梯隊排行榜最新