程式設計作品一覽
C
‧猜數字 - Guess
‧多人聊天室 - Boy Meets Girl
C++
‧嗶嗶歌 - Beep Song
‧嗶嗶歌2 - Beep Song for Windows
‧記憶遊戲 - Memory
‧即時傳訊 - Messenger
‧奧塞羅棋 - Othello
‧大數運算 - Large Integer
‧Base64 編碼/解碼器
‧連結串列 - Linked List
PHP
‧擲骰子 - Dice
‧小小樂透彩 - Lottery
‧猜數字 - Guess (PHP ver.)
Javascript
‧奧塞羅棋 - Othello (JS ver.)
‧卡坦島 - The Settlers of Catan
NOTICE
7月 11, 2009
【作品】連結串列 - Linked List
沒什麼,就只是個 Linked List(炸)。
程式說明
這東西是根據 C++ STL(Standard Template Library,標準模板函式庫) 的 list 函式介面寫出來的東西,所以使用方法也都相同。
要使用這個 Linked List 類別,需要先引入 include 資料夾中的 list.h 標頭檔。然後,不同於「正牌」Linked List,我的類別名稱採用的是首字母大寫的駱駝體(CamelCase)。詳細的用法可以參考檔案裡面的 main.cpp 跟 STL 函式庫說明。
總覺得這程式 bug 應該很多,請各位鞭小力點XD
程式連結

更新紀錄:
其他
題外話:這程式是教授要我們回去練習寫的。
不過他要的其實只是個 character 型態的 Linked List 罷了(炸)。
程式說明
這東西是根據 C++ STL(Standard Template Library,標準模板函式庫) 的 list 函式介面寫出來的東西,所以使用方法也都相同。
要使用這個 Linked List 類別,需要先引入 include 資料夾中的 list.h 標頭檔。然後,不同於「正牌」Linked List,我的類別名稱採用的是首字母大寫的駱駝體(CamelCase)。詳細的用法可以參考檔案裡面的 main.cpp 跟 STL 函式庫說明。
總覺得這程式 bug 應該很多,請各位鞭小力點XD
程式連結

更新紀錄:
‧09/07/11 正式公開貼出。
其他
題外話:這程式是教授要我們回去練習寫的。
不過他要的其實只是個 character 型態的 Linked List 罷了(炸)。
4月 01, 2009
【作品】多人聊天室 - Boy Meets Girl
程式設計實習(二)的作業。雖然題目的要求只有雙方輪流一人一句的同步(synchronous)對話、離開聊天室的指令跟聊天紀錄檔(Log File)。不過,後來我又加上了藉由多執行緒(multithread)功能以實現的多人聊天功能。附上程式碼,歡迎各位隨時指正錯誤。
程式說明
要使用此聊天室,必須要先開啟 exe/Server 目錄下的 Server.exe 檔。
在預設情況下,Server 使用的 Port 為 6250。若是要改變聊天室 Server 端所開的 Port,需要透過命令列參數的方式,直接以第一個參數傳入埠號。例如:以 1500 的 Port 開啟聊天室:
開啟 Server 端之後,就可以供他人(或是你自己)利用 exe/Client 目錄下的 Client.exe 檔來連線。
在預設情況下,Client 會連線到 127.0.0.1 (本機 IP)的 6250 Port。所以同樣的,我們可以透過命令列參數來指定連線的 IP 與 Port:
連線成功之後,就可以開始對話了。其中,Server 只負責收訊息,以及發送訊息給所有連線的 Client,所以並不能參予聊天。
要離開聊天室,則直接在訊息中輸入 "/Bye"。送出之後,則無法再發送訊息,但仍可以收到 Server 與其他 Client 發送來的訊息。再按下任意鍵,就可以關閉聊天視窗了。
程式下載

