diff --git a/kadai3-1/gosagawa/.gitignore b/kadai3-1/gosagawa/.gitignore new file mode 100644 index 0000000..9e04648 --- /dev/null +++ b/kadai3-1/gosagawa/.gitignore @@ -0,0 +1,2 @@ +!.gitkeep +bin/ diff --git a/kadai3-1/gosagawa/README.md b/kadai3-1/gosagawa/README.md new file mode 100644 index 0000000..55ba9b0 --- /dev/null +++ b/kadai3-1/gosagawa/README.md @@ -0,0 +1,13 @@ +# kadai3-1 + +##タイピングゲームを作ろう +- 標準出力に英単語を出す(出すものは自由) +- 標準入力から1行受け取る +- 制限時間内に何問解けたか表示する + +##usage + +``` +go run main.go +``` + diff --git a/kadai3-1/gosagawa/main.go b/kadai3-1/gosagawa/main.go new file mode 100644 index 0000000..f4bd564 --- /dev/null +++ b/kadai3-1/gosagawa/main.go @@ -0,0 +1,8 @@ +package main + +import "github.com/gopherdojo/dojo3/kadai3-1/gosagawa/typingGame" + +func main() { + + typingGame.Start() +} diff --git a/kadai3-1/gosagawa/typingGame/typingGame.go b/kadai3-1/gosagawa/typingGame/typingGame.go new file mode 100644 index 0000000..7692a9b --- /dev/null +++ b/kadai3-1/gosagawa/typingGame/typingGame.go @@ -0,0 +1,109 @@ +package typingGame + +import ( + "bufio" + "fmt" + "io" + "math/rand" + "os" + "time" +) + +var questions []string + +const playTime int = 10 + +func init() { + questions = getQuestions() +} + +func Start() { + var num int + var endGame bool + inputCh := input(os.Stdin) + + startDisplay() + <-inputCh + + timeCh := time.After(time.Duration(playTime) * time.Second) + + for { + word := chooseWord() + displayWord(word) + + select { + case input := <-inputCh: + isCorrect := check(word, input) + displayResult(isCorrect) + if isCorrect { + num++ + } + + case <-timeCh: + endDisplay(num) + endGame = true + } + + if endGame { + break + } + } +} + +func getQuestions() []string { + var List = []string{"white", "yellow", "orange", "red", "pink", "purple", "blue", "green", "brown", "grey", "black"} + return List +} + +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 startDisplay() { + fmt.Println("Please type same words as much as possible ...") + fmt.Println("Hit any key to start..") + fmt.Println("") + +} +func chooseWord() string { + rand.Seed(time.Now().UnixNano()) + q := questions[rand.Intn(len(questions))] + return q + + return "test" +} + +func displayWord(word string) { + fmt.Println(word) + fmt.Printf(">") +} + +func check(word string, input string) bool { + if word == input { + return true + } + return false +} + +func displayResult(isCorrect bool) { + if isCorrect { + fmt.Println("Correct!") + } else { + fmt.Println("Miss...") + } + fmt.Println("") +} + +func endDisplay(correctNumber int) { + fmt.Println("") + fmt.Println("Time's up !!!") + fmt.Printf("Your score is %v\n", correctNumber) +}