c言語で迷路の作成がわかりません
Posted: 2018年8月04日(土) 20:17
今、学校の課題で迷路の作成をしているのですが、壁に当たったら動かす物体がそこを通らないようにしたいです。
迷路は1と0で、1が通路、0が壁という風に作図しました。その1の上のみ動くようにしたいです。その迷路はエクセルで各格子に1と0を配列し、それを読み込んで作成しました。初心者で申し訳ありませんがよろしくお願いします。
void Display(void) {
int i, j;
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
float rect_size = 2.0 / map_size;
for (j = 0; j < map_size; j++) {
for (i = 0; i <map_size; i++) {
if (map[j*map_size + i] == 0) {
glColor3f(0.0, 1.0, 1.0);
poly_rect(-1 + i*rect_size, 1 - j*rect_size - rect_size, rect_size, rect_size);
}
else {
glColor3f(1.0, 1.0, 1.0);
poly_rect(-1 + i*rect_size, 1 - j*rect_size - rect_size, rect_size, rect_size);
}
}
}
glColor3f(0.0, 0.0, 0.0);
wire_circle(-1 + center_x*rect_size + rect_size / 2, 1+center_y*rect_size-rect_size / 2, 0.1);
glFlush();
}
void Keyboard(char key, int x, int y) {
int i, j;
i = 0; j = 0;
switch (key) {
case'q':case 27:
printf("qが押されました。終了します\n");
exit(0);
break;
case'a':
printf("aが押されました。\n");
if (map[j*map_size + i] == 0) {
glutPostRedisplay();
break;
}
else {
center_x = center_x - 1;
glutPostRedisplay();
}
break;
case'd':
if (map[j*map_size + i] == 0) {
glutPostRedisplay();
break;
}
else {
center_x = center_x + 1;
glutPostRedisplay();
}
break;
case'x':
printf("xが押されました。\n");
if (map[j*map_size + i] == 0) {
glutPostRedisplay();
break;
}
else {
center_y = center_y - 1;
glutPostRedisplay();
}
break;
case'w':
printf("wが押されました。\n");
if (map[j*map_size + i] == 0) {
glutPostRedisplay();
break;
}
else {
center_y = center_y + 1;
glutPostRedisplay();
}
break;
}
}
迷路は1と0で、1が通路、0が壁という風に作図しました。その1の上のみ動くようにしたいです。その迷路はエクセルで各格子に1と0を配列し、それを読み込んで作成しました。初心者で申し訳ありませんがよろしくお願いします。
void Display(void) {
int i, j;
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
float rect_size = 2.0 / map_size;
for (j = 0; j < map_size; j++) {
for (i = 0; i <map_size; i++) {
if (map[j*map_size + i] == 0) {
glColor3f(0.0, 1.0, 1.0);
poly_rect(-1 + i*rect_size, 1 - j*rect_size - rect_size, rect_size, rect_size);
}
else {
glColor3f(1.0, 1.0, 1.0);
poly_rect(-1 + i*rect_size, 1 - j*rect_size - rect_size, rect_size, rect_size);
}
}
}
glColor3f(0.0, 0.0, 0.0);
wire_circle(-1 + center_x*rect_size + rect_size / 2, 1+center_y*rect_size-rect_size / 2, 0.1);
glFlush();
}
void Keyboard(char key, int x, int y) {
int i, j;
i = 0; j = 0;
switch (key) {
case'q':case 27:
printf("qが押されました。終了します\n");
exit(0);
break;
case'a':
printf("aが押されました。\n");
if (map[j*map_size + i] == 0) {
glutPostRedisplay();
break;
}
else {
center_x = center_x - 1;
glutPostRedisplay();
}
break;
case'd':
if (map[j*map_size + i] == 0) {
glutPostRedisplay();
break;
}
else {
center_x = center_x + 1;
glutPostRedisplay();
}
break;
case'x':
printf("xが押されました。\n");
if (map[j*map_size + i] == 0) {
glutPostRedisplay();
break;
}
else {
center_y = center_y - 1;
glutPostRedisplay();
}
break;
case'w':
printf("wが押されました。\n");
if (map[j*map_size + i] == 0) {
glutPostRedisplay();
break;
}
else {
center_y = center_y + 1;
glutPostRedisplay();
}
break;
}
}