/* タイピング サンプルスクリプト ゲーム製作メモ http://minus273.s27.xrea.com/prog/ HSP3.0用 2005-08-28 作成開始。 2005-08-29 とりあえず完成。 */ /* このサンプルはとりあえず作ってみただけという代物であり、 問題が多いです。 getkeyを通った瞬間に押されているときしか入力判定しない (入力の取りこぼしが発生する)、 問題文字列は半角英数字(大文字)しか対応していない、 同じ文字が続くと一気にタイプしてしまう、などなど……。 これらを何とかしようとするとかなりややこしくなるので 今回はそのままにしておきました。 タイピングゲームを作るときは、getkeyで入力を 取得するのではなく、 「HSPで良タイ!」(http://suzumizaki.at.infoseek.co.jp/ryoutai/) 「inkey.hpi」(http://taillove.jp/mia/) などのプラグインを使ったほうがいいと思います。 そうすれば上記の問題もスマートに解決できるはず。 */ ;----------いろいろな設定など #define VER "1.00" #define SOFTNAME "タイピングゲームのサンプル" #define TITLEBAR SOFTNAME+" "+VER #define EXENAME "typing" #packopt type 0 #packopt name EXENAME #packopt runtime "hsp3c.hrt" #packopt hide 0 ;----------ウインドウの作成 screen 0,320,240 : title TITLEBAR ;----------初期化 *init ;主な変数の宣言 HSPではしなくてもいいけど ;したほうがあとから何の変数かわかりやすい question_index = 0 ;何行目の問題か question_now = "" ;今の問題 type_index = 0 ;何文字目までタイピングしたか next_char = 0 ;次に入力する文字 typed = "" ;タイピングされた文字列 notesel question ;問題ファイルを読み込む変数 ;問題ファイルのロード exist "typing_word.txt" ;ちゃんとチェックしましょう if strsize=-1 : dialog EXENAME+".txt がありません" : end noteload "typing_word.txt" ;最初の問題を登録 noteget question_now, question_index next_char = peek(question_now,type_index) ;----------メインループ *main await 17 ;1秒に60回くらいループする ;キー入力処理 stick ky,15 if ky&128 : end ;Escで終了 ;正しく入力されたかチェック ;peekで取得した値とgetkeyの第二引数の値は ;32だけ違うみたいなので32を引く ;問題文字列は半角英数字(大文字)のみ対応 ;(もっとスマートなやり方があるはず……) getkey input_char,next_char if input_char = 1 { typed += strmid(question_now,type_index,1) type_index++ next_char = peek(question_now,type_index) if next_char = 0 { ;もうその問題の最後まで入力したら question_index++ type_index = 0 typed = "" noteget question_now, question_index next_char = peek(question_now,type_index) if next_char = 0 { end } } } ;いろいろ描画 redraw 0 color 0,0,0 : boxf ;白で全体を塗りつぶす ;問題 pos 16,16 : color 255,255,255 : mes question_now pos 16,32 : color 255,192,192 : mes typed ;変数の内容を表示 pos 8,100 : color 192,192,255 mes "question_index = "+question_index mes "type_index = "+type_index mes "next_char = "+next_char pos 180,8 mes "question の内容\n" mes question redraw 1 goto *main