使用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") 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") fish7 = pygame.image.load("./images/fish7_0.png") fish8 = pygame.image.load("./images/fish8_0.png") fish9 = pygame.image.load("./images/fish9_0.png") fish20 = pygame.image.load("./images/fish20_0.png") fish21 = pygame.image.load("./images/fish21_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()
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。