C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

配列とfor文を利用してロックマンのような3*3マスを移動 /Banniy (19/08/10(Sat) 04:14) #91919
Re[1]: 配列とfor文を利用してロックマンのような3*3マスを移動 /774RR (19/08/10(Sat) 05:14) #91920
  └ Re[2]: 配列とfor文を利用してロックマンのような3*3マスを移動 /Banniy (19/08/10(Sat) 06:17) #91922 解決済み


親記事 / ▼[ 91920 ]
■91919 / 親階層)  配列とfor文を利用してロックマンのような3*3マスを移動
□投稿者/ Banniy (1回)-(2019/08/10(Sat) 04:14:45)

分類:[.NET 全般] 

環境

visual studio 2019
DXライブラリ
C言語、C++
#include "DxLib.h"
int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey() {
    char tmpKey[256]; // 現在のキーの入力状態を格納する
    GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
    for (int i = 0; i < 256; i++) {
        if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
            Key[i]++;     // 加算
        }
        else {              // 押されていなければ
            Key[i] = 0;   // 0にする
        }
    }
    return 0;
}

    // プログラムは WinMain から始まります
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        SetGraphMode(1300, 680, 32); // ウィンドウの大きさを指定
        ChangeWindowMode(TRUE);

        if (DxLib_Init() == -1)        // DXライブラリ初期化処理
        {
            return -1;            // エラーが起きたら直ちに終了
        }


        //キー取得用配列
        //char key[256];
        //1. 3x3マスの2次元配列
        int pos[][3] = {
                        {0, 0, 0 },
                        {0, 0, 0 },
                        {0, 0, 0 }
        };

        int playerX = 0; // キャラのX座標
        int playerY = 300; // キャラのY座表
        //double a[2][2];//移動制限のための配列の変数
        int x = 0;
        int y = 0;



        //グラフィックハンドル格納用配列
        int gh[12];
        LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);
        DrawGraph(playerX, playerY, gh[8], FALSE);// プレイヤーの画像を描画



        while (ScreenFlip() == 0 && ProcessMessage() == 0&& gpUpdateKey() == 0) {

                int 加算=70;
                int b = 70;


                // カーソルキーの右が押されている
                if (Key[KEY_INPUT_RIGHT]==1) {



                            playerX = playerX + 加算; // プレイヤーのX座標を加算//左だけplayerX2とするとfor文ではないので、一回しか起きない、playerXだとplayerX = playerX + 加算より、加算されたあとのplayerXが再び右辺のplayerXに入り加算されるを繰り返すため∞に右に行けるのだ
                            // 画面に出力
                            ScreenFlip();
                            // 画面をクリア
                            ClearDrawScreen();
                            // プレイヤーの画像を描画

                            DrawGraph(playerX, playerY, gh[2], true);//DrawGraphはLoadDivGraphにより12分割された配列の一つである、gh[8]を描画できる関数である。


                }
                else { while (DrawGraph(playerX, playerY, gh[8], true)); }//右を押されて加算されていく中で、もし加算されない間はキャラの描画はgh[8]にする。elseを付けることで条件を否定できる。

                if (Key[KEY_INPUT_UP] == 1) {
                    playerY = playerY - b; // プレイヤーのY座標を加算

                    // 画面に出力
                    ScreenFlip();
                    // 画面をクリア
                    ClearDrawScreen();
                    // プレイヤーの画像を描画
                    DrawGraph(playerX, playerY, gh[5], true);
                }


                    if (Key[KEY_INPUT_LEFT] == 1){
                        playerX = playerX - 加算; // プレイヤーのX座標を加算


                        // 画面をクリア
                        ClearDrawScreen();
                        // プレイヤーの画像を描画
                        DrawGraph(playerX, playerY, gh[1], true);

                    }


                    if (Key[KEY_INPUT_DOWN] == 1) {
                        playerY = playerY + b; // プレイヤーのY座標を加算

                        // 画面に出力
                        ScreenFlip();
                        // 画面をクリア
                        ClearDrawScreen();
                        // プレイヤーの画像を描画
                        DrawGraph(playerX, playerY, gh[11], true);
                    }

        }

        DxLib_End();                // DXライブラリ使用の終了処理

        return 0;                // ソフトの終了 

    }
実行したいこと
ロックマンエグゼのようにキャラクターを3*3マスを自由に移動できるようなプログラムをfor (y = 0;y < 3; y++) {
for (x = 0; x < 3; x++) {を用いて可能にしようと思うのですが、どのようにして関数if (Key[KEY_INPUT_RIGHT]==1) {}に加えればよいか悩んでいます。

以下に間違ってはいますが、私なりに書いたプログラムを書かせて頂きます。

                 // カーソルキーの右が押されている
if (Key[KEY_INPUT_RIGHT]==1) {
playerX = playerX + 加算; 
                               double[1][1]=playerX;
// 画面に出力
ScreenFlip();
// 画面をクリア
ClearDrawScreen();
// プレイヤーの画像を描画

                        DrawGraph(double[1][1], playerY, gh[2], true);                      }
右キーによりキャラが座標[1][1]に移動して、座標[1][1]での描画される画像は gh[2]となる。ことを表したプログラムです。これにfor (y = 0;y < 3; y++) {
for (x = 0; x < 3; x++) {を加えれば、解決するのではないかと思っていたりします。
以上のプログラムにおいて、なぜそのように置けないのか、もしプログラムのまま置くとしたら何が必要かを是非教えてほしいです。というのも今後の自己解決力を高めるためです。ご協力お願いいたします。

もしforの文と配列で今回行いたいことを全コードを書いていただけるならば、なぜそのようにおけるのか引数を使う場合は()、どんな処理をさせたいかは{}を使うなどのように細かく解説して頂けると今後の自己解決力に繋がるのでよろしくお願いいたします。

[ □ Tree ] 返信 編集キー/

▲[ 91919 ] / ▼[ 91922 ]
■91920 / 1階層)  Re[1]: 配列とfor文を利用してロックマンのような3*3マスを移動
□投稿者/ 774RR (723回)-(2019/08/10(Sat) 05:14:51)
https://ja.stackoverflow.com/questions/57278/
https://dixq.net/forum/viewtopic.php?f=3&t=20724

読者から見てまったく意味不明な文書なのでコメントする気にならないスルー

[ 親 91919 / □ Tree ] 返信 編集キー/

▲[ 91920 ] / 返信無し
■91922 / 2階層)  Re[2]: 配列とfor文を利用してロックマンのような3*3マスを移動
□投稿者/ Banniy (3回)-(2019/08/10(Sat) 06:17:53)
No91920 (774RR さん) に返信
> https://ja.stackoverflow.com/questions/57278/
> https://dixq.net/forum/viewtopic.php?f=3&t=20724
>
> 読者から見てまったく意味不明な文書なのでコメントする気にならないスルー
>
すいません。こちらのは消します。
解決済み
[ 親 91919 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -