Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Golang で制限時間付き・ランダム表示のタイピングゲームを作ってみた。

Cf642b7a99e07f86e6e7ec7a3bb94d87?s=47 Nobuyoshi
February 06, 2020

Golang で制限時間付き・ランダム表示のタイピングゲームを作ってみた。

Golangで制限時間付き・ランダム表示のタイピングゲームを作って、
つまづいた事、解決方法についてお話します

Cf642b7a99e07f86e6e7ec7a3bb94d87?s=128

Nobuyoshi

February 06, 2020
Tweet

More Decks by Nobuyoshi

Other Decks in Programming

Transcript

  1. Go lang で制限時間付き・ランダム表示の タイピングゲームを作った話 うえむー 2021/11

  2. ・自己紹介 ・なぜ、あの時Golangをやろうとしたのか?
 ・golangで作ったもの ・golangでつまづいた事 scan関数 ・golangでつまづいた事 timer設定 目次

  3. Name うえむー Skill html / pug / css / scss

    / javascript / jQuery / gulp.js / php / React.js / Vue.js / next.js etc... ※firebase / Svelte 勉強中です。 Hobby プログラミング学習・ビートボックス・ゴルフ・ボードゲーム・麻雀 SNS・ブログサイト Twitter::https://twitter.com/uemuragame5683 ポートフォリオ:https://uemu-engineer.com/ 自己紹介
  4. ・[Gopher]というマスコットキャラクターがいい!
 
 ・2019年 学びたいプログラミング言語、
  トップ3入り!
 
 ・progateのプログラミング学習に
  その言語が入っており面白そうだったから
 なぜ、あの時Golangをやろうとしたのか?

  5. golangで作ったもの


  6. タイピングゲームを作ってつまづいた事①
 Scan関数の罠・・・


  7. 最初はprogateのgo lang言語の学習 レッスンの最後に「タイピングゲームを 作ろう」があったので、チュートリアル をみて実装しました。 しかし、タイピングゲームの7問目に半 角スペースを含めた ワードを設定し実行すると。。。

  8. 正解のはずが、「不正解です!」と返さ れ8問目〜10問目が飛ばされてしま う。 実行結果

  9. 不具合の原因 原因はScan関数らしく、ドキュメントを見ると以下のことが書かれ ておりました。。。


  10. 標準入力からテキストを一行ずつ読み込む「bufio.NewScanner」の関数 を利用して、標準入力から読み込んだテキストをスキャンできたら、テキスト を文字列に変更しans 変数に渡して、ans 変数と問題が同一であれば「正 解です!」という文字列とポイント加算し、同一でなければ「不正解です!」 という文字列を返却するように処理に変更しました。 修正前
 修正後


  11. this is a dogと入力しても、さっき みたいに不具合にはならず正常に 処理がでた。

  12. タイピングゲームを作ってつまづいた事・・・②
 タイマー設定。。。


  13. 第二フェーズ せっかくgo langを学習したのに勿体無い、 お題をランダム形式・タイマーを加えて実装してみたい。

  14. 新たな壁が。。。 いつも書いているphpはオブジェクト型、golangはパッケージ型な ので書き方が全然違うので慣れないのでタイマーはどうやって実 装するのかわからない。 ドキュメント・参考記事を参照に実装

  15. 修正前は、main関数・ask 関数を分割して実装。 main関数は、ask関数に連 番・お題・スコアの変数を設 定し、Printfで結果のコメント を出力するコードを入力。 ask関数は変数totalScore のポインタを引数として渡し 正解の場合はに+10を加え るコードを入力。

  16. 修正後は、ドキュメント・参考記事を 参照にしてmain関数、ask関数を 分割にするのをやめて一つにまと めた。 ・コマンドラインのフラグを解析する ための「flag」パッケージ ・日時データを取得するための 「time」パッケージ ・ランダム表示させるための 「math/rand」パッケージを利用して

    実装
  17. (1).shuffle関数を作成して文字列 をシャッフルさせてランダム表示 (2).init関数を利用してフラグを作成 (3).入力データを読み出すためのイ ンターフェース (4).timeパッケージを利用して数分 後に処理するtmの変数を作成 3 4 1

    2
  18. for文で配列を回してお題をランダ ムで出力 switch文と似ているselect文を利用 文字列を入力を入力し正解だった ら正解ですと文字列を返し、スコア が加算され次の課題へ不正解だっ たら加算されず正解が出るまで次 のお題出さない 時間がすぎたら制限時間すぎまし たという文字列を出力し強制終了

  19. その結果、左図のように正常に処 理ができました。

  20. 来年の予定
 
 ・サーバーサイド言語:
  firebase + typescript + next.js ログイン機能
  firebase

    + gatsby.js でチートシート
  golang で何かを作る「未定」
 
 ・フロントエンド:
  ブログサイトリニューアル

  21. ご静聴ありがとうございました!