c言語で迷路の作成がわかりません

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

c言語で迷路の作成がわかりません

#1

投稿記事 by pine0208 » 2ヶ月前

今、学校の課題で迷路の作成をしているのですが、壁に当たったら動かす物体がそこを通らないようにしたいです。
迷路は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;
}
}

アバター
usao
記事: 1468
登録日時: 5年前

Re: c言語で迷路の作成がわかりません

#2

投稿記事 by usao » 2ヶ月前

> 動かす物体
が,動こうとする予定先の格子をチェックし,
移動不可能な格子なのであれば物体を動かさなければ良いのではないでしょうか.

 移動予定先 = 現在位置 + 移動量

という計算が自然かと思うのですが,この辺の事柄に関して
keyborad関数内の変数i,jの意味が不明なので,そこを見なすとよいかもしれません.

pine0208

Re: c言語で迷路の作成がわかりません

#3

投稿記事 by pine0208 » 2ヶ月前

アドバイスありがとうございます。アドバイスを参考にしてkeyboard関数を変えてみたのですが、やはりうまくいきませんでした。どこをどう変えたらいいかもしよろしければお願いします。実行した結果、物体はdを押したときしか動かず、また壁で止まることもありませんでした。a,w,xは全く動きませんでした。


void Keyboard(char key, int x, int y) {
int 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-1]== 0) {
glutPostRedisplay();
break;
}
else {
i = i - 1;
center_x = center_x - 1;
glutPostRedisplay();
}


break;
case'd':

printf("dが押されました。\n");
if (map[j*map_size +i+1] == 0) {
glutPostRedisplay();
break;
}
else {
i = i + 1;
center_x = center_x + 1;
glutPostRedisplay();
}
break;
case'x':
printf("xが押されました。\n");
if (map[j*map_size + i+10] == 0) {
glutPostRedisplay();
break;
}
else {
j=j+1;
center_y = center_y - 1;
glutPostRedisplay();
}
break;
case'w':

printf("wが押されました。\n");
if (map[j*map_size + i-10] == 0) {

glutPostRedisplay();
break;
}
else {
j=j-1;
center_y = center_y + 1;
glutPostRedisplay();
}
break;
}
return 0;
}

返信

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