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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1220
myuuタイピングソフトの作り方6未解決


myuu

リンク

2010/12/20(Mon) 20:33:11|NO.36258

今僕は、HSP3.0でタイピングソフトをつくっています。そのタイピングソフトは背景がインベーダー風
になっていて背景のインベーダーは動くようになっていて単語をひとつ入力するたびにプチュン
と消えるというプログラムなのですがなかなか上手く行きません。なんとかアドバイスをいただくことは
できないでしょうかよろしくおねがいします。



この記事に返信する


てれてれ

リンク

2010/12/20(Mon) 20:40:13|NO.36259

何が上手くいかなくて何を教えてほしいのかを書けよ



ii

リンク

2010/12/20(Mon) 21:59:56|NO.36262

プチュンという音が鳴らせなのか?
プチュンと消えるように表示できないのか?
インベーダーを動かせないのか?
単語入力の処理ができないのか?
複数の単語の処理ができないのか?
処理の途中でエラーが発生するのか?

状況を出来るだけ具体的に説明してください。



ORZ

リンク

2010/12/21(Tue) 00:34:44|NO.36267

君にとって最も必要なアドバイスだ。
http://hsp.tv/play/pforum.php?mode=all&num=36247



backdrop

リンク

2010/12/21(Tue) 20:36:48|NO.36276

その前にいい加減HSP3.21にアップデートしなさい
そしたらヘルプでtyping.hspかなんかで検索



myuu

リンク

2010/12/22(Wed) 23:13:17|NO.36295

すみません。スクリプトを書き忘れました。今ここに書くので、本当にスミマセンでした。

screen 0,400,341 title "タイピング";タイトルバーにタイピングと表示 int_time_limit;制限時間(秒) *top_menu cls picload "in.jpg";インベーダーの画像 pos 80,50 font "MS Pゴシック",30,1 mes "タイピングゲーム" pos 250,120 button "スタート",*typing_start;スタート画面に移動 button "システム",*system_menu;制限時間を設定する画面に移動 stop *system_menu cls pos 10,31 mes "制限時間" pos 107,30 input int_time_limit, 40,20 pos 149,31 mes "秒" pos180,100 button "戻る",*top_menu stop *typing_start cls sdim str_question_sentence_list,64;問題文の書かれたテキストを読み込む変数 sdim str_question_sentence_j,64;問題文日本語を入れる文字列型変数を作成 sdim str_question_sentence_r,64;問題文ローマ字つづりを入れる文字列型変数を作成 sdim str_input_sentence,64;入力文を入れる文字列型変数を作成 int_question_list_index = ;問題文の書かれたテキストの読み込む行数が入る変数 int_question_index = 0;問題文読み込み位置 int_question_clear_number = 0;問題文を入力し終えた数 int_input_ok_number = 0;入力した文字数 int_input_tokuten_number = 0;得点 ;問題文の書かれたテキストを読み込む処理 notesel str_question_sentence_list noteload "shiratekisuto.txt";テキストファイル名 ;問題文を変更する処理をするサブルーチンに飛ぶ gosub *sub_question_change onkey *key_push_action;何かキーが押されたら*key_push_actionに飛ぶ int_elapsed_time = 0;経過時間(秒) int_second = gettime(6);秒 int_minute = gettime(5);分 ;問題文、入力文の表示と、onkeyでキーが押された場合の処理に飛ぶ *main color 0,0,0; boxf 0,0,400,341 color 255,255,255;文字が見えるようにする pos 60,10 mes str_question_sentence_j;問題文日本語を表示 pos 60,40 mes str_question_sentence_r;問題文ローマ字つづりを表示 pos 60,70 mes str_input_sentence;入力文を表示 gosub *sub_elapsed_time_accession;経過時間を取得する処理に飛ぶ font "MS Pゴシック",20,1 pos 10,100 mes "残り時間  "+abs(int_time_limit-int_elapsedd_time)+"秒" pos 10,120 mes "入力問題数 "+int_question_clear_number+"問" pos 10,140 mes "入力文字数 "+int_input_ok_number+"文字" pos 10,160 mes "入力ミス回数"+int_input_mis_number+"回" pos 10,180 mes "入力得点数 "+int_input_tokuten_number+"点" redraw 1;画面制御命令の実行を反映する ;経過時間が制限時間以上ならonkeyをOFFにして、ストップします if int_time_limit <= int_elapsed_time : goto *result_display;結果を表示する画面に移動 await 10 redraw 0;仮想画面を書き換えるだけ ;経過時間を取得と表示を繰り返し行うために*mainでループ goto *main ;キーボードを押された時の処理 *key_push_action ;peekで問題文からint_question_indexの位置から1byte読み出し文字コードとiparamを比較する if peek(str_question_sentence_r,int_question_index) = iparam { ;文字コードとiparamが等しい場合の処理 int_input_ok_number += 1;入力した文字数を一つ増やす int_question_index += 1;問題文の読み込み位置を一つ増やす int_input_tokuten_number += 1;一つ入力するごとに得点を1点増やす ;strmidで問題文から0からint_question_inndexの位置まで読み込みstr_input_sentenceに代入する str_input_sentence = strmid(str_question_sentence_r,0,int_question_index) } else{ ;文字コードとiparamが等しくない場合の処理 int_input_mis_number += 1;入力ミスした回数を一つ増やす int_input_tokuten_number -= 1;一つミスするごとに得点を1点減らす } ;int_question_indexと問題文の文字列の長さを比較する事で問題が入力し終わったか調べる if strlen(str_question_sentence_r) <= int_question_index { ;入力し終わっている場合の処理 int_question_clear_number += 1;問題文を入力し終えた数を一つ増やす int_question_index = 0;問題文の読み込み位置を0にする int_input_tokuten_number += 5 ;単語を入力し終えると、得点を5点増やす str_input_sentence = "";変数内を空にする gosub *sub_question_change } goto *main;*mainに飛ぶ ;結果を表示する *result_display onkey 0 cls pos 10,10 mes "結果発表" pos 10,30 mes "入力問題数 "+int_question_clear_number+"問" pos 10,60 mes "入力文字数 "+int_input_ok_number+"文字" pos 10,90 mes "入力ミス回数"+int_input_mis_number+"点" pos 180,200 button "トップ",*top_menu pos 10,200 button "もう一度",*typing_start stop ;問題文を変更する処理をするサブルーチン *sub_question_change notesel str_question_sentence_list noteget str_question_sentence_j,int_question_list_index noteget str_question_sentence_r,int_question_list_index+1 int_question_list_index += 2 ;問題文の書かれたテキストの行数と等しくなったら読み込む行数を0に戻す if noteinfo(0) = int_question_list_index : int_question_list_index = 0 return *sub_elapsed_time_accession ;変数の秒と今の秒を比較する if int_second ! gettime(6){ ;分が同じか違うかで加算方法を変える if int_minute = gettime(5) : int_elapsed_time += abs(int_second-gettime(6)) if int_minute ! gettime(5) : int_elapsed_time += abs(int_second-gettime(6)-60) : int_minute = gettime(5) } return
これで全部です。
僕が聞きたかったのは
1 どうやったら背景の(ちっちゃいインベーダーの)絵がインベーダーのような動きをするか
2 どうやったら問題文を打つたびに背景の絵が消えるみたいな動きをするようになるのか
ということです。迷惑をかけてすみませんでした。よろしくおねがいします。