更新紀錄:
其他
其實這個還沒做完XD
程式說明
要使用此聊天室,必須要先開啟 exe/Server 目錄下的 Server.exe 檔。
在預設情況下,Server 使用的 Port 為 6250。若是要改變聊天室 Server 端所開的 Port,需要透過命令列參數的方式,直接以第一個參數傳入埠號。例如:以 1500 的 Port 開啟聊天室:
Server 1500
開啟 Server 端之後,就可以供他人(或是你自己)利用 exe/Client 目錄下的 Client.exe 檔來連線。
在預設情況下,Client 會連線到 127.0.0.1 (本機 IP)的 6250 Port。所以同樣的,我們可以透過命令列參數來指定連線的 IP 與 Port:
Client 127.0.0.1 1500
連線成功之後,就可以開始對話了。其中,Server 只負責收訊息,以及發送訊息給所有連線的 Client,所以並不能參予聊天。
要離開聊天室,則直接在訊息中輸入 "/Bye"。送出之後,則無法再發送訊息,但仍可以收到 Server 與其他 Client 發送來的訊息。再按下任意鍵,就可以關閉聊天視窗了。
程式下載

更新紀錄:
‧09/04/01 正式公開貼出。
其他
其實這個還沒做完XD
1月 04, 2009
【作品】卡坦島 - The Settlers of Catan
Web Programming Final Project。
程式說明
還沒完成,等完成再來更新。
程式連結

更新紀錄:
碎碎念
怎麼最近都是沒完成的東西阿 Orz
程式說明
還沒完成,等完成再來更新。
程式連結

更新紀錄:
‧09/01/04 完成第一階段,正式貼出。
碎碎念
怎麼最近都是沒完成的東西阿 Orz
12月 15, 2008
【作品】奧塞羅棋 - Othello (JS ver.)
沒錯,這個跟之前的某篇文章一樣,又是奧塞羅棋。不過這是用來練習 Javascript 的作品,算是 Web 程式設計課期末報告前的試驗作。
程式說明
還沒完成,等完成再來更新。
程式連結

更新紀錄:
其他
IE 似乎不支援 PNG 背景底圖,所以有些圖背景會變成灰色的......。雖然已經找到方法解決,但是需要犧牲一點寫 CSS 的可維護性(?),實在是讓我不太滿意。
所以,讓我趁機幫忙打個廣告,請支持 Firefox(被拖走)!
程式說明
還沒完成,等完成再來更新。
程式連結

更新紀錄:
‧08/12/11 正式公開貼出。
‧08/12/12 修正悔棋不會變更下棋者的 bug。
‧08/12/15 修正 IE 不支援 PNG 透明背景的問題。
其他
IE 似乎不支援 PNG 背景底圖,所以有些圖背景會變成灰色的......。雖然已經找到方法解決,但是需要犧牲一點寫 CSS 的可維護性(?),實在是讓我不太滿意。
所以,讓我趁機幫忙打個廣告,請支持 Firefox(被拖走)!
11月 07, 2008
【作品】大數運算 - Large Integer
在比完今年(96 年)的資訊學科能力測驗後,有一題因為需要輸出 122 位的整數而無法得分。後來才發現,這種超過變數所能代表的最大整數,稱為超長整數,或通稱為大數運算。
因為沒解出來的怨念,所以過了不久,我就花了幾個晚上,使用類別的方式將它完成了。
程式說明
這支程式(或者該說是一個函式庫)宣告了一個large類別。成員變數包含一個代表正負號的布林(boolean)變數,以及一個用來"裝"數字的"字元向量(vector)容器字串(string)"。
至於大數的運算,我使用重載運算子(operator overloading)重載了許多的運算符號,因此可以直覺的使用運算符號來做大數的演算。
Constructors:
Operators:
Functions:
要使用這個類別,直接引括"large.h"這個標頭檔,並在編譯器連結指令加上"-llarge",就可以了。
以下是一個大數運算的使用範例:
假如有遺漏什麼運算子,麻煩提醒我。若是有什麼錯誤跟意見,也歡迎提出來。
程式下載

