實踐是最好的老師柠新,它能教會我們許多光“看”書而看不到的知識求摇。
內(nèi)容:
“石頭射沟、剪刀、布”是一種常見的猜拳游戲与境。游戲中玩家與電腦相互出拳验夯,在三次PK中以獲勝次數(shù)多者為最后贏家。游戲規(guī)則:出拳相同為平手摔刁,否則“石頭”勝“剪刀”挥转、“剪刀”勝“布”、“布”勝“石頭”共屈。游戲時绑谣,先由電腦隨機(jī)出拳,然后玩家可選擇出拳拗引,玩家不可預(yù)知電腦的出拳借宵。
知識點:
輸入輸出、隨機(jī)數(shù)矾削、數(shù)組壤玫、循環(huán)結(jié)構(gòu)豁护、多分支結(jié)構(gòu)
關(guān)于隨機(jī)數(shù)請參考《猜數(shù)字游戲-學(xué)Java從游戲開始1》,其余都是基礎(chǔ)知識欲间。
難點與思路:
1择镇、如何表示“石頭、剪刀括改、布”腻豌?
游戲中常常出現(xiàn)一些“道具”,在編程時對于比較小的游戲一般簡單的用“1嘱能、2吝梅、3……”等數(shù)字來代表。如本游戲可用1=石頭惹骂、2=剪刀苏携、3=布。
為了表示數(shù)字與“道具”的對應(yīng)關(guān)系对粪,這里可定義一個字符串?dāng)?shù)組右冻,如:
String[] fingers= {"石頭","剪刀","布"};
根據(jù)道具對應(yīng)的數(shù)字就可得到其名稱,格式是fingers[i-1]著拭。如“剪刀”可用fingers[2-1]表示纱扭。
當(dāng)然可以用枚舉類型來表示 “石頭、剪刀儡遮、布”乳蛾,但我認(rèn)為這里還不需要它。
2鄙币、勝負(fù)如何判定肃叶?
由于玩家與電腦分別有三種出拳選擇,一一進(jìn)行判斷有3*3=9種不同十嘿,所以采用分支來逐個進(jìn)行判斷比較復(fù)雜因惭。一種比較簡單的做法是采用類似比賽對陣表的方法,將兩者的不同出拳及勝負(fù)情況用一張表表示绩衷,存儲在一個二維數(shù)組中即可蹦魔。如下圖所示:
這里“勝、負(fù)唇聘、平”分別用1版姑、-1和0表示。數(shù)組定義為:
int[][] win_los= {{0,1,-1},{-1,0,1},{1,-1,0}};
判定玩家取勝與否只須判斷win_los[玩家出拳序號-1][電腦出拳序號-1]是1迟郎、-1或0即可剥险。
程序流程圖:
請讀者自己思考繪制。
程序代碼:
import java.util.Scanner;
/**
* 石頭宪肖、剪刀表制、布游戲
* @author LCS
*
*/
public class FingerGuessingGame {
public static void main(String[] args) {
//1=石頭,2=剪刀,3=布
Scanner key=new Scanner(System.in);
int c;//電腦的出拳
int p;//玩家的出拳
int ci=0,pi=0;//分別是電腦及玩家勝利的次數(shù)
int[][] win_los= {{0,1,-1},{-1,0,1},{1,-1,0}};
String[] fingers= {"石頭","剪刀","布"};
System.out.println("歡迎來到《石頭健爬、剪刀、布》游戲");
System.out.println("====================");
//開始游戲
for(int i=1;i<=3;i++) {
c=(int)(Math.random()*3+1);
System.out.println("請輸入你的第"+i+"次出拳【1=石頭,2=剪刀,3=布】:");
p=key.nextInt();
if(p<=0 || p>3) continue;
System.out.println("電腦出拳:"+fingers[c-1]);
System.out.println("你出拳:"+fingers[p-1]);
switch(win_los[p-1][c-1]) {
case -1:
System.out.println("電腦贏么介,你輸了娜遵!");
ci++;
break;
case 0:
System.out.println("電腦和你打成平局!");
break;
case 1:
System.out.println("電腦輸壤短,你贏了设拟!");
pi++;
break;
}
}
//游戲結(jié)束
System.out.println("=========您的成績========");
System.out.println("本次游戲你一共贏了"+pi+"次");
if(pi>ci) {
System.out.println("恭喜你成為贏家!");
}else if(pi==ci) {
System.out.println("你與電腦打成平手久脯!");
}else {
System.out.println("非常遺憾你敗給了電腦纳胧!歡迎下次再來。");
}
}
}