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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0411
プログラミング少年ゲームの壁判定12解決


プログラミング少年

リンク

2009/4/11(Sat) 18:00:32|NO.24559

ゲームで2,3ビットずつ動かすと、うまく壁判定ができません。どうすればいいですか。
スクリプトを具体的に、できるだけ無駄を省いて教えてください。



この記事に返信する


SYAM

リンク

2009/4/11(Sat) 18:20:27|NO.24560

質問が具体的でないのに、回答を具体的にするのは無理です。


color 0,0,0:boxf font msgothic,ginfo_winy color 255,255,255:mes "壁" repeat pget mousex,mousey if(ginfo_r){ title"壁の中にいる" }else { title"壁の外にいる" } wait 1 loop

与えられた条件をもとに「1ドット単位での壁判定」を具体的に、多分あまり無駄もなく書きましたが、参考になりますか?これで。



プログラミング少年

リンク

2009/4/11(Sat) 18:38:08|NO.24563

質問が具体的じゃないのに具体的にとお願いしてしまって誠に申し訳ありませんでした。
質問を少し書き直すので、また、返答お願いします。
ゲームでキャラクターをpos命令で座標を指定して、gcopy命令で2,3ビットずつ動かすと、
うまく壁判定ができません。どうすればいいですか。
スクリプトを具体的に、できるだけ無駄を省いて教えてください。
今、使っているスクリプトを具体的に書くので宜しくお願いします。
ひとつの絵は五十ビットで表示しています
pre
ax=200:ay=200
buffer 0
picload "ステージ.bmp"
buffer 1
picload "主人公.bmp"
repeat 2
cty=cnt*50
repeat 3
sr=sr+1
if sr=2 : sr=0
color 200,0,200
pset 23+50*cnt,11+sr+cty
color 0,200,0
pset 27+50*cnt,11+sr+cty
loop
loop
screen 3,500,450
cls 4
gmode 2
repeat
a="9888888889"
a=a+"9777777779"
a=a+"9111561119"
a=a+"9111111119"
a=a+"9111111119"
a=a+"9111111119"
a=a+"9111111119"
a=a+"9111111119"
a=a+"8888118888"
ctt=0
redraw 0
;絵を表示する
repeat 10
cty=cnt
repeat 10
pos cnt*50,cty*50
gcopy 0,50*strmid(a,ctt,1),0,50,50
ctt=ctt+1
loop
loop
;変数を初期化
sx=0
sy=0
axx=ax
ayy=ay
wax=0
Q=0
;キーを取得する
repeat 10
if wax&1 : sx=-4 : Q=1
if wax&2 : sy=-4 : Q=2
if wax&4 : sx=4 : Q=3
if wax&8 : sy=4 : Q=4
await 10
stick wax,15,1
loop
;動かしたときのキャラの座標
ax=ax+sx
ay=ay+sy
pos cnt*50,cty*50
;壁判定
if 1*strmid(a,ax/50+ay/50*10+1,1)>6 : ax=axx : ay=ayy
if 1*strmid(a,ax/50+ay/50*10-1,1)=0 : ax=axx : ay=ayy
if 1*strmid(a,ax/50+ay/50*10,1)=6 : ;未記入なので変えなくていいです
if (ax>500)or(ay>500) : ax=axx : ay=ayy
pos ax,ay-50
if Q=2 : ob=1
if Q=4 : ob=0
xcynmi=xcynmi+1
if xcynmi=2 : xcynmi=0
if wax=0 : xcynmi=1
gcopy 1,50*xcynmi+ob*150,0,50,50
redraw 1
loop
/pre



?

リンク

2009/4/11(Sat) 19:37:13|NO.24564

ビット?



リンク

2009/4/11(Sat) 20:02:11|NO.24568

スクリプトは小文字の<pre>〜</pre>で囲んでください。



asd

リンク

2009/4/11(Sat) 20:05:52|NO.24569

ドットの間違いじゃないですかね?



ORZ

リンク

2009/4/11(Sat) 20:37:16|NO.24570

我々がステージ.bmpと、主人公.bmpを、あなたのためだけにわざわざ用意して、動作検証をして
報告をしなければならないという事か。


質問内容を具体的に、できるだけ無駄を省いて教えてください。
質問内容を具体的に、できるだけ無駄を省いて教えてください。
質問内容を具体的に、できるだけ無駄を省いて教えてください。



tumo0b

リンク

2009/4/11(Sat) 22:33:04|NO.24572

ひょっとして当たり判定とは
if x=100(壁の座標)

のような感じなんじゃないですか?
if x<100
不等号を使えばいいんじゃないでしょうか?



ヒカリ

リンク

2009/4/11(Sat) 22:43:23|NO.24574

キャラクターの右下部分でしか壁との当たり判定ができていない…のではないでしょうか。
キャラクターの四隅すべてで判定をするようにすれば、解決すると思いますよ。

あと、字下げはできるだけした方がいいと思います。
すごく…見難いです……。



tumo0b

リンク

2009/4/11(Sat) 23:30:47|NO.24579

>我々がステージ.bmpと、主人公.bmpを、あなたのためだけにわざわざ用意して、動作検証をして
>報告をしなければならないという事か。

別にそんな事いうなら無理に解答しなくてもいいと思いますよw
プログラミングを志すものとしては、こんな些細な問題即興で何とかしますけどね



ロケットナマコ

リンク

2009/4/12(Sun) 00:03:27|NO.24582

多分ヒカリさんの判断が正解。
これ以上ゴチャゴチャ言っても少年のトラウマが増えるだけだからそっとしておきましょう。
本当に少年少女ならですが。



夢現因果

リンク

2009/4/12(Sun) 06:42:53|NO.24585


if (((AX+2)>BX) & (AX<BX+2) & ((AY+4)>BY) & (AY<BY+4)) :

補足 物体A、B共に横2ドット縦4ドットです



プログラミング少年

リンク

2009/4/12(Sun) 11:16:13|NO.24591

解決しました!



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