Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Golang で制限時間付き・ランダム表示のタイピングゲームを作ってみた。
Search
Nobuyoshi
February 06, 2020
Programming
0
640
Golang で制限時間付き・ランダム表示のタイピングゲームを作ってみた。
Golangで制限時間付き・ランダム表示のタイピングゲームを作って、
つまづいた事、解決方法についてお話します
Nobuyoshi
February 06, 2020
Tweet
Share
More Decks by Nobuyoshi
See All by Nobuyoshi
仕事では採用されなかったホスティングサービス、 せっかくなのでLTで話します
uemura
0
88
Babylon.js × microCMS でフォトギャラリーサイト作った
uemura
0
240
2年ぶりにCSSアニメーションを作ったよ!
uemura
0
860
今年初めてのBabylonJsを触ってみた
uemura
0
270
ポートフォリオサイトのお問い合わせフォームをSendgrid + microCMSで作成したお話
uemura
1
1.5k
Three.js(WebGL)で一年以上学習した成果と便利なクラス/ライブラリを紹介
uemura
0
310
Pug / SASS でピクロス(カービィ)を作成
uemura
0
170
僕の好きなcssプロパティ・値5選
uemura
0
480
複雑なHTML_CSS アニメーション 作品一覧 + 苦労したこと
uemura
0
140
Other Decks in Programming
See All in Programming
jakarta-security-jjug-ccc-2025-fall
tnagao7
0
100
dnx で実行できるコマンド、作ってみました
tomohisa
0
120
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
1
190
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
260
CSC305 Lecture 17
javiergs
PRO
0
200
dotfiles 式年遷宮 令和最新版
masawada
1
230
Module Harmony
petamoriken
2
580
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
110
Micro Frontendsで築いた 共通基盤と運用の試行錯誤 / Building a Shared Platform with Micro Frontends: Operational Learnings
kyntk
1
1.6k
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.3k
チーム開発の “地ならし"
konifar
8
6.4k
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
120
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
A designer walks into a library…
pauljervisheath
210
24k
Rails Girls Zürich Keynote
gr2m
95
14k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
The Cult of Friendly URLs
andyhume
79
6.7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Site-Speed That Sticks
csswizardry
13
970
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Transcript
Go lang で制限時間付き・ランダム表示の タイピングゲームを作った話 うえむー 2021/11
・自己紹介 ・なぜ、あの時Golangをやろうとしたのか? ・golangで作ったもの ・golangでつまづいた事 scan関数 ・golangでつまづいた事 timer設定 目次
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/ 自己紹介
・[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の変数を作成 3 4 1
2
for文で配列を回してお題をランダ ムで出力 switch文と似ているselect文を利用 文字列を入力を入力し正解だった ら正解ですと文字列を返し、スコア が加算され次の課題へ不正解だっ たら加算されず正解が出るまで次 のお題出さない 時間がすぎたら制限時間すぎまし たという文字列を出力し強制終了
その結果、左図のように正常に処 理ができました。
来年の予定 ・サーバーサイド言語: firebase + typescript + next.js ログイン機能 firebase
+ gatsby.js でチートシート golang で何かを作る「未定」 ・フロントエンド: ブログサイトリニューアル
ご静聴ありがとうございました!