更新紀錄:
因為沒解出來的怨念,所以過了不久,我就花了幾個晚上,使用類別的方式將它完成了。
程式說明
這支程式(或者該說是一個函式庫)宣告了一個large類別。成員變數包含一個代表正負號的布林(boolean)變數,以及一個用來"裝"數字的"
至於大數的運算,我使用重載運算子(operator overloading)重載了許多的運算符號,因此可以直覺的使用運算符號來做大數的演算。
Constructors:
‧建構子
large(void);
large(const int &); UPDATE
large(const char[]); UPDATE
large(const std::string &); NEW
large(const large &); NEW
‧解構子
~large(void);
Operators:
‧指派運算子(支援大數、整數或C式字串)
void operator=(int);
void operator=(const char *);
void operator=(const std::string &); NEW
‧正負號
large operator+(void);
large operator-(void);
‧四則運算、取餘數
large operator+(large);
large operator-(large);
large operator*(large);
large operator/=(large);
large operator%(large);
‧複合運算子
large operator+=(large);
large operator-=(large);
large operator*=(large);
large operator/(large);
large operator%=(large);
‧(前置/後置)遞增、遞減
large operator++(int);
large operator++(void);
large operator--(int);
large operator--(void);
‧邏輯運算
bool operator>(large);
bool operator>=(large);
bool operator<(large);
bool operator<=(large);
bool operator==(large);
bool operator!=(large);
‧位元運算(使用十進位,非二進位)
large operator>>(int);
large operator<<(int);
‧標準輸入、標準輸出
friend std::istream& operator>>(std::istream &, large &);
friend std::ostream& operator<<(std::ostream &, const large &);
‧隱式型別轉換(large → char *)
operator char *(void);
Functions:
‧取得大數長度
int size(void);
int length(void); NEW
‧取絕對值
large abs(void);
‧傳回是否為負數
bool is_negative(void); NEW
‧傳回是否為零
bool is_zero(void); UPDATE
要使用這個類別,直接引括"large.h"這個標頭檔,並在編譯器連結指令加上"-llarge",就可以了。
以下是一個大數運算的使用範例:
#include <iostream>
#include "large.h"
using namespace std;
int main(void)
{
large a, b;
cout << "Please ENTER two number a and b: ";
cin >> a >> b;
cout << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl << endl;
cout << "a > b ? " << (a > b) << endl;
cout << "a < b ? " << (a < b) << endl;
cout << "a = b ? " << (a == b) << endl << endl;
cout << "a + b = " << a + b << endl;
cout << "a - b = " << a - b << endl;
cout << "a * b = " << a * b << endl;
cout << "a / b = " << a / b << endl;
cout << "a % b = " << a % b << endl << endl;
cout << "a++ = " << a++ << endl;
cout << "a = " << a << endl;
cout << "++a = " << ++a << endl;
cout << "a = " << a << endl << endl;
cout << "b-- = " << b-- << endl;
cout << "b = " << b << endl;
cout << "--b = " << --b << endl;
cout << "b = " << b << endl << endl;
cout << "a << 4 = " << (a << 4) << endl;
cout << "a >> 1 = " << (a >> 1) << endl << endl;
system("pause");
}
假如有遺漏什麼運算子,麻煩提醒我。若是有什麼錯誤跟意見,也歡迎提出來。
程式下載

更新紀錄:
‧08/04/05 正式貼出此類別庫。
‧08/05/04 將類別庫從 big 改名(正名?)為 large。
‧08/09/19 將程式改寫成可標準輸入超過 500 位的數字。
‧08/11/07 將代表數字的 vector<char> 改成 string。
‧08/11/07 部分函式內容改寫、更名。
4月 13, 2008
【作品】Base64 編碼/解碼器
由於Firefox網頁顯示快,擴充性又高(數不清的外掛),我本人算是Firefox的愛好者。奇怪了,這隻程式跟Firefox又有什麼關係呢?
說老實話,其實可以說一點關係都沒有。不過當初,我在亂翻Firefox的資料夾時,發現Firefox的Search Plugins都是用XML寫的。
我興致一發,就開始嘗試分析XML的架構。後來,在Image的標籤中,看到了以下的"未知文字":
R0lGODlhEAAQAJECAP8AAAAAAP///wAAACH5BAEAAAIALAAAAAAQA
BAAAAIplI+py+0NogQuyBDEnEd2kHkfFWUamEzmpZSfmaIHPHrRgu
Um/fT+UwAAOw==
理論上,這應該是Search Plugins旁的小ICON。但是,對於這一長串東西,實在看不出是什麼。後來一問之下,才發現這是叫做Base64的編碼法。
後來,就先把做Search Plugins的事丟在一旁。參考Wikipedia條目的編碼原理,試著把Base64的編碼/解碼程式寫出來,實現它。
程式說明
這支程式只能使用命令提示工具執行。如下圖:

