マップの切り替えの方法が分かりません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
T2T2

マップの切り替えの方法が分かりません

#1

投稿記事 by T2T2 » 8年前

DXライブラリでRPGを作ろうとしているのですが、マップの切り替え方が分かりません。以下のコードにどのように書き加えればいいのかを教えてもらえないでしょうか?

コード:

 

#include "DxLib.h"

// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	ChangeWindowMode(TRUE);

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

	//キー取得用配列
	char key[256];

	//x座標
	int x = 300, y = 240;



	//グラフィックハンドル格納用配列
	int gh[12];
	int mapchip[5];
	int i, j;
	//画像読み込み
	LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);
	LoadDivGraph("平原.png", 5, 1, 5, 32, 32, mapchip);

	//移動係数
	float move = 1.0f;

	//横方向と縦方向のカウント数。
	int xcount = 0, ycount = 0;
	//添字用変数
	int ix = 0, iy = 0, result = 0;

	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll(key) == 0) {

		ClearDrawScreen();
		for (i = 0; i < 15; i++) {
			for (j = 0; j < 20; j++) {
				DrawGraph(j * 32, i * 32, mapchip[4], FALSE);
			}
		}

		if (key[KEY_INPUT_LEFT] == 1 || key[KEY_INPUT_RIGHT] == 1) {

			if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) {
				//移動係数を0.71に設定
				move = 0.71f;
			}
			else {
				//斜めじゃなければ1.0に設定
				move = 1.0f;
			}
		}
		else if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) {
			move = 1.0f;
		}


		if (key[KEY_INPUT_LEFT] == 1) {
			x -= (int)4 * move;
		}
		if (key[KEY_INPUT_RIGHT] == 1) {
			x += (int)4 * move;

		}
		if (key[KEY_INPUT_UP] == 1) {
			y -= (int)4 * move;

		}
		if (key[KEY_INPUT_DOWN] == 1) {
			y += (int)4 * move;

		}

		//左キーが押されてて、かつxcountが0以上なら0にしてから1引く。
		//それ以外は1引く
		if (key[KEY_INPUT_LEFT] == 1) {
			if (xcount>0)
				xcount = 0;
			--xcount;

		}
		//右キーが押されてて、かつxcountが0以下なら0にしてから1足す。
		//それ以外は1引く
		if (key[KEY_INPUT_RIGHT] == 1) {
			if (xcount<0)
				xcount = 0;
			++xcount;
		}
		//上キーが押されてて、かつycountが0以上なら0にしてから1引く。
		//それ以外は1引く
		if (key[KEY_INPUT_UP] == 1) {
			if (ycount>0)
				ycount = 0;
			--ycount;
		}
		//下キーが押されてて、かつycountが0以下なら0にしてから1足す。
		//それ以外は1足す
		if (key[KEY_INPUT_DOWN] == 1) {
			if (ycount<0)
				ycount = 0;
			++ycount;
		}


		//カウント数から添字を求める。
		ix = abs(xcount) % 30 / 10;
		iy = abs(ycount) % 30 / 10;

		//xカウントがプラスなら右向きなので2行目の先頭添字番号を足す。
		if (xcount>0) {
			ix += 3;
			result = ix;
		}
		else if (xcount<0) {
			//マイナスなら左向きなので、4行目の先頭添字番号を足す。
			ix += 9;
			result = ix;
		}

		//yカウントがプラスなら下向きなので、3行目の先頭添字番号を足す。
		if (ycount>0) {
			iy += 6;
			result = iy;
		}
		else if (ycount<0) {
			//1行目の先頭添字番号は0なので何もする必要なし。(分かりやすくするために書いときました)
			iy += 0;
			result = iy;
		}

		//斜め移動の場合は横顔を優先
		if (move == 0.71f)
			result = ix;


		//描画
		DrawGraph(x, y, gh[result], TRUE);


		//押されてなければカウントをゼロにする。
		if (key[KEY_INPUT_LEFT] != 1 && key[KEY_INPUT_RIGHT] != 1) {
			xcount = 0;
		}
		if (key[KEY_INPUT_UP] != 1 && key[KEY_INPUT_DOWN] != 1) {
			ycount = 0;
		}


		if (key[KEY_INPUT_ESCAPE] == 1) {

			break;
		}

	}

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

	return 0;				// ソフトの終了 
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップの切り替えの方法が分かりません

#2

投稿記事 by みけCAT » 8年前

T2T2 さんが書きました:以下のコードにどのように書き加えればいいのかを教えてもらえないでしょうか?
バグを出さないように、かつ希望する仕様を満たすように書き換えればいいでしょう。
具体的なコードは、当然希望する仕様に依存するでしょう。
T2T2さんが作りたい「マップの切り替え」とは、具体的にどのような処理ですか?
オフトピック
65行目、68行目、72行目、76行目で使われている(int)4って、4と同じ意味なのでは…?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

peot

Re: マップの切り替えの方法が分かりません

#3

投稿記事 by peot » 8年前

DXライブラリならば、本家サイトにサンプルが載ってますよ。

http://dxlib.o.oo7.jp/program/MapScroll3.cpp

閉鎖

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