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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0712
Tブロック崩し4解決


T

リンク

2007/7/12(Thu) 18:25:53|NO.9449

今ブロック崩しを作っています。でもどうしても42行目の
「if(bflag=0)gosub *bmove ;(No.5で追加)」
で パラメーター式の記述が無効です と出ます。
自分はどうしたらいいかさっぱりわかりません。どうしたらいいでしょうか。
教えてください。
スクリプトがコレです。

;ゲームの初期設定(No.5で追加)

buffer 1 ;バッファのID1を制御対象にする
picload "smp1.bmp" ;バッファのID1にsmp1.bmpの絵をロードする

;制御を0(表示ウインドウ)に切り替える
screen 0,320,400,4 ;ウインドウのIDを0、サイズを320×400に設定し、固定ウインドウにする
title "sample5" ;ウインドウのタイトルを設定

;変数(No.5で追加)

jx=0 ;プレイヤーの座標変数
jy=350 ;プレイヤーの座標変数

#const pic_w 52 ;プレイヤーの画像サイズ(横)
#const pic_h 14 ;プレイヤーの画像サイズ(縦)

bx=0 ;ボールの座標変数
by=0 ;ボールの座標変数
bvx=0 ;ボールのスピード変数
bvy=0 ;ボールのスピード変数

bflag=1 ;ボールが手放されているかどうかのフラグ

#const bpic_w 5 ;ボールの画像サイズ(横)
#const bpic_h 5 ;ボールの画像サイズ(縦)



;ゲームのメインループ
*main
;ゲームの処理をここ以下に書く

gosub *key
gosub *paint5
if(bflag=0)gosub *bmove ;(No.5で追加)

await 1 ;windowsに処理を返す
goto *main


;キー操作関数(No.5で追加)

*key
int keycode ;int型宣言
stick keycode,1+4 ;キーコードをkeycodeという変数に読み込む(キーコード1と4をトリガに設定)

if(keycode&1){ ;左キーが押された場合
jx-=3 ;プレイヤーを左に移動(3はスピード)
}
if(keycode&4){ ;右キーが押された場合
jx+=3 ;プレイヤーを右に移動(3はスピード)
}

;移動の制限をつける
if(jx<0){ ;横の座標が左端以上はいけない
jx=0
}
if(jx>(320 - pic_w)){ ;横の座標が右端以上はいけない <注意>条件式の()に注意
jx = 320 - pic_w
}

;ボールを手放すかどうか
if(bflag=1){ ;ボールを手放してないなら
bx=jx+((pic_w-bpic_w)/2) ;ボールがプレイヤーにくっついている座標
by=jy-bpic_h ;ボールがプレイヤーにくっついている座標
if(keycode&16){ ;スペースを押したら
bflag=0 ;フラグを手放した状態にする
rnd rtmp,2 ;0〜2までのランダムの数字をrtmpに格納する
bvx=rtmp+1 ;ボールの横のスピードを設定する
if(bx<160){ ;ボールがプレイヤーの座標により進む方向が変わる
bvx=-1*bvx
}
bvy=-1*(rtmp+1) ;ボールの縦のスピードを設定する

}
}

return

;描画関数(No.5で追加)

*paint
redraw 0 ;画面の描画を実際のウインドウに反映させない(ちらつき防止)
color 255,255,255 ;オブジェクトの色を白色に設定
boxf 0,0,320,400 ;画面中を白い四角で塗りつぶす
pos jx,jy ;プレイヤーの座標を指定する
gcopy 1,0,0,pic_w,pic_h ;ID1に保存してある画像を0,0から52×14だけ抜き出し表示
pos bx,by ;ボールの座標を指定する
gcopy 1,0,14,bpic_w,bpic_h ;ボールの表示
redraw 1 ;画面の描画を反映させる(ちらつき防止)
return

;ボールの動作関数(No.5で新規追加)

*bmove
bx+=bvx ;ボールのX座標(横)に加速をさせる
by+=bvy ;ボールのY座標(縦)に加速をさせる
if(bx<0){ ;左端でバウンドさせる
bx=0
bvx=-1*bvx
}
if(bx>(320-bpic_w)){ ;右端でバウンドさせる
bx=320-bpic_w
bvx=-1*bvx
}
if(by<0){ ;上端でバウンドさせる
by=0
bvy=-1*bvy
}
if(by>(400-bpic_h)){ ;下端でバウンドさせる(デバッグ用なので後で不必要になる)
by=400-bpic_h
bvy=-1*bvy
}

return



この記事に返信する


.

リンク

2007/7/12(Thu) 18:36:13|NO.9450

括弧が抜けています

if(a=1)b=1

if(a=1){b=1}
こんな感じにすると動くはずです



不如帰

リンク

2007/7/12(Thu) 18:39:14|NO.9451

if(a=1)b=1

if(a=1) :b=1

でも動くはずです。



GENKI

リンク

2007/7/12(Thu) 20:37:05|NO.9452

> 自分はどうしたらいいかさっぱりわかりません。どうしたらいいでしょうか。
> 教えてください。

 HSPが教えてくれているはずです。(と言ってもヒントだけですが…。)

 しかし、このスクリプトはifだけじゃなく、他にも何箇所か問題あるようですね。
エラーが出たらHSPは問題のある行番号とエラー内容を表示してくれます。
問題のある行を探して、マニュアルとよく見比べてみてください。
また、エラー内容も書いているので参考にして原因を考えてみるようにしてください。
これだけで多くの問題が解決すると思います。


 それと、スクリプト全体の前後に
<pre>
〜スクリプト〜
</pre>
というふうに記述すると、スクリプトが見やすくなりますよ。(<pre></pre>は半角英数)
投稿欄の上に書いてある3番目のことです。



T

リンク

2007/7/17(Tue) 17:22:15|NO.9576

みなさんありがとう



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