CC65 開發FC/NES 遊戲(三)使用搖桿
阿新 • • 發佈:2018-11-01
CC65在我的文章(一)中可以獲取到 或者直接去github下載cc65
這次的程式碼來自cc65的samples目錄下的hello.c 並做了修改和註釋
通過檢視原始碼可以看到裡面支援的機器型別
#if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__)
NES PCE GAMATE
通過 cmd 命令將 c 編譯成 nes 檔案
cl65 -t nes -o demo.nes demo.c
通過這個demo我們可以獲取到按鍵對應的數值
A - 1
B - 2
select - 4
start - 8
上 - 16
下 - 32
左 - 64
右 - 128
連發 A 和 B 就是這2個數字頻閃
解釋:
其實這個按鍵的取值是從預設的地址獲取一個 16進位制的值
比如右這個值最大對應的
十進位制 128
16進位制 80
二進位制 10000000
同理左的二進位制 是 01000000
如果全按了就會顯示 11111111
當多個按鍵一起按的時候相當於累加 比如 AB一起按輸出的就是 3
截圖是我用qq的 ctrl+alt+a 同時按著下(s) 相當於同時按了 左和下 顯示的就是 96
這次的程式碼來自cc65的samples目錄下的hello.c 並做了修改和註釋
通過檢視原始碼可以看到裡面支援的機器型別
#if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__)
NES PCE GAMATE
通過 cmd 命令將 c 編譯成 nes 檔案
cl65 -t nes -o demo.nes demo.c
#include <stdlib.h> #include <string.h> #include <conio.h> #include <joystick.h> static const char Text [] = "Hello world!"; // 2個臨時變數,防止按住了按鍵頻繁輸出造成的閃爍 unsigned int p1,pt1; // 螢幕四邊劃線,原始程式碼暫時沒處理 void drawline(void){ unsigned char XSize, YSize; // 清屏,游標移到左上角 clrscr (); // 獲取螢幕尺寸,傳入地址相當於讓函式給這2個地址賦值 screensize (&XSize, &YSize); /* Draw a border around the screen */ //頂端線 cputc (CH_ULCORNER); chline (XSize - 2); cputc (CH_URCORNER); /* Vertical line, left side */ cvlinexy (0, 1, YSize - 2); //底端線 cputc (CH_LLCORNER); chline (XSize - 2); cputc (CH_LRCORNER); /* Vertical line, right side */ cvlinexy (XSize - 1, 1, YSize - 2); // 螢幕正中間顯示 hello world 文字 // 就是將游標移到 gotoxy ((XSize - strlen (Text)) / 2, YSize / 2); cprintf ("%s", Text); } void main (void) { // 螢幕顏色,黑底白字 (void) textcolor (COLOR_WHITE); (void) bordercolor (COLOR_BLACK); (void) bgcolor (COLOR_BLACK); // 螢幕四邊劃線(前面的方法) drawline(); // 初始化手柄 joy_install (joy_static_stddrv); while (1){ p1 = joy_read (JOY_1); // start 和 select 一起按的時候跳出迴圈,相當於重啟 if(p1==12){break;} // p1的案件一直沒變的情況不做響應 if(p1==pt1){continue;} pt1=p1; // 輸出按鍵對應的數值,因為長短不同需要空格覆蓋原有位置的字元 gotoxy(1,1); cprintf(" "); gotoxy(1,1); cprintf("%d",p1); } // 前面使用break 跳出迴圈會走到這裡 gotoxy(0,0); cprintf("over"); }
通過這個demo我們可以獲取到按鍵對應的數值
A - 1
B - 2
select - 4
start - 8
上 - 16
下 - 32
左 - 64
右 - 128
連發 A 和 B 就是這2個數字頻閃
解釋:
其實這個按鍵的取值是從預設的地址獲取一個 16進位制的值
比如右這個值最大對應的
十進位制 128
16進位制 80
二進位制 10000000
同理左的二進位制 是 01000000
如果全按了就會顯示 11111111
當多個按鍵一起按的時候相當於累加 比如 AB一起按輸出的就是 3
截圖是我用qq的 ctrl+alt+a 同時按著下(s) 相當於同時按了 左和下 顯示的就是 96