diff --git a/kadai3-1/kzkick2nd/README.md b/kadai3-1/kzkick2nd/README.md new file mode 100644 index 0000000..f8dc72f --- /dev/null +++ b/kadai3-1/kzkick2nd/README.md @@ -0,0 +1,37 @@ +# 課題3-1 +- 標準出力に英単語を出す(出すものは自由) +- 標準入力から1行受け取る +- 制限時間内に何問解けたか表示する + +## 基本設計 +- main + - 入出力パッケージ if + - 出題と採点パッケージ dealer + - out if + - in if + - from 単語パッケージ words + - with 制限時間パッケージ clock + - with 残機システム lives + - to 採点集計パッケージ scorer + - to ランキングパッケージ ranking + +## チャネルで繋げては?(チャネル練習) +game chan + word 単語を選ぶ + question 出題する + listener 回答を聞く + checker 答えあわせをする + scorer 採点する + timer 時間を計測する + +## NOTE +- オープニング画面が出る +- 単語パッケージはgithub APIで単語取得(コミットメッセージ?ライブラリー名?) +- 難易度 = 単語長・制限時間(easy|normal|hard) +- 残機式。正解で残秒数が増える. +- ハイスコアを保存してランク表示 + +- チャネルはゴールーチン同士で通信するが、関数同士で共有できるのか? + - できる。呼び出し元でチャネルに格納する +- チャネルでベルトコンベアは作れるか? +- チャネル内でチャネルを動かせるか?(時間切れ測定ができる) \ No newline at end of file diff --git a/kadai3-1/kzkick2nd/main.go b/kadai3-1/kzkick2nd/main.go new file mode 100644 index 0000000..39e950e --- /dev/null +++ b/kadai3-1/kzkick2nd/main.go @@ -0,0 +1,75 @@ +package main + +import ( + "bufio" + "fmt" + "io" + "math/rand" + "os" + "time" +) + +func main() { + fmt.Println("Start Typing Game.") + fmt.Println("Type the word appearing.") + + var correct int + var words = []string{ + "archive", + "tar", + "zip", + "bufio", + "builtin", + "bytes", + "compress", + "bzip2", + "flate", + "gzip", + "lzw", + "zlib", + "container", + "heap", + "list", + "ring", + "context", + "crypto", + "aes", + "cipher", + } + + ch := input(os.Stdin) + timeout := time.After(10 * time.Second) + + for { + w := word(words) + fmt.Println(w) + + select { + case <-timeout: + fmt.Println("Finish.") + fmt.Printf("Your score: %d\n", correct) + return + case answer := <-ch: + if w == answer { + correct++ + } + } + } +} + +func input(r io.Reader) <-chan string { + ch := make(chan string) + go func() { + s := bufio.NewScanner(r) + for s.Scan() { + ch <- s.Text() + } + close(ch) + }() + return ch +} + +func word(s []string) string { + rand.Seed(time.Now().UnixNano()) + return s[rand.Intn(len(s))] +}