跳到主要內容

發表文章

目前顯示的是 2011的文章

中文試譯:Writing a game in Python with Pygame. Part I

原文作者: Eli Bendersky 原文連結: http://eli.thegreenplace.net/2008/12/13/writing-a-game-in-python-with-pygame-part-i/ 簡介 遊戲是最能應用程式設計技巧的領域之一。為了寫出最簡單的遊戲,你必須跟圖像、數學、物理甚至是人工智慧打交道。寫遊戲非常酷,而且也是練習程式設計的有趣方式。 如果你是Python的粉絲(就算你不是也無妨),並且對遊戲有興趣,那麼 Pygame 就是很屌的遊戲程式設計庫,你一定要注意它。它可以在所有主要的平台執行,並提供簡單的工具去管理複雜的、充滿變動與音效的世界。 在網路上有很多Pygame的教學,但大都太過簡單了。甚至是 Pygame book 都停留在入門的程度。為了達到更高的水準,我決定自己寫一套教學文件,希望可以為那些使用Pygame的朋友提供進階的學習。 這份教學鼓勵讀者去把玩程式碼,也非常建議對最後的練習題作些功課。這樣作可以讓你對這些教學有更好的瞭解。 預備知識 因為我在前面提過的理由,這份教學並不是給完全的初學者閱讀的。如果你才開始接觸 Pygame,先到這個 網頁 裡看一些基本的教學。這份 教學 也很適合初學Pygame。 在這篇文章,我假設你有下列知識:     >>Python(你不必是進階使用者,但也不能是完全的菜鳥)     >>基本的數學與物理(向量、矩形、運動定律、機率等等)。我會解釋所有不那麼明顯的部份,但我不會教你如何對向量作加法。     >>對Pygame有一些瞭解。你至少必須有瀏覽過在上面提到的教學裡的例子。 喔,還有一件事...這份教學主要考慮2D遊戲。3D有著另一層的困難度,我以後會提出一個自行開發一部份、簡單、不過足夠完整的3D demo。 我們開始吧! 在這個部份,我們最後會完成一個模擬 - 有著在地上爬的小生物,會蠕動,然後碰到牆壁也會反彈,並偶而改變它們的行進方向: 這當然不是一個遊戲,不過卻是一個很有用的開頭,讓我們可以實作不同的想法。我延遲給出這個遊戲最終會變成的模樣,當作給我自己的奢侈享受。 程式碼 part 1的完整程式碼...

2011 Summary and 2012 resolutions

今天是平安夜,接近2011的尾聲了,差不多是該為今年作個回顧,並為2012定幾個目標。 回顧2011,在專業上我有幾個比較大的轉變: 開始寫blog。我從9月下旬開始寫blog紀錄自己的學習心得,發現透過整理與解釋的過程會將一些凌散的知識作較系統的整理。我常常在google+零碎地紀錄想法,然後有空時就會整理好寫一篇blog,不管是閱讀的書籍或一些程式設計技巧,整理過後都明顯留下更深刻的印象,這個好習慣我會持續保持下去。 複習基礎學科。今年其實花了不少時間複習大學的基礎學科(不過我不是CS科班生,所以應該算第一次系統地學習這些知識:P),像是資料結構、演算法、計算機架構、函數式程式設計、作業系統、系統程式。在這過程深深感受基礎知識的重要性在實務上可以帶來多大的幫助,我希望自己可以不斷地以此為基礎延伸自己的軟體知識。在這個過程中,我讀到幾本獲益良多的書籍,推荐給大家: Introduction to computing :這本書是 University of Virginia 的CS入門課程用書,由他們自己的老師所寫。介紹了CS中重要的概念,並以Scheme語言作為媒介來進行程式設計,展現核心思想。從這本書我學習到了有別於imperative programming的方式,並預計繼續多看一些functional programming的資料。 Foundations of Computer Science :這是由大師 Al Aho 與 Jeff Ullman 所寫的CS入門書,雖定義為入門書,不過大師之作依然非常紮實,重要的CS概念解釋的非常清楚,極度推荐(我快讀完了,每章都有練幾題習題喔!)。 The Linux Programming Interfaces :這本書是Linux man page的維護者所撰寫,將user space程式所需的作業系統介面作了完整的介紹,可媲美以前的 Steven系列書籍 。 Data Structures and Algorithm Analysis in C :說來慚愧,唸書時雖然也有修過資料結構的課程,但那時並不是很有感受,直到工作後遇到不少問題,才慢慢去尋找相關資料來補齊,但一直沒有系統的整理過,所以找了一本風評不錯的教科書來研讀(但目前也只讀一半...)。各式的資料結構或算法分析與設計技巧雖然日常實...

