おみくじ機能を作る
これまで学んできた内容を活かして、新年ということもありおみくじを作ってみます。
実現したいこと
まずは日本語でやりたいことを挙げていこうと思います。
①作りたい運勢一覧
「大吉」、「中吉」、「吉」、「小吉」、「どうしようもないもう一回引き直しな」の5つを引く可能性のある運勢とする。
容量10の運勢スライスを作って管理する。
②運勢一覧の作成
なるべく良い結果を引きたいのでバランスを操作しておく。具体的には、
実行するごとに1~10のランダムな自然数を発生させて、その自然数と運勢を紐づけることにする。
「大吉」:1~5が出たとき
「中吉」:6~7が出たとき
「吉」:8が出たとき
「小吉」:9が出たとき
「どうしようもないもう一回引き直しな」:10が出たとき
switch文で場合分けを作成する。
③お節介機能の追加
また、10を出してしまったときはもう一度おみくじを引くよう誘導したい。これはif文で書く。
コードにする。
package main
import (
"fmt"
"time"
"golang.org/x/exp/rand"
)
func main() {
//1~10までのランダムな数の生成
rand.Seed(uint64(time.Now().UnixNano()))
//運勢一覧スライスの作成
unsei := make([]string, 0, 10)
unsei = append(unsei, "「大吉」", "「中吉」", "「吉」", "「小吉」", "「どうしようもないもう一回引き直しな」")
//ランダムな数と運勢の紐づけ
drawOmikuji := func() string {
NaturalNumber := rand.Intn(10) + 1
switch {
case 1 <= NaturalNumber && 5 >= NaturalNumber:
return (unsei[0])
case NaturalNumber == 6 || NaturalNumber == 7:
return (unsei[1])
case NaturalNumber == 8:
return (unsei[2])
case NaturalNumber == 9:
return (unsei[3])
case NaturalNumber == 10:
return (unsei[4])
default:
return "予期しない結果です"
}
}
result := drawOmikuji()
fmt.Println(result)
if result == unsei[4] {
fmt.Println("もう一回引かせてあげよう")
result := drawOmikuji()
fmt.Println(result)
}
}
実行結果
何度か実行してみます。
まれに運勢が悪くても引き直してくれていることも確認できました
感想
それぞれの要素を学んでいるときは少し退屈ですが、学習した内容をつなげて一つのものを作ってみると成果が出た気になれるので、モチベーションが回復しました。
コードの書き方などはまだまだ効率化できるんだろうとは思いますが、アイデアを形にできたという点で楽しかったです。