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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1218
M・S2HSPでつくったタイピングゲームにオリジナティを出したい8解決


M・S2

リンク

2009/12/18(Fri) 21:51:45|NO.29331

なんとか、タイピングゲームが完成しました。
しかし、これでは味気がないのでどう工夫したらいいかアドバイス
をお願いします。
*Roots
cls
title "タイピングで遊ぼう"
picload"sozai15.jpg",1
pos 255,150
button"初級",*start
pos 255,200
button"中級",*start2
pos 255,250
button"上級",*start3
pos 150,100
font msgothic,40
color 250.100,0
mes"難易度を選んでください"
stop
*start
; ゲーム開始
score=0
mmload"静.wav", 1,1
mmplay 1
timer=150
*greset
; 問題の準備
clrobj
cursor=0
typemode=0
m=rnd(13)
if m=0 : mondai="RINGO":mondai2="リンゴ"
if m=1 : mondai="AME":mondai2="雨"
if m=2 : mondai="SYARIN":mondai2="車輪"
if m=3 : mondai="ASA":mondai2="朝"
if m=4 : mondai="HAGURUMA":mondai2="歯車"
if m=5 : mondai="HIKARI":mondai2="光"
if m=6 : mondai="DORAEMON":mondai2="ドラエもん"
if m=7 : mondai="YUUGURE":mondai2="夕暮れ"
if m=8 : mondai="HIGURASI":mondai2="蜩"
if m=9 : mondai="DORAIBU":mondai2="ドライブ"
if m=10 : mondai="REMON":mondai2="レモン"
if m=11 : mondai="KARINTOU":mondai2="かりんとう"
if m=12 : mondai="KAMINARI":mondai2="雷"
onkey gosub *typein
*main
; ゲームメイン
redraw 0
color 100,0,50:boxf
font msgothic,18
color 0,0,255
pos 0,0
picload"青い空.jpg",1
pos 80,80:mes "残り時間:"+timer
pos 80,60:mes "スコア:"+score
font msgothic,30,1
color 0,120,160
pos 170,198:mes mondai2
pos 170,238:mes mondai
pos 170,238:color 255,0,100:mes strmid(mondai,0,cursor)
redraw 1
await 50
if typemode>0 : onkey 0 : goto *greset
if timer<=0 : onkey 0 : goto *gameover
timer=timer-1
goto *main
*gameover
onkey 0
dialog "END"
end
*typein
; キーを押した時の処理
a=peek(mondai,cursor)
if a!=iparam : goto *typemiss
len=strlen(mondai)
cursor=cursor+1:if cursor<len : return
goto *win
*typemiss
; ミスタッチをした時
typemode=1
score-=5
return
*win
; タイピング成功
typemode=2
score+=10
return
*start2
; ゲーム開始
score=0
mmload"曲弐.wav", 1,1
mmplay 1
timer=150
*greset2
; 問題の準備
clrobj
cursor=0
typemode=0
m=rnd(12)
if m=0 : mondai="MESSENZUA-":mondai2="メッセンジャー"
if m=1 : mondai="DOKYUMENTO":mondai2="ドキュメント"
if m=2 : mondai="GIMIKKU":mondai2="ギミック"
if m=3 : mondai="MASSE-ZI":mondai2="メッセージ"
if m=4 : mondai="HURU-TU":mondai2="フルーツ"
if m=5 : mondai="SUI-TU":mondai2="スイーツ"
if m=6 : mondai="DAUNRO-DO":mondai2="ダウンロード"
if m=7 : mondai="YUUHI":mondai2="アップロード"
if m=8 : mondai="SYANDERIA":mondai2="シャンデリア"
if m=9 : mondai="SUNO-":mondai2="スノー"
if m=10 : mondai="REMON":mondai2="レモン"
if m=11 : mondai="MASUKATTO":mondai2="マスカット"
if m=12 : mondai="MU-ZIKKU":mondai2="ミュージック"
onkey gosub *typein2
*main2
; ゲームメイン
redraw 0
color 100,0,50:boxf
font msgothic,16
color 0,0,255
pos 0,0
picload"夕日.jpg",1
pos 80,80:mes "残り時間:"+timer
pos 80,60:mes "スコア:"+score
font msgothic,30,1
color 0,120,160
pos 170,198:mes mondai2
pos 170,238:mes mondai
pos 170,238:color 255,0,100:mes strmid(mondai,0,cursor)
redraw 1
await 50
if typemode>0 : onkey 0 : goto *greset2
if timer<=0 : onkey 0 : goto *gameover2
timer=timer-1
goto *main2
*gameover2
onkey 0
dialog "END"
stop *Roots
*typein2
; キーを押した時の処理
a=peek(mondai,cursor)
if a!=iparam : goto *typemiss
len=strlen(mondai)
cursor=cursor+1:if cursor<len : return
goto *win2
*typemiss2
; ミスタッチをした時
typemode=1
score-=5
return
*win2
; タイピング成功
typemode=1
score+=20
return
*start3
; ゲーム開始
score=0
mmload"曲弐", 1,1
mmplay 1
timer=150
*greset3
; 問題の準備
clrobj
cursor=0
typemode=0
m=rnd(12)
if m=0 : mondai="SAIOUGAUMA":mondai2="塞翁が馬"
if m=1 : mondai="HUURINKAZAN":mondai2="風林火山"
if m=2 : mondai="MEIKYOUSISUI":mondai2="明鏡止水"
if m=3 : mondai="RUIHATOMOWOYOBU":mondai2="類は友を呼ぶ"
if m=4 : mondai="NIKUWOKIRASETEHONEWOTATU":mondai2="肉を切らせて骨を断つ"
if m=5 : mondai="ASUNOHYAKUYORIKYOUNOGOZYUU":mondai2="明日の百より今日の五十"
if m=6 : mondai="ITIGOUITIE":mondai2="一期一会"
if m=7 : mondai="AOHAAIYORIIDETEAIYORIAOSI":mondai2="青は藍より出でて藍より青し"
if m=8 : mondai="AKUZISENRIWOHASIRU":mondai2="悪事千里を走る"
if m=9 : mondai="ASAOKIHASANMONNOTOKU":mondai2="朝起きは三文の徳"
if m=10 : mondai="AMADAREISIWOUGATU":mondai2="雨垂れ石を穿つ"
if m=11 : mondai="IUHAYASUKUOKONAUHAKATASI":mondai2="言うは易く行うは難し"
if m=12 : mondai="USOKARADETAMAKOTO":mondai2="嘘から出た真"
onkey gosub *typein3
*main3
; ゲームメイン
redraw 0
color 100,0,50:boxf
font msgothic,18
color 125,120,0
pos 0,0
picload"星空.jpg",1
pos 80,80:mes "残り時間:"+timer
pos 80,60:mes "スコア:"+score
font msgothic,30,1
color 0,255,160
pos 170,198:mes mondai2
pos 170,238:mes mondai
pos 170,238:color 255,0,100:mes strmid(mondai,0,cursor)
redraw 1
await 50
if typemode>0 : onkey 0 : goto *greset3
if timer<=0 : onkey 0 : goto *gameover3
timer=timer-1
goto *main3
*gameover3
onkey 0
dialog "END"
end
*typein3
; キーを押した時の処理
a=peek(mondai,cursor)
if a!=iparam : goto *typemiss
len=strlen(mondai)
cursor=cursor+1:if cursor<len : return
goto *win3
*typemiss3
; ミスタッチをした時
typemode=1
score-=5
return
*win3
; タイピング成功
typemode=1
score+=10
return



この記事に返信する


足利超神

リンク

2009/12/18(Fri) 21:59:19|NO.29333

スクリプトはすぐ実行できるようにしたほうがいいです。



tsuka

リンク

2009/12/18(Fri) 22:41:55|NO.29335

画像ファイルや音声ファイルはこちらでは用意できません。

それと、
1.問題は配列で管理しましょう。
2.*main2など、レベルごとに全く新しいラベルを作らないで、*mainなどだけで済ませられるように工夫しましょう。
3.質問するとき、スクリプトは<pre>で囲みましょう(半角で)
4.if m=1などが並んでいるところがありますが、switchを使ってみましょう。
5.画像はbufferなどに読み込んで、gcopyで表示させましょう。
6.ループ内でfontは使わないようにしましょう。

まずこれらを解決すれば、いいものになると思います。
その後、エフェクトなどをつけてみると、さらに良いものになりますよ。



tsuka

リンク

2009/12/18(Fri) 23:12:18|NO.29337

まず、一番気になる2から。


*Roots cls title "タイピングで遊ぼう" pos 255,150 button"初級",*start oShokyu = stat //初級ボタンのオブジェクトID pos 255,200 button"中級",*start oChukyu = stat //中級ボタンのオブジェクトID pos 255,250 button"上級",*start oJokyu = stat //上級ボタンのオブジェクトID pos 150,100 font msgothic,40 color 250,100,0 mes"難易度を選んでください" stop *start ; ゲーム開始 if (stat = oShokyu) :level = 0 //初級 if (stat = oChukyu) :level = 1 //中級 if (stat = oJokyu) :level = 2 //上級 clrobj timer = 150 *greset ; 問題の準備 cursor=0 typemode=0 m=rnd(13) if (level=0) { if m=0 : mondai="RINGO":mondai2="リンゴ" if m=1 : mondai="AME":mondai2="雨" if m=2 : mondai="SYARIN":mondai2="車輪" if m=3 : mondai="ASA":mondai2="朝" if m=4 : mondai="HAGURUMA":mondai2="歯車" if m=5 : mondai="HIKARI":mondai2="光" if m=6 : mondai="DORAEMON":mondai2="ドラエもん" if m=7 : mondai="YUUGURE":mondai2="夕暮れ" if m=8 : mondai="HIGURASI":mondai2="蜩" if m=9 : mondai="DORAIBU":mondai2="ドライブ" if m=10 : mondai="REMON":mondai2="レモン" if m=11 : mondai="KARINTOU":mondai2="かりんとう" if m=12 : mondai="KAMINARI":mondai2="雷" } if (level=1) { if m=0 : mondai="MESSENZUA-":mondai2="メッセンジャー" if m=1 : mondai="DOKYUMENTO":mondai2="ドキュメント" if m=2 : mondai="GIMIKKU":mondai2="ギミック" if m=3 : mondai="MASSE-ZI":mondai2="メッセージ" if m=4 : mondai="HURU-TU":mondai2="フルーツ" if m=5 : mondai="SUI-TU":mondai2="スイーツ" if m=6 : mondai="DAUNRO-DO":mondai2="ダウンロード" if m=7 : mondai="YUUHI":mondai2="アップロード" if m=8 : mondai="SYANDERIA":mondai2="シャンデリア" if m=9 : mondai="SUNO-":mondai2="スノー" if m=10 : mondai="REMON":mondai2="レモン" if m=11 : mondai="MASUKATTO":mondai2="マスカット" if m=12 : mondai="MU-ZIKKU":mondai2="ミュージック" } if (level=2) { if m=0 : mondai="SAIOUGAUMA":mondai2="塞翁が馬" if m=1 : mondai="HUURINKAZAN":mondai2="風林火山" if m=2 : mondai="MEIKYOUSISUI":mondai2="明鏡止水" if m=3 : mondai="RUIHATOMOWOYOBU":mondai2="類は友を呼ぶ" if m=4 : mondai="NIKUWOKIRASETEHONEWOTATU":mondai2="肉を切らせて骨を断つ" if m=5 : mondai="ASUNOHYAKUYORIKYOUNOGOZYUU":mondai2="明日の百より今日の五十" if m=6 : mondai="ITIGOUITIE":mondai2="一期一会" if m=7 : mondai="AOHAAIYORIIDETEAIYORIAOSI":mondai2="青は藍より出でて藍より青し" if m=8 : mondai="AKUZISENRIWOHASIRU":mondai2="悪事千里を走る" if m=9 : mondai="ASAOKIHASANMONNOTOKU":mondai2="朝起きは三文の徳" if m=10 : mondai="AMADAREISIWOUGATU":mondai2="雨垂れ石を穿つ" if m=11 : mondai="IUHAYASUKUOKONAUHAKATASI":mondai2="言うは易く行うは難し" if m=12 : mondai="USOKARADETAMAKOTO":mondai2="嘘から出た真" } onkey gosub *typein *main ; ゲームメイン redraw 0 color 100,0,50:boxf font msgothic,18 color 0,0,255 pos 0,0 pos 80,80:mes "残り時間:"+timer pos 80,60:mes "スコア:"+score font msgothic,30,1 color 0,120,160 pos 170,198:mes mondai2 pos 170,238:mes mondai pos 170,238:color 255,0,100:mes strmid(mondai,0,cursor) redraw 1 await 50 if typemode>0 : onkey 0 : goto *greset if timer<=0 : onkey 0 : goto *gameover timer=timer-1 goto *main *gameover onkey 0 dialog "END" end *typein ; キーを押した時の処理 a=peek(mondai,cursor) if a!=iparam : goto *typemiss len=strlen(mondai) cursor=cursor+1:if cursor<len : return goto *win *typemiss ; ミスタッチをした時 typemode=1 score-=5 return *win ; タイピング成功 typemode=2 score+=10 return

