python的基礎已經學的差不多了,接下來想通過練習一些小的專案將python的知識進行總結和整合
首先進行學習的就是貪吃蛇遊戲,那咱們就正式開始貪吃蛇遊戲的實現。
首先引入一些本實驗需要用到的資源
import pygame
import sys
import random
對於pygame的安裝可以參考如下在命令列介面輸入如下
pip install pygame
如果未安裝pip請先安裝pip在進行上一步驟。
接下來介紹一下能夠用到的pygame中能夠用到的函式的意義及引數
pygame.rect(left,top,width,height)
這也是在介面中繪製貪吃蛇的食物和貪吃蛇身體的重要部份名稱意義
pygame.k_left
鍵盤中的左方向鍵
pygame.k_right
鍵盤中的右方向鍵
pygame.k_up
鍵盤中的上方向鍵
pygame.k_down
鍵盤中的下方向鍵
pygame.k_quit
在介面中的關閉按鈕
pygame.time.clock()
用來建立時鐘物件
pygame.font.sysfont(「宋體」, font_size)
獲取系統字型,並設定文字大小
cur_font.set_bold(font_bold)
設定是否加粗屬性
cur_font.set_italic(font_italic)
設定是否斜體屬性
text_fmt = cur_font.render(text, 1, color)
設定文字內容
screen.blit(text_fmt, pos)
繪製文字
本專案設計有兩個類,snake類和food類。
snake類
初始化時預設蛇得到方向向右,類中有方法addnode用來給蛇增加乙個小塊;class
snake
(object):
# 初始化各種需要的屬性 [開始時預設向右/身體塊x5]
def__init__
(self)
: self.dirction = pygame.k_right
self.body =
for x in
range(5
):self.addnode(
)# 無論何時 都在前端增加蛇塊
defaddnode
(self)
:pass
# 刪除最後乙個塊
defdelnode
(self)
:pass
# 死亡判斷
defisdead
(self)
:pass
# 移動!
defmove
(self)
:pass
# 改變方向 但是左右、上下不能被逆向改變
defchangedirection
(self,curkey)
:pass
蛇由列表來表示,列表中存放的是座標位置,每乙個列表元素代表乙個小方塊,蛇的身體正是由乙個個小方塊組成的;
類中有方法delnode用來刪除列表最後元素,本方法和addnode方法合起來可以將蛇向前移動;
類中方法isdead判斷蛇是否死亡,就是判斷蛇頭的元素是否存在於蛇身;
類中方法changedirection()用來改變捨得走向,蛇不能向相反方向改變
food類
初始化時food為空的,即沒有食物;class
food
:def
__init__
(self)
: self.rect = pygame.rect(-25
,0,25
,25)def
remove
(self)
: self.rect.x=-25
defset
(self)
:pass
類中方法remove()為將食物的小塊進行移除,當蛇將他吃掉的時候,即蛇頭和當前的小元素重合;
類中方法set將所有能在螢幕**現的位置進行儲存並將這些位置隨機的出現在螢幕中
主方法在主方法中初始化類snake和food物件,建立時間物件clock,用於表示多長時間向前走一下,判斷蛇是否死亡,不死亡一直向前走,死亡則給出提示是否繼續;pygame.event表示鍵盤的事件觸發。如下是主方法的源**
def
main()
: pygame.init(
) screen_size =
(screen_x,screen_y)
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption(
'snake'
) clock = pygame.time.clock(
) scores =
0 time =
1 isdead =
false
# 蛇/食物
snake = snake(
) food = food(
)while
true
:for event in pygame.event.get():
if event.
type
== pygame.quit:
sys.exit(
)if event.
type
== pygame.keydown:
snake.changedirection(event.key)
# 死後按space重新開始
if event.key == pygame.k_space and isdead:
return main(
)
screen.fill(
(255
,255
,255))
# 畫蛇身 / 每一步+1分
ifnot isdead:
scores+=
1 snake.move(
)for rect in snake.body:
pygame.draw.rect(screen,(20
,220,39
),rect,0)
# 顯示死亡文字
isdead = snake.isdead(
)if isdead:
show_text(screen,
(100
,200),
'you dead!',(
227,29,
18),false
,100
) show_text(screen,
(150
,260),
'press space to try again...',(
0,0,
22),false,30
)# 食物處理 / 吃到+50分
# 當食物rect與蛇頭重合,吃掉 -> snake增加乙個node
if food.rect == snake.body[0]
: scores+=
50 food.remove(
) time +=
1 snake.addnode(
)# 食物投遞
food.
set(
) pygame.draw.rect(screen,
(136,0
,21),food.rect,0)
# 顯示分數文字
show_text(screen,(50
,500),
'scores: '
+str
(scores),(
223,
223,
223)
)
pygame.display.update(
) clock.tick(time)
if __name__ ==
'__main__'
: main(
)
Python實戰之實現簡單的名片管理系統
實現名片管理系統,首先要建立兩個python file 分別是cards main.py和cards tool.py,前乙個是主 塊的實現,後乙個是提供主 塊所呼叫的函式 import cards程式設計客棧 tool as ct 匯入cards tool檔案,簡稱ct,以便呼叫其中的函式 whil...
Python之實戰裝飾器拆解
目錄 1.函式既 變數 屬於可變化資料 2.高階函式 3.巢狀函式 函式是無關順序的,但是執行呼叫的函式必須在執行 前面 示例 變數 a 1,2 a為變數名,1,2 存放記憶體裡面 專業稱之變數體函式 def test1 test1 該函式的名字 如變數名a 內的 1,2 存放在記憶體裡面 專業稱之...
《tensorflow實戰》之實現多層感知器(二)
理論研究表明,神經網路隱含層,層數越多,所需要的隱含節點可以越少。有一種方法叫dropout,在使用複雜的卷積神經網路訓練影象資料時尤其有效,簡單說,就是將神經網路某一層的輸出節點資料隨機丟棄一部分。實質上等於創造出了很多新的隨機樣本,通過增大樣本量 減少特徵數量來防止過擬合。拿sgd來舉例,不同的...