diff --git a/kadai3-1/shuheiktgw/typing/.gitignore b/kadai3-1/shuheiktgw/typing/.gitignore new file mode 100644 index 0000000..4f76fc7 --- /dev/null +++ b/kadai3-1/shuheiktgw/typing/.gitignore @@ -0,0 +1 @@ +typing \ No newline at end of file diff --git a/kadai3-1/shuheiktgw/typing/README.md b/kadai3-1/shuheiktgw/typing/README.md new file mode 100644 index 0000000..d2ec93d --- /dev/null +++ b/kadai3-1/shuheiktgw/typing/README.md @@ -0,0 +1,11 @@ +Gopher道場 課題3-1 +==== + +Gopher道場 課題3-1,タイピングゲームです。 + +## Usage + +``` +go build +./typing +``` \ No newline at end of file diff --git a/kadai3-1/shuheiktgw/typing/game.go b/kadai3-1/shuheiktgw/typing/game.go new file mode 100644 index 0000000..9cba7c2 --- /dev/null +++ b/kadai3-1/shuheiktgw/typing/game.go @@ -0,0 +1,64 @@ +package main + +import ( + "bufio" + "fmt" + "math/rand" + "os" + "time" +) + +const ( + ExitCodeOK = iota +) + +var questions = []string{"Golang", "Ruby", "Scala", "Java", "PHP", "JavaScript", "C", "C++"} + +func init() { + rand.Seed(time.Now().UnixNano()) +} + +func Run() int { + score := 0 + done := time.After(5 * time.Second) + + for flag := true; flag; { + result := make(chan bool) + go run(result) + + select { + case <-done: + flag = false + case r := <-result: + if r { + score++ + } + } + } + + fmt.Println("Time up!") + fmt.Printf("Your score is %d\n", score) + + return ExitCodeOK +} + +func run(channel chan<- bool) { + defer close(channel) + + q := questions[rand.Intn(7)] + fmt.Printf("Type it: %s\n", q) + + in := bufio.NewScanner(os.Stdin) + in.Scan() + a := in.Text() + + isCorrect := q == a + + if isCorrect { + fmt.Println("Correct") + } else { + fmt.Println("Wrong") + } + + channel <- isCorrect +} diff --git a/kadai3-1/shuheiktgw/typing/main.go b/kadai3-1/shuheiktgw/typing/main.go new file mode 100644 index 0000000..483c4fa --- /dev/null +++ b/kadai3-1/shuheiktgw/typing/main.go @@ -0,0 +1,7 @@ +package main + +import "os" + +func main() { + os.Exit(Run()) +}