Python实战之大鱼吃小鱼游戏的实现

目录
  • 一.游戏画面
  • 二.游戏素材
  • 三.程序介绍
  • 四.游戏代码
    • 1.精灵对象。这个函数计算矩形下右角的一个坐标并返回它
    • 2.设置游戏属性
    • 3.游戏对象
    • 4.游戏动态效果

一.游戏画面

二.游戏素材

三.程序介绍

大鱼吃小鱼.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')        # 新建组,标签为fish
fishes = ['res/fish1.png','res/fish2.png','res/fish3.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/fish1-a.png')     # 实例化大鱼
fish.rotatemode(1)                   # 左右翻转
fishscale= 0.6
fish.scale(fishscale)
mouth = Sprite(shape='circle')       # 实例化嘴巴,用于碰撞检测
mouthscale = 0.4
mouth.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/fish1-a.png')
    else:
        fish.shape('res/fish1-b.png')
    screen.update()
    clock.tick(60)
  fish.shape('res/fish1-a.png')
    else:
        fish.shape('res/fish1-b.png')
    screen.update()
    clock.tick(60)

以上就是Python实战之大鱼吃小鱼游戏的实现的详细内容,更多关于Python大鱼吃小鱼的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python实现炸金花游戏的示例代码

    今天的第二个作品,哈哈哈哈,搞起来感觉还挺有意思的,不过代码里纸牌J,Q,K,A几个数字被我替换成了11,12,13,14......主要是没有想到简单的办法让其比较,索性都用数字了,我太菜了,希望有大佬指点一下. 代码如下: import random   #导入随机数函数 def puke():     """     生成一副52张的扑克牌(除去大小王)     :return:     """     list1 = ['黑桃', '红桃

  • 13个有趣又好玩的Python游戏代码分享

    目录 1.吃金币 2.打乒乓 3.滑雪 4.并夕夕版飞机大战 5.打地鼠 6.小恐龙 7.消消乐 8.俄罗斯方块 9.贪吃蛇 10.24点小游戏 11.平衡木 12.外星人入侵 13.井字棋888 经常听到有朋友说,学习编程是一件非常枯燥无味的事情.其实,大家有没有认真想过,可能是我们的学习方法不对? 比方说,你有没有想过,可以通过打游戏来学编程? 今天我想跟大家分享几个Python小游戏,教你如何通过边打游戏边学编程! 1.吃金币 源码分享: import os import cfg impo

  • 利用Python编写简易版德州扑克小游戏

    目录 德州扑克简要介绍 什么是德州扑克 游戏规则简要介绍 德州扑克游戏的python实现过程 游戏初始化 评选赢家 游戏主题函数 游戏体验与展示 模块不足与后续改进 德州扑克简要介绍 什么是德州扑克 德州扑克不知道大家是否玩过,它是起源于美国的得克萨斯州的一种博弈类卡牌游戏,英文名叫做Texas Hold’em Poker.玩法上又分为常规桌(Cash, 现金局),单桌赛(SNG)和多桌锦标赛(MTT).虽然扑克种类繁多,但基本的扑克规则通常保持一致.它是一种考验心态与谋略的游戏. 游戏规则简要

  • Python写捕鱼达人的游戏实现

    当今最火的莫过于用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)) # 设置窗口标题 p

  • Python+Pygame制作简易版2048小游戏

    目录 导语 正文 主要代码 效果图 导语 哈喽!大家好,我是栗子,感谢大家的支持! 新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏! 2048小游戏——准确的来说确实是一个简单版本的! 呐呐呐 ,主要是担心很多小伙伴儿直接上界面版本的看不懂,所以做了这款简单的2048,先看这篇简单版本的吧! 正文 为了搞懂这个游戏的规则,小编去直接下载了一款2048的小游戏,上手玩了一波! 然后.........完全停不下来!23333~ 玩法: 用手指或键盘上下左右滑动,将

  • Python Pygame实战之打地鼠小游戏

    目录 前言 开发工具 环境搭建 原理简介 前言 今天给大家写一个个打地鼠小游戏,废话不多说直接开始- 开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠~ 首先,让我们确定一下游戏中有哪些元素.打地鼠打地鼠,地鼠当然得有啦,那我们就写个地鼠的游戏精灵类: '''地鼠'

  • Python实战之大鱼吃小鱼游戏的实现

    目录 一.游戏画面 二.游戏素材 三.程序介绍 四.游戏代码 1.精灵对象.这个函数计算矩形下右角的一个坐标并返回它 2.设置游戏属性 3.游戏对象 4.游戏动态效果 一.游戏画面 二.游戏素材 三.程序介绍 大鱼吃小鱼.py 注意程序的mouth对象,它并不是"隐藏"的,虽然它看不见. 小鱼碰到mouth会被“吃掉”.如果把mouth用hide命令设为隐藏,那么是无法获取到mouth的绑定盒,从而碰撞检测失效. 四.游戏代码 1.精灵对象.这个函数计算矩形下右角的一个坐标并返回它 f

  • Python实战之外星人入侵游戏示例代码

    目录 0.前言 1.效果展示 2.实现代码 2.1 image 2.2 alien_invasion.py 2.3 alien.py 2.4 bullet.py 2.5 button.py 2.6 game_stats.py 2.7 scoreboarf.py 2.8 settings.py 2.9 ship.py 0.前言 最近学习的python第一个项目实战,<外星人入侵>,成功实现所有功能,给大家提供源代码 环境安装:python 3.7+ pygame 安装 pygame pip in

  • Python实战之实现康威生命游戏

    前言 康威生命游戏设计并不难,我的思路就是借助pygame进行外观的展示,最近一段时间的游戏项目都是使用pygame进行的,做起来比较顺利.内部代码的实现也比较简单根据他的规则我们需要的是多次的计算和判断,再刷新数组. 一.康威生命游戏规则 当周围仅有1个或没有存活细胞时, 原来的存活细胞进入死亡状态.(模拟生命数量稀少)当周围有2个或3个存活细胞时, 网格保持原样.当周围有4个及以上存活细胞时,原来的存活细胞亦进入死亡状态.(模拟生命数量过多)当周围有3个存活细胞时,空白网格变成存活细胞.(模

  • python实战之90行代码写个猜数字游戏

    一.导入库 import random import time 二.注册用户 我们用变量与input实现 name = str(input('请输入用户名:')) print('欢迎您,'+name) 三.注册年龄 这里我们得用except制作乱输文本就游戏结束的程序 乱输文本就结束 try: age = int(input('请输入年龄:')) except ValueError: print('非法输入') age = 30000 顺便把年龄设为30000[滑稽] 再根据年龄大小分配金币 四

  • python实战之利用pygame实现贪吃蛇游戏(二)

    一.前言 在上一篇博客中,我们实现了基本的界面搭建,这次实现一下逻辑部分. 二.创建蛇 首先,先分析一下蛇的移动,不然我们一定会吃亏的(别问,问就是自己写了一堆无效代码). 蛇的移动其实并没有想象中那样复杂,每一个模块都需要有一个方向,按照方向进行移动. 其实实际上就是一个出队的感觉,即每一个元素都取代上一个元素的位置,然后再按照贪吃蛇当前的方向,移动一下头节点即可. snake.py: """"

  • python实战之利用pygame实现贪吃蛇游戏(一)

    一.前言 之前尝试了自己用pygame写井字棋,这次玩的是贪吃蛇系列. 个人感觉模块可能会比较大,所以选择将函数和主要逻辑代码分在了两个文件中. fuc为函数模块,存储了事件感应和刷新界面等部分. main模块则是游戏的核心. 二.搭建界面 这里我就不重复了,可以先看一下这篇博客 其中界面的基本要素都有. main.py import pygame from fuc import * # 基本属性 lattice_wh = 20 #长宽 snake_color = (84, 255, 159)

  • python实战游戏之史上最难最虐的扫雷游戏没有之一

    导语 每日游戏更新系列--今天带大家来看看扫雷小游戏! 它是许多人接触到的第一款游戏,大概也是广大办公族和无网学生无聊时消遣的最佳游戏. 在那些还没有网(被切断网)的岁月,扫雷曾陪伴无数人度过了他们的童年.你的最佳纪录是多少了? 对于许多90后.00后来说,扫雷这个电脑上自带的小游戏早就变成古早的历史,再一次提到扫雷这个名字的时候,对许多人来说,仿佛就是上世纪的事情了. ​ 就像是偶尔点开微信的跳一跳小游戏,发现排行榜上还有人在孤独的霸榜一样.已经2021年了,还有许多90后.00后坚守在扫雷这

  • python实战之制作表情包游戏

    导语 大家好,我是木木子(๑╹◡╹)ノ" 今日迟来的游戏更新! 仅仅是因为最近练车一直没咋时间了~ 科二还挂科了23333~我emo了

  • python实战小游戏之考验记忆力

    导语 哈喽!大家好,我是木木子. 今日游戏更新系列来啦,是不是很想知道今天的游戏是什么类型的?立马安排上-- 随着年纪的不断上升,我们开始丢三落四,忘东忘西,记忆力越来越差了! 这不止大人随着年纪增大记忆力退却,其实很多小孩子也是一样~ 很多家长是不是经常抱怨: "我家孩子背课文特别慢,常常背了几十遍都背不下来,昨晚又背到一点多,我都要崩溃了: 在给孩子辅导课后作业,明明很简单的古诗词填空,孩子的第一反应就是打开书照抄,如果不翻课本,半天写不出来: 昨晚单词背得还好好的,第二天早上抽查的时候,1

  • Python实战小游戏飞机大战详解

    目录 导语 ​正文 一.环境安装 二.我方飞机 三.敌方飞机 四.控制键盘移动 五.检测子弹碰撞 六.效果图 总结 导语 "看见别人都那么努力,那么勤奋,那么意气风发地走在成功的道路上,你问问自己:难道就不想成为他们的绊脚石吗?" --周一整理好心情好好出发吧! 大家好啊,还在学习的小小伙伴儿慢慢学哈~学完基础的你,今天可以放松下,跟着小编玩会儿游戏再继续哦! 新的一周要努力哦!赶不上别人至少也要慢慢溜上去,晓得吧?乖巧.jpg "晓得晓得,会努力的". ​大家还记

随机推荐