Golangで制限時間付き・ランダム表示のタイピングゲームを作って、 つまづいた事、解決方法についてお話します
Go lang で制限時間付き・ランダム表示のタイピングゲームを作った話うえむー2021/11
View Slide
・自己紹介・なぜ、あの時Golangをやろうとしたのか? ・golangで作ったもの・golangでつまづいた事 scan関数・golangでつまづいた事 timer設定目次
NameうえむーSkillhtml / pug / css / scss / javascript / jQuery / gulp.js / php / React.js / Vue.js / next.jsetc...※firebase / Svelte 勉強中です。Hobbyプログラミング学習・ビートボックス・ゴルフ・ボードゲーム・麻雀SNS・ブログサイトTwitter::https://twitter.com/uemuragame5683ポートフォリオ:https://uemu-engineer.com/自己紹介
・[Gopher]というマスコットキャラクターがいい! ・2019年 学びたいプログラミング言語、 トップ3入り! ・progateのプログラミング学習に その言語が入っており面白そうだったから なぜ、あの時Golangをやろうとしたのか?
golangで作ったもの
タイピングゲームを作ってつまづいた事① Scan関数の罠・・・
最初はprogateのgo lang言語の学習レッスンの最後に「タイピングゲームを作ろう」があったので、チュートリアルをみて実装しました。しかし、タイピングゲームの7問目に半角スペースを含めたワードを設定し実行すると。。。
正解のはずが、「不正解です!」と返され8問目〜10問目が飛ばされてしまう。実行結果
不具合の原因原因はScan関数らしく、ドキュメントを見ると以下のことが書かれておりました。。。
標準入力からテキストを一行ずつ読み込む「bufio.NewScanner」の関数を利用して、標準入力から読み込んだテキストをスキャンできたら、テキストを文字列に変更しans 変数に渡して、ans 変数と問題が同一であれば「正解です!」という文字列とポイント加算し、同一でなければ「不正解です!」という文字列を返却するように処理に変更しました。修正前 修正後
this is a dogと入力しても、さっきみたいに不具合にはならず正常に処理がでた。
タイピングゲームを作ってつまづいた事・・・② タイマー設定。。。
第二フェーズせっかくgo langを学習したのに勿体無い、お題をランダム形式・タイマーを加えて実装してみたい。
新たな壁が。。。いつも書いているphpはオブジェクト型、golangはパッケージ型なので書き方が全然違うので慣れないのでタイマーはどうやって実装するのかわからない。ドキュメント・参考記事を参照に実装
修正前は、main関数・ask関数を分割して実装。main関数は、ask関数に連番・お題・スコアの変数を設定し、Printfで結果のコメントを出力するコードを入力。ask関数は変数totalScoreのポインタを引数として渡し正解の場合はに+10を加えるコードを入力。
修正後は、ドキュメント・参考記事を参照にしてmain関数、ask関数を分割にするのをやめて一つにまとめた。・コマンドラインのフラグを解析するための「flag」パッケージ・日時データを取得するための「time」パッケージ・ランダム表示させるための「math/rand」パッケージを利用して実装
(1).shuffle関数を作成して文字列をシャッフルさせてランダム表示(2).init関数を利用してフラグを作成(3).入力データを読み出すためのインターフェース(4).timeパッケージを利用して数分後に処理するtmの変数を作成3412
for文で配列を回してお題をランダムで出力switch文と似ているselect文を利用文字列を入力を入力し正解だったら正解ですと文字列を返し、スコアが加算され次の課題へ不正解だったら加算されず正解が出るまで次のお題出さない時間がすぎたら制限時間すぎましたという文字列を出力し強制終了
その結果、左図のように正常に処理ができました。
来年の予定 ・サーバーサイド言語: firebase + typescript + next.js ログイン機能 firebase + gatsby.js でチートシート golang で何かを作る「未定」 ・フロントエンド: ブログサイトリニューアル
ご静聴ありがとうございました!