程式的預設動作為編碼(Encode)。假如想改變預設動作為解碼(Decode),須輸入指令"/decode"。同理,若是想改回編碼,則須輸入指令"/encode"。
你也可以一次幫很多檔案作編碼動作。只要圈選所有欲編碼的檔案,直接拖曳到程式圖示就可以了(由於一開始的預設動作都是編碼,因此無法做批次解碼)。
此外,只有副檔名為.ba64的檔案能進行解碼。
程式下載
說老實話,其實可以說一點關係都沒有。不過當初,我在亂翻Firefox的資料夾時,發現Firefox的Search Plugins都是用XML寫的。
我興致一發,就開始嘗試分析XML的架構。後來,在Image的標籤中,看到了以下的"未知文字":
R0lGODlhEAAQAJECAP8AAAAAAP///wAAACH5BAEAAAIALAAAAAAQA
BAAAAIplI+py+0NogQuyBDEnEd2kHkfFWUamEzmpZSfmaIHPHrRgu
Um/fT+UwAAOw==
理論上,這應該是Search Plugins旁的小ICON。但是,對於這一長串東西,實在看不出是什麼。後來一問之下,才發現這是叫做Base64的編碼法。
後來,就先把做Search Plugins的事丟在一旁。參考Wikipedia條目的編碼原理,試著把Base64的編碼/解碼程式寫出來,實現它。
程式說明
這支程式只能使用命令提示工具執行。如下圖:
程式的預設動作為編碼(Encode)。假如想改變預設動作為解碼(Decode),須輸入指令"/decode"。同理,若是想改回編碼,則須輸入指令"/encode"。
你也可以一次幫很多檔案作編碼動作。只要圈選所有欲編碼的檔案,直接拖曳到程式圖示就可以了(由於一開始的預設動作都是編碼,因此無法做批次解碼)。
此外,只有副檔名為.ba64的檔案能進行解碼。
程式下載
4月 04, 2008
【作品】猜數字 - Guess (PHP ver.)
這個猜數字,跟我之前發表用C寫的猜數字並無二致,規則當然也相同。只是由於當時正在學PHP的關係,老師又正好看到我寫出來的猜數字,便要我寫一個PHP版本的出來。
程式說明
我們沒什麼好說的,有問題看之前那篇。
程式連結
程式說明
我們沒什麼好說的,有問題看之前那篇。
程式連結
4月 03, 2008
【作品】小小樂透彩 - Lottery
話說台灣人的天性就是賭!根據甄虎滥專家所言,這是由於當初華人不顧台灣海峽危險,冒險犯難、賭命的精神,才造就了這種特殊的性格。因此,樂透彩自然是台灣人不可少的"休閒活動"!
扯太遠了。這支程式是當初學PHP時,Tory PHP講義裡的進階題(進階嗎)。因為感覺還滿有趣的,就把它做出來了。
程式說明
規則比照實際樂透彩玩法(只是不提供電腦選號)。
什麼?你不知道樂透怎麼玩?你還算台灣人嗎(毆)!好啦,讓我們大致簡介一下規則。
首先,共有1~42號,玩家先選擇6個號碼之後按下Play即可。得什麼獎就根據你的號碼與電腦開出的號碼相同的數量。至於中多少個,得什麼獎,網頁裡就有說明。
程式連結
扯太遠了。這支程式是當初學PHP時,Tory PHP講義裡的進階題(進階嗎)。因為感覺還滿有趣的,就把它做出來了。
程式說明
規則比照實際樂透彩玩法(只是不提供電腦選號)。
什麼?你不知道樂透怎麼玩?你還算台灣人嗎(毆)!好啦,讓我們大致簡介一下規則。
首先,共有1~42號,玩家先選擇6個號碼之後按下Play即可。得什麼獎就根據你的號碼與電腦開出的號碼相同的數量。至於中多少個,得什麼獎,網頁裡就有說明。
程式連結
4月 02, 2008
【作品】奧塞羅棋 - Othello
以前其實我不太會玩Othello,連跟電子辭典那種超級弱的電腦都可以下輸。之後,在我老爸的指點之下,才發現原來我犯的是標準的新手病,只挑能吃最多子的地方下。為了示範該怎麼下,老爸就用當時Windows XP內建的網際網路黑白棋,來實際下一次給我看。
之後,只要晚上我們兩個有空(應該說是等我老爸有空,當時我閒的很),就會坐在電腦前邊跟網路上的對手下,邊研討兩個人的"戰術"。
雖然到最後,只剩下我仍會在無聊時,打開"網際網路黑白棋"找對手下棋。不過也在跟許多高手的對決中學了幾招。
擁有這種經驗,Othello理所當然是我最喜愛的棋奕遊戲。又因為看了學長的大學作業(他做的是五子棋),覺得相當有趣。想說不如模仿它,改做出一個Othello棋。正好那時也想測試看看Winsock的使用,所以這支程式就這麼做出來了。
程式說明
奧賽羅棋,又稱黑白棋或是蘋果棋。規則是兩個自己的子連成一線,即可把連線中對方的子吃掉。直到雙方都無法繼續下棋時,棋子數量多的人就贏了。
這裡我們不花太多時間解釋規則,對規則還是不了解的可以查查Wikipedia的條目。
這個程式能夠單機雙人,兩人用同一台電腦輪流下、連線雙人,藉由輸入IP讓一方連到另一方的電腦兩人對戰。除此之外,還有一個單機單人,就是跟我寫的一個超簡易的AI對戰。不過這個AI一點都不強就是了。


