2017-8-4java 人機猜拳(輸贏判斷) ,演算法優化
阿新 • • 發佈:2018-11-15
先展示,第一次解決該題目時的初步演算法
/** * 人機鬥拳(使用者輸入、電腦隨機生成1-3的數字、) * @return 1(人贏了) 2(電腦贏) 3(平局) */ private int fightPC() { // TODO Auto-generated method stub System.out.println("\n 1.石頭 \t 2.剪刀\t 3.布" + "---請輸入選項對應數字"); int resualt = -1 ; int numC = (int)(Math.random() * 3 + 1) ; //隨機生成1-3 的數字 for ( boolean flag_4 = false ; !flag_4 ;) { //不是1-3的數字就迴圈 int numP = isNum() ; //獲得一個數字 //比較人機出拳 if( numP >= 1 && numP <= 3 ){ if ( numC == numP ){ //相同,平局 resualt = 3 ; System.out.print("\n你和電腦出拳一樣 \t"); break ; } else if ( numC == 1 ){ //電腦出石頭 System.out.print("\n電腦出石頭 \t"); if (numP == 2){ resualt = 2 ; } else if(numP == 3){ resualt = 1 ; } } else if ( numC == 2 ) { //電腦出剪刀 System.out.print("\n電腦出剪刀 \t"); if( numP == 1){ resualt = 1 ; } else if ( numP == 3){ resualt = 2 ; } } else if ( numC == 3) { //電腦出布 System.out.print("\n電腦出布 \t"); if ( numP == 1){ resualt = 2 ; } else if ( numP == 2) { resualt = 1 ; } } flag_4 = true ; } else { System.out.println("請輸入正確的數字!"); } } return resualt; }
為了完成這功能,當時我的演算法好繁冗啊,不忍直視呀。
下面是我思考簡化後的程式碼,諸君請品嚐。
/** * @function 玩家輸入數字,電腦隨機生成1-3 的數字, * @return 1(人贏) 2(電腦贏) 3 (平局) */ private int fightNum() { int resualt = -1 ; //玩家輸入 System.out.println("1、剪刀\t2、石頭\t3、布"); int chooseP = isNum(1, 3 ) ; //電腦隨機生成數字 int chooseC = (int)(Math.random() * 3 + 1); //判斷誰贏 if ( chooseP - chooseC == 1){ resualt = 1 ; } else if ( chooseP - chooseC == 2) { resualt = 2 ; } if (chooseC - chooseP == 1){ resualt = 2 ; } else if ( chooseC - chooseP == 2) { resualt = 1 ; } if ( chooseP == chooseC ){ //平局 resualt = 3 ; } System.out.println("\t 電腦 選擇了 " + chooseC); return resualt; }