[需求]
1. 程式會亂數產 個介於 1 ~ 100的數值作為答案
2. 玩家所輸 數字如果就是答案,程式會終 並輸出輸 次數與答案。 3. 玩家必須玩到猜對為 。
4. 玩家所輸 數字如果不是答案,程式會提 範圍(Message Prompt)。
Ex: Answer = 51
User entered Message Prompt
1st : 33 34 ~ 100 2nd : 75 34 ~ 74
[領域分析]Domain Analysis
1. 程式會亂數產 個介於 1 ~ 100的數值作為答案
int answer;
2. 玩家所輸 數字如果就是答案,程式會終 並輸出輸 次數與答案。
String inputStr; int count; 3. 玩家必須玩到猜對為 。
4. 玩家所輸 數字如果不是答案,程式會提 範圍(Message Prompt)。
ex Answer = 51
User entered Message Prompt
1. 程式會亂數產 個介於 1 ~ 100的數值作為答案
2. 玩家所輸 數字如果就是答案,程式會終 並輸出輸 次數與答案。 3. 玩家必須玩到猜對為 。
4. 玩家所輸 數字如果不是答案,程式會提 範圍(Message Prompt)。
Ex: Answer = 51
User entered Message Prompt
1st : 33 34 ~ 100 2nd : 75 34 ~ 74
[領域分析]Domain Analysis
1. 程式會亂數產 個介於 1 ~ 100的數值作為答案
int answer;
2. 玩家所輸 數字如果就是答案,程式會終 並輸出輸 次數與答案。
String inputStr; int count; 3. 玩家必須玩到猜對為 。
4. 玩家所輸 數字如果不是答案,程式會提 範圍(Message Prompt)。
ex Answer = 51
User entered Message Prompt
1st : 33
2nd : 75 3rd : 79
2nd : 75 3rd : 79
34 ~ 100
int lowerbound; int upperBound ;
34 ~ 74 34 ~ 74
int lowerbound; int upperBound ;
34 ~ 74 34 ~ 74
[流程分析]
//產 亂數做為解答
//提 訊息含上下邊界
//讀取玩家輸
//轉型 & count++ // 對成功,輸出次數與解答 // 對失敗,調整上下邊界
[類別分析]
1. 資料處理(GameData):
//轉型 & count++ // 對成功,輸出次數與解答 // 對失敗,調整上下邊界
[類別分析]
-
//產 亂數做為解答(GameData)
-
//提 訊息含上下邊界(GameFlow)
-
//讀取玩家輸 (GameFlow)
-
//轉型 & count++(GameData)
-
// 對成功(GameData),輸出次數與解答(GameFlow)
-
// 對失敗,調整上下邊界(GameData)
1. 資料處理(GameData):
2. 流程處理:
● 初始化邏輯(GameData)
寫在建構函式中
● 對流程(compare Method, GameData):
public bool compare(String inputStr)
//次數加1 //String --> int (casting error return false) //compare to answer //if true, return true //if false, update lowerBound or upperBound, and return false
● 遊戲主流程(GameFlow): //產 遊戲資料
//提 訊息含上下邊界
//讀取玩家輸 Call GameData’s compare Method
// 對成功,輸出次數與解答 // 對失敗,遊戲繼續執
Swift 實作
● 初始化邏輯(GameData)
寫在建構函式中
● 對流程(compare Method, GameData):
public bool compare(String inputStr)
//次數加1 //String --> int (casting error return false) //compare to answer //if true, return true //if false, update lowerBound or upperBound, and return false
● 遊戲主流程(GameFlow): //產 遊戲資料
//提 訊息含上下邊界
//讀取玩家輸 Call GameData’s compare Method
// 對成功,輸出次數與解答 // 對失敗,遊戲繼續執
Swift 實作
types.swift
main.swift
[Code程式區 - types.swift]
class GameData{
//1: 屬性宣告
var answer : Int
var count : Int
var upperBound : Int
var lowerBound : Int
init(){
//2: 變數初始化
count = 0
upperBound = 100
lowerBound = 1
//產生亂數做為解答
answer = Int(arc4random()) % (upperBound - lowerBound + 1) + lowerBound
}
// 3. 比對邏輯
func compare(userInputStr: NSString)->Bool{
//轉型 & count++
count += 1
let userInput = userInputStr.integerValue
if answer == userInput{
//比對成功,輸出次數與解答
//print("ANSWER: \(answer), COUNT : \(count).")
//break
return true
}else{
//比對失敗,調整上下邊界
if userInput < answer && userInput >= lowerBound {
lowerBound = userInput + 1
}else if userInput > answer && userInput <= upperBound{
upperBound = userInput - 1
}
}
return false
}
}
struct GameFlow {
// 4: 屬性宣告
var data = GameData()
// 5: 讀取使用者輸入
func getInput() -> NSString {
let keyboard = NSFileHandle.fileHandleWithStandardInput()
let inputData = keyboard.availableData
return NSString(data: inputData, encoding:NSUTF8StringEncoding)!
}
// 6: 主要流程
func play(){
while true{
//提示訊息含上下邊界
print("OO Please enter a number between \(data.lowerBound) ~ \(data.upperBound):")
//讀取玩家輸入
let userInputStr = getInput()
if data.compare(userInputStr){
// 比對成功, 輸出次數與解答
print("OO Answer: \(data.answer), Count: \(data.count).")
break
}
}
}
}
[Code程式區 - main.swift]
// 7:程式執行
let game = GameFlow()
game.play()
George Huang 烤蕃薯@Taipei 2016
沒有留言:
張貼留言