(プログラム初心者)画像描写

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゆうchin
記事: 5
登録日時: 4年前

(プログラム初心者)画像描写

#1

投稿記事 by ゆうchin » 4年前

コード:

#include "DxLib.h"

int map[15][20] = {
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
 {1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1},
 {1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1},
};

int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_  HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) {
	
	int main3_1 = LoadGraph("pic\\chara_main3.png");

	int x = 200;
	int y = 384;
	int pj;
	bool PR, PL, JumpFlag = false;
	char img = main3_1;
	int count = 0;

	ChangeWindowMode(TRUE);//非全画面にセット
	SetAlwaysRunFlag(true);
	SetDrawScreen(DX_SCREEN_BACK);//描画先を裏画面に 
	SetGraphMode(640, 480, 16);

	if (DxLib_Init() == -1) { return -1; }//初期化に失敗時にエラーを吐かせて終了

	int main3_move1 = LoadGraph("pic\\chara_main3_move1.png");
	int main3_move2 = LoadGraph("pic\\chara_main3_move2.png");
	int main3_move3 = LoadGraph("pic\\chara_main3_move3.png");
	int block = LoadGraph("pic\\block.png");

	while (1) {
		count++;

		if (CheckHitKey(KEY_INPUT_RIGHT) == 1 || CheckHitKey(KEY_INPUT_D) == 1) { PR = true; }
		else { PR = false; }
		if (CheckHitKey(KEY_INPUT_LEFT) == 1 || CheckHitKey(KEY_INPUT_A) == 1) { PL = true; }
		else { PL = false; }
		if (CheckHitKey(KEY_INPUT_UP) == 1 || CheckHitKey(KEY_INPUT_W) == 1) { JumpFlag = true; }
		else {
			JumpFlag = false;
		}

		if (y >= 384) { pj = 10; y -= 3; } // ジャンプ可能回数

		if (PR == true && 0 < count%15 && count%15 <= 5) { img = main3_move3; }
		else if (PR == true && 5 < count % 15 && count % 15 <= 10) { img = main3_move2; }
		else if (PR == true && 10 < count % 15 && count % 15 <= 15) { img = main3_move1; }
		else if (PL == true && 0 < count % 15 && count % 15 <= 5) { img = main3_move1; }
		else if (PL == true && 5 < count % 15 && count % 15 <= 10) { img = main3_move2; }
		else if (PL == true && 10 < count % 15 && count % 15 <= 15) { img = main3_move3; }
		
		if (PR == true) { x += 3; }
		if (PL == true) { x -= 3; }
		if (JumpFlag == true) {
			for (int a = 0; a < 6; a++) {
				pj -= 1;
				y += 5;
			}
		}

		ClearDrawScreen();

		DrawGraph(x, y, img, FALSE);
		for (int a = 0; a < 15; a++) {
			for (int b = 0; b < 20; b++) {
				switch (map[a][b]) {
				case 1:
					DrawGraph(b * 32, a * 32, block, FALSE);
					break;
				}
			}
		}

		ScreenFlip();

		if (CheckHitKey(KEY_INPUT_ESCAPE) > 0) break;
		if (ProcessMessage() < 0) break;
		Sleep(16);
	}
	DxLib_End();
	return 0;
}
少し前にリンカーについての質問をしたものです。皆さんのおかげで無事に解決出来、次のステップ(画像を描写して動かす)に進んでみたのですが、何故かそこで不具合が生じてしまいました。
自分は、ステージをblockという画像で下に二段描写し、その上にキャラが立っているようにしたく、block(32pixel)*2 とキャラ(32pixel) の合計96pixel分y軸480から引いてそこで当たり判定をつけるべくやってみたつもりなのですが、実行してみると何故かステージ部分だけが表示されて、キャラは表示されませんでした。

何かコードに問題があるでしょうか。。。 もしよろしければ、教えていただきたいです。

かずま

Re: (プログラム初心者)画像描写

#2

投稿記事 by かずま » 4年前

int main3_1 = LoadGraph("pic\\chara_main3.png");
は DxLib_Init() の後で実行

int img = main3_1; // char img は間違い

if (y >= 384) { pj = 10; y -= 3; }

if (y < 384) { pj = 10; y += 3; }
に変更

コード:

			for (int a = 0; a < 6; a++) {
				pj -= 1;
				y += 5;
			}

コード:

			pj -= 6;
			y -= 30;
			if (y < 0) y = 0;
に変更

ゆうchin
記事: 5
登録日時: 4年前

Re: (プログラム初心者)画像描写

#3

投稿記事 by ゆうchin » 4年前

かずまさんのご指摘の通りにやってみると、ジャンプは回数無制限に飛んで行ってしまいましたが、そのほかは思い通りに動いてくれました。本当にありがとうございます。その後、少し自分で調整を加えてみると、ジャンプも思い通りに行きました。ここから色々工夫して、敵なども足していってみたいと思います。最後にもう一度、かずまさん、とても助かりました。ありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る