環境固有の手段と思われる以下を利用した.
(Windows10 上で Visual Studio を使用し,C++コンソールアプリとして作った.)
- 表示系に
system("cls")
- 入力系に
_getch()
C
1#include <stdio.h>
2#include <stdlib.h> //for system()
3#include <conio.h> //for _getch()
4
5#define N_MENU_ITEMS (3)
6const char *MenuItemText[N_MENU_ITEMS] = { "Atack", "Skill", "(Quit)" };
7
8enum Key
9{
10 Unknown,
11 Up, Down, Enter
12};
13
14Key Input()
15{
16 int v = _getch();
17 if( v==0 || v==0xE0 )
18 {
19 switch( _getch() )
20 {
21 case 0x48: return Up; break;
22 case 0x50: return Down; break;
23 default: return Unknown; break;
24 }
25 }
26 return ( v==0x0D ? Enter : Unknown );
27}
28
29void Show( int CurSel )
30{
31 system( "cls" );
32 printf( "----------\n" );
33 for( int i=0; i<N_MENU_ITEMS; ++i )
34 {
35 printf( "%c %s\n", (i==CurSel ? '*' : ' ' ), MenuItemText[i] );
36 }
37 printf( "----------\n" );
38}
39
40int main(void)
41{
42 int QuitSelected = 0;
43 int CurSel = 0;
44 Show( CurSel );
45
46 while( !QuitSelected )
47 {
48 switch( Input() )
49 {
50 case Up:
51 if( --CurSel<0 ){ CurSel = N_MENU_ITEMS-1; }
52 Show( CurSel );
53 break;
54 case Down:
55 if( ++CurSel>=N_MENU_ITEMS ){ CurSel = 0; }
56 Show( CurSel );
57 break;
58 case Enter:
59 printf( "[%s] Selected\n", MenuItemText[CurSel] );
60 if( CurSel == N_MENU_ITEMS-1 ){ QuitSelected = 1; }
61 default:
62 break;
63 }
64 }
65 return 0;
66}
こんな感じの表示になる.上下矢印キーで *
を動かして,Enter
で決定.
(Quit)
のところで Enter
を押すと終了する.
----------
* Atack
Skill
(Quit)
----------