上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
fire231 散播福音的祭司
註冊時間: 2007-09-15 文章: 152
322.55 果凍幣
|
發表於: 2007-9-21, PM 8:49 星期五 文章主題: 我研究出來了~關於判定按下的按鈕 |
|
|
代碼: |
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
typedef unsigned char BYTE;
int main()
{
BYTE KeyArray[256];
char PreKeyArray[256];
int i;
//宣告需要的引數以及陣列
printf("Press any key to test and press ENTER key to exit.\n",i);
choose:
GetKeyState(VK_UP);
//這邊要設定
//函數的內容隨便用哪個Virtual Key Code代替都行
GetKeyboardState(KeyArray);
//這個是用來比對的
for(i=1;i<255;i++)
{
PreKeyArray[i]=KeyArray[i];
if((KeyArray[38]&0x80)!=0)
{
printf("key(38) pressed.\n",i);
}
//38是上 ~判斷並且印列出來
if((KeyArray[39]&0x80)!=0)
{
printf("key(39) pressed.\n",i);
}
//39是上 ~判斷並且印列出來
if((KeyArray[13]&0x80)!=0)
{
break;
}
//13是ENTER ~判斷並且跳出回圈後結束
system("pause");
goto choose;
}
}
|
首先~前3行是檔頭
windows是為了要用GetKeyState()還有GetKeyboardState()
之後先宣告引數以及陣列
然後就開始判斷了
用來比對的
for(i=1;i<255;i++)從1到254
這邊只要先對照Virtual Key Code表
確定你要設定的按鍵有在 i 的範圍就可以了
之後
PreKeyArray[i]=KeyArray[i];
比對兩個陣列的資料
接下來後面可以自己設定
按鍵請參考Virtual Key Code表
要使用的語法是
if((KeyArray[代碼]&0x80)!=0)
&0x80似乎是要做AND的運算(與前面的東西做AND的運算)
若沒有加入
則沒有設定到的按鈕將會干擾判斷或是會直接進行這個判斷
之後最下面
有個system("pause")
在此例子中要加入
不然你按下按鈕後他會連續判定~按下的期間就會連續出現
使程式暫停可以停下~或是將間隔稍停住(每判斷1次會出現"按任何鍵繼續")
接下來就是goto choose
再回去可以連續判斷
--
用法
這個範例是判斷你按的按鈕
若實際要運用
則可在判斷按鈕之後接個goto XX
則可在最後面編寫~會直接跳過
至於這樣的話~除了在最下面goto choose的上面加上system("pause")
其他地方須視情況加入
例如goto之後到目標要在判斷的時候必須要加入~不然會連續判斷
以上就是用法
附上Virtual Key Code表
常數名稱 十六進位值 十進位值 滑鼠或按鍵的對應值
.............................................................
VK_LBUTTON 01 1 滑鼠左鈕
VK_RBUTTON 02 2 滑鼠右鈕
VK_CANCEL 03 3 Control-break 執行
VK_MBUTTON 04 4 滑鼠中鈕
05-07 5-7 未定義
VK_BACK 08 8 Backspace 鍵
VK_TAB 09 9 Tab 鍵
0A-0B 10-11 未定義
VK_CLEAR 0C 12 Clear 鍵
VK_RETURN 0D 13 Enter 鍵
0E-0F 14-15 未定義
VK_SHIFT 10 16 Shift 鍵
VK_CONTROL 11 17 Ctrl 鍵
VK_MENU 12 18 Alt 鍵
VK_PAUSE 13 19 Pause 鍵
VK_CAPITAL 14 20 Caps Lock 鍵
15-19 21-25 保留給Kanji 系統使用
1A 26 未定義
VK_ESCAPE 1B 27 Esc 鍵
1C-1F 28-31 保留給Kanji 系統使用
VK_SPACE 20 32 SpaceBar 鍵
VK_PRIOR 21 33 Page Up 鍵
VK_NEXT 22 34 Page Down 鍵
VK_END 23 35 End 鍵
VK_HOME 24 36 Home 鍵
VK_LEFT 25 37 Left Arrow 鍵
VK_UP 26 38 Up Arrow 鍵
VK_RIGHT 27 39 Right Arrow 鍵
VK_DOWN 28 40 Down Arrow 鍵
VK_SELECT 29 41 Select 鍵
2A 42 OEM 自訂使用
VK_EXECUTE 2B 43 Execute 鍵
VK_SNAPSHOT 2C 44 Print Screen 鍵
VK_INSERT 2D 45 Ins 鍵
VK_DELETE 2E 46 Del 鍵
VK_HELP 2F 47 Help 鍵
VK_0 30 48 0鍵
VK_1 31 49 1鍵
VK_2 32 50 2鍵
VK_3 33 51 3鍵
VK_4 34 52 4鍵
VK_5 35 53 5鍵
VK_6 36 54 6鍵
VK_7 37 55 7鍵
VK_8 38 56 8鍵
VK_9 39 57 9鍵
3A-40 58-64 未定義
VK_A 41 65 A鍵
VK_B 42 66 B鍵
VK_C 43 67 C鍵
VK_D 44 68 D鍵
VK_E 45 69 E鍵
VK_F 46 70 F鍵
VK_G 47 71 G鍵
VK_H 48 72 H鍵
VK_I 49 73 I鍵
VK_J 4A 74 J鍵
VK_K 4B 75 K鍵
VK_L 4C 76 L鍵
VK_M 4D 77 M鍵
VK_N 4E 78 N鍵
VK_O 4F 79 O鍵
VK_P 50 80 P鍵
VK_Q 51 81 Q鍵
VK_R 52 82 R鍵
VK_S 53 83 S鍵
VK_T 54 84 T鍵
VK_U 55 85 U鍵
VK_V 56 86 V鍵
VK_W 57 87 W鍵
VK_X 58 88 X鍵
VK_Y 59 89 Y鍵
VK_Z 5A 90 Z鍵
5B-5F 91-95 未定義
VK_NUMPAD0 60 96 數字鍵0鍵
VK_NUMPAD1 61 97 數字鍵1鍵
VK_NUMPAD2 62 98 數字鍵2鍵
VK_NUMPAD3 63 99 數字鍵3鍵
VK_NUMPAD4 64 100 數字鍵4鍵
VK_NUMPAD5 65 101 數字鍵5鍵
VK_NUMPAD6 66 102 數字鍵6鍵
VK_NUMPAD7 67 103 數字鍵7鍵
VK_NUMPAD8 68 104 數字鍵8鍵
VK_NUMPAD9 69 105 數字鍵9鍵
VK_MULTIPLY 6A 106 *鍵
VK_ADD 6B 107 +鍵
VK_SEPARATOR 6C 108 Separator 鍵
VK_SUBTRACT 6D 109 -鍵
VK_DECIMAL 6E 110 .鍵
VK_DIVIDE 6F 111
http://www.wretch.cc/blog/Nelson&article_id=752469
fire231 在 2007-9-22, PM 10:29 星期六 作了第 3 次修改 |
|
回頂端 |
|
|
fire231 散播福音的祭司
註冊時間: 2007-09-15 文章: 152
322.55 果凍幣
|
發表於: 2007-9-21, PM 9:36 星期五 文章主題: Re: 我研究出來了~關於判定按下的按鈕 |
|
|
代碼: |
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
typedef unsigned char byte;
int main()
{
byte KeyArray[256];
char PreKeyArray[256];
int i;
//宣告需要的引數以及陣列
menu:
cout << " > 開始遊戲 " << endl;
cout << " 讀取遊戲 " << endl;
cout << " 結束遊戲 " << endl;
cout << " " << endl;
cout << "你可以按'下'來移動指標與按'Enter'選擇" << endl;
//選單第1
system("pause");//停在這邊
GetKeyState(VK_UP);//函數的內容隨便用哪個Virtual Key Code代替都行
GetKeyboardState(KeyArray);//這個是用來比對的
for(i=1;i<255;i++)
{
PreKeyArray[i]=KeyArray[i];
if((KeyArray[40]&0x80)!=0)
{
system("cls");
goto menu2;
}
//下~跳到下面的選單2(menu2)
if((KeyArray[13]&0x80)!=0)
{
goto start;
}
//選擇~跳到下面的開始(start)
cout << "請勿按除了'下'與'Enter'的其他按鍵" << endl;
system("pause");
system("cls");
goto menu;
}
//menu判斷結束
menu2:
cout << " 開始遊戲 " << endl;
cout << " > 讀取遊戲 " << endl;
cout << " 結束遊戲 " << endl;
cout << " " << endl;
cout << "你可以按'下'與'上'移動指標與按'Enter'選擇" << endl;
//選單第2
system("pause");//停在這邊
GetKeyState(VK_UP);//函數的內容隨便用哪個Virtual Key Code代替都行
GetKeyboardState(KeyArray);//這個是用來比對的
for(i=1;i<255;i++)
{
PreKeyArray[i]=KeyArray[i];
if((KeyArray[38]&0x80)!=0)
{
system("cls");
goto menu;
}
//上~回到選單1(menu)
if((KeyArray[40]&0x80)!=0)
{
system("cls");
goto menu3;
}
//下~跳到下面的選單3(menu3)
if((KeyArray[13]&0x80)!=0)
{
goto load;
}
//選擇~跳到下面的讀取存檔(load)
cout << "請勿按除了'下'和'上'與'Enter'的其他按鍵" << endl;
system("pause");
system("cls");
goto menu2;
}
//menu2判斷結束
menu3:
cout << " 開始遊戲 " << endl;
cout << " 讀取遊戲 " << endl;
cout << " > 結束遊戲 " << endl;
cout << " " << endl;
cout << "你可以按'上'移動指標與按'Enter'選擇" << endl;
//選單第3
system("pause");//停在這邊
GetKeyState(VK_UP);//函數的內容隨便用哪個Virtual Key Code代替都行
GetKeyboardState(KeyArray);//這個是用來比對的
for(i=1;i<255;i++)
{
PreKeyArray[i]=KeyArray[i];
if((KeyArray[38]&0x80)!=0)
{
system("cls");
goto menu2;
}
//上~回到選單2(menu2)
if((KeyArray[13]&0x80)!=0)
{
goto exit;
}
//選擇~跳到下面的結束(exit)
cout << "請勿按除了'上'與'Enter'的其他按鍵" << endl;
system("pause");
system("cls");
goto menu3;
}
//menu3判斷結束
start://開始遊戲
return 0;
load://讀取遊戲
return 0;
exit://離開遊戲
return 0;
}
|
以上是我企劃的小型RPG開頭
這是使用了該語法的範例
會判斷是否按了按鈕
按錯還有提示 |
|
回頂端 |
|
|
s13579239 偶而上來逛逛的過客
註冊時間: 2007-12-01 文章: 12
0.00 果凍幣
|
發表於: 2008-1-12, PM 9:19 星期六 文章主題: 媽呀 |
|
|
我看到會哭,都看不懂 |
|
回頂端 |
|
|
fire231 散播福音的祭司
註冊時間: 2007-09-15 文章: 152
322.55 果凍幣
|
發表於: 2008-1-19, PM 3:26 星期六 文章主題: Re: 媽呀 |
|
|
話說~我這個版法是比較困難的= = |
|
回頂端 |
|
|
babu61509 散播福音的祭司
註冊時間: 2007-08-26 文章: 142
681.01 果凍幣
|
發表於: 2008-1-19, PM 4:35 星期六 文章主題: Re: 媽呀 |
|
|
語法沒學過當然看不懂XD
用成流程圖應該就比較好瞭解了...
基本上程式是這樣跑...
代碼: |
--------------------
( 開 始 )
--------------------
|
----------------------
| 顯示選單 | <--------|
---------------------- |
| |
/\ |
/ \ 移動鍵 |
/ 判斷按鍵 \--------------|
\ /
\/
確 |
認 |
鍵 |
|
/\
/ \
/ 判斷選擇 \ . . .
\ 的項目 /
\ /
\/
.
.
.
|
其實這程式碼有很多重複的地方...
可以考慮用String或字元陣列來放要顯示的字...然後用 取得/更改 裡面的值來 顯示/判斷 目前所指位置.
這樣可以減少重複的程式碼. _________________ 已經畢業了!! |
|
回頂端 |
|
|
fire231 散播福音的祭司
註冊時間: 2007-09-15 文章: 152
322.55 果凍幣
|
發表於: 2008-1-20, PM 12:56 星期日 文章主題: Re: 媽呀 |
|
|
我知道= =
這是我第1次寫的程式= =
現在知道大該要怎麼用了
話說
NEIL弄的判斷鍵比較好判斷 |
|
回頂端 |
|
|
|