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