程式下載

其他
原本想作出強一點的AI,或是製作視窗版的程式,現在都遲遲沒動作。我的懶的確該檢討了.....。
之後,只要晚上我們兩個有空(應該說是等我老爸有空,當時我閒的很),就會坐在電腦前邊跟網路上的對手下,邊研討兩個人的"戰術"。
雖然到最後,只剩下我仍會在無聊時,打開"網際網路黑白棋"找對手下棋。不過也在跟許多高手的對決中學了幾招。
擁有這種經驗,Othello理所當然是我最喜愛的棋奕遊戲。又因為看了學長的大學作業(他做的是五子棋),覺得相當有趣。想說不如模仿它,改做出一個Othello棋。正好那時也想測試看看Winsock的使用,所以這支程式就這麼做出來了。
程式說明
奧賽羅棋,又稱黑白棋或是蘋果棋。規則是兩個自己的子連成一線,即可把連線中對方的子吃掉。直到雙方都無法繼續下棋時,棋子數量多的人就贏了。
這裡我們不花太多時間解釋規則,對規則還是不了解的可以查查Wikipedia的條目。
這個程式能夠單機雙人,兩人用同一台電腦輪流下、連線雙人,藉由輸入IP讓一方連到另一方的電腦兩人對戰。除此之外,還有一個單機單人,就是跟我寫的一個超簡易的AI對戰。不過這個AI一點都不強就是了。

程式下載

其他
原本想作出強一點的AI,或是製作視窗版的程式,現在都遲遲沒動作。我的懶的確該檢討了.....。
3月 31, 2008
【作品】擲骰子 - Dice
這個是我初學PHP寫的小遊戲。奇怪的遊戲,說真的完全看不出有趣在哪,規則好像是老師發明的?
程式說明
這是一個擲骰子比賽。利用三個骰子,擲出後,直到有任二粒點數相同時,比較另一粒骰子的點數,較大者為贏。
例:A方擲出335,B方擲出443,則A方贏;A方擲出666,B方擲出443,則B方贏。
程式連結
程式說明
這是一個擲骰子比賽。利用三個骰子,擲出後,直到有任二粒點數相同時,比較另一粒骰子的點數,較大者為贏。
例:A方擲出335,B方擲出443,則A方贏;A方擲出666,B方擲出443,則B方贏。
程式連結
3月 29, 2008
【作品】即時傳訊 - Messenger
這是繼記憶遊戲之後,再次嘗試Win32 API的作品。這一次,主要是想嘗試網路連線(Winsock)的功能。
程式說明
操作相當容易,Server端(請別人連線到你的電腦)請點擊功能表→檔案(F)→等待(W),Client端(連線到別人電腦)則是點擊功能表→檔案(F)→連線(C)再輸入對方IP。


