August 23, 2006

Corewars 的 Gtk+ 2.x 移植

之前的 blog [弱肉強食?] 提過 Bell Lab 的年輕的科學家 H, Douglas McIlroy、Victor Vysottsky,以及 Robert T. Morris 在硬體上模仿生物的行為,進行「磁芯大戰」 (core war) 的實驗,而 SourceForge 上有個不錯的專案 [corewars] 用圖形來呈現 core war「廝殺」的變化,作者是 Walter Hofmann。可惜原本的 [corewars] 用 GTK+ 1.2 撰寫,且從 2000 年就停頓了,剛剛手癢,我就試著移植到 GTK+ 2.x,在 Ubuntu Edgy (GTK+ 2.10 / glibc 2.4 / GCC 4.1) 測試過可運作。

簡單來說,[corewars] 就是個 virtual machine,可依據需求載入多個程式,[corewars] 可用兩種類似 Assembly 的簡化語言來描述程式,分別為 Corewars 和 Redcode。預設是 Corewars 語言,易於學習和理解,而 Redcode 提供更高級和更強大的指令,但是需要更多的時間來學習。編譯並執行後,在 File 選單找 "Load Directory...",然後會看到以下畫面:

選定存放程式的路徑,這裡用內建的範例,接下來,決定哪些程式要載入並執行,在 File 選單找 "Select Programs...":

中間的欄位決定要放幾份副本到系統中,然後在 File 選單選擇 "Start",就開始「廝殺」了:

過程可是相當刺激呢 :-)

取得我修改過的原始程式碼 [corewars-0.9.13-gtk2.tar.bz2],授權方式為 GNU GPL。
由 jserv 發表於 August 23, 2006 02:50 PM
迴響

其實,我覺得好像是磁「芯」,不是「蕊」…

k3 發表於 August 23, 2006 08:48 PM

Dear Jserv:
我下載了您改過的 GTK+-2 版本,
在 make 的過程中,有以下的錯誤:

main-gui.o: In function `get_main_menu':
main-gui.c:(.text+0x140): undefined reference to `_gtk_accel_group_attach'
collect2: ld returned 1 exit status

我想,應該是把 gtk_accel_group_attach(accel_group, G_OBJECT (window));
換成 gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);

我用是 GTK+-2.8.20

hope this help !

Regards!

sddnd 發表於 August 23, 2006 11:38 PM

Dear sddnd,

FIXED now. 我剛剛重新打包,已將您的修正納入 (refer to ChangeLog),謝謝!

jserv 發表於 August 24, 2006 09:28 AM

Dear Jserv,

请问PCManX-Gtk2是不是你维护啊?似乎debian没有随源代码更新哦。报告一个Bug,0.3.4版在“主题阅读”文章正文时按方向键“<-”会直接退出版面回到版面列表,这一现象可以在newsmth.net重现,无论是否ssh登录。其他bbs似乎没有类似问题。

zhangchn 發表於 August 24, 2006 09:58 PM

謝謝您!
找到了gtk_accel_group_attach(accel_group, G_OBJECT (window));
換成 gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
不知有沒有gtk_menu_bar_set_shadow_type的GTK2.0的替代函式?
http://job.achi.idv.tw
http://achi.idv.tw

ㄚ琪 發表於 April 1, 2008 02:11 PM
發表迴響









記住我的資訊?