コンソールアプリケーションでRPG(っぽいもの)を作成しているのですが、
通行不可の壁の作り方がわかりません。
(元のソースは某サイト様のものを参考とし、自分なりに改良させて頂きました)。
マップは二次元配列を利用しています。
MoveBlock関数で、二次元配列のマップを展開し、
プレイヤー(主人公)の座標(px,py)が、
二次元配列に対応するようにと自分なりにコードを書いたのですが、
なかなか難しくて、とりあえずマップ座標(0,0)の場とプレイヤー座標が一致した場合に、
通行不可と表示しようとしたのですが、
どうしてもマップ座標(1,1)の場所に表示されてしまいます。
現状の悩みは上記のような感じで、最終的には通行不可の壁を作りたいと思っています。
どなたかご教授頂けたら幸いです。
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include "Console.h"
#define KEY_UP 0x48
#define KEY_DOWN 0x50
#define KEY_RIGHT 0x4d
#define KEY_LEFT 0x4b
#define MAP_SIZE_Y 20
#define MAP_SIZE_X 20
int i = 0, j = 0;
int px = 3, py = 4;
int map[100][100] = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1},
{1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
} ;
char *a = "@";//主人公
char *b = "#";//壁
void DrawMap()
{
for ( j = 0; j < MAP_SIZE_Y; j++ )
{
for ( i = 0; i < MAP_SIZE_X; i++ )
{
if ( j == py && i == px ){
printf(a);
} else {
switch ( map[j][i] ){
default:printf(" "); break;
case 1: printf(b); break;
}
}
}
printf("\n");
}
}
void MoveBlock()
{
for ( j = 0; j < MAP_SIZE_Y; j++ )
{
for ( i = 0; i < MAP_SIZE_X; i++ )
{
if( map[j][0] == py && map[0][i] == px ){
if( j == 0 && i == 0 ){
printf("通行不可");
}
}
}
}
}
void GetKey()
{
switch ( getch() ){
case KEY_UP:
py--;
break; //UP
case KEY_DOWN:
py++;
break; //DOWN
case KEY_LEFT:
px--;
break; //LEFT
case KEY_RIGHT:
px++;
break; //RIGHT
}
}
void main()
{
CConsole cnsl;
cnsl.SetColor(H_GREEN, L_BLACK);
while ( 1 )
{
system("cls");
DrawMap();
MoveBlock();
GetKey();
}
}