contributed by < BennyWang1007 >
注意書寫規範!
我將原先傳輸 DRAWBUFFER_SIZE bytes 的資料改為 BOARD_DATA_SIZE bytes,定義如下。
注意書寫規範,中英文間用一個半形空白字元區隔
每一個位置皆只使用兩bit來傳輸,比起原先的 char
加空格,省去了許多不必要的資訊。
當版面夠大時(),節省了 的資料大小。
提供更多數學分析
commit 797c875
首先我定義了 type board_history_t
作為一盤棋的紀錄。
(記 BOARD_SIZE = n)
其中我定義座標 。一盤棋最多會有 步,因此需要 bytes 的大小來存取資料,並預留一個 byte 存 \0
。
接著我讓程式在進行移動時用 history_append_move()
將資料存入歷史紀錄,並用 history_next_board()
在該盤棋結束時將地址一向下一個紀錄。
最後我定義了 kxo 的 ioctl
interface 讓使用者能夠向 kernel 獲取儲存的歷史盤面,如以下用法。
程式輸出如下。
commit 1777226
在每次繪製盤面後,使用 gettimeofday()
以及 localtime()
來將時間轉換為當地時間,最後用 strftime()
將時間轉為字串並顯示出來,範例如下。
commit ef3fa9b
在結束 kxo
時會將 attr_obj.end
設為 1
,但在下次呼叫 kxo
時並未重置而造成卡死。因此我將初始化從 kxo_init()
移至 kxo_open()
以保證每次執行都有全新的初始值。