Python寫捕魚達(dá)人的游戲?qū)崿F(xiàn)
當(dāng)今最火的莫過于用Python寫出捕魚達(dá)人的效果了。啥都不用說,亮代碼~~~
# coding:utf-8
# 導(dǎo)入模塊
import pygame,sys,time,random
from pygame.locals import *
# 初始化pygame環(huán)境
pygame.init()
# 創(chuàng)建一個(gè)長(zhǎng)寬分別為800/480的窗口
canvas = pygame.display.set_mode((800,480))
canvas.fill((255,255,255))
# 設(shè)置窗口標(biāo)題
pygame.display.set_caption('捕魚達(dá)人')
# 加載圖片
bg = pygame.image.load("./images/bg.jpg")
fish1 = pygame.image.load("./images/fish1_0.png")
fish2 = pygame.image.load("./images/fish2_0.png")
fish3 = pygame.image.load("./images/fish3_0.png")
fish4 = pygame.image.load("./images/fish4_0.png")
fish5 = pygame.image.load("./images/fish5_0.png")
fish6 = pygame.image.load("./images/fish6_0.png")
fish7 = pygame.image.load("./images/fish7_0.png")
fish8 = pygame.image.load("./images/fish8_0.png")
fish9 = pygame.image.load("./images/fish9_0.png")
fish10 = pygame.image.load("./images/fish10_0.png")
fish11 = pygame.image.load("./images/fish11_0.png")
net = pygame.image.load("./images/net.png")
gameover = pygame.image.load("./images/gameover.jpg")
# 定義事件監(jiān)聽函數(shù)
def handleEvent():
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# 添加鼠標(biāo)移動(dòng)事件,讓鼠標(biāo)控制網(wǎng)的移動(dòng)
if event.type == MOUSEMOTION:
Game.net.x = event.pos[0] - Game.net.width/2
Game.net.y = event.pos[1] - Game.net.height/2
# 定義時(shí)間間隔判斷函數(shù)
def isActionTime(lastTime,interval):
if lastTime == 0:
return True
currentTime = time.time()
return currentTime - lastTime >= interval
# 定義魚類
class Fish():
def __init__(self,width,height,y,img):
self.width = width
self.height = height
self.x = 800 - self.width
self.y = y
self.img = img
def paint(self):
canvas.blit(self.img,(self.x,self.y))
def step(self):
self.x -= 10
# 定義網(wǎng)類
class Net():
def __init__(self,x,y):
self.x = x
self.y = y
self.width = 160
self.height = 160
self.img = net
def paint(self):
canvas.blit(self.img,(self.x,self.y))
# 定義越界函數(shù)
def outOfBounds(self):
if self.x <= 0:
self.x = 0
elif self.x >= 800 - self.width:
self.x = 800 - self.width
elif self.y <= 0:
self.y = 0
elif self.y >= 480 - self.height:
self.y = 480 - self.height
# 定義碰撞函數(shù)
def hit(self,c):
return c.x > self.x - c.width and c.x < self.x + self.width and c.y > self.y - c.height and c.y < self.y + self.height
# 定義存儲(chǔ)游戲數(shù)據(jù)的類
class Game():
# 游戲狀態(tài)
state = 'RUNNING'
# 魚的列表
fish = []
# 網(wǎng)的對(duì)象
net = Net(100,100)
# 分?jǐn)?shù)
score = 0
# 時(shí)間
t = 60
n = 1
# 上一次時(shí)間
lastTime = 0
# 時(shí)間間隔
interval = 0.5
# 所有魚的寬高
fish_pos = [[22,13],[50,48],[55,55],[73,73],[104,80],[60,60],[93,93],[94,81],[99,103],[180,140],[320,206],[100,96]]
# 定義產(chǎn)生魚的函數(shù)
def conEnter():
if not isActionTime(Game.lastTime,Game.interval):
return
Game.lastTime = time.time()
r = random.randint(1,11)
if Game.t <= 60:
Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
elif Game.t <= 30:
Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
elif Game.t <= 10:
Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
# 定義畫組件函數(shù)
def conPaint():
canvas.blit(bg,(0,0))
Game.net.paint()
showScore()
showTime()
for fish in Game.fish:
fish.paint()
# 定義組件移動(dòng)函數(shù)
def conStep():
Game.net.outOfBounds()
for fish in Game.fish:
fish.step()
# 定義碰撞檢測(cè)函數(shù)
def checkHit():
for fish in Game.fish:
if Game.net.hit(fish) and len(Game.fish) != 0:
Game.fish.remove(fish)
Game.score += 1
# 定義繪制分?jǐn)?shù)函數(shù)
def showScore():
TextFont = pygame.font.SysFont('SimHei',40)
TextScore = TextFont.render('得分:'+str(Game.score),True,(255,255,255))
canvas.blit(TextScore,(20,20))
# 定義繪制時(shí)間函數(shù)
def showTime():
TextFont = pygame.font.SysFont('SimHei',40)
TextScore = TextFont.render('剩余時(shí)間:'+str(Game.t),True,(255,255,255))
canvas.blit(TextScore,(550,20))
if Game.n % 50 == 1:
Game.t -= 1
Game.n += 1
if Game.t == 0:
Game.state = 'END'
# 定義主控制函數(shù)
def control():
if Game.state == 'RUNNING':
conEnter()
conPaint()
conStep()
checkHit()
elif Game.state == 'END':
canvas.blit(gameover,(0,0))
TextFont = pygame.font.SysFont('SimHei',40)
TextScore = TextFont.render('最終得分:'+str(Game.score),True,(0,0,0))
canvas.blit(TextScore,(50,50))
while True:
# 調(diào)用主控制函數(shù)
control()
# 更新屏幕內(nèi)容
pygame.display.update()
# 延遲10毫秒
pygame.time.delay(10)
# 監(jiān)聽事件
handleEvent()
這段代碼用了一些Python的基礎(chǔ)知識(shí),包括事件,定義函數(shù),取余,循環(huán),判斷,定義類,創(chuàng)建對(duì)象等。這些沒什么好說的。導(dǎo)入的幾個(gè)庫(kù)也是很常用的庫(kù),基本算是程序員必備。把代碼擺這里主要是為了讓大家借鑒。要是寫不出來真是沒臉繼續(xù)寫Python了…
大家可以利用我的代碼,在做事件監(jiān)聽等函數(shù)時(shí)應(yīng)該會(huì)方便一些。
圖片我發(fā)在下面了哈,需要的自取。
到此這篇關(guān)于Python寫捕魚達(dá)人的游戲?qū)崿F(xiàn)的文章就介紹到這了,更多相關(guān)Python 捕魚達(dá)人內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python讀取excel文件中的數(shù)據(jù),繪制折線圖及散點(diǎn)圖
這篇文章主要介紹了Python讀取excel文件中的數(shù)據(jù),繪制折線圖及散點(diǎn)圖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
Python SqlAlchemy動(dòng)態(tài)添加數(shù)據(jù)表字段實(shí)例解析
這篇文章主要介紹了Python SqlAlchemy動(dòng)態(tài)添加數(shù)據(jù)表字段實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
Python中requirements.txt簡(jiǎn)介(推薦)
Python項(xiàng)目中必須包含一個(gè)?requirements.txt?文件,用于記錄所有依賴包及其精確的版本號(hào),以便新環(huán)境部署,這篇文章主要介紹了Python中requirements.txt簡(jiǎn)介,需要的朋友可以參考下2022-11-11
python實(shí)現(xiàn)隨機(jī)梯度下降(SGD)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)隨機(jī)梯度下降SGD,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
使用Python在Word文檔中添加,刪除和回復(fù)批注
在文檔協(xié)作與審閱場(chǎng)景中,高效管理批注是提升團(tuán)隊(duì)效率的關(guān)鍵環(huán)節(jié),下面我們就來看看如何使用Python在Word文檔中實(shí)現(xiàn)添加、刪除和回復(fù)批注的操作吧2025-03-03