ボタンのオブジェクトIDを変数に保存しておいて、
*startでどのボタンが押されたのかで、変数levelの中身を変えています。
そして、問題を代入するときに、レベルで問題を切り替えるようにしたのです。
ここで重要なのが、button命令で指定したラベルには、ジャンプしたときstatに押されたボタンのオブジェクトIDが代入されていることです。

>font命令はループ内で使っちゃだめ。
これは間違いだったようです。ごめんなさい。
使っても大丈夫です。



Ve

リンク

2009/12/18(Fri) 23:12:55|NO.29338

思いついたもの何でも良いから書き溜めて、
ルールとして加えられそうな物を取り出したり組み合わせたりする事でしょうかね。

時間でも良いし、ミスした事、うまく入力できる事、カウントした数値などで何をすればどうなるとか。
何をすると何か良い事・悪い事がある。達成すると何か良い事がある。何をすればゲームが続くのか終わるのか。

そういう事の積み重ねがオリジナリティを生むと勝手に思ってますが、どうなんでしょうな。

M・S2さんのオリジナリティもきっとそんなアイディアの積み重ねで出せると思います。



M・S2

リンク

2009/12/18(Fri) 23:18:33|NO.29339

すいませんでした。これでいいですか?
*Roots
cls
title "タイピングテスト"
objsize 200, 40
picload"sozai18.jpg",1
pos 200,120
button"初級",*start
pos 210,160
color 125,0,0
mes"(これは簡単ですので初心者にどうぞ)"
pos 200,200
button"中級",*start2
pos 210,240
color 125,0,0
mes"(初級に物足りなさを感じたらどうぞ)"
pos 200,280
button"上級",*start3
pos 210,320
color 125,0,0
mes"(タイピングが得意な人むけです)
pos 150,50
font msgothic,40
color 0.100,100
mes"難易度を選んでください"
font msgothic,25
pos 100,360
mes"クリックしてから3秒後にスタートします"
stop
*start
; ゲーム開始
await 3000
score=0
timer=150
*greset
; 問題の準備
clrobj
cursor=0
typemode=0
m=rnd(13)
if m=0 : mondai="RINGO":mondai2="リンゴ"
if m=1 : mondai="AME":mondai2="雨"
if m=2 : mondai="SYARIN":mondai2="車輪"
if m=3 : mondai="ASA":mondai2="朝"
if m=4 : mondai="HAGURUMA":mondai2="歯車"
if m=5 : mondai="HIKARI":mondai2="光"
if m=6 : mondai="DORAEMON":mondai2="ドラエもん"
if m=7 : mondai="YUUGURE":mondai2="夕暮れ"
if m=8 : mondai="HIGURASI":mondai2="蜩"
if m=9 : mondai="DORAIBU":mondai2="ドライブ"
if m=10 : mondai="REMON":mondai2="レモン"
if m=11 : mondai="KARINTOU":mondai2="かりんとう"
if m=12 : mondai="KAMINARI":mondai2="雷"
onkey gosub *typein
*main
; ゲームメイン
redraw 0
color 100,0,50:boxf
font msgothic,18
color 0,0,255
pos 0,0
pos 80,80:mes "残り時間:"+timer
pos 80,60:mes "スコア:"+score
font msgothic,30,1
color 0,120,160
pos 170,198:mes mondai2
pos 170,238:mes mondai
pos 170,238:color 255,0,100:mes strmid(mondai,0,cursor)
redraw 1
await 50
if typemode>0 : onkey 0 : goto *greset
if timer<=0 : onkey 0 : goto *gameover
timer=timer-1
goto *main
*gameover
onkey 0
dialog "END"
end
*typein
; キーを押した時の処理
a=peek(mondai,cursor)
if a!=iparam : goto *typemiss
len=strlen(mondai)
cursor=cursor+1:if cursor<len : return
goto *win
*typemiss
; ミスタッチをした時
typemode=1
score-=5
return
*win
; タイピング成功
typemode=2
score+=10
return
*start2
; ゲーム開始
await 3000
score=0
timer=150
*greset2
; 問題の準備
clrobj
cursor=0
typemode=0
m=rnd(12)
if m=0 : mondai="MESSENZUA-":mondai2="メッセンジャー"
if m=1 : mondai="DOKYUMENTO":mondai2="ドキュメント"
if m=2 : mondai="GIMIKKU":mondai2="ギミック"
if m=3 : mondai="MASSE-ZI":mondai2="メッセージ"
if m=4 : mondai="HURU-TU":mondai2="フルーツ"
if m=5 : mondai="SUI-TU":mondai2="スイーツ"
if m=6 : mondai="DAUNRO-DO":mondai2="ダウンロード"
if m=7 : mondai="YUUHI":mondai2="アップロード"
if m=8 : mondai="SYANDERIA":mondai2="シャンデリア"
if m=9 : mondai="SUNO-":mondai2="スノー"
if m=10 : mondai="REMON":mondai2="レモン"
if m=11 : mondai="MASUKATTO":mondai2="マスカット"
if m=12 : mondai="MU-ZIKKU":mondai2="ミュージック"
onkey gosub *typein2
*main2
; ゲームメイン
redraw 0
color 100,0,50:boxf
font msgothic,16
color 0,0,255
pos 0,0
pos 80,80:mes "残り時間:"+timer
pos 80,60:mes "スコア:"+score
font msgothic,30,1
color 0,120,160
pos 170,198:mes mondai2
pos 170,238:mes mondai
pos 170,238:color 255,0,100:mes strmid(mondai,0,cursor)
redraw 1
await 50
if typemode>0 : onkey 0 : goto *greset2
if timer<=0 : onkey 0 : goto *gameover2
timer=timer-1
goto *main2
*gameover2
onkey 0
dialog "END"
stop *Roots
*typein2
; キーを押した時の処理
a=peek(mondai,cursor)
if a!=iparam : goto *typemiss
len=strlen(mondai)
cursor=cursor+1:if cursor<len : return
goto *win2
*typemiss2
; ミスタッチをした時
typemode=1
score-=5
return
*win2
; タイピング成功
typemode=1
score+=20
return
*start3
; ゲーム開始
await 3000
score=0
timer=150
*greset3
; 問題の準備
clrobj
cursor=0
typemode=0
m=rnd(12)
if m=0 : mondai="SAIOUGAUMA":mondai2="塞翁が馬"
if m=1 : mondai="HUURINKAZAN":mondai2="風林火山"
if m=2 : mondai="MEIKYOUSISUI":mondai2="明鏡止水"
if m=3 : mondai="RUIHATOMOWOYOBU":mondai2="類は友を呼ぶ"
if m=4 : mondai="NIKUWOKIRASETEHONEWOTATU":mondai2="肉を切らせて骨を断つ"
if m=5 : mondai="ASUNOHYAKUYORIKYOUNOGOZYUU":mondai2="明日の百より今日の五十"
if m=6 : mondai="ITIGOUITIE":mondai2="一期一会"
if m=7 : mondai="AOHAAIYORIIDETEAIYORIAOSI":mondai2="青は藍より出でて藍より青し"
if m=8 : mondai="AKUZISENRIWOHASIRU":mondai2="悪事千里を走る"
if m=9 : mondai="ASAOKIHASANMONNOTOKU":mondai2="朝起きは三文の徳"
if m=10 : mondai="AMADAREISIWOUGATU":mondai2="雨垂れ石を穿つ"
if m=11 : mondai="IUHAYASUKUOKONAUHAKATASI":mondai2="言うは易く行うは難し"
if m=12 : mondai="USOKARADETAMAKOTO":mondai2="嘘から出た真"
onkey gosub *typein3
*main3
; ゲームメイン
redraw 0
color 100,0,50:boxf
font msgothic,18
color 125,120,0
pos 0,0
pos 80,80:mes "残り時間:"+timer
pos 80,60:mes "スコア:"+score
font msgothic,30,1
color 0,255,160
pos 170,198:mes mondai2
pos 170,238:mes mondai
pos 170,238:color 255,0,100:mes strmid(mondai,0,cursor)
redraw 1
await 50
if typemode>0 : onkey 0 : goto *greset3
if timer<=0 : onkey 0 : goto *gameover3
timer=timer-1
goto *main3
*gameover3
onkey 0
dialog "END"
end
*typein3
; キーを押した時の処理
a=peek(mondai,cursor)
if a!=iparam : goto *typemiss
len=strlen(mondai)
cursor=cursor+1:if cursor<len : return
goto *win3
*typemiss3
; ミスタッチをした時
typemode=1
score-=5
return
*win3
; タイピング成功
typemode=1
score+=10
return



