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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0716
Tブロック崩し25解決


T

リンク

2007/7/16(Mon) 18:20:35|NO.9550

このたびは皆さんのおかげでエラーを直すことが出来ました。
しかしまたエラーが出でしまいました。
エラーの内容が
「代入できない変数名を指定しています。」です。
初めてのパターンのエラーだったので色々といじってみましたが、どうしても直せません
「代入できない変数」
がさしている行が「goto *main」なんです。goto命令は指定したラベルにジャンプする命令で
あって、変数では無いと思います。どこがわるいんでしょうか?エラーの行は45行目です。
あつかましいようで申し訳ありませんがご協力おねがいします。

*スクリプト
;---------------------------------------
;
;ゲームプログラムサンプル No.5
; (c) dA
;---------------------------------------

;ゲームの初期設定(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=1){b=1} gosub *paint5

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で追加)

*paint5
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



この記事に返信する


f

リンク

2007/7/16(Mon) 19:42:54|NO.9553

まず、画像ファイル無くても動くようにしてくれないか・・・。
実際に動かせるかどうかは、内容見るのに気分的に違ってくるから。それも、かなり。

とりあえず*mainの
if(bflag=1){b=1} gosub *paint5
は意図どおりの記述なの?
	if(bflag=1){
b=1 } gosub *paint5
こう言う意味よ?
ifもなにも関係なくgosubしてるけど。

あと、
int keycode ;int型宣言
はいらない。むしろエラーになるんじゃね?

どうせ書くなら
	keycode = 0 ;int型宣言
にしときなさい。c言語じゃないから。

rnd rtmp,2 ;0〜2までのランダムの数字をrtmpに格納する
・・・HSP2なの?
別に悪くは無いけど、最新版は3よ?
もしHSP3でこの記述してたら、エラーになるよ。

つか、もう自分はhsp2のは忘れたけど、0から2なら
rnd rtmp,3じゃね?
HSP3表記なら
rtmp = rnd(3)

で、とりあえず以上いった部分を直して、
picloadをコメントアウトして、
変わりに*paint5の中に

color 255,0,0 boxf jx,jy , jx+pic_w,jy+pic_h color 255,255,0 boxf bx,by , bx+bpic_w,by+bpic_h
と書き足して画像の変わりに箱を書いて、

実行させたところ、特にエラーは出ないのだが・・・。

*bmoveにはドコからも飛ばないので、スペース押しても
フラグだけ立ってボールは動かないようだが、コレは意図どおりなの?



f

リンク

2007/7/16(Mon) 19:48:05|NO.9554

一言付け加え忘れた・・・。

前のところで、「解決」チェックつけときなさい。



GENKI

リンク

2007/7/16(Mon) 21:14:04|NO.9556

> がさしている行が「goto *main」なんです。goto命令は指定したラベルにジャンプする命令で

 やっと原因がわかりました。
Tさんが使われているHSPは正式版のver3.0ですね。
ver3.0ではエラーの行番号が若干ずれて表示されることがあります。
エラーが出たらその行だけじゃなく、その行に近い行でミスがないか調べる必要があります。
なお、HSP3.1β10ではこの問題は改善されています。

 fさんの指摘のとおり、Tさんは思い込みで記述している命令などがあるようです。
命令を使う前にF1ヘルプをちゃんと見ることをお勧めします。
また、エラーでなくしても動きません。スクリプト全体の見直しもされたほうがいいでしょう。



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



GENKI

リンク

2007/7/16(Mon) 21:46:20|NO.9558

> また、エラーでなくしても動きません。

失礼しました。単なる検証不足でした。
picloadの行を消してboxfに置き換えたところ、一応は動きました。(単に見えなかっただけでした。^_^;)
fさんの修正をコピペしとけばよかった…。
動きはしましたが…予定している動きとは思えないのでやっぱりスリプト再検証したほうがいいかと。



T

リンク

2007/7/17(Tue) 17:31:51|NO.9577

皆さん本当にありがとうございます。



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