Python小游戏23——捕鱼达人

 

首先,你需要安装Pygame库。如果你还没有安装,可以使用以下命令进行安装:

 

【bash】

 pip install pygame

  • 运行效果展示

579b0a0283d24e6ab2b792524f45e4e8.png

 

  • 接下来是示例代码:

【python】

 import pygame

import random

 

# 初始化Pygame

pygame.init()

 

# 屏幕尺寸

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

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

 

# 颜色定义

WHITE = (255, 255, 255)

BLUE = (0, 0, 255)

 

# 鱼类类

class Fish:

    def __init__(self):

        self.image = pygame.image.load("fish.png").convert_alpha() # 加载鱼类图像(需要自行准备)

        self.rect = self.image.get_rect()

        self.rect.x = random.randint(0, SCREEN_WIDTH - self.rect.width)

        self.rect.y = random.randint(-100, -40) # 初始位置在屏幕上方之外

        self.speed = random.randint(3, 7)

 

    def update(self):

        self.rect.y += self.speed

        if self.rect.top > SCREEN_HEIGHT:

            self.rect.x = random.randint(0, SCREEN_WIDTH - self.rect.width)

            self.rect.y = random.randint(-100, -40)

            self.speed = random.randint(3, 7)

 

    def draw(self):

        screen.blit(self.image, self.rect)

 

# 子弹类

class Bullet:

    def __init__(self, x, y):

        self.image = pygame.Surface((10, 20))

        self.image.fill(WHITE)

        self.rect = self.image.get_rect()

        self.rect.centerx = x

        self.rect.bottom = y

        self.speed = 10

 

    def update(self):

        self.rect.y -= self.speed

        if self.rect.bottom < 0:

            self.kill() # 从子弹组中移除

 

    def draw(self):

        screen.blit(self.image, self.rect)

 

# 创建鱼类和子弹组

all_fish = pygame.sprite.Group()

bullets = pygame.sprite.Group()

 

# 生成鱼类

for _ in range(10):

    fish = Fish()

    all_fish.add(fish)

 

# 游戏主循环

running = True

clock = pygame.time.Clock()

 

# 玩家控制