程式下載

其他
除了功能陽春外,訊息的輸入會有"滑出去"的現象(很難解釋,不知道我在說什麼的,可以自己使用試看看)。這個問題還不知道怎麼解決,還請知道的人告知一聲。
程式說明
操作相當容易,Server端(請別人連線到你的電腦)請點擊功能表→檔案(F)→等待(W),Client端(連線到別人電腦)則是點擊功能表→檔案(F)→連線(C)再輸入對方IP。

程式下載

其他
除了功能陽春外,訊息的輸入會有"滑出去"的現象(很難解釋,不知道我在說什麼的,可以自己使用試看看)。這個問題還不知道怎麼解決,還請知道的人告知一聲。
3月 26, 2008
【作品】記憶遊戲 - Memory
這款遊戲是我初次嘗試Win32 API所寫出來的程式。用的是去年的暑假,花了一個禮拜的時間,請我的同學們努力地幫我邊玩邊測試,好不容易弄出來的東西。隔了一段時間,另外在遊戲中加了功能表。
程式說明
由於並沒有附說明文件,在這裡簡要的把規則說明一下:
遊戲總共分為十關。開始遊戲時,會有三秒的時間供大家記憶所有圖案的位置。規則相當簡單,在所有覆蓋的格子中,翻出一對繪有相同圖案的區塊,即屬完成一組配對。只要在限定時間內,令所有覆蓋的區塊完成配對即可晉級下一關。

時間的計算採累計制,晉級時剩下時間的三分之一,會以累加的方式計算到下一關。為什麼會這樣呢?因為到了最後一關,基礎時間就會只剩下15秒囉!為了能夠撐過最後一關,可要好好累計時間才行!分數的計算也相當簡單,是由各關的配對數×10+剩餘時間×5-翻動次數。

另外,這款遊戲有附加特殊的"道具組合"!目前的道具組合共有5種:

SCORE+:目前的總分 +50 分。(Stage 2 出現)

TIME+:剩餘時間 +10 秒。(Stage 3 出現)

SCORE/2:目前的總分剩一半(驚)。(Stage 5 出現)

TIME-:剩餘時間 -10 秒。(Stage 7 出現)

囧rz:(笑)把所有配對的排翻回去(回到覆蓋狀態)。(Stage 9 出現)
特別注意!具有加成效果的道具組合(例如加分、加時間)需要配對成功才會啟用,且只要配對一次失敗,就會變回普通圖案喔!而具破壞效果的道具組合(例如扣分、扣時間)則相反,只要配對成功就會失去效用,但是一旦配對失敗就會啟動效果,在記憶時間要特別注意這點喔!
最後還有右下角的TOP5,可以用來記錄單台電腦的五個最高分數。
程式下載

其他
其實這款遊戲的雛形,是來自Morrison先生出版的《從中作學-遊戲程式設計》書附光碟裡的小遊戲,經我加上時間限制、總分加總、數字圖型化等功能完成的。感謝他的書使我有能力完成這款遊戲。有興趣的人可以去翻翻他的書,我認為相當適合入門學習。當然,以這本來說,你需要有一定的C++基礎。
另外,NT 學長有做出記憶遊戲的AJAX網路版,有興趣請點 這裡。
程式說明
由於並沒有附說明文件,在這裡簡要的把規則說明一下:
遊戲總共分為十關。開始遊戲時,會有三秒的時間供大家記憶所有圖案的位置。規則相當簡單,在所有覆蓋的格子中,翻出一對繪有相同圖案的區塊,即屬完成一組配對。只要在限定時間內,令所有覆蓋的區塊完成配對即可晉級下一關。

時間的計算採累計制,晉級時剩下時間的三分之一,會以累加的方式計算到下一關。為什麼會這樣呢?因為到了最後一關,基礎時間就會只剩下15秒囉!為了能夠撐過最後一關,可要好好累計時間才行!分數的計算也相當簡單,是由各關的配對數×10+剩餘時間×5-翻動次數。

另外,這款遊戲有附加特殊的"道具組合"!目前的道具組合共有5種:

