HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0704
gito秒数ごとに文字を消すには7解決


gito

リンク

2015/7/4(Sat) 21:10:54|NO.69951

こんばんは。最近hspを始めました。そこでタイピングゲームを作りたいと思い、色々ソース借りて
参考にして作ってる途中なのですが・・・

本題に入りますと今こんな感じです。

screen 0,800,541 gmode 2;gcopyのモード変更 font "MS Pゴシック",20,1 notesel Question_S ; noteload "ファイル名" noteadd "タイピング/TAIPINGU";文字列の追加 noteadd "リンゴ/RINGO";文字列の追加 ;問題は「 問題の文字列 / ローマ字読み(大文字)」の形で設定する QsFlag=1;問題を出すかどうか BreakFlag=0;ゲームストップ時のメインループの脱出用 TimeLimit=10;制限時間 Now=gettime(6);現在の時間(秒) QsTimer=0;経過時間 Miss=0;間違えた数 QuestionNo=0;問題のカウント KeyNo=0;入力した文字の数 dim SCORE,2;入力問題数と入力文字数 onkey gosub *キー入力 repeat if QsFlag=1 : gosub *問題生成 gosub *時間経過 if DrawFlag=1 : gosub *画面更新 if BreakFlag=1 : break;BreakFlagの値が1ならゲームストップ wait 1 loop ;ゲームストップ時 BreakFlag=0 onkey 0 cls pos 10,10 :mes "結果発表" pos 10,30 :mes "入力問題数 "+SCORE(1)+"問" pos 10,60 :mes "入力文字数 "+SCORE(0)+"文字" pos 10,90 :mes "入力ミス回数 "+Miss+"回" stop return *キー入力 KeyCode=strmid(Question_Ans,KeyNo,1) if KeyCode="-":poke KeyCode,0,189 if wparam=peek(KeyCode){ KeyNo++ SCORE(0)++ if KeyNo=strlen(Question_Ans):QsFlag=1:SCORE(1)++ DrawFlag=1 return }else : Miss++ : DrawFlag=1 return *時間経過 if Now!=gettime(6){;Nowとgettime(6)の値が異なっていたら経過時間を+1する Now=Gettime(6) QsTimer++ DrawFlag=1 if QsTimer>=TimeLimit{;経過時間がタイムリミットを上回ったらゲームストップする breakflag=1 } } return *問題生成 if QuestionNo>=notemax : BreakFlag=1;終了した問題数が全ての問題数を上回ったらゲームストップする Get_S="" noteget Get_S,QuestionNo split Get_S,"/",Question,Question_Ans;問題文を問題とローマ字読みのものに分ける QuestionNo++ KeyNo=0 DrawFlag=1 QsFlag=0 CharaX=10 return *画面更新 DrawFlag=0 redraw 0 color : boxf color 255,255,255 font msgothic,35 pos 200,450 :mes Question;問題文日本語を表示 pos 190,490 :mes Question_Ans;問題文ローマ字つづりを表示 color 255 pos 190,490 :mes strmid(Question_Ans,0,KeyNo) color 0,255,255 font msgothic,25 pos 10,20 :mes "残り時間  "+(TimeLimit-QsTimer)+"秒" font msgothic,15 pos 10,50 :mes "入力問題数 "+QuestionNo+"問" pos 10,70 :mes "入力文字数 "+KeyNo+"文字" pos 10,90 :mes "入力ミス回数"+Miss+"回" pos 10,110 :mes "入力得点数 "+SCORE0+"点" ; ミスタッチをした時 SCORE0-=10 repeat strlen(Question_Ans)-KeyNo pos CharaX+cnt\10*30,200+cnt/10*30 loop redraw 1 return

の状況なんですが。問題にタイピングとリンゴを設定しているんですが、これだと正しい文字
を打ててないと次のリンゴには進めません。

これを秒数で制限して問題のタイピングを5秒以内で打てなければ強制的に次の問題のリンゴ
に移動させるにはどうしたらいいか教えてもらえませんか??

色々と調べて waitとかやってみたんですが駄目でした。



この記事に返信する


暇人

リンク

2015/7/4(Sat) 21:27:57|NO.69952


if QsTimer>=TimeLimit{;経過時間がタイムリミットを上回ったらゲームストップする breakflag=1 }
これを

if QsTimer>=TimeLimit{;経過時間がタイムリミットを上回ったら次の問題 QsFlag=1 QsTimer=0 }
に変更して
TimeLimitを5にすれば良い



スペース

リンク

2015/7/4(Sat) 21:50:13|NO.69954

暇人さんの方がいいですね。
breakflagの意味がなかったとは・・・
それがなきゃ時間経過で結果画面行かないのかと思ってた・・・

if QsTimer>=TimeLimit{;経過時間がタイムリミットを上回ったら。 if QuestionNo=1:QsFlag=1:SCORE(1)++:QsTimer=0 if QuestionNo=2:breakflag=1 }



gito

リンク

2015/7/5(Sun) 10:47:30|NO.69964

>暇人さん スペースさん 
回答ありがとうございます。
無事消すことに成功できました!

あともう1つお伺いしたいのですが。
今ので5秒以内で打てなかった場合は強制的に次の問題にいけましたが、他にもタイピングは5秒以内
リンゴは3秒以内といった文字によって制限時間を変更する場合はどうすればいいですか?
 



ZAP

リンク

2015/7/5(Sun) 11:43:30|NO.69965

時間をカウントする変数を複数設けて別々にカウントするとか?



ZAP

リンク

2015/7/5(Sun) 11:53:49|NO.69966

それとも文字数に応じて制限時間を変えるのであれば、
出題時に問題の文字数を取得して、TimeLimit変数を書き換える。



暇人

リンク

2015/7/5(Sun) 13:25:54|NO.69969

最初から問題と秒数を決めたいなら
>noteadd "タイピング/TAIPINGU";文字列の追加
/で区切ってるように秒数も追加する

>split Get_S,"/",Question,Question_Ans
にQuestion_Timでも追加して

if QsTimer>=Question_Tim{;経過時間がタイムリミットを上回ったらゲームストップする
とでもすれば良い

文字数で秒数を決めたいなら
問題取り出した時に TimeLimit=strlen(Question_Ans)/2+1 みたいにする



gito

リンク

2015/7/5(Sun) 18:38:27|NO.69973

>暇人さん 
回答ありがとうございます!
無事に問題に秒数を追加することができました。ありがとうございました!

これからも頑張って作っていこうと思います。

他にもアドバイスをくれた皆様ありがとうございました!



ONION software Copyright 1997-2023(c) All rights reserved.