From Nand to Tetris - Step I

如果有一本書,教導你如何從無到有設計一個計算機系統,並且最後可以在上面開發小遊戲,你的感覺如何?我覺得棒呆了!! 最近發現一本很好的電腦書籍 - The Elements of Computing Systems ,這本書就指導讀者如何從基本的邏輯元件設計開始,逐步地完成CPU、Memory、Assembler、Compiler、OS,最後則是一些小遊戲。所以在這個過程我們要學習如何撰寫HDL、如何設計CPU、如何設計memory、如何實作assembler、如何實作compiler、如何實作OS,到最後就是一些應用程式(我的目標是俄羅斯方塊)。 並且完全是依靠自給自足的開發環境來完成這個過程,所有的工具都是作者自行設計實作的,也都open source,可以盡情hack。 在網站上提供的各種教學文件非常完整且獨立,我們可以一步一步完成每個組件,讓新的組件依據我們前一個完成的基礎去運作,也可以隨意跳到喜歡的章節開始實作該組件,完成後可以進行模擬的測試。 這本書並不厚,因為作者在書中描述的主要是觀念,然後將工具的使用說明放在網站上,我蠻喜歡這種作法,因為這樣書籍可以專注在知識的呈現,而操作就在電腦上直接執行。由於我打算將這本書精讀,並實作每個projects,所以定一個hobby project給自己,就叫作FNTT好了,意思是From Nand to Tetris(這也是作者開的課程的名稱),今天剛完成第一章的習題(如果你也有興趣的話,歡迎一起參加這個 小專案 ),是用HDL設計幾個基本元件,截圖如下,很酷吧? :)

Priority Queues,again!!

在讀書時,只要有修過資料結構課程,一定都有接觸過 Priority Queue 的概念,priority queue的應用範圍很廣泛,也知道高效的Priority Queue一般都會以 Heap 來實作,但隨著遠離學生時代,每天在繁雜的軟體架構中求生存,不斷地把時間花在debug、了解現存介面的使用,有時不免讓人覺得有些疲憊(當然啦,有時開發某些模組還是頗有挑戰性,但我一般80%的時間的確都是勞力為主:P)。所以為了讓自己保持清醒,今晚就來複習一下Priority Queues的概念吧~ Priority Queues通常至少支援兩個操作:insert和delete_min。如果需要動態改變元素的priority,那麼還會再支援increase_priority, decrease_priority。甚至,有時會需要頻繁的合併多個Priority Queues,所以merge_priority_queue有時也是必要的,而高效的merge需要更複雜的heap,像是 binomial heap 或是 Fibonacci heap 。 讓我們先考慮基本操作:insert以及delete_min就好。如果只要支援這兩個操作,我們可以簡單地利用 binary heap 來完成。由於binary heap的結構通常非常精簡,可以array來實作,所以從任一元素找尋其parent與children都非常快速。以下是我用C語言的試作代碼。 注意:雖然我有針對使用的型別別作了一般化,但對於內建型別(如整數)可能會帶來些許性能損失。當然啦,如果用C++,就可以用 template specialization 把這個問題去除。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92...