player_rect = pygame.Rect(SCREEN_WIDTH // 2 - 25, SCREEN_HEIGHT - 50, 50, 50)

player_speed = 5

 

while running:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_SPACE: # 发射子弹

                bullet = Bullet(player_rect.centerx, player_rect.top)

                bullets.add(bullet)

 

    # 按键控制玩家移动

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and player_rect.left > 0:

        player_rect.x -= player_speed

    if keys[pygame.K_RIGHT] and player_rect.right < SCREEN_WIDTH:

        player_rect.x += player_speed

    if keys[pygame.K_UP] and player_rect.top > 0:

        player_rect.y -= player_speed

    if keys[pygame.K_DOWN] and player_rect.bottom < SCREEN_HEIGHT:

        player_rect.y += player_speed

 

    # 更新和绘制

    all_fish.update()

    bullets.update()

 

    # 检测子弹是否击中鱼类(简化版,只检测矩形碰撞)

    hits = pygame.sprite.spritecollide(bullets, all_fish, True) # True表示移除碰撞的鱼类

    for hit in hits:

        print("捕获一条鱼!") # 这里可以添加得分逻辑

 

    # 绘制

    screen.fill(BLUE)

    all_fish.draw(screen)

    bullets.draw(screen)

    pygame.draw.rect(screen, WHITE, player_rect) # 绘制玩家矩形

 

    # 刷新屏幕

    pygame.display.flip()

 

    # 控制帧率

    clock.tick(60)

 

pygame.quit()

 

注意事项:

 

  1. 你需要自行准备一张鱼类图像(命名为fish.png),并将其放在与脚本相同的目录中。

 

  2. 这个示例代码简化了很多细节,比如碰撞检测

 

  • 知识点总结

1.基本语法和数据类型

 

• 变量和常量:理解如何声明和使用变量及常量。

 

• 数据类型:包括整数、浮点数、字符串、布尔值、数组、列表、元组、字典(哈希表)、集合等。

 

• 运算符:算术运算符、比较运算符、逻辑运算符、位运算符等。

 

2.控制结构

 

• 条件语句:if、else、elif(在Python中)等用于基于条件执行不同代码块。

 

• 循环:for循环和while循环,用于重复执行代码块。

 

• 循环控制:break、continue语句用于在循环中提前退出或跳过当前迭代。

 

3.函数和模块

 

• 函数定义和调用:如何创建和调用函数,包括参数传递(按值传递和按引用传递)。

 

• 作用域:局部变量、全局变量的作用范围。

 

• 模块和包:如何导入和使用模块、包来组织代码。

 

4.面向对象编程(OOP)

 

• 类和对象:类的定义、对象的创建、属性和方法。

 

• 继承:子类从父类继承属性和方法。

 

• 多态:通过重写父类方法实现不同的行为。

 

• 封装:隐藏对象的内部实现细节,只暴露必要的接口。

 

5.数据结构和算法

 

• 基本数据结构:数组、链表、栈、队列、树(二叉树、AVL树、红黑树(https://baike.baidu.com/item/%E7%BA%A2%E9%BB%91%E6%A0%91/2413209)等)、图等。

 

• 算法:排序算法(快速排序、归并排序、堆排序等)、搜索算法(深度优先搜索、广度优先搜索)、动态规划、回溯等。

 

6.错误处理和调试

 

• 异常处理:try、except、finally语句用于捕获和处理异常。

 

• 调试技巧:使用调试器、打印日志、断言等。

 

7.文件操作和输入输出

 

• 文件读写:如何打开、读取、写入和关闭文件。

 

• 输入输出:标准输入输出、文件输入输出、网络输入输出等。

 

8.网络编程

 

• 套接字编程:使用套接字进行网络通信。

 

• HTTP协议:了解HTTP请求和响应、使用HTTP库(如Python的requests库)进行网络请求。

 

9.并发和多线程

 

• 线程和进程:理解线程和进程的概念,如何创建和管理它们。

 

• 同步机制:互斥锁、信号量、条件变量等用于协调线程间的执行。

 

10.数据库操作

 

• SQL:了解SQL语言,进行数据库查询、插入、更新和删除操作。

 

• ORM框架:使用对象关系映射(ORM)框架来简化数据库操作。

 

11.测试和版本控制

 

• 单元测试:编写和运行单元测试来验证代码的正确性。

 

• 版本控制:使用Git等版本控制系统来管理代码版本、协作开发。

 

12.特定语言和框架

 

• Python:Python语言特性、标准库、第三方库(如NumPy、Pandas、Django等)。

 

• Java:Java语言特性、JVM、Spring框架等。

 

• JavaScript:JavaScript语言特性、DOM操作、AJAX、React/Vue等前端框架。

 

• 其他:C/C++、Ruby、PHP、Swift等语言的特定知识和框架。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何调整pdf的页面尺寸

用福昕阅读器打开pdf&#xff0c;进入打印页面&#xff0c;选择“属性”&#xff0c;在弹出的页面选择“高级” 选择你想调成的纸张尺寸&#xff0c;然后打印&#xff0c;打印出来的pdf就是调整尺寸后的pdf

《重学Java设计模式》之 原型模式

原型模式主要解决的问题就是创建重复对象&#xff0c;而这部分对象内容本身比较复杂&#xff0c;生成过程可能从库或者RPC接口中获取数据的耗时较长&#xff0c;因此采用克隆的方式节省时间。 案例&#xff1a;上机考试抽题&#xff0c;要求打乱题目、答案数据 工厂结构 选择题…

八,附录 A:其他发现流程示例

八&#xff0c;附录 A&#xff1a;其他发现流程示例 八&#xff0c;附录 A&#xff1a;其他发现流程示例8.1 修改后的发现流程8.2 优化后的发现流程8.3 高级发现流程 八&#xff0c;附录 A&#xff1a;其他发现流程示例 以下部分提供了关于修改后的、优化后的和高级的发现流程…

实战:看懂并分析执行计划——Clustered Index Scan

这是 Clustered Index Scan 的执行计划详情,以下是对每一行的含义及其对查询性能的可能影响的解释。 Clustered Index Scan (Clustered) 解释 Physical Operation: Clustered Index Scan (Clustered) 物理操作,表明数据库引擎在整个聚集索引上进行扫描。Clustered Index Sc…

Jenkins声明式Pipeline流水线语法示例

系列文章目录 docker搭建Jenkins2.346.3版本及常用工具集成配置(ldap、maven、ansible、npm等) docker安装低版本的jenkins-2.346.3,在线安装对应版本插件失败的解决方法 文章目录 系列文章目录jenkins流水线基础1、pipeline1.1、什么是pipeline&#xff1f;1.2、为什么使用pi…

OceanBase中,如何解读 obdiag 收集的火焰图 【DBA早下班系列】

1. 前言 在之前的文章 遇到性能问题&#xff0c;如何给OceanBase“拍CT“&#xff08;火焰图与扁鹊图&#xff09;中&#xff0c;分享了obdiag 快速收集火焰图的方法&#xff0c;那么&#xff0c;紧接着的问题便是&#xff1a;收集到火焰图和扁鹊图之后&#xff0c;该如何解读…

网站架构知识之Ansible模块(day021)

1.Ansible模块 作用:通过ansible模块实现批量管理 2.command模块与shell模块 command模块是ansible默认的模块&#xff0c;适用于执行简单的命令&#xff0c;不支持特殊符号 案列01&#xff0c;批量获取主机名 ansible all -m command -a hostname all表示对主机清单所有组…

短期电力负荷

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月8日9点40分 论文发表 来自《IEEE Transactions on Smart Grid》2022年7月的13卷第4期&#xff0c;《IEEE Transactions on …

linux tigerVNC使用

简介 TigerVNC是VNC的一种高性能、平台中立实现&#xff08;虚拟网络计算&#xff09;&#xff0c;一种客户端/服务器应用程序&#xff0c;允许用户启动远程图形应用程序并与之交互机器。TigerVNC提供运行所需的性能级别3D和视频应用程序&#xff0c;并尝试保持普通外观并尽可…

基于redis实现API接口访问次数限制

一&#xff0c;概述 日常开发中会有一个常见的需求&#xff0c;需要限制接口在单位时间内的访问次数&#xff0c;比如说某个免费的接口限制单个IP一分钟内只能访问5次。该怎么实现呢&#xff0c;通常大家都会想到用redis&#xff0c;确实通过redis可以实现这个功能&#xff0c…

uni-app小程序开发(1)

下载软件就不多赘述了。 直接上代码&#xff0c;写过wep端的vue看这个小程序就简单很多&#xff0c;不需要搞那么多麻烦事情&#xff0c;直接编译器就创建好了基础模版。 1、项目结构 暂时知道这么多&#xff0c;后续再补充 2、页面创建、导航栏设置、基础属性设置 在pages中…

【C++】哈希表封装 unordered_map 和 unordered_set 的实现过程

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriori…

SQL,力扣题目1709,访问日期之间最大的空档期

一、力扣链接 LeetCode_1709 二、题目描述 表&#xff1a; UserVisits ------------------- | Column Name | Type | ------------------- | user_id | int | | visit_date | date | ------------------- 该表没有主键&#xff0c;它可能有重复的行 该表包含用户访问…

第七篇: BigQuery中的复杂SQL查询

BigQuery中的复杂SQL查询 背景与目标 在数据分析中&#xff0c;我们通常需要从多个数据源中获取信息&#xff0c;以便进行深入的分析。这时&#xff0c;BigQuery提供的JOIN、UNION和子查询等复杂SQL语句非常实用。本文将以Google BigQuery的公共数据集为例&#xff0c;介绍如何…

SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记

这是一篇港科大学生在google research 实习期间发在ECCV2024的语义引导生成式修复的文章&#xff0c;港科大陈启峰也挂了名字。从首页图看效果确实很惊艳&#xff0c;尤其是第三行能用文本调控修复结果牌上的字。不过看起来更倾向于生成&#xff0c;对原图内容并不是很复原&…

Dubbo负载均衡

负载均衡策略与配置细节 Dubbo 内置了 client-based 负载均衡机制&#xff0c;如下是当前支持的负载均衡算法&#xff0c;结合上文提到的自动服务发现机制&#xff0c;消费端会自动使用 Weighted Random LoadBalance 加权随机负载均衡策略 选址调用。 如果要调整负载均衡算法…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。

上图是在安防领域的要求&#xff0c;一般都是一个屏幕上有显示多个摄像头捕捉到的画面&#xff0c;这一节&#xff0c;我们是从文件中读取多个文件&#xff0c;显示在屏幕上。 一 改动UI文件 这里我们要添加两个label&#xff0c;为了区分我们设置一下背景色&#xff08;这个是…

前言2、VS(Visual Studio)-2022使用

早前用VS-2010编译平台&#xff0c;进行C语言编程学习。 现如今&#xff0c;为了适应未来发展趋势以及日新月异的新功能&#xff0c;就此转到VS-2022编译平台&#xff1b; 由于都是VS编译平台&#xff0c;大多数基础功能都类似&#xff0c;关于一些基础操作可参考前言1&#…

深入了解逻辑回归:机器学习中的经典算法

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

[High Speed Serial ] Xilinx

Xilinx 高速串行数据接口 收发器产品涵盖了当今高速协议的方方面面。GTH 和 GTY 收发器提供要求苛刻的光互连所需的低抖动&#xff0c;并具有世界一流的自适应均衡功能&#xff0c;具有困难的背板操作所需的 PCS 功能。 Versal™ GTY &#xff08;32.75Gb/s&#xff09;&…