用Python和Pygame寫遊戲-從入門到精通(實戰一:塗鴉畫板2)

發表於2015-12-26

趁熱打鐵趕快把我們這個畫板完成吧~

……鼠繪無能,不準笑!所有評論中“噗嗤”、“畫的好搓啊”、“畫的好棒啊”等,都會被我無情撲殺掉!但是能告訴我怎樣畫可以更漂亮的話,絕對歡迎。

上次講Brush的時候,因為覺得太簡單把color設定跳過了,現在實際寫的時候才發現,因為我們設定了顏色需要對刷子也有效,所以實際上set_color方法還有一點點收尾工作需要做:

也就是在設定color的時候,順便把筆刷的顏色也改了,但是要保留原來的alpha值,其實也很簡單就是了……

按鈕選單部分

上圖可以看到,按鈕部分分別為鉛筆、毛筆、尺寸大小、(當前樣式)、顏色選擇者幾個組成。我們只以筆刷選擇為例講解一下,其他的都是類似的。

這些程式碼實際上是我這個例子最想給大家說明的地方,按鈕式我們從未接觸過的東西,然而遊戲中按鈕的應用我都不必說。

不過這程式碼也都不困難,基本都是我們學過的東西,只不過變換了一下組合而已,我稍微說明一下:

初始化部分:讀入圖示,並給每個圖示一個Rect
繪製部分: 根據圖表的Rect繪製圖表
點選判斷部分:根據點選的位置,依靠“碰撞”來判斷這個按鈕是否被點選,若點選了,則做相應的操作(這裡是設定樣式)後返回True。這裡的collidepoint()是新內容,也就是Rect的“碰撞”函式,它接收一個座標,如果在Rect內部,就返回True,否則False。

好像也就如此,有了一定的知識積累後,新東西的學習也變得易如反掌了。

在這個程式碼中,為了明晰,我把各個按鈕按照功能都分成了好幾組,在實際應用中按鈕數量很多的時候可能並不合適,請自己斟酌。

完整程式碼

OK,這就結束了~ 下面把整個程式碼貼出來。不過,我是一邊寫程式碼一遍寫文章,思路不是很連貫,而且python也好久不用了……如果有哪裡寫的有問題(沒有就怪了),還請不吝指出!

200行左右,註釋也不是很多,因為在這兩篇文章裡都講了,有哪裡不明白的請留言,我會根據實際情況再改改。

本次使用的資原始檔打包

這次的pygame知識點:

  • 螢幕Surface和影像Surface
  • 影像繪製和圖形繪製(是不是有人不明白“影像”和“圖形”的區別?簡單的說,影像指的是那些圖片檔案,圖形指的是用命令畫出來形狀)
  • 按鈕的實現(新內容

認真的朋友一定發現了本次沒有涉及到動畫和聲音,畢竟這次只是簡單的例子,太複雜了不免讓人生畏。

實際用一下,會發現這個例子有很多不足,比如畫錯了不能撤消,只能用白色畫掉(當然真正的藝術家都不用橡皮來著);調節畫筆大小的時候太麻煩,點一下跳個0.5(你可以試著加上快捷鍵);視窗尺寸不能變,圖片不能開啟不能儲存……不足一大堆啊,不說了,自己都要傷心了~ 但是隻要你掌握了原理,所有的自己期望的功能都能慢慢實現。看著手中的程式慢慢成長,不是很有成就感麼?它甚至有可能變的史無前例的強大,難道不是麼?

下一個實戰是什麼?盡請期待~

# 另,非常歡迎有繪圖高手用這個畫個漂亮點的給我,我好把題頭的圖片換掉,太嚇人了……

相關文章