Sean's Note

2009年10月28日 星期三

用鍵盤操作滑鼠

可以直接按快捷鍵 Alt + Shift + NumLk
筆電鍵盤可能就要按 Alt + Fn + Shift + NumLk
按不出來,直接開控制台出來改也是可以。
XP 跟 Vista 好像都有這個功能。

2009年10月9日 星期五

BMP 的 imagesize 怎麼算?

在BMP檔案裡,22H~25H的位置用 4 bytes 表示了 imagesize,

很直覺的會認為 BMP = height * width * bits / 8,
但事實上在一般電腦裡每次存取 4 bytes 的速度是較快的,
所以BMP來說,就會自動補 0 來至能夠讓 4 整除的大小,
例如:
有一張 BMP 的大小
width = 90
height = 30
bits = 24
imagesize = 8160
照理說應該會是 90 * 30 * 24 / 8 = 8100 (無法被4整除)
所以都會在 width 的右邊補 0 至能讓 4 整除,
90 * 3 / 4 = 67...2
(67+1) * 4 = 272 ( 每行多補了 2 bytes )
結果,272 * 30 = 8160

2009年9月28日 星期一

[C/C++] read in binary mode

如果想讀資料中每個 byte 的資料,下例看似正常沒什麼奇怪的。

Data : 42 4D 20 2A 3C 1A 42 43 ...

fp = fread(“data”, “r”);

c = fgetc(fp);

但這其實是錯的,當讀到 1A 時,後面接著讀的資料全都會變成 FFFFFFFF,

因為 1A 在 ASCII 裡代表的是 Substitue,也就是 Crtl + Z,

不知道程式讀到這裡的時候,是不是自己判斷暫停了?

最保險的方法還是加上 b 吧!

fp = fread(“data”, “rb”);


2009年4月14日 星期二

[C/C++] 更改變數的位元值

假設 int a = 0xFFFFFFF1,

 
想要將 3rd bit 設成 1,且不更動到其他 bits 的值,該怎麼用 C 來寫呢?
 
其實只要用 CLEAR 和 OR 就可以達成,什麼語言都一樣,
 
int MASK = 0x04;  // 3rd bit is what we choose
 
a &= ~MASK;  // CLEAR bit
 
a |= MASK;     //  SET bit
 
最後,
 
a = 0xFFFFFFF5
 
就是我們要結果啦!


2008年12月22日 星期一

數字拼圖

數字拼圖 (33.5KB)

禮拜天無聊的時候寫的.
排成這樣就贏了(用滑鼠點選) :
5   2   8            1   2   3
7   3   1    ->     4   5   6
4   6                 7   8




2008年11月9日 星期日

貪食蛇 Snakii

Snakii V1.1 (235KB)

之前有做過 console 版本的, 不過 code 不見了 @@
所以這次又重寫了一個視窗版的.
畫面很陽春啦, 自己畫圖超累的 XD
Bug1. 因為障礙物是隨機產生的, 如果障礙把水果圍住, Snakii 就吃不到了.
雖然機率應該很低, 不過有空還是要解決一下這個問題.


V1.1 更新內容 :
1. 更新背景
2. 一開始不容易撞到石頭


V1.0 更新內容 :
1. 初版