てれてれ

リンク

2010/12/23(Thu) 11:38:00|NO.36309


buffer 1;バッファを確保 cls 4 font "MS Pゴシック",30,1 color 255 mes "敵";画像の代わり ; picload "画像の名前";ここで敵の画像を読み込む screen 0,400,341 gmode 2;gcopyのモード変更 font "MS Pゴシック",20,1 notesel Question_S ; noteload "ファイル名" noteadd "インベーダー/INBE-DA-";文字列の追加 noteadd "タイピング/TAIPINGU";文字列の追加 noteadd "HotSoupProcessor/HOTSOUPPROCESSOR";文字列の追加 ;問題は「 問題の文字列 / ローマ字読み(大文字)」の形で設定する QsFlag=1;問題を出すかどうか BreakFlag=0;ゲームストップ時のメインループの脱出用 TimeLimit=30;制限時間 Now=gettime(6);現在の時間(秒) QsTimer=0;経過時間 Miss=0;間違えた数 CharaMove=30;インベーダーの移動のカウント CharaDir=0;インベーダーの向き CharaSpeed=20;インベーダーの移動速度 CharaX=10;インベーダーのX座標 QuestionNo=0;問題のカウント(乱数を用いて変更するのもアリかと・・・) KeyNo=0;入力した文字の数 dim SCORE,2;入力問題数と入力文字数 onkey gosub *キー入力 repeat if QsFlag=1 : gosub *問題生成 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 *インベーダー処理 LoopCount++ if LoopCount>=CharaMove{ LoopCount=0 if CharaX<=10:CharaDir=0 if CharaX+limit(strlen(Question_Ans)-KeyNo,0,10)*30>=390:CharaDir=1 if CharaDir=0 : CharaX+CharaSpeed if CharaDir=1 : CharaX-CharaSpeed DrawFlag=1 } 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 pos 60,10 :mes Question;問題文日本語を表示 pos 60,40 :mes Question_Ans;問題文ローマ字つづりを表示 color 255 pos 60,40 :mes strmid(Question_Ans,0,KeyNo) color 255,255,255 pos 10,100 :mes "残り時間  "+(TimeLimit-QsTimer)+"秒" pos 10,120 :mes "入力問題数 "+QuestionNo+"問" pos 10,140 :mes "入力文字数 "+KeyNo+"文字" pos 10,160 :mes "入力ミス回数"+Miss+"回" pos 10,180 :mes "入力得点数 "+SCORE(0)+"点" repeat strlen(Question_Ans)-KeyNo pos CharaX+cnt\10*30,200+cnt/10*30 gcopy 1,0,0,30,30;インベーダー描写 loop redraw 1 return
アドバイスをしようと思ったんですけど、上手く説明できそうにないので、
簡単なものを作ってみました。
参考程度にどうぞ。

あ、それと、
スクリプトの中でHSP3.0では未実装の命令を使用しているので、
backdropさんの仰っているとおりに、実行する前にHSPを最新版にしてください。



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