2次元フィールドの移動がうまくいきません(初心者)
Posted: 2016年7月26日(火) 00:21
現在VisualStudioでプログラムを書いているのですがうまくいきません。
8を入力すると上に移動し、2を入力すると下に移動、6を入力すると右、4を入力すると左に移動し、左上からスタートして右下にたどり着くとゴールというものです。
しかし、数回入力すると不具合が起きます。
問題点と改善方法を教えていただきたいです。
プログラムは以下のようなものです。
プログラム初心者ですがよろしくお願いします。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void ShowMap(int map[8][10]);
int main(void)
{
int map[8][10] = {0}, inputNUM, lineY = 0, lineX = 0;
map[lineY][lineX] = 1;
while (1)
{
system("cls");
ShowMap(map);
scanf("%d", &inputNUM);//方向を入力
if (inputNUM == 8 && lineY != 0)//上方向に移動する場合
{
map[lineY - 1][lineX] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineY = -1;
}
else if (inputNUM == 2 && lineY != 7)//下方向に移動する場合
{
map[lineY + 1][lineX] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineY = +1;
}
else if (inputNUM == 4 && lineX != 0)//左方向に移動する場合
{
map[lineY][lineX - 1] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineX = -1;
}
else if (inputNUM == 6 && lineX != 9)//右方向に移動する場合
{
map[lineY][lineX + 1] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineX = +1;
}
else if (map[7][9] == 1)//ゴールにたどり着いた場合
{
break;
}
}
return 0;
}
void ShowMap(int map[][10])
{
int i, j;
printf(" ↓スタート\n");
printf("┃ ┣━┳━┳━┳━┳━┳━┳━┳━┳━┓\n");
for (j = 0; j<8; j++)
{
printf("┃");
for (i = 0; i<10; i++)
{
if (map[j] == 1)//座標の値が1だった場合
{
printf("○");
}
else if(map[j] == 0)//座標の値が0だった場合
{
printf(" ");
}
if (i<8)
{
printf(" ");
}
}
printf(" ┃\n");
if (j < 7)
{
printf("┣ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ┫\n");
}
}
printf("┗━┻━┻━┻━┻━┻━┻━┻━┻━┫ ┃\n");
printf(" ↑ゴール\n");
printf(" 8\n");
printf(" ↑\n");
printf("4← →6\n");
printf(" ↓\n");
printf(" 2\n");
}
8を入力すると上に移動し、2を入力すると下に移動、6を入力すると右、4を入力すると左に移動し、左上からスタートして右下にたどり着くとゴールというものです。
しかし、数回入力すると不具合が起きます。
問題点と改善方法を教えていただきたいです。
プログラムは以下のようなものです。
プログラム初心者ですがよろしくお願いします。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void ShowMap(int map[8][10]);
int main(void)
{
int map[8][10] = {0}, inputNUM, lineY = 0, lineX = 0;
map[lineY][lineX] = 1;
while (1)
{
system("cls");
ShowMap(map);
scanf("%d", &inputNUM);//方向を入力
if (inputNUM == 8 && lineY != 0)//上方向に移動する場合
{
map[lineY - 1][lineX] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineY = -1;
}
else if (inputNUM == 2 && lineY != 7)//下方向に移動する場合
{
map[lineY + 1][lineX] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineY = +1;
}
else if (inputNUM == 4 && lineX != 0)//左方向に移動する場合
{
map[lineY][lineX - 1] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineX = -1;
}
else if (inputNUM == 6 && lineX != 9)//右方向に移動する場合
{
map[lineY][lineX + 1] = map[lineY][lineX];
map[lineY][lineX] = 0;
lineX = +1;
}
else if (map[7][9] == 1)//ゴールにたどり着いた場合
{
break;
}
}
return 0;
}
void ShowMap(int map[][10])
{
int i, j;
printf(" ↓スタート\n");
printf("┃ ┣━┳━┳━┳━┳━┳━┳━┳━┳━┓\n");
for (j = 0; j<8; j++)
{
printf("┃");
for (i = 0; i<10; i++)
{
if (map[j] == 1)//座標の値が1だった場合
{
printf("○");
}
else if(map[j] == 0)//座標の値が0だった場合
{
printf(" ");
}
if (i<8)
{
printf(" ");
}
}
printf(" ┃\n");
if (j < 7)
{
printf("┣ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ╋ ┫\n");
}
}
printf("┗━┻━┻━┻━┻━┻━┻━┻━┻━┫ ┃\n");
printf(" ↑ゴール\n");
printf(" 8\n");
printf(" ↑\n");
printf("4← →6\n");
printf(" ↓\n");
printf(" 2\n");
}