[問題] java寫猜數字遊戲(幾A幾B那種)
老師在上課有講解了以下的部分
但說得很快 >"<
要我們說明程式碼及修改以下程式碼
Number Guess Game.java 部分的上色處 for的地方
來完成完整版的4位數猜數字遊戲
1. 可由使用者選擇所欲猜測的數字有幾位
2. 使用者可查詢過去所輸入的猜測
3. 電腦可提供提示 (例如 : 1A2B)
4. 遊戲排行榜
而這個猜數字的遊戲 包含了 Number Guess Game.java / Answer.java
及Main.java三個部分
(主要是修改Number Guess Game.java 部分及在執行時能印出步驟說明
例如: 你猜錯了 繼續加油 )
-------------------------------------
Number Guess Game.java 部分
package numberguessgame;
import java.util.Scanner;
import java.io.*;
import java.util.Vector;
import java.util.Random;
public class NumberGuessGame {
private int numberOfDigits;
private boolean isDupDigits=true;
int count=1;
Answer lastAnswer=null;
Vector possibleAnswerSet;
NumberGuessGame()
{
this(4);
}
NumberGuessGame(int d)
{
setNumberOfDigits(d);
possibleAnswerSet = new Vector();
}
public Answer generateAnswer()
{
Answer temp = new Answer(numberOfDigits);
temp.generate();
// System.out.println(temp.answer);
return temp;
}
public void start(Answer answer)
{
boolean exit=false;
Answer userGuess;
String outStr=null;
while(!exit && (count<100))
{
System.out.println("------------------------");
System.out.println("(" + count + ")");
// userGuess = getUserGuess();
userGuess = generateGuess(answer, outStr);
outStr = compare(userGuess,answer);
System.out.println(outStr);
if(outStr.equals("" + this.numberOfDigits + "A0B"))
exit=true;
count++;
}
System.out.println("Game Over");
}
public Answer generateGuess(Answer answer, String outStr)
{
Answer temp = new Answer(this.numberOfDigits);
System.out.print("Please Input Your Guess:");
if(count==1)
{
temp = generateAnswer();
lastAnswer = temp;
return temp;
}
else if(count==2)
{
Answer a = generateAnAnswer(answer, outStr);
lastAnswer =a;
System.out.println(a.answer);
return a;
}
else
{
Answer a = generateAnotherAnswer(answer, outStr);
lastAnswer = a ;
System.out.println(a.answer);
return a;
}
// temp.setAnswer( string );
// return temp;
}
public String compare(Answer t, Answer a)
{
int numA = 0, numB = 0, numC = 0;
String outStr = "";
for(int k = 0; k < this.numberOfDigits; k++)
{
if(t.answer.charAt(k) == a.answer.charAt(k))
{
numA++;
}
}
for(int i=0; i < this.numberOfDigits; i++)
{
for(int j=0; j < this.numberOfDigits; j++)
{
if(t.answer.charAt(i) == a.answer.charAt(j))
{
numC++;
}
}
}
numB = numC - numA;
outStr="" + numA + "A" + numB + "B";
return outStr;
}
public Answer getUserGuess()
{
Answer temp = new Answer(this.numberOfDigits);
Scanner userinput = new Scanner(System.in);
System.out.print("Please Input Your Guess:");
temp.setAnswer(userinput.next());
return temp;
}
public void setNumberOfDigits(int d)
{
numberOfDigits = d;
}
public int getNumberOfDigits()
{
return numberOfDigits;
}
public Answer generateAnAnswer(Answer answer, String outStr)
{
String answerStr="";
for(int w=0;w<10;w++)
{
for(int x=0;x<10;x++)
{
for(int y=0;y<10;y++)
{
for(int z=0;z<10;z++)
{
answerStr= new String(""+ w + "" + x + "" + y + "" + z);
// System.out.println(answer);
Answer temp = new Answer(this.numberOfDigits);
temp.setAnswer(answerStr);
String outStr2 = compare(temp, lastAnswer);
if(outStr2.equals(outStr))
{
this.possibleAnswerSet.add(temp);
}
}
}
}
}
Random rand =new Random();
Answer temp =
(Answer)(possibleAnswerSet.get(rand.nextInt(possibleAnswerSet.size())));
return temp;
}
public Answer generateAnotherAnswer(Answer answer, String outStr)
{
String answerStr="";
for(int w=0;w<possibleAnswerSet.size();w++)
{
Answer temp = (Answer)(possibleAnswerSet.get(w));
String outStr2 = compare(temp, lastAnswer);
if(!outStr2.equals(outStr))
{
this.possibleAnswerSet.remove(temp);
}
}
System.out.println("size of possible answer set =" +
possibleAnswerSet.size());
Random rand =new Random();
Answer temp =
(Answer)(possibleAnswerSet.get(rand.nextInt(possibleAnswerSet.size())));
return temp;
}
}
Answer.java 部分
package numberguessgame;
import java.lang.String;
import java.util.*;
public class Answer
{
public String answer;
int numberOfDigits;
Answer(int digits)
{
this.numberOfDigits = digits;
}
public void setAnswer(String s)
{
answer = s ;
}
public void generate()
{
Random rand =new Random();
int[] ans=new int[numberOfDigits];
int[] buff=new int[numberOfDigits];
answer="";
int i=0;
int a=0;
while (a < numberOfDigits)
{
boolean same;
do
{
ans[a]=rand.nextInt(10);
same=false;
for (int count=0; count<a; count++)
{
if(ans[a] == buff[count])
{
same = true;
}
}
}while(same != false);
buff[a]=ans[a];
a++;
}
for(i=0; i<numberOfDigits; i++)
{
answer+= new String(""+ ans);
}
System.out.println("" + answer );
}
}
Main.java部分
package numberguessgame;
public class Main {
public static void main(String[] args) {
NumberGuessGame theGame = new NumberGuessGame();
// theGame.setNumberOfDigits(3);
Answer answer = theGame.generateAnswer();
theGame.start(answer);
}
}
-----------------------------------
先感謝答題的各位高手~ <(_O_)>
另外,也可以回到我的信箱。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.27.211.56
※ jeff10159:轉錄至看板 java 12/19 15:57
→
12/19 19:23, , 1F
12/19 19:23, 1F
→
12/21 08:44, , 2F
12/21 08:44, 2F
→
01/02 09:49, , 3F
01/02 09:49, 3F
PLT 近期熱門文章
PTT數位生活區 即時熱門文章