|
 |
|
2009/4/17(Fri) 22:08:47|NO.24654
題名のとうりです...
一瞬は出るのですが(pos+mes命令で)ほんと一瞬なのでダイアログにしました
あと無駄が多いと思います。
教えてくれたらうれしぃです<(_ _)>
+キャラが出ないので出す方法も教えてください..
zihp=20
MP=10
AT=3
DF=2
MAT=2
S=2
EXP=0
tekiHP=100
tekiAT=2
tekiDF=2
tekiMAT=1
tekiS=2
keikennti=5
repeat
*miss
w=0
DF=0
font "MS ゴシック",30
stick KY
if KY=2:menu-1
if KY=8:menu+1
if menu=-1:menu+1
if menu=5:menu-1
redraw 0
color 255,255,255:boxf
color 0,0,0
pos 10,410:font "MS ゴシック",18 :mes "主人公"
pos 100,410:font "MS ゴシック",18 :mes "HP "+zihp+""
pos 100,430:font "MS ゴシック",18:mes "MP "+MP+""
color 0,0,0
if menu=0:pos 540,402:font "MS ゴシック",18 :mes "→":if KY=16:randomize:damege=AT+rnd(4)-tekiDF:dialog "攻撃した!"+damege+"のダメージ!":tekihp-damege:tarn=1:if tekihp<=0:kane+20+rnd(30):dialog "敵を倒した":EXP=EXP+keikennti:dialog ""+keikennti+"EXP獲得!":tarn=0:w+1:if w=1
if menu=1:pos 540,418:font "MS ゴシック",18 :mes "→":if KY=16
if menu=2:pos 540,432:font "MS ゴシック",18 :mes "→":if KY=16:DF+20:tarn=1
if menu=3:pos 540,448:font "MS ゴシック",18 :mes "→":if KY=16:mes"a"
if menu=4:pos 540,463:font "MS ゴシック",18 :mes "→":if KY=16:randomize:tousou=rnd(10):if tousou=0:dialog "逃げられなかった":tarn=1:else:dialog "逃げた":tarn=0:w=1
color 0,0,0
pos 560,404:font "MS ゴシック",12 :mes "攻撃":font "MS ゴシック",12 :pos 560,420:mes "技・魔法":font "MS ゴシック",12 :pos 560,435:mes "防御":font "MS ゴシック",12 :pos 560,450:mes "アイテム":font "MS ゴシック",12 :pos 560,464:mes "逃げる"
if tarn=1{dialog "敵の攻撃!":randomize:Tdamege=tekiAT+rnd(3)-(DF/2)
if Tdamege>0: zihp-Tdamege :dialog ""+Tdamege+"ダメージ受けた"
if damege<0:tekihp-1:dialog"まったくダメージが与えられない!"
if Tdamege<0:hp-1:dialog"ぜんぜんダメージを受けない!^o^/"
if zihp<=0:dialog "..負けました..":end
tarn=0
}
redraw 1
await 10
loop
それと「逃げる」を押しても逃げないのは気にしないでください..
それとこの掲示板ちょっと調子悪くない?

