#include <conio.h>
#include <string.h>
#include <stdio.h>
#define FIELD_WIDTH 12
#define FIELD_HEIGHT 22
char field[FIELD_HEIGHT][FIELD_WIDTH];
char displayBaffer[FIELD_HEIGHT][FIELD_WIDTH];
enum {
MINO_TYPE_I,
MINO_TYPE_O,
MINO_TYPE_S,
MINO_TYPE_Z,
MINO_TYPE_J,
MINO_TYPE_L,
MINO_TYPE_T,
MINO_TYPE_MAX
};
enum {
MINO_ANGLE_0,
MINO_ANGLE_90,
MINO_ANGLE_180,
MINO_ANGLE_270,
MINO_ANGLE_MAX
};
#define MINO_WIDTH 4
#define MINO_HEIGHT 4
char minoShapes[MINO_TYPE_MAX][MINO_ANGLE_MAX][MINO_HEIGHT][MINO_WIDTH] = {
//MINO_TYPE_I
{
//MINO_ANGLE_0
{
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
},
//MINO_ANGLE_90
//MINO_ANGLE_180
//MINO_ANGLE_270
}
//MINO_TYPE_O
//MINO_TYPE_S
//MINO_TYPE_Z
//MINO_TYPE_J
//MINO_TYPE_L
//MINO_TYPE_T
};
void main() {
memset(field, 0, sizeof(field));
for (int i = 0; i < FIELD_HEIGHT; i++)
field[i][0] = field[i][FIELD_WIDTH - 1] = 1;
for (int i = 0; i < FIELD_WIDTH; i++)
field[FIELD_HEIGHT - 1][i]=1;
memcpy(displayBaffer, field, sizeof(field));
int minoType = 0, minoAngle = 0;
int minoX = 5, minoY = 0;
for (int i = 0; i < MINO_HEIGHT; i++)
for (int j = 0; j < MINO_WIDTH; j++)
displayBaffer[minoY + i][minoX + j] |= minoShapes[minoType][minoAngle][i][j];
for (int i = 0; i < FIELD_HEIGHT; i++) {
for (int j = 0; j < FIELD_WIDTH; j++)
printf(displayBaffer[i][j] ? "■" : " ");
printf("\n");
}
_getch();
}
char minoShapes[MINO_TYPE_MAX][MINO_ANGLE_MAX][MINO_HEIGHT][MINO_WIDTH] ={}
このソースコードはおそらく4次元配列だとおもうんですが、ネットのどのサイトでも3次元配列までしか記述されていなく、(3次元配列は、縦方向(Y方向)と横方向(X方向)と奥方向(Z方向)にデータの広がりがあります。)と記述されていたのですが、4次元配列はどのようになるのでしょうか?
displayBaffer[minoY + i][minoX + j] |= minoShapes[minoType][minoAngle][j];このソースコードなんですが、
あるサイトでは (「|=」はビットごとの OR 演算を行った結果を変数に代入します)と書いてあったんですが、上のソースコードではどう処理されるのでしょうか?