当今最火的莫过于用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(): # 游戏状态 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()
这段代码用了一些Python的基础知识,包括事件,定义函数,取余,循环,判断,定义类,创建对象等。这些没什么好说的。导入的几个库也是很常用的库,基本算是程序员必备。把代码摆这里主要是为了让大家借鉴。要是写不出来真是没脸继续写Python了…
大家可以利用我的代码,在做事件监听等函数时应该会方便一些。
图片我发在下面了哈,需要的自取。
源码下载
标签:
Python,捕鱼达人
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“Python写捕鱼达人的游戏实现”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年12月28日
2024年12月28日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]