| |
|
2009/4/17(Fri) 22:20:20|NO.24655
HSPをする前に日本語の勉強をすることをお勧めします。
|
|
2009/4/17(Fri) 23:05:21|NO.24657
まずはキャラを用意しましょう。
キャラがきちんと描画できたらダメージに移りましょう
|
|
2009/4/17(Fri) 23:06:21|NO.24658
あと、ちゃんと操作方法も書いたほうがいいと思います
|
|
2009/4/17(Fri) 23:19:21|NO.24659
キャラクターをgcopyなりなんなりで描写した後
ダメージをdialog命令を用いて表示すればあら不思議。
キャラクターの「上」にダメージを出す事ができます。
|
|
2009/4/18(Sat) 04:43:43|NO.24661
スクリプトがとてもみにくいので追いかける気がわきません。orz
・if文は無理に1行に収めずに、長くなるときは複数行に分けた方が見やすくなります。
・適度にインデントを使いましょう。「{〜}」の間や「repeat〜loop」間など。
・問題に関係ない部分は削除しましょう。
font命令は不要。ループ先頭以外の「color 0,0,0」も不要。選択肢を減らせばもっと短く出来る。パラメータ計算も不要。
> 題名のとうりです...
なら題名を本文にコピペしておいて…と個人的には思ってしまいます。(まあ、大した意味はないのですが…。)
今dialog命令で表示しているようなものをmes命令などでやりたいということでしょうか?(DQみたい?)
ちなみにこんな感じの、メッセージウィンドウを描画できればいいのですか? http://gutarin.img.jugem.jp/20060725_199957.jpg
さて、今のやり方では、コマンド実行直後のみ描画しようとしているので、コマンド実行時の1ループ(一瞬)でしか表示されません。
コマンド実行有無に関係なく動作するようなメッセージ内容を表示する部分を別に用意しておく必要があります。メッセージ内容を保持する変数も必要ですね。
mesbox命令とobjprmで作るのも一つの手ではありますが、ゲーム向きではないですね。
> それとこの掲示板ちょっと調子悪くない?
どのあたりが、どのように、ですか?
私は調子が悪いと感じていないので理解することが出来ませんでした。
> +キャラが出ないので出す方法も教えてください..
mes "+キャラ"
冗談です。
HSPスクリプトエディタのメニューからツール→サンプルスクリプト参照。
サンプルビューワが起動します。カテゴリからgameを選択するとゲーム関連のサンプルが表示されるので、そちらも参考にしてください。
|
|
2009/4/18(Sat) 11:27:47|NO.24665
とりあえず、FFっぽいダメージ表示のしかたをひとつ。
基本的な考え方は、シューティングゲームの「弾」と同じです。
title "←→で移動 スペースキーでダメージ表示"
x=320 : y=240
repeat
stick key, 15
if key & 1 : x -= 8
if key & 4 : x += 8
if key & 16 {
d = rnd(100); ダメージ値
dd = 16 ; 表示フレーム数
dx = x ; 表示X座標
dy = y-16 ; 表示Y座標
}
redraw 0
color 255, 255 ,200
boxf
color 0, 0, 0
pos x, y : mes "者"
if dd > 0 {
pos dx, dy : mes d
dd --
}
redraw
await 32
loop
あと、思ったことを少々。
randomize は、基本的にスクリプトの先頭で1回だけ呼び出せばOKです。
rnd を使うたびに呼びだす必要はありません。
同じく、font も mes の直前で呼び出す必要はありません。
サンプルに font color mes を使ったものがあります。見てみましたか?
|
|
2009/4/18(Sat) 11:34:37|NO.24666
ありがとうございますー
もっと勉強が必要ですね
がんばります...
|
|
2009/4/19(Sun) 06:43:52|NO.24694
参考程度にどうぞ
//ラベル名 _resは1回実行 _lpはループして実行
/* どんどん↓に読んでいってください
letsbattlestart_res
戦う前の準備。ここで、wを0にしておく
【戦闘中の処理 一覧】
※ myturn_res
ここで、もしwが0以外になっていたらbattleendjudge_resに飛ばす
(戦闘終了の合図が出たので、勝ったか負けたか逃げたかを判断する)
wが0のままなら、そのまま↓に
myturn_lp(menu決めてKY=16にするまでここでrepeatを続ける)
KY=16になった時に、menuの値に応じて
myturnattack_res myturndefense_res myturnescapejudge_res
↓ ↓ ↓
↓←←←←←←←←←←←←←←←←←←←
↓
ここで、敵がやられたらw=1 逃げ切れたらw=-1にしておく
enemyturn_res
ここで、もしwが0以外になっていたらbattleendjudge_resに飛ばす
(戦闘終了の合図が出たので、勝ったか負けたか逃げたかを判断する)
wが0のままなら、そのまま↓に
次、敵の行動に応じて
enemyturn_attack_res
ここで、自分ががやられたらw=-2にする 今の所敵は逃げませんね
myturn_res
(上辺り(7行目?)にあった所へ戻り、また同じことを繰り返します。)
【戦闘終了後の処理 一覧】
battleendjudge_res
wの値に応じて
battleend_win_res battleend_escape_res battleend_lose_res
↓ ↓ ↓
↓←←←←←←←←←←←←←←←←←←←←←←←←←
↓
おしまい
*/
*letsbattlestart_res
//準備
randomize
zihp=20
MP=10
AT=3
DF=2
MAT=2
S=2
EXP=0
tekiHP=100
tekiAT=2
tekiDF=2
tekiMAT=1
tekiS=2
keikennti=5
max_zihp=zihp:max_mp=mp//最大値設定
w=0//戦闘終了フラグを切る
zi_damegetime=0:zi_damegepoint=0//自分のダメージtime/point
*myturn_res
//自分のターンになる前に wが0でないならbattle_end
if w!=0:goto*battleendjudge_res
//大丈夫なら以下、自分の番(stickによる操作含む)開始
*myturn_lp
DF=0
stick KY
if KY=2:menu-1
if KY=8:menu+1
menu=LIMIT(menu,0,5)//menu変数の値を0〜5までに抑える
if 0<zi_damegetime:zi_damegetime-//もしダメージtimeが0より多いなら1ずつ減らす
//16押した時〜
if KY=16 & menu=0:goto*myturn_attack_res
if KY=16 & menu=2:goto*myturn_defense_res
if KY=16 & menu=4:goto*myturn_escapejudge_res
redraw 0
color 255,255,255:boxf
//主人公 名前・HP・MP
color 0,0,0:font "MS ゴシック",18,0
pos 10,410:mes "主人公"
pos 100,410:mes "HP "+zihp+""
pos 100,430:mes "MP "+MP+""
//メニュー矢印
color 0,0,0:font "MS ゴシック",18
pos 540,402+menu*15:mes "→"//menuの値に合わせてposのY変化
//メニュー名
color 0,0,0:font "MS ゴシック",12
pos 560,404:mes "攻撃"
pos 560,420:mes "技・魔法"
pos 560,435:mes "防御"
pos 560,450:mes "アイテム"
pos 560,464:mes "逃げる"
color 0,0,0:font "MS ゴシック",36
//自分のダメtimeに応じてposのY変化 time1以上ならpoint表示
pos 150,390-zi_damegetime/3:if 0<zi_damegetime:mes zi_damegepoint
redraw 1:await 10:goto*myturn_lp
*myturn_attack_res
damege=AT+rnd(4)-tekiDF
if damege>0:dialog "攻撃した!"+damege+"のダメージ!":tekihp-damege
if damege<0:tekihp-1:dialog"まったくダメージが与えられない!"
if tekihp<=0:w=1//1は勝利\
goto*enemyturn_res
*myturn_defense_res
DF+20
goto*enemyturn_res
*myturn_escapejudge_res
tousou=rnd(10)
if tousou=0:dialog "逃げられなかった"
dialog "逃げた":w=-1//-1は逃走
goto*enemyturn_res
*enemyturn_res
//相手のターンにさせる前に wが0でないならbattle_end
if w!=0:goto*battleendjudge_res
//大丈夫なら以下、相手の行動
goto*enemyturn_attack_res
*enemyturn_attack_res
//相手の番開始
dialog "敵の攻撃!":Tdamege=tekiAT+rnd(3)-(DF/2)
if Tdamege>0: zihp-Tdamege :dialog ""+Tdamege+"ダメージ受けた"
if Tdamege<0:hp-1:dialog"ぜんぜんダメージを受けない!^o^/":Tdamege=0//hp-1とあるがzihpではないのでダメージ0とする
zi_damegetime=30:zi_damegepoint=Tdamege//ダメージtimeを30に設定 pointは食らったダメージ分
if zihp<=0:w=-2//-2は敗北
goto*myturn_res
*battleendjudge_res
if w=1:goto*battleend_win_res
if w=-1:goto*battleend_escape_res
if w=-2:goto*battleend_lose_res
stop
*battleend_win_res
kane+20+rnd(30):dialog "敵を倒した"
EXP=EXP+keikennti:dialog ""+keikennti+"EXP獲得!"
redraw 0
color 255,255,255:boxf
color 0,0,0:font "MS ゴシック",18
pos 15,15:mes"戦闘終了・勝利"
redraw 1
stop
*battleend_escape_res
redraw 0
color 255,255,255:boxf
color 0,0,0:font "MS ゴシック",18
pos 15,15:mes"戦闘終了・逃走"
redraw 1
stop
*battleend_lose_res
dialog "負けました・・・"
redraw 0
color 255,255,255:boxf
color 0,0,0:font "MS ゴシック",18
pos 15,15:mes"戦闘終了・敗北"
redraw 1
stop

| |
|
2009/4/19(Sun) 06:52:57|NO.24695
無限ループの硬直が怖いなら、全ての
goto命令 loop命令 の直前に「await 1」を徹底してください
※ただしこの処理をしているプログラムは、動作速度が非常に遅くなります
P.S.
*myturn_escapejudge_resの部分、間違えました。
もしかしたら他に、ミスしてる箇所があるかもしれないので先に謝っておきます
すみません
|
|
2009/6/16(Tue) 11:29:12|NO.25791
ドラクエみたいなもの作りたいのですがどうしたらいいですか?
|
|
2009/6/16(Tue) 12:32:40|NO.25792
>NO.25791 どむどむ さん
まずは、別にスレッド作ったほうがいいです。
その前に、やりたいことに対して自分はどこまで出来ているか、
何がわかれば出来るようになりそうか、
ちゃんと整理して 「何を聞きたいのか」 が回答者にもつたわるようにしましょう。
でなければ回答がもらえず 結局は自分が損しますよ。
|
|