アプリ版:「スタンプのみでお礼する」機能のリリースについて

コマンドプロンプトで文字を表示し、矢印キーを押下すると画面上を移動するようなプログラム作成中なのですがわからなくなったのでご教授いただければと思います。

#include<stdio.h>
#include<conio.h>

#define KEYPUSH 0x00
#define KEYUP 0x48
#define KEYDOWN 0x50
#define KEYRIGHT 0x4d
#define KEYLEFT 0x4b
#define KEYESC 0x1b
#define XMAX 19
#define YMAX 19
#define XMIN 0
#define YMIN 0

char xold;
char yold;
char x ;
char y;
char ESC = 0x1b;
char pos[YMAX][XMAX];

char key(void)
{
short kn;
kn = getch();
if(kn == KEYPUSH)
{
kn = getch();
switch(kn)
{
case KEYUP:/*上*/
if(yold>YMIN)
{
y = yold-1;
yold = y;
//printf("%d ",y);
}
break;
case KEYDOWN:/*下*/
if(yold<=YMAX)
{
y = yold+1;
yold = y;
//printf("%d ",y);

}
break;
case KEYLEFT:/*左*/
if(xold>=XMIN)
{
x = xold-1;
xold = x;
//printf("%d ",x);
}
break;
case KEYRIGHT:/*右*/
if(xold<=XMAX)
{
x = xold+1;
xold = x;
//printf("%d ",x);
}
break;
default:
break;

}
else if(kn ==KEYESC)
{
return ESC;
}
}
}
//printf("x = %d y = %d",x,y);
return 0;
}

void disp(void)
{
int xi,yi;;
system("cls");/*画面クリア*/
pos[y][x] = 'X';
for(yi=YMIN; yi<YMAX; yi++)
{
for(xi=XMIN; xi<XMAX; xi++)
{
if((yi == y) && (xi == x))
{
printf("%c",pos[yi][xi]);
}
}
}
}


void main(void)
{
xold = 5;
yold = 5;
pos[yold][xold] = 'X';
printf("%c",pos[yold][xold]);
//printf("元の位置\n");
while(1)
{
if(key() == ESC)
break;
else
disp();
}
}

今のコードが上のもので、一応座標は取れているみたいなのですがそれがコマンドプロンプトだと動かない状態です。

キー入力の処理が間違えているのか、表示部分が間違えているのか・・・ご教授いただければと思います。
因みにBorlandを使用しています

A 回答 (1件)

disp() の中で 1回しか表示してないから, これで動くはずはないと思うよ. 配列 pos ってなんのためにあるの?



それとは直接関係ない点で指摘しておくと, 関数 key における if の条件はたぶんおかしい. 「上」と「左」で不等号が違うのは不自然だし, 「下」や「右」はまずいと思う.

あと, プログラムの挙動には影響しないと思うけど x と xold や y と yold の違いがわからない.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!