SCORE+:目前的總分 +50 分。(Stage 2 出現)

TIME+:剩餘時間 +10 秒。(Stage 3 出現)

SCORE/2:目前的總分剩一半(驚)。(Stage 5 出現)

TIME-:剩餘時間 -10 秒。(Stage 7 出現)

囧rz:(笑)把所有配對的排翻回去(回到覆蓋狀態)。(Stage 9 出現)
特別注意!具有加成效果的道具組合(例如加分、加時間)需要配對成功才會啟用,且只要配對一次失敗,就會變回普通圖案喔!而具破壞效果的道具組合(例如扣分、扣時間)則相反,只要配對成功就會失去效用,但是一旦配對失敗就會啟動效果,在記憶時間要特別注意這點喔!
最後還有右下角的TOP5,可以用來記錄單台電腦的五個最高分數。
程式下載

其他
其實這款遊戲的雛形,是來自Morrison先生出版的《從中作學-遊戲程式設計》書附光碟裡的小遊戲,經我加上時間限制、總分加總、數字圖型化等功能完成的。感謝他的書使我有能力完成這款遊戲。有興趣的人可以去翻翻他的書,我認為相當適合入門學習。當然,以這本來說,你需要有一定的C++基礎。
另外,NT 學長有做出記憶遊戲的AJAX網路版,有興趣請點 這裡。
3月 25, 2008
【作品】猜數字 - Guess
這個是我一直很喜歡玩的一個遊戲。兩個人、三個人、或是更多人(目前最多人的紀錄是國中,全班30人一起玩)各寫下四個數字任憑對方猜。
直到高中,聽學弟那屆的資優班說,他們玩的是 6 個數字的猜數字花了兩節課都沒玩出來。
於是在上課時間(沒錯),我也找了隔壁的同學來玩看看(認真的同學不要學喔)。發現這種玩法真的比較難贏,隨便猜都可以有個 A、有個 B 的,唯一的問題就是不知道哪個是 A,哪個是 B。
不過,其實我們兩節課可以玩兩局(重申,認真的同學不要學)。而且其實某方贏的時候,另一方也快猜出來了。事實證明,學弟你們太遜拉(逃)。
咳,偏題了。總之因為如此,我寫出了這個遊戲。
程式說明

這個遊戲相信很多人都玩過吧!沒玩過不懂規則也沒關係,其實規則相當簡單。
遊戲開始時,電腦會自動產生一組四個數字組成的"答案"。玩家每次輸入四個數字,而以輸出幾 A 幾 B 來判斷猜對了多少個。
例如,1A 2B 即為四個數字中猜中三個數字,其中兩個數字位置錯誤。怎麼樣,夠簡單吧。
程式下載

其他
其實這款遊戲有個不小的缺點,就是如果不按格式輸入會造成結果錯誤。
例如原本"1 2 3 4"(有空格)輸入為"1234"(無空格)則不會輸出結果。因為程式的設定,就是以一個空白前的字為單位計算。
另外,玩家要是一次輸入超過四個數字,則會因為緩衝區的關係當做多次輸入。例如,"1 2 3 4 5 6 7 8"(視為輸入兩次)。
該怎麼說呢,其實我有點懶的修正。或許,以後吧(極端不負責任)。
直到高中,聽學弟那屆的資優班說,他們玩的是 6 個數字的猜數字花了兩節課都沒玩出來。
於是在上課時間(沒錯),我也找了隔壁的同學來玩看看(認真的同學不要學喔)。發現這種玩法真的比較難贏,隨便猜都可以有個 A、有個 B 的,唯一的問題就是不知道哪個是 A,哪個是 B。
不過,其實我們兩節課可以玩兩局(重申,認真的同學不要學)。而且其實某方贏的時候,另一方也快猜出來了。事實證明,學弟你們太遜拉(逃)。
咳,偏題了。總之因為如此,我寫出了這個遊戲。
程式說明
這個遊戲相信很多人都玩過吧!沒玩過不懂規則也沒關係,其實規則相當簡單。
遊戲開始時,電腦會自動產生一組四個數字組成的"答案"。玩家每次輸入四個數字,而以輸出幾 A 幾 B 來判斷猜對了多少個。
例如,1A 2B 即為四個數字中猜中三個數字,其中兩個數字位置錯誤。怎麼樣,夠簡單吧。
程式下載

