| 
 | 
 
								
									|  |  
 
 
 
 |  | 
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 どむどむ さん
 
 まずは、別にスレッド作ったほうがいいです。
 
 その前に、やりたいことに対して自分はどこまで出来ているか、
 何がわかれば出来るようになりそうか、
 ちゃんと整理して 「何を聞きたいのか」 が回答者にもつたわるようにしましょう。
 
 でなければ回答がもらえず 結局は自分が損しますよ。
 
 | 
 
 
 |