#19
by みけCAT » 4年前
足りない部分を補完した以下のコードを実行した結果、
フリーズは確認できず、複数の「キャラクター」が動く様子を確認できました。
コード:
#include <DxLib.h>
const int YHMAX = 15;
const int XWMAX = 80 - 1; // なぜか+1されているので、それに合わせて-1する
struct ch_num_t {
char kind; // 追加したメンバ
float x;
float y;
int body;
int anipat;
};
struct ch_t {
ch_num_t num[YHMAX * (XWMAX + 1)];
} ch;
struct im_t {
int kabe01;
int teki0A[2];
} im;
int anicounter = 0;
char mapdata[YHMAX][XWMAX+1]={
/*00*/{'0','0','0','0','0','0','1','1','1','1'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'1','1','1','1','1','1','1','1','1','1'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*01*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*02*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*03*/{'0','0','0','0','0','0','0','0','A','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*04*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*05*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*06*/{'0','0','0','0','0','0','0','A','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*07*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*08*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*09*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*10*/{'0','0','0','0','0','0','0','0','0','0'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'0','0','0','0','0','0','0','0','0','0'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/},
/*11*/{'0','0','0','0','0','0','0','0','0','0'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'0','0','0','0','0','0','0','0','0','0'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/},
/*12*/{'0','0','0','0','0','0','0','0','0','0'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'0','0','0','0','0','0','0','0','0','0'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/},
/*13*/{'0','0','0','0','0','0','0','0','0','0'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'0','0','0','0','0','0','0','0','0','0'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/},
/*14*/{'0','0','0','0','0','0','1','1','1','1'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'1','1','1','1','1','1','1','1','1','1'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/}
};
int charaCount; // 取り出したキャラクターの数を格納する
//●各キャラクターのデータの初期化
void CharaInit() {
charaCount = 0; // キャラクターが1個も無い状態にする
for (int y = 0; y < YHMAX; y++) {
for (int x = 0; x < XWMAX + 1; x++) {
char i = mapdata[y][x]; // キャラクターの種類
int charaValid = 0; // キャラクターを取り出したか
// この時点で、次に取り出すキャラクターはcharaCount番目である
// そのため、これ以降の処理では情報をcharaCount番目に格納する
ch.num[charaCount].kind = i; // キャラクターの種類を覚えておく (このメンバを作ってください)
ch.num[charaCount].x = (float)x * 32;
ch.num[charaCount].y = (float)y * 32;
switch (i) {
case '1':
//ch.num[charaCount].x = (float)x * 32;
//ch.num[charaCount].y = (float)y * 32;
ch.num[charaCount].body = 100;
charaValid = 1; // キャラクターを取り出したことを伝える
break;
case 'A':
//ch.num[charaCount].x = (float)x * 32;
//ch.num[charaCount].y = (float)y * 32;
ch.num[charaCount].anipat = 2;
ch.num[charaCount].body = 1;
charaValid = 1; // キャラクターを取り出したことを伝える
break;
} //switch(c)の最後
if (charaValid) { // キャラクターを取り出していたら
// マップからキャラクターを消して
mapdata[y][x] = '0';
// 記憶しているキャラクターの数を増やす
charaCount++;
}
} //for(int x=0;x<XWMAX+1;x++)の最後
} //for(int y=0;y<YHMAX;y++)の最後
}; //void CharaInit();の最後
//●各キャラクターの移動処理
void CharaMove() {
for (int i = 0; i < charaCount; i++) { // 取り出したキャラクターの数だけループを回す
switch (ch.num[i].kind) { // 覚えておいたキャラクターの種類を使う
case '1':
DrawGraph(ch.num[i].x, ch.num[i].y, im.kabe01, TRUE);
break;
case 'A':
int Aa = anicounter / 20 % ch.num[i].anipat;
DrawGraph(ch.num[i].x, ch.num[i].y, im.teki0A[Aa], TRUE);
break;
} //switch(ch.num[charaCount].kind)の最後
ch.num[i].x = ch.num[i].x - 1;
} //for(int i=0;i<charaCount;i++)の最後
} //void CharaMove();の最後
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
if (ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() != 0) return -1;
SetDrawScreen(DX_SCREEN_BACK);
im.kabe01 = LoadGraph("kabe01.png");
LoadDivGraph("teki0A.png", 2, 2, 1, 32, 32, im.teki0A);
CharaInit();
while (ProcessMessage() == 0 && ClearDrawScreen() == 0) {
CharaMove();
anicounter++;
ScreenFlip();
}
DxLib_End();
return 0;
}
- 添付ファイル
-
- 描画用素材1
- kabe01.png (290 バイト) 閲覧数: 23826 回
-
- 描画用素材2
- teki0A.png (498 バイト) 閲覧数: 23826 回
足りない部分を補完した以下のコードを実行した結果、
フリーズは確認できず、複数の「キャラクター」が動く様子を確認できました。
[code]
#include <DxLib.h>
const int YHMAX = 15;
const int XWMAX = 80 - 1; // なぜか+1されているので、それに合わせて-1する
struct ch_num_t {
char kind; // 追加したメンバ
float x;
float y;
int body;
int anipat;
};
struct ch_t {
ch_num_t num[YHMAX * (XWMAX + 1)];
} ch;
struct im_t {
int kabe01;
int teki0A[2];
} im;
int anicounter = 0;
char mapdata[YHMAX][XWMAX+1]={
/*00*/{'0','0','0','0','0','0','1','1','1','1'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'1','1','1','1','1','1','1','1','1','1'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*01*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*02*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*03*/{'0','0','0','0','0','0','0','0','A','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*04*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*05*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*06*/{'0','0','0','0','0','0','0','A','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*07*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*08*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*09*/{'0','0','0','0','0','0','0','0','0','0'/*10*/,'0','0','0','0','0','0','0','0','0','0'/*20*/,'0','0','0','0','0','0','0','0','0','0'/*30*/,'0','0','0','0','0','0','0','0','0','0'/*40*/,'0','0','0','0','0','0','0','0','0','0'/*50*/,'0','0','0','0','0','0','0','0','0','0'/*60*/,'0','0','0','0','0','0','0','0','0','0'/*70*/,'0','0','0','0','0','0','0','0','0','0'/*80*/},
/*10*/{'0','0','0','0','0','0','0','0','0','0'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'0','0','0','0','0','0','0','0','0','0'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/},
/*11*/{'0','0','0','0','0','0','0','0','0','0'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'0','0','0','0','0','0','0','0','0','0'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/},
/*12*/{'0','0','0','0','0','0','0','0','0','0'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'0','0','0','0','0','0','0','0','0','0'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/},
/*13*/{'0','0','0','0','0','0','0','0','0','0'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'0','0','0','0','0','0','0','0','0','0'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/},
/*14*/{'0','0','0','0','0','0','1','1','1','1'/*11*/,'0','0','0','0','0','0','0','0','0','0'/*21*/,'1','1','1','1','1','1','1','1','1','1'/*31*/,'0','0','0','0','0','0','0','0','0','0'/*41*/,'0','0','0','0','0','0','0','0','0','0'/*51*/,'0','0','0','0','0','0','0','0','0','0'/*61*/,'0','0','0','0','0','0','0','0','0','0'/*71*/,'0','0','0','0','0','0','0','0','0','0'/*81*/}
};
int charaCount; // 取り出したキャラクターの数を格納する
//●各キャラクターのデータの初期化
void CharaInit() {
charaCount = 0; // キャラクターが1個も無い状態にする
for (int y = 0; y < YHMAX; y++) {
for (int x = 0; x < XWMAX + 1; x++) {
char i = mapdata[y][x]; // キャラクターの種類
int charaValid = 0; // キャラクターを取り出したか
// この時点で、次に取り出すキャラクターはcharaCount番目である
// そのため、これ以降の処理では情報をcharaCount番目に格納する
ch.num[charaCount].kind = i; // キャラクターの種類を覚えておく (このメンバを作ってください)
ch.num[charaCount].x = (float)x * 32;
ch.num[charaCount].y = (float)y * 32;
switch (i) {
case '1':
//ch.num[charaCount].x = (float)x * 32;
//ch.num[charaCount].y = (float)y * 32;
ch.num[charaCount].body = 100;
charaValid = 1; // キャラクターを取り出したことを伝える
break;
case 'A':
//ch.num[charaCount].x = (float)x * 32;
//ch.num[charaCount].y = (float)y * 32;
ch.num[charaCount].anipat = 2;
ch.num[charaCount].body = 1;
charaValid = 1; // キャラクターを取り出したことを伝える
break;
} //switch(c)の最後
if (charaValid) { // キャラクターを取り出していたら
// マップからキャラクターを消して
mapdata[y][x] = '0';
// 記憶しているキャラクターの数を増やす
charaCount++;
}
} //for(int x=0;x<XWMAX+1;x++)の最後
} //for(int y=0;y<YHMAX;y++)の最後
}; //void CharaInit();の最後
//●各キャラクターの移動処理
void CharaMove() {
for (int i = 0; i < charaCount; i++) { // 取り出したキャラクターの数だけループを回す
switch (ch.num[i].kind) { // 覚えておいたキャラクターの種類を使う
case '1':
DrawGraph(ch.num[i].x, ch.num[i].y, im.kabe01, TRUE);
break;
case 'A':
int Aa = anicounter / 20 % ch.num[i].anipat;
DrawGraph(ch.num[i].x, ch.num[i].y, im.teki0A[Aa], TRUE);
break;
} //switch(ch.num[charaCount].kind)の最後
ch.num[i].x = ch.num[i].x - 1;
} //for(int i=0;i<charaCount;i++)の最後
} //void CharaMove();の最後
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
if (ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() != 0) return -1;
SetDrawScreen(DX_SCREEN_BACK);
im.kabe01 = LoadGraph("kabe01.png");
LoadDivGraph("teki0A.png", 2, 2, 1, 32, 32, im.teki0A);
CharaInit();
while (ProcessMessage() == 0 && ClearDrawScreen() == 0) {
CharaMove();
anicounter++;
ScreenFlip();
}
DxLib_End();
return 0;
}
[/code]