其他
其實這款遊戲有個不小的缺點,就是如果不按格式輸入會造成結果錯誤。
例如原本"1 2 3 4"(有空格)輸入為"1234"(無空格)則不會輸出結果。因為程式的設定,就是以一個空白前的字為單位計算。
另外,玩家要是一次輸入超過四個數字,則會因為緩衝區的關係當做多次輸入。例如,"1 2 3 4 5 6 7 8"(視為輸入兩次)。
該怎麼說呢,其實我有點懶的修正。或許,以後吧(極端不負責任)。
【作品】嗶嗶歌2 - Beep Song for Windows
延續上一篇,剛開始寫出嗶嗶歌的時候,有興趣的人實在不多(畢竟是老哏?)。不過我的其中一位朋友可就不同了。他不僅在使用電腦時把他當背景音樂聽,還不斷催促我做出視窗版的。
作品有人支持,當然是心存感激(?)拉。後來花了一段時間,視窗版完成了!
程式說明
編音規則我沒有改變,只有將它視窗化而已。詳細的編音規則都寫在檔案的使用說明書裡了。

程式下載

其他
雖然是以前的作品了,不過老實說還沒真正完成。就是在播放時操作按鈕有點卡卡的,有機會再想辦法修正吧!
作品有人支持,當然是心存感激(?)拉。後來花了一段時間,視窗版完成了!
程式說明
編音規則我沒有改變,只有將它視窗化而已。詳細的編音規則都寫在檔案的使用說明書裡了。

程式下載

其他
雖然是以前的作品了,不過老實說還沒真正完成。就是在播放時操作按鈕有點卡卡的,有機會再想辦法修正吧!
3月 24, 2008
【作品】嗶嗶歌 - Beep Song
這支程式大約是半年前寫的。一開始,是在碰巧看到有人在論壇上詢問如何用C/C++做音樂播放程式。結果網友開玩笑的寫出Beep聲編出的小星星跟小蜜蜂。當然這東西也就如此提起了我的興趣。(有趣的是,只見網友發表Beep自編曲越來越熱烈,發問者的問題卻遲遲沒被解答。)
剛開始網友寫出的播放器(姑且這麼算吧),都是把曲調寫死在程式裡的。我的興致一發,想說何不寫個讀入個外部檔案當作樂譜,再把程式作成一個樂譜解析器,這樣只需要修改那個外部檔,就可以自由編曲了。
由於Beep()這個Function是以輸入的頻率決定音高的,所以我還到Wikipedia查了各個音高的頻率。經過一小段的製作時間,這個古怪的軟體就如此順應而生啦!
程式說明
這個簡單的編音器支援三個八度,還可以使用升記號(降記號以升記號代替)、半拍等功能,詳細的說明可以參照使用說明書。

雖然陽春,也被朋友的老爸說是老哏,甚至還有人一打開就跑來罵我怎麼是病毒(一打開就被嗶嗶聲嚇到了)。不過,有趣就好,不是嗎?
程式下載
剛開始網友寫出的播放器(姑且這麼算吧),都是把曲調寫死在程式裡的。我的興致一發,想說何不寫個讀入個外部檔案當作樂譜,再把程式作成一個樂譜解析器,這樣只需要修改那個外部檔,就可以自由編曲了。
由於Beep()這個Function是以輸入的頻率決定音高的,所以我還到Wikipedia查了各個音高的頻率。經過一小段的製作時間,這個古怪的軟體就如此順應而生啦!
程式說明
這個簡單的編音器支援三個八度,還可以使用升記號(降記號以升記號代替)、半拍等功能,詳細的說明可以參照使用說明書。

雖然陽春,也被朋友的老爸說是老哏,甚至還有人一打開就跑來罵我怎麼是病毒(一打開就被嗶嗶聲嚇到了)。不過,有趣就好,不是嗎?
程式下載
訂閱:
文章 (Atom)
Infinite Loop © 2008. Blog design by Blogcut | Converted by Fernandooo1 (Randomness)