tsuka

リンク

2009/12/18(Fri) 23:21:51|NO.29340

あとは・・・やってもあんまり変わらないですね。すみません。
配列を使うと条件分岐をなくすことができますが、それ以上に幅を取ってしまいますね。
switchもこの場合はifを使ったほうがスマートでいいですね。

・・・orz

ただ、bufferを使うのだけはやってくださいね。



tsuka

リンク

2009/12/18(Fri) 23:24:16|NO.29341

>すいませんでした。これでいいですか?
え・・・いや。画像ファイル(sozai18.jpgとか)、音声ファイルとか。こっちの手元にはないので添付してください。ってことです。
それと<pre></pre>で囲むように、と。。。



Hatter

リンク

2009/12/18(Fri) 23:31:40|NO.29342

> 画像ファイル(sozai18.jpgとか)、音声ファイルとか。こっちの手元にはないので添付してください。ってことです。
もしくは、代替のデータをboxf,line.psetとかで記述するとか。

> これでいいですか?
なにがこれで良くなったのか明記しましょうね。

> あと、配列についてですがこれは色々と方法がありますが、
単純にいくと
mondai(問題の難しさ,問題の番号) ... これは問題の本文(日本文)
mondai2(問題の難しさ,問題の番号) ... これは問題の回答文(ローマ字文)
てな感じで全部まとまとめてしまうとか。



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