矢印キーを入力文字とするには? – プログラミング – Home

矢印キーを入力文字とするには?
 
通知
すべてクリア

[解決済] 矢印キーを入力文字とするには?


むら
 むら
(@むら)
ゲスト
結合: 25年前
投稿: 2
Topic starter  

VC++というよりC言語自体の質問になってしますのですが、
現在DOSアプリケーションで簡単なゲームを作っています。
そのゲームの中で自キャラ(といっても●ですが、、、)を
十字キーで上下左右に動くようにしたいのですが、どうすれば
よいのでしょうか?
ちなみに現在はテンキーの2468を十字キー代わりに使っています。


引用未解決
トピックタグ
masa
 masa
(@masa)
ゲスト
結合: 25年前
投稿: 12
 

以下のような関数は作成してますか
参考文献としては
 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);
}


返信引用
masa
 masa
(@masa)
ゲスト
結合: 25年前
投稿: 64
 

追伸
 NECの PC9821と
 DOS/V(NX)とはキーボードのスキャンコードが違いますので注意してください
 ソフトバンクの「C言語の応用50例」が一番参考になるのではないでしょうか
 WinアプリでなくDOS事務系の応用であればいつでもメールください


返信引用
むら
 むら
(@むら)
ゲスト
結合: 25年前
投稿: 2
Topic starter  

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;
}

としたところ思う通りの結果を生むことができました。
本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました