トピック
natto- natto-3030

CHKCHRについて…

文字の当たり判定を設定したいのですが、CHKCHRの内容がよくわかりません!書式、命令の意味など出来る範囲でいいので教えてくれると有り難いです!
1そうだね
プレイ済み
返信[1]
親投稿
CHR$()の中にCHKCHRで出てきた数字を入れると意味が分かりますよ。
1そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
あまさとさんの言うように、CHKCHR の結果をCHR$()に入れて、それを表示してみればすぐ分かるのですが…… あえて補足するなら、 「CHKCHR は、指定した座標にある文字に応じて、どこかの偉い人が決めた"文字ごとに割り当てられた数値"を返す関数」 です。 簡易ヘルプにある「戻り:UTF-16文字コード」というのは、つまり 「どこかの偉い人が決めた"UTF-16文字コード"というルールに従って結果を返します」 という事です。 例えば、CHKCHR で指定した座標に"A"があれば65、"あ"があれば12354 が返ってきます。 ちなみに、簡易ヘルプには書いてなかったですが、何も文字がなかった場合は 0 になります。
3そうだね
プレイ済み
返信[3]
親投稿
Godot orz_127
すでにコメントがあるので重複しますが「戻値=CHKCHR(X座標,Y座標)」は、画面の文字単位のX、Y座標を指定して、その位置にある文字のコードを得る関数です。 その文字コードが何かを確認するには「?CHR$(文字コード)」とします。 逆にある文字のコードが何かを確認する場合は、「?ASC(文字)」とします。 こんな感じです。 LOCATE 0,0:?"A" R=CHKCHR(0,0):?R ?CHR$(R) ?ASC("A") CLSを実行すると画面は、0の文字コードの文字で埋め尽くされます。 一応これが何もない状態です。 恐らく、前の質問から話が繋がっていると思いますが、移動先のX、Y座標をCHKCHR()で確認して何があるかで衝突するかを判断すると思いますが、何もないを0で判断するとはまる場合があります。 (つづく)
1そうだね
プレイ済み
返信[4]
親投稿
natto- natto-3030
う、うーん…(^_^;) CHKCHR(または他の命令)は自分が動かしている文字と重なった文字コードを調べて処理を実行すると言うことは出来るのでしょうか?
0そうだね
プレイ済み
返信[5]
親投稿
Godot orz_127
文字を移動して前の位置を " " (半角空白)で消していた場合、一見何もないようですが文字コード20の文字が置かれている状態となります。 前の位置を文字コード0 「CHR$(0)」 で消さないと、ここは文字コード0じゃないので衝突!となりかねません。 「何もないところなのにぶつかって前に進めないのですが 、何故でしょう?」と質問する羽目にw お気をつけください。
2そうだね
プレイ済み
返信[6]
親投稿
natto- natto-3030
Godotさんのやってみた。 うーん…さっぱり(笑)
0そうだね
プレイ済み
返信[7]
親投稿
Godot orz_127
移動前に、そこに何があるかを調べて、移動した結果ぶつかったとするか、もしくはぶつかるので移動出来ない、と言うような処理になります。 自分?が移動してしまうとそこは自分の文字に置き換えられてしまうので。
1そうだね
プレイ済み
返信[8]
親投稿
natto- natto-3030
Godotさん»では、移動処理をこのように書いてあるのですが、↓ ~上移動の例の一部~ @UP LOCATEX0,Y0:?” ” LOCATEX1,Y1:?”(人)” みたいな感じで書いてるのですが、空白を描画する行のしたにCHR$(0)を入れればいいと言うことなんでしょうか?
0そうだね
プレイ済み
返信[9]
親投稿
Godot orz_127
最初の行は0,0の位置に「A」を置きます。 次の行は、CHKCHR()で0,0の位置の文字コードを取得して変数Rで受けとり、Rの値を表示しています。 0,0には「A」の文字を置いたので「A」の文字コードがRに代入されています。 3行目は、確認のため文字コードを文字に変換する関数でRの値を文字として表示しています。 4行目は、文字を文字コードに変換する関数で"A"を文字コードにして表示しています。
0そうだね
プレイ済み
返信[10]
親投稿
natto- natto-3030
本当にスミマセン!EDITモードの様な書式でお願い出来ますか?
0そうだね
プレイ済み
返信[11]
親投稿
ケイン KEIN.HORGAN
> CHKCHR(または他の命令)は自分が動かしている文字と重なった文字コードを調べて処理を実行すると言うことは出来るのでしょうか? 専用の処理はないので、自分で作る必要があります。 流れとしては、次のような感じになると思います。 1.移動先の座標に文字があるかどうかを調べる。 MOJI = CHKCHR( X, Y) ' X,Y は、移動先の(調べたい)座標 2.移動先の座標にある文字によって、「移動するよ」なのか「ぶつかるよ」なのかの処理を分ける IF MOJI==0 THEN  '「移動するよ」処理 ELSE  '「ぶつかるよ」処理 ENDIF
1そうだね
プレイ済み
返信[12]
親投稿
ケイン KEIN.HORGAN
後…… Godotさんは半角空白を20 だと表現していますが、これは、16進表示をした場合の話になります。 多分まだnatto- さんは習っていないと思いますので(中学か高校かの範囲だったかなぁ)詳細は省きますが、普通の言い方をすると、半角空白" "は32 になります。 だから、上のチェックで「半角空白は移動できる場所だよ!」というのであれば、CHKCHR の結果が32 でもOK、だとするといいです。
1そうだね
プレイ済み
返信[13]
親投稿
natto- natto-3030
ケインさんの教えてくれた方法は上下左右全てに入れればいいのでしょうか?
0そうだね
プレイ済み
返信[14]
親投稿
Godot orz_127
>ケインさん 訂正ありがとうございます。 つい、うっかり…。 10進だと32でしたね^^;
0そうだね
プレイ済み
返信[15]
親投稿
Godot orz_127
一応、CHR$(0)にしておいた方が良いかもですが、 消すときに" "とするか、CHR$(0)とするかは、全体のつくりでも変わってきます。 迷路のようなマップを表示するとき普通に壁と歩ける所を表示する場合で文字列でまとめて書く場合、歩ける所は" "となると思うし、逆に衝突するほうだけ判定しているばあいは、" "で消してもCHR$(0)で消しても問題ないです。 判定で両方OKとすれば、それはそれで問題ないので。 CHR$(32)の" "もCHR$(0)も、ついでに全角空白のCHR$(&H3000)も画面上は何も表示されませんが、文字コードは違うので注意する必要があるということです。 とりあえずサンプル的なものを 移動先が「#」ならすすまず、「G」ならゴールなので終了。
1そうだね
プレイ済み
返信[16]
親投稿
Godot orz_127
ちなみに前のコメントのサンプルは、 移動しなくてもその座標を無駄にチェックします^^; 本来は、移動するなら移動先をチェックとする方が良いです。 @UP、@DOWN、 @LEFT、@RIGHT それぞれで移動する前にその座標をCHKCHR()して、移動できるかを確認すれば良いかと。
1そうだね
プレイ済み
返信[17]
親投稿
ケイン KEIN.HORGAN
遅くなりました。 > 上下左右全てに入れればいいのでしょうか? それを判断するのはnatto- さんですね。 例えば、右に進む時は障害物とか関係ない、とかなら右の時はチェックいらないかもしれないですし…… とりあえずやってみて、うまくいかなかったらまた言ってください
1そうだね
プレイ済み