python練手實戰之實現貪吃蛇

2021-10-08 09:35:37 字數 4423 閱讀 3807

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類

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

初始化時預設蛇得到方向向右,類中有方法addnode用來給蛇增加乙個小塊;

蛇由列表來表示,列表中存放的是座標位置,每乙個列表元素代表乙個小方塊,蛇的身體正是由乙個個小方塊組成的;

類中有方法delnode用來刪除列表最後元素,本方法和addnode方法合起來可以將蛇向前移動;

類中方法isdead判斷蛇是否死亡,就是判斷蛇頭的元素是否存在於蛇身;

類中方法changedirection()用來改變捨得走向,蛇不能向相反方向改變

food類

class

food

:def

__init__

(self)

: self.rect = pygame.rect(-25

,0,25

,25)def

remove

(self)

: self.rect.x=-25

defset

(self)

:pass

初始化時food為空的,即沒有食物;

類中方法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來舉例,不同的...