// 数当ã¦ã‚²ãƒ¼ãƒ 。関数やループã¨if文を使ㆠpackage main // メインプãƒã‚°ãƒ©ãƒ ã¯å¿…ãšã“ã†ã™ã‚‹ import ( // èªã¿è¾¼ã‚€ã€Œãƒ©ã‚¤ãƒ–ラリã€ã®å®£è¨€ "fmt" // 出力関連 "strconv" // æ–‡å—列ã‹ã‚‰æ•´æ•°ãªã©ã¸ã®å¤‰æ› "math/rand" // 乱数。強力ãªã‚‚ã®ãŒå¿…è¦ãªã‚‰crypto/randを使ㆠ"time" // 乱数ã®seed(種)を生æˆã™ã‚‹ãŸã‚(最åˆã«1回ã ã‘å¿…è¦ï¼‰ ) // main å¿…ãšmainã‹ã‚‰å§‹ã¾ã‚‹ func main() { const max = 100; theNumber := getRandomInt(max) // 関数呼ã³å‡ºã—。ç”ãˆã®æ•°å—をもらㆠ// 代入ã«ã¯ã€Œ:=ã€ã¨ã€Œ=ã€ã®2種類ãŒã‚ã‚‹ãŒã€ã€Œ:=ã€ã¯å¤‰æ•°ã®å®£è¨€ã¨åˆæœŸå€¤ã®ä»£å…¥ // åž‹ã¯å³è¾ºã‹ã‚‰è‡ªå‹•çš„ã«æŽ¨å®šã‚‰ã•ã‚Œã‚‹ // fmt.Println(theNumber); // デãƒãƒƒã‚°ç”¨ for count:=1; ; count++ { //for文。æ¡ä»¶ã¯ã€Œï¼ˆ...)ã€ã§å›²ã¾ãªã„ // 「æ¡ä»¶ã€ãŒãªã„ã®ã§ã€ç„¡é™ãƒ«ãƒ¼ãƒ—ã«ãªã‚‹ printPrompt(count, max) // 入力を促ã™èª¬æ˜Žã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ï¼ˆãƒ—ãƒãƒ³ãƒ—ト)を表示 num, err := readUserAnswer() switch { case err != nil || num < 1 || num > max: fmt.Printf("1以上%v以下ã®æ•´æ•°ã§ã¯ãªã„ã®ã§ã€ãƒã‚ºãƒ¬ã§ã™ã€‚\n", max) case num == theNumber: printSuccessMessage(count, theNumber) return // ã“ã“ã§é–¢æ•°ã‚’終了。breakã«ã™ã‚‹ã¨switch文を抜ã‘ã‚‹ã ã‘ã«ãªã‚‹ã®ã§ãƒ€ãƒ¡ case num < theNumber: fmt.Println("å°ã•ã™ãŽã¾ã™ã€‚") default: fmt.Println("大ãã™ãŽã¾ã™ã€‚") } } } // getRandomInt 1以上n以下ã®æ•´æ•°ã‚’å¾—ã‚‹ func getRandomInt(n int) int { // 関数宣言。引数ã¯ãªã—ã€æˆ»ã‚Šå€¤ã¯int(整数) rand.Seed(time.Now().UnixNano()) // 乱数ã®ã€Œseedã€ã€‚’70å¹´1月1æ—¥0時ã‹ã‚‰ã®ãƒŠãƒŽç§’æ•° num := rand.Intn(n)+1 // 0以上n未満ã®æ•´æ•°ã‚’もらã£ã¦ã€+1ã™ã‚‹ return num } // printPrompt プãƒãƒ³ãƒ—ト文å—列(説明)を表示 func printPrompt(count int, max int) { // 引数ã¯æ•´æ•°2ã¤ã€‚戻り値ã¯ãªã— if count == 1 { // 1回目ã®ã¿è¡¨ç¤º fmt.Print("数当ã¦ã‚²ãƒ¼ãƒ ã§ã™ã€‚") // fmt.Printã¯æ”¹è¡Œã—ãªã„ } fmt.Printf("1以上%v以下ã®æ•´æ•°ã‚’(åŠè§’ã§ï¼‰å…¥åŠ›ã—ã¦ãã ã•ã„(%v回目): ", max, count) // fmt.Printfã§ã¯ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãŒæŒ‡å®šã§ãる。 // %vを指定ã™ã‚‹ã¨å‡¦ç†ç³»ãŒã€Œè‰¯ãã«è¨ˆã‚‰ã£ã¦ã€ãれる } // readUserAnswer ユーザーã‹ã‚‰ã®ç”ãˆã‚’èªã¿è¾¼ã‚€ func readUserAnswer() (int, error) { // 戻り値ãŒ2ã¤ã‚る。整数(int)ã¨error var inp string fmt.Scanln(&inp) // æ–‡å—列ã¨ã—ã¦1è¡Œèªã¿è¾¼ã¿ã€inpã«ä»£å…¥ return strconv.Atoi(inp) // æ•´æ•°ã«å¤‰æ›ã€‚errorも戻る } // printSuccessMessage 当ãŸã£ãŸã¨ãã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示 func printSuccessMessage(count int, answer int) { mes1 := fmt.Sprintf("ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ã€‚「%dã€ãŒå½“ãŸã‚Šã§ã™ã€‚", answer); if count == 1 { fmt.Printf("ãƒ“ãƒ³ã‚´ï¼ %v\n", mes1) fmt.Printf("一発ã§å½“ãŸã‚Šã¾ã—ãŸã。ã™ãã«å®ãã˜ã‚’è²·ã„ã«è¡Œãã¾ã—ょã†ï¼\n", ) } else { adverb := "" // 副詞(修飾語「ヤットã€ã‚’ã¤ã‘ã‚‹ã‹ã©ã†ã‹ï¼‰ if 7 < count { adverb = "ヤット" } // JSã®ã‚ˆã†ã«ã€Œadverb := 7 < count ? "ヤット" : ""ã€ã¨ã¯æ›¸ã‘ãªã„ fmt.Printf("%v%v回目ã§%s当ãŸã‚Šã¾ã—ãŸã。\n", mes1, count, adverb) } }