VC++というよりC言語自体の質問になってしますのですが、
現在DOSアプリケーションで簡単なゲームを作っています。
そのゲームの中で自キャラ(といっても●ですが、、、)を
十字キーで上下左右に動くようにしたいのですが、どうすれば
よいのでしょうか?
ちなみに現在はテンキーの2468を十字キー代わりに使っています。
以下のような関数は作成してますか
参考文献としては
OADGテクニカルレファレンス PCオープンアーキテクチャー推進協議会
お近くのIBMに問い合わせれば入手可能かとおもわれます
/* **************************************************** */
/* 画面制御キー定義 */
/* **************************************************** */
/* */
// 文字入力用
#define UP_C 0x48 /* ↑ */
#define DOWN_C 0x50 /* ↓ */
#define LEFT_C 0x4D /* → */
#define RIGHT_C 0x4B /* ← */
#define SPACE_C 0x20
#define ENTER_C 0x0d
#define ESC_C 0x1b
// ESC_C と組み合わせて下記のキーは使用される
#define INST_C 0x52 /* INSERT KEY */
#define DELT_C 0x53 /* DELETE KEY */
// 数字入力用
#define XFER 0xA700 /* 変換 */
#define RUP 0x49E0 /* ROLL UP */
#define RDW 0x51E0 /* ROLL DOWN */
#define INST 0x52E0 /* INSERT KEY */
#define DELT 0x53E0 /* DELETE KEY */
#define UP 0x48E0 /* ↑ */
#define DOWN 0x50E0 /* ↓ */
#define LEFT 0x4DE0 /* → */
#define RIGHT 0x4BE0 /* ← */
#define HELP 0x4fE0 /* END */
#define BS 0x0e08 /* BACK SPACE */
#define SPACE 0x3920
#define ENTER 0x1c0d
#define ESC 0x001b
#define PF01 0x3B00
#define PF02 0x3C00
#define PF03 0x3D00
#define PF04 0x3E00
#define PF05 0x3F00
#define PF06 0x4000
#define PF07 0x4100
#define PF08 0x4200
#define PF09 0x4300
#define PF10 0x4400
#define PF11 0x8500
#define PF12 0x8600
/* #define PF13 0x5400 DOS/V は無し
#define PF14 0x5500
#define PF15 0x5600
*/
// ****************************************************
// ** グローバル変数 **
// ****************************************************
int cs;
int keyfnc;
union REGS regs,inregs,outregs;
struct SREGS segregs;
/* **********************************************************************************
** データ 入力系 関数 **
********************************************************************************** */
// *********************************
// ** キーボード入出力速度設定 **
// ******************************
void initkey(void)
{
inregs.h.ah=3;
inregs.h.al=5;
inregs.h.bh=0x01; // 00:250 01:500 02:750 03:1000まで //
inregs.h.bl=0x10; // 設定表を参照 //
int86(0x16,&inregs,&outregs);
}
// ******************************
// ** キーボートスキャン **
// *********************************
unsigned keyscan (void)
{
inregs.h.ah=0x10;
int86(0x16,&inregs,&outregs);
cs=outregs.h.al;
return (outregs.x.ax);
}
追伸
NECの PC9821と
DOS/V(NX)とはキーボードのスキャンコードが違いますので注意してください
ソフトバンクの「C言語の応用50例」が一番参考になるのではないでしょうか
WinアプリでなくDOS事務系の応用であればいつでもメールください
masaさんご返答ありがとうございました。
まだ勉強不足のためすべてを理解することはできませんでしたが、
矢印キーは結構特殊なんですね。
なにやら二種類の文字列が入力されることがわかりましたので、
自分なりに解釈し、組んでみました。
while(1)
{
printf(\033[%d;%dH●,y,x);
muki[0]=getch();
muki[1]=getch();
if(muki[0]==0xe0 && muki[1]==0x48)
y=y-1
else if(muki[0]==0xe0 && muki[1]==0x50)
y=y+1;
else if(muki[0]==0xe0 && muki[1]==0x4b)
x=x-1;
else if(muki[0]==0xe0 && muki[1]==0x4d)
x=x+1;
}
としたところ思う通りの結果を生むことができました。
本当にありがとうございました。