觀看 http://zh.wikipedia.org/wiki/Typedef
原來 在C++
宣告struct時自動已經幫你typedef加上去了
在C常常看到
typedef struct Name{
...
} Name;
這種寫法,可以在宣告時少寫"struct"
struct 跟一般變數不太一樣的地方,應該是還需要一個table紀錄一些成員的資訊
落花水面皆文章
有時候覺得看書似懂非懂,但只要實際摸過就會覺得: 其實也沒有什麼啊
2008年2月29日 星期五
2008年2月28日 星期四
Othello Game
一年多前修AI時寫的程式
昨天翻出來看一下,整理一下
之前對OO的概念還不太懂 ( 現在也沒多懂,只是稍微了解的程度 )
利用下面的方法就可以做一個可以同時當Application跟Applet的程式
當在寫一些比較不牽涉系統資源的程式,這樣做還挺不錯的( 例如Game )
實做JApplet這介面是為了瀏覽器,讓你的瀏覽器以Plugin的方式執行程式
當然要先安裝JVM及在瀏覽器上裝Plugin
public class myApplet extends JApplet {
private myApplect application;
// Application 的 Entry Signature
public static void main(String[] args)
{
application = new myApplet();
application.init();
}
// Applet 的 Entry Point Signature
public void init()
{
// 開始實作內容
}
}
至於AI的部份
用很簡單的搜尋法
heuristic function( 每個可以下的位置 ) = 可以吃的子數 * w1 + 下一回可以吃的子數 * w2 + 下一回最多被吃的子數 * w3 + 是否為C-square * w4 + 是否為X-square * w5 + 是否為邊點 * w6 ...
直接玩( 當作Applect )
http://s-web.nctu.edu.tw/users/u9516577/WWW/test.html
或是抓下來( 當作Application )
http://s-web.nctu.edu.tw/users/u9516577/WWW/Game.jar
2008年2月27日 星期三
2008年2月26日 星期二
C
C語言是一個很有彈性的程式語言
可以繁複,可以簡約
可以華麗,可以樸實
可以高階,可以低階
實在很佩服設計這個語言的人
讓我讚嘆不已
今天稍微嘗試一下簡單OOP in C, sweet
#ifndef COMMON_H
#define COMMON_H
#define SHAPE int X;\
int Y;\
void (*Draw)( struct Shape* );
typedef struct Shape {
SHAPE;
} Shape;
typedef struct Circle {
SHAPE;
int radius;
void (*SetRadius)( struct Circle* , int);
} Circle;
Circle* New_Circle( int );
typedef struct Square {
SHAPE;
int Xdim;
int Ydim;
void (*SetDimension)( struct Square* ,int, int );
} Square;
Square* New_Square( int, int );
#endif
[ circle.c ]
#include "common.h"
static void Draw( struct Shape* shape )
{
Circle *circle = ( Circle * ) shape;
printf( "drawing a circle, radius : %d \n", circle -> radius );
}
void SetRadius(struct Circle* c, int r )
{
c -> radius = r;
}
Circle* New_Circle(int r)
{
Circle *circle = ( Circle* ) malloc( sizeof(Circle) );
circle -> radius = r;
circle -> SetRadius = SetRadius;
circle -> Draw = Draw;
return circle;
}
[square.c]
#include "common.h"
static void Draw( struct Shape* shape )
{
Square* sq = (Square*) shape;
printf( "dwawing a square, area:%d\n" , ( sq->Xdim * sq->Ydim ) );
}
void SetDimension( struct Square* sq,int X, int Y)
{
sq -> Xdim = X;
sq -> Ydim = Y;
}
Square* New_Square( int Xdim, int Ydim)
{
Square* sq = ( Square* ) malloc( sizeof( Square ) );
sq -> Xdim = Xdim;
sq -> Ydim = Ydim;
sq -> Draw = Draw;
sq -> SetDimension = SetDimension;
return sq;
}
[ main.c]
int main()
{
Shape* shapeCollection[ 3 ];
shapeCollection[ 0 ] = (Shape*) New_Circle( 10 );
shapeCollection[ 1 ] = (Shape*) New_Square( 4, 3 );
shapeCollection[ 2 ] = (Shape*) New_Circle( 3 );
int i;
for( i = 0; i < 3; ++i )
shapeCollection -> Draw( shapeCollection[ i ] );
return 0;
}
[ output ]
drawing a circle, radius : 10
dwawing a square, area:12
drawing a circle, radius : 3
2008年2月24日 星期日
2008年2月16日 星期六
2008年2月13日 星期三
開始弄點論文
開始衝論文了
關於IFC
Industry Foundation Classes
有些人相信用這些東西可以用來當作一種Protocol
讓不同的Software可以溝通
他其實是一種Product的描述語言,藉由一些OO概念
以Express File或是XML存在
IfcProject -> IfcSite -> IfcBuilding -> IfcStoery -> IfcBuildingElement
不僅如此,一些如時間也可以屬性存在
他除了描述形狀,位置,能夠描述更多的東西
這個標準還在發展當中,算是有潛力成為ISO的玩意
但好像沒什麼學術的味道
我想能夠畢業就好了
白天弄論文,晚上玩我的
2008年2月11日 星期一
I will be back
要回新竹了,這次待得挺久的
身上增加了不少肥肉
應該要把他們甩掉才是
給自己一個小目標吧
每個禮拜跑15Km, 伏地挺身150下
我想自我激勵的Daemon, Priority要提高一點了XD
新竹好冷
體重不爭氣的跑到82kg . 目標75啊 orz
2008年2月10日 星期日
2008年2月9日 星期六
little hack of keyboard
過年有點無聊。嘗試玩了一下windows device driver
參考 : http://www.catch22.net/tuts/kernel1.asp
首先要下載WINDDK, driver development kit 裡面是建構driver的環境
包含 compiler, linker, 及一些lib, header
使用C語言,好像沒有用到clib ...
嘗試修改鍵盤的驅動程式
windows鍵盤滑鼠訊號傳遞大概是長這樣( 也許有錯 )
硬體 -> kbdfilter.sys -> kdbclass.sys -> Application
kdbfilter 這一個可能是某種裝置的驅動程式( 例如usb 或 ps/2 )
kdbclass 這一個接著處理鍵盤的輸入pass給Application
修改
[kdbclass.c]
VOID
KeyboardClassServiceCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PKEYBOARD_INPUT_DATA InputDataStart,
IN PKEYBOARD_INPUT_DATA InputDataEnd,
IN OUT PULONG InputDataConsumed
)
{
... 省略
ULONG i;
ULONG num;
ULONG keycode;
PKEYBOARD_INPUT_DATA data;
data = InputDataStart;
num = InputDataEnd-InputDataStart;
for(i=0;i
DbgPrint("Keyboard Filter Driver Sample - keycode=%u\n",keycode );
data++;
}
... 省略
}
重點是以下兩個東東
InputDataStart 鍵盤輸入的資料,Pointer到buffer起始位置
InputDataEnd 鍵盤輸入的資料,Pointer到buffer起始位置
Scan Code
scan make 1 就是MakeCode
[ntddkbd.h]
typedef struct _KEYBOARD_INPUT_DATA {
USHORT UnitId;
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
ULONG ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;
利用Debugview就可以看到鍵盤的輸入了...
從kernel mode直接取得,而沒有透過一些API
2008年2月7日 星期四
胖
我算對體重還蠻敏感的
以前我曾經很胖,從開始記得事情以來,總是被叫胖子
一直到大學最後一年才瘦下來
胖子會不會受到大家的歡迎,幾乎是一點都沒錯,但也有一些例外
但現在我差不多在標準體重了
我很能體會一些很胖人的感覺
當我很胖時,我總是認為自己"還沒那麼胖"
但這是很恐怖的事情,因為自己對事情的了解總是沒那麼正確
需要外在更可以陳述事實的東西---體重計
所以我買了一台不錯體重計,電子式的
每天照三餐量體重,隨時追蹤紀錄
我記得最重的時候...125Kg, 現在我差不多80吧?
我到底了解自己多少部份了呢
不到30%, 保守估計
剛剛看了"象人"這部電影
一個畸形的人,但他的內心卻是像一張白紙一樣...
如果身旁有這樣的人,我該用什麼態度面對他呢
2008年2月6日 星期三
deer hunter
中文名稱好像是"越戰獵鹿人"
"This story is neither an accusation nor a confession and, least of all, an adventure because death is not an adventure to those who stand face to face with it. It will try simply to tell of a generation of men who, even though they may have escaped its shells, were destroyed by the war..."
把西線無戰事的序拿來解釋這部電影,再適合不過了
2008年2月5日 星期二
Taxi driver
勞勃狄尼洛看著窗外,慵懶的開著計程車
一部充滿自省味道的電影
主角因為患有失眠的毛病,所以半夜在開計程車
興趣是看看情色電影,他認為自己是一個孤獨的人
他嘗試去接觸別人,但得到冷酷的回應,人與人之間總是充滿誤解
有一天她忽然有一些想法,I should do something
他準備暗殺一位總統候選人,這邊也許是為了報復那位誤解他的女生,不過他沒有成功
最後他殺進一個私娼寮,一個充滿雛妓、毒蟲、混混的地方
他想要幫助一個叫Aries的女孩,有一次她想要逃離那個地方,但是在車上被boss拉回去
他想要幫助她離開那個地方
非常值得一看的電影!