A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 专注的一批 中级黑马   /  2020-3-26 10:46  /  2551 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当今最火的莫过于用Python写出捕鱼达人的效果了。啥都不用说,亮代码~~~

# coding:utf-8

# 导入模块

import pygame,sys,time,random

from pygame.locals import *

# 初始化pygame环境

pygame.init()

# 创建一个长宽分别为800/480的窗口

canvas = pygame.display.set_mode((800,480))

canvas.fill((255,255,255))

# 设置窗口标题

pygame.display.set_caption('捕鱼达人')

# 加载图片

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")

# 定义事件监听函数

def handleEvent():

for event in pygame.event.get():

if event.type == QUIT:

pygame.quit()

sys.exit()

# 添加鼠标移动事件,让鼠标控制网的移动

if event.type == MOUSEMOTION:

Game.net.x = event.pos[0] - Game.net.width/2

Game.net.y = event.pos[1] - Game.net.height/2

# 定义时间间隔判断函数

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

# 定义网类

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))

# 定义越界函数

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

# 定义碰撞函数

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

# 定义存储游戏数据的类

class Game():

# 游戏状态  外汇常见问题http://www.kaifx.cn/lists/question/

state = 'RUNNING'

# 鱼的列表

fish = []

# 网的对象

net = Net(100,100)

# 分数

score = 0

# 时间

t = 60

n = 1

# 上一次时间

lastTime = 0

# 时间间隔

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]]

# 定义产生鱼的函数

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")))

# 定义画组件函数

def conPaint():

canvas.blit(bg,(0,0))

Game.net.paint()

showScore()

showTime()

for fish in Game.fish:

fish.paint()

# 定义组件移动函数

def conStep():

Game.net.outOfBounds()

for fish in Game.fish:

fish.step()

# 定义碰撞检测函数

def checkHit():

for fish in Game.fish:

if Game.net.hit(fish) and len(Game.fish) != 0:

Game.fish.remove(fish)

Game.score += 1

# 定义绘制分数函数

def showScore():

TextFont = pygame.font.SysFont('SimHei',40)

TextScore = TextFont.render('得分:'+str(Game.score),True,(255,255,255))

canvas.blit(TextScore,(20,20))

# 定义绘制时间函数

def showTime():

TextFont = pygame.font.SysFont('SimHei',40)

TextScore = TextFont.render('剩余时间:'+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'

# 定义主控制函数

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:

# 调用主控制函数

control()

# 更新屏幕内容

pygame.display.update()

# 延迟10毫秒

pygame.time.delay(10)

# 监听事件

handleEvent()

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马