No.3ベストアンサー
- 回答日時:
追記。
もし「キャラの座標」と「マップ配列の要素の番号」が1対1に対応していない場合は
switch (map[new_posx][new_posy]にある場所のタイプ) {
の部分を
switch (map[new_posxからmapの要素に対応させる変換式][new_posyからmapの要素に対応させる変換式]にある場所のタイプ) {
に変えて下さい。
例えば
new_xposが ~102⇒mapを飛び出すのでNG
new_xposが103~113⇒map[0][???]
new_xposが114~124⇒map[1][???]
new_xposが125~135⇒map[2][???]
new_xposが136~146⇒map[3][???]
new_xposが147~157⇒map[4][???]
new_xposが158~168⇒map[5][???]
(以下略)
new_xposが268~278⇒map[15][???]
new_xposが279~ ⇒mapを飛び出すのでNG
のようにに対応しているなら「103を引いて、11で割る」と0~15になります。
なので、上記の例であれば
switch (map[((int)new_posx-103)/11][new_posyからmapの要素に対応させる変換式]にある場所のタイプ) {
と書けばOKです(もちろん、NG範囲を除外した上で)
y方向も、同じように変換式にして下さい。
引いたり(場合によっては足したり)、割ったりする数値は「質問者さんが書いているプログラムに合う数値」に合わせて、適切な値に変えて下さい。
この回答へのお礼
お礼日時:2008/12/12 22:34
丁寧なご回答ありがとうございます。
おかげで当たり判定ができました。
ですが、時々当たり判定が1マス分ずれることがあります。
その点については自分なりにまた努力してみようと思います
No.2
- 回答日時:
普通は
以下、無限ループ
{
new_posx = posx;
new_posy = posy;
キー入力
押したキーで、new_posxかnew_posyを増減する
new_posxかnew_posyが、0より小さくなったり15より大きくなったりして、mapから出そうになった場合は、continue;で無限ループの先頭に戻る
switch (map[new_posx][new_posy]にある場所のタイプ) {
case 歩ける場所:
posx = new_posx;
posy = new_posy;
break;
case 壁とかの入れない場所:
break;
case 入ったら体力が減る場所:
posx = new_posx;
posy = new_posy;
体力を減らす
体力がまだあるならbreak;
体力が尽きたら、そのまま「case 入ったら死ぬ場所:」の処理を続ける。つまり、break文を書かず、下にあるcase文に突入させる
case 入ったら死ぬ場所:
posx = new_posx;
posy = new_posy;
死亡処理
ライフ残があるならbreak;
ライフ残が無いなら、そのまま「case 入ったらゲームオーバーする場所:」の処理を続ける。つまり、break文を書かず、下にあるcase文に突入させる
case 入ったらゲームオーバーする場所:
posx = new_posx;
posy = new_posy;
ゲームオーバーの処理
break;
}
キャラ表示
}/*無限ループ終り*/
と言うような処理をします。
No.1
- 回答日時:
>「キャラの移動変数が配列になっていない」というエラーが出ます。
とでることには
何かのツールを使用してのエラーでしょうか?
それとも独自のシステムでやっているのでしょうか?
たとえば1マップのサイズを32x32とすると
posx_i = posx / 32;
posy_i = posy / 32;
と計算し posx_i, posy_i を配列と比較してみてはいかがでしょう?
新しく配列用の変数 posx_i, posy_i ということです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- レトロゲーム ファミコンのインベーダの質問その3 背景にインベーダーを描画したとしても、なぜ動けるのか? 3 2022/07/08 16:58
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(動画サービス) TikTokでとある動画の絵師さんを探しています。今の所、動画も見つからなくてその絵師さんの垢も見つ 1 2023/03/13 01:24
- 物理学 ミンコフスキー時空図の作図の仕方について 2 2023/04/30 10:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで配列の計算
-
パソコンキーボードで時分秒を...
-
VB.net 引数で配列変数を渡す際...
-
IF関数でEmpty値を設定する方法。
-
動的配列が存在(要素が有る)か...
-
ラジオボタンのチェックをEnter...
-
遅延バインディングを使用でき...
-
変数を動的に作るには?
-
C言語 配列からランダムに素数...
-
配列プロパティをREDIMする方法...
-
等間隔にベクトルを作成。(MAL...
-
VBで作った乱数を一度も重複さ...
-
EXCEL VBA で、0から?1から?
-
10進数を4桁のバイト配列に格納...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
ランダムに絵を切り替えたい
-
Visual C++ でコントロールを...
-
コントロール配列の多次元配列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで配列の計算
-
パソコンキーボードで時分秒を...
-
EXCEL VBA で、0から?1から?
-
IF関数でEmpty値を設定する方法。
-
変数を動的に作るには?
-
動的配列が存在(要素が有る)か...
-
C言語 重複しない4ケタの乱数...
-
VB.net 引数で配列変数を渡す際...
-
VBで作った乱数を一度も重複さ...
-
複数のテキストボックスに同じ...
-
VBでbyte配列型のインスタンス...
-
C#の質問
-
For文と配列
-
遅延バインディングを使用でき...
-
重複なしでランダムに画像を表...
-
配列の要素数を超えた参照のコ...
-
このプログラミングの問題を教...
-
Visual C++ でコントロールを...
-
ジャグ配列とは
-
Excel VBAで配列の途中から(X)M...
おすすめ情報