자바스크립트를 활성화 해주세요

Tucker의 Go 언어 프로그래밍 17장 풀이

 ·  ☕ 2 min read

Tucker의 Go 언어 프로그래밍스터디 요약 노트입니다.

17장. 숫자 맞추기 게임 만들기

지금까지 배운 Go 언어의 기초적 문법을 활용하여 프로그램을 작성하는 프로젝트다.
스터디 시간에는 time 패키지에 관해 설명이 있었으므로, time 패키지에 대한 설명을 먼저 하고, 책과 달리 직접 구현한 코드를 공유하도록 하겠다.

time 패키지

책에서는 의사 난수 생성시 초기 값을 매번 다르게 하기 위해 현재 시간을 seed 값으로 활용하는 방식을 구현하기 위해 time 패키지를 다뤘다.

  • time.Time : 시각을 나타낸다.
  • time.Duration : 시간(시각 - 시각)을 나타낸다.
  • time.Location : 시간대를 나타낸다. (경도에 따른 시차)

숫자 맞추기 게임

해당 코드를 구현할 때 아래 조건도 추가했다.

  1. main 패키지의 init()함수에서 초기화 과정을 거친다.
  2. 상수 플래그로 디버깅 용 정보 출력 여부를 선택하게 한다.
  3. main() 코드 흐름을 최대한 단순하게 하자.

아래는 직접 구현한 코드다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"time"
)

const Debug bool = true
var stdin *bufio.Reader

func main() {
	var guess int
	var trial uint
	
	answer := GenRandNumber()

	// Ask guess initially
	guess = UserInput()

	for trial = 1; guess != answer; trial++ {
		if guess > answer {
			fmt.Println("Your number is greater than the answer.")
		} else {
			fmt.Println("Your number is lesser than the answer.")
		}

		if guess < 0 || guess >= 100 {
			fmt.Println("Hint: answer is a number in range from 0 to 99")
		}

		// Ask your guess again
		guess = UserInput()
	}

	fmt.Println("Correct, congratulation!")
	fmt.Printf("Tried %d times", trial)
}

func init() {
	// Configure random seed
	rand.Seed(time.Now().UnixNano())
	stdin = bufio.NewReader(os.Stdin)
}

func GenRandNumber() int {
	// Generate random number from 0 to 99
	answer := rand.Intn(100)

	// For debugging condition, print answer first
	if Debug {
		fmt.Println("Answer is :", answer)
	}

	return answer
}

func UserInput() int {
	var n int

	for {
		fmt.Print("Write your guess: ")
		_, err := fmt.Scanln(&n)
		if err != nil {
			stdin.ReadString('\n')
			fmt.Println("Please write only numbers!")
		} else {
			return n
		}
	}
}
$ ./match_number
Answer is : 78
Write your guess: a
Please write only numbers!
Write your guess: 99
Your number is greater than the answer.
Write your guess: 77
Your number is lesser than the answer.
Write your guess: 100
Your number is greater than the answer.
Hint: answer is a number in range from 0 to 99
Write your guess: -1
Your number is lesser than the answer.
Hint: answer is a number in range from 0 to 99
Write your guess: 78
Correct, congratulation!
Tried 5 times

저자 강의


JaeSang Yoo
글쓴이
JaeSang Yoo
The Programmer

목차