コマンドプロンプトで文字を表示し、矢印キーを押下すると画面上を移動するようなプログラム作成中なのですがわからなくなったのでご教授いただければと思います。
#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を使用しています
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
printf による16進表示について
-
char型2つを結合し、short型に...
-
C言語で複数列のデータを1列の...
-
#defineが使用するメモリ領域に...
-
【C言語】全角文字の配列を、全...
-
空白を含んだ文字列がうまく格...
-
ファイルから数字列を16進数の...
-
なぜ無限ループになるかが分か...
-
reallocでエラー
-
エラーについて質問です。
-
C言語のプログラムで、途中で止...
-
[C言語 Windows] Visual Cでの...
-
NetBIOS名のエラー
-
fgetsなどのときのstdinのバッ...
-
マイナスからプラスへ転じた時...
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
「an=(n-1)/(n+1)のときlim[n→∞...
-
c言語で、繰り返し文の中で、0....
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
空白を含んだ文字列がうまく格...
-
char型2つを結合し、short型に...
-
【C言語】全角文字の配列を、全...
-
プログラミングの授業の課題です
-
C言語のプログラムで、途中で止...
-
C++で指定文字列のカウント方法...
-
C言語で複数列のデータを1列の...
-
C言語でのCSVファイルの読み出...
-
構造体メンバの初期化
-
なぜ無限ループになるかが分か...
-
reallocでエラー
-
Ç言語でファイルサイズを変更す...
-
ファイル操作で全角空白を消す
-
矢印キーを押下してコンソール...
-
セグメンテーションエラーの原...
-
static付き宣言の初期化
-
ファイルから数字列を16進数の...
おすすめ情報