Python怎么实现大鱼吃小鱼游戏
短信预约 -IT技能 免费直播动态提醒
这篇文章主要介绍“Python怎么实现大鱼吃小鱼游戏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么实现大鱼吃小鱼游戏”文章能帮助大家解决问题。
一.游戏画面
二.游戏素材
三.程序介绍
大鱼吃小鱼.py
注意程序的mouth对象,它并不是"隐藏"的,虽然它看不见。
小鱼碰到mouth会被“吃掉”。如果把mouth用hide命令设为隐藏,那么是无法获取到mouth的绑定盒,从而碰撞检测失效。
四.游戏代码
1.精灵对象。这个函数计算矩形下右角的一个坐标并返回它
from sprites import *def calculate_pos(obj): """obj:精灵对象。这个函数计算矩形下右角的一个坐标并返回它。 """ x,y = obj.position() # 角色的坐标 mx,my = mouse_position() # 鼠标指针的坐标 k = 1 if mx > x else -1 # 在右则为1,否则为-1 left,top,right,bottom = obj.bbox()# 获取绑定盒 w = right-left # 大鱼的宽度 h = top - bottom # 大鱼的高度 x0 = x + k * w//2.5 # 嘴巴大概的x坐标 y0 = y - h//12 # 嘴巴大概的y坐标 return x0,y0
2.设置游戏属性
width,height = 480,360 screen = Screen() # 新建宽高screen.setup(width,height) # 设置宽高 screen.bgpic('res/underwater.png') # 设背景图screen.title("图灵大海之大鱼吃小鱼")
3.游戏对象
fish_group = Group(tag='fish') # 新建组,标签为fishfishes = ['res/fish2.png','res/fish3.png','res/fish4.png','res/crab-b.png']# 由于下面的鱼的标签都是fish,所以会自动加入到fish_group中for x in range(10): x = random.randint(-200,200) y = random.randint(-140,140) f = Sprite(shape=random.choice(fishes),tag='fish',pos=(x,y)) f.scale(0.5)[fish.setheading(random.randint(1,360)) for fish in fish_group] m1 = Mouse(1) # 鼠标左键fish = Sprite('res/fish2-a.png') # 实例化大鱼fish.rotatemode(1) # 左右翻转 fishscale= 0.6fish.scale(fishscale)mouth = Sprite(shape='circle') # 实例化嘴巴,用于碰撞检测mouthscale = 0.4mouth.scale(mouthscale) # 缩放嘴巴大小mouth.setalpha(0) # 把它设为透明,改为非0它会显示出来clock = Clock() # 新建时钟对象
4.游戏动态效果
while True: for f in fish_group: if f.isvisible():f.fd(1) # 在可见的情况下才移动 # 小鱼碰到嘴巴及单击鼠标则被吃掉,大鱼长大 if f.collide(mouth,0.5) and m1.down() : fishscale += 0.01 fish.scale(fishscale) # 大鱼长大 mouthscale += 0.01 mouth.scale(mouthscale) # 嘴巴跟着加大 x = random.randint(-200,200) y = random.randint(-140,140) # 注意这里调用了reborn后,鱼会立即隐藏,3后后出现 # 在3秒内碰撞检测无效,所以鱼不能动 f.reborn(x,y,delay=3) f.shape(random.choice(fishes)) f.bounce_on_edge() fish.heading(mouse_pos()) # 大鱼跟随鼠标指针 x0,y0 = calculate_pos(fish) # 计算嘴巴的大概坐标 mouth.goto(x0,y0) # 嘴巴大这个坐标 md = fish.distance(mouse_pos()) # 计算鱼到鼠标指针距离 if md > 50:fish.fd(min(md,4)) # 如果距离大于50则游 # 张嘴与合嘴 if m1.down(): fish.shape('res/fish2-a.png') else: fish.shape('res/fish2-b.png') screen.update() clock.tick(60) fish.shape('res/fish2-a.png') else: fish.shape('res/fish2-b.png') screen.update() clock.tick(60)
关于“Python怎么实现大鱼吃小鱼游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341