$30 off During Our Annual Pro Sale. View Details »

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

Nobuyoshi
February 06, 2020

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

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

Nobuyoshi

February 06, 2020
Tweet

More Decks by Nobuyoshi

Other Decks in Programming

Transcript

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

    View Slide

  2. ・自己紹介
    ・なぜ、あの時Golangをやろうとしたのか?

    ・golangで作ったもの
    ・golangでつまづいた事 scan関数
    ・golangでつまづいた事 timer設定
    目次

    View Slide

  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/
    自己紹介

    View Slide

  4. ・[Gopher]というマスコットキャラクターがいい!


    ・2019年 学びたいプログラミング言語、

     トップ3入り!


    ・progateのプログラミング学習に

     その言語が入っており面白そうだったから

    なぜ、あの時Golangをやろうとしたのか?

    View Slide

  5. golangで作ったもの


    View Slide

  6. タイピングゲームを作ってつまづいた事①

    Scan関数の罠・・・


    View Slide

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

    View Slide

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

    View Slide

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


    View Slide

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

    修正後


    View Slide

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

    View Slide

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

    タイマー設定。。。


    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. 来年の予定


    ・サーバーサイド言語:

     firebase + typescript + next.js ログイン機能

     firebase + gatsby.js でチートシート

     golang で何かを作る「未定」


    ・フロントエンド:

     ブログサイトリニューアル


    View Slide

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


    View Slide