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.xdnf.cn/news/7656.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

项目模块十七:HttpServer模块

一、项目模块设计思路 目的&#xff1a;实现HTTP服务器搭建 思想&#xff1a;设计请求路由表&#xff0c;记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表&#xff0c;服务器只接受请求并调用用户的处理函数即可。 处理流程&#xff1a; …

GS-SLAM论文阅读--High-Fidelity SLAM Using Gaussian Splatting

前言 这篇文章是几个月之前的IROS2024了&#xff0c;之前忘记看了&#xff0c;但是最近看到&#xff0c;觉得有一些值得参考的部分&#xff0c;接下来仔细阅读一下。 文章目录 前言1.背景介绍2.关键内容2.1 建图2.2 跟踪2.3总体流程 3.文章贡献 1.背景介绍 3DGS的连续建图存在…

App渠道来源追踪方案全面分析(iOS/Android/鸿蒙)

一、App 渠道来源追踪概述 渠道来源统计/追踪&#xff0c;其原理都可以称之为归因&#xff0c;归因是用于判断用户在什么原因、什么时间、什么场景下载了 App&#xff0c;以及打通他们在激活 App 后进行的一系列操作&#xff08;比如注册、付费、加购等&#xff09;。 渠道来…

group_concat配置影响程序出bug

在 ThinkPHP 5 中&#xff0c;想要临时修改 MySQL 数据库的 group_concat_max_len 参数&#xff0c;可以使用 原生 SQL 执行 来修改该值。你可以通过 Db 类来执行 SQL 语句&#xff0c;从而修改会话&#xff08;Session&#xff09;级别的变量。 步骤 设置 group_concat_max_l…

物联网赋能的人工智能图像检测系统

一、引言 在数字化时代&#xff0c;物联网&#xff08;IoT&#xff09;技术已经成为我们生活中不可或缺的一部分&#xff0c;极大地优化了我们的交通出行和医疗服务。物联网的核心优势在于其卓越的连接能力&#xff0c;它能够构建和连接庞大的资源数据库&#xff0c;为智能化图…

【python笔记】os库中ctime、mtime和atime的区别

ctime Creation Time文件或目录的创建时间 返回秒级时间戳 os.path.getctime(file_path) os.stat(file_path).st_ctime 返回纳秒级时间戳 os.stat(file_path).st_ctime_ns mtime Modification Time文件或目录的最后修改时间 返回秒级时间戳 os.path.getmtime(file_path) os.sta…

3DE 知识工程 —— EKL 函数重用与功能扩展

目录 1、简介 2、EKL 函数重用 2.1 直接调用 2.2 本地库重用 2.3 全局库重用 3、EKL 功能扩展 1、简介 本文介绍两种方法以展示 EKL 更为强大的能力&#xff1a;一是重用 EKL 函数&#xff0c;二是使用 EKL 调用 VB Script 宏中的函数以扩展其功能。 2、EKL 函数重用…

【GESP】C++一级真题练习(202309)luogu-B3864,小明的幸运数

GESP一级真题练习。为2023年9月一级认证真题。应该是两道题中略难的一道。 题目题解详见&#xff1a;https://www.coderli.com/gesp-1-luogu-b3864/ 【GESP】C一级真题练习(202309)luogu-B3864&#xff0c;小明的幸运数 | OneCoderGESP一级真题练习。为2023年9月一级认证真题…

从0开始学习机器学习--Day18--评估模型

在很多时候&#xff0c;构建并优化完模型并不代表这个问题就被解决了。事实上&#xff0c;很多时候&#xff0c;在第一次优化结束并进行预测时&#xff0c;其与真实值之间的误差都会提醒你这个模型需要继续优化。那么&#xff0c;我们应该怎么优化它呢&#xff1f; 选择更多的…

【Hadoop】【hdfs】【大数据技术基础】实验二 熟悉常用的HDFS操作

实验二&#xff1a; 熟悉常用的HDFS操作 一、实验题目 熟悉常用的HDFS操作。 二、实验目的 &#xff08;1&#xff09; 理解HDFS在Hadoop体系结构中的角色&#xff1b; &#xff08;2&#xff09; 熟练使用HDFS操作常用的Shell命令&#xff1b; &#xff08;3&#xff09;…

SpringSecurity的使用

文章目录 原理使用自定义权限校验 主要类通过debug的方式查看security有哪些过滤器配置类UsernamePasswordAuthenticationFilterUserDetailsServiceExceptionTranslationFilter自定义认证和授权异常处理 FilterSecurityInterceptor权限校验创建拦截器获取用户权限并传递给secur…

第30周:彩色图片分类(Tensorflow实战第二周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 1.3 数据归一化 1.4 数据可视化 二、构建CNN网络 2.1 基本概念 2.2 代码实现 三、编译 四、训练模型 五、预测 六、模型评估 总结 前言 &#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博…

【Linux】信号

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12625432.html 目录 信号和信号量 信号 信号的处理 信号捕捉 信号的产生 系统调用 signal rais…

【国内中间件厂商排名及四大中间件对比分析】

国内中间件厂商排名 随着新兴技术的涌入&#xff0c;一批国产中间件厂商破土而出&#xff0c;并在短时间内迅速发展&#xff0c;我国中间件市场迎来洗牌&#xff0c;根据市占率&#xff0c;当前我国中间件厂商排名依次为&#xff1a;东方通、宝兰德、中创股份、金蝶天燕、普元…

【题解】CF2033G

题目 CF2033G 分析 一道很显然是树形dp的题&#xff0c;但非常恶心QwQ。   先不管复杂度&#xff0c;找找递推关系&#xff0c;一种很直接的想法如下&#xff08;我觉得是错误的&#xff09;&#xff1a; d p [ i ] [ k ] m a x ( d p [ f a i ] [ k − 1 ] , d p [ s o …

SpringBoot之定时任务

1. 前言 本篇博客是个人的经验之谈&#xff0c;不是普适的解决方案。阅读本篇博客的朋友&#xff0c;可以参考这里的写法&#xff0c;如有不同的见解和想法&#xff0c;欢迎评论区交流。如果此篇博客对你有帮助&#xff0c;感谢点个赞~ 2. 场景 我们讨论在单体项目&#xff0c…

【日志】力扣58.最后一个单词的长度//14.最长公共前缀//28. 找出字符串中第一个匹配项的下标

2024.11.6 【力扣刷题】 58. 最后一个单词的长度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/length-of-last-word/?envTypestudy-plan-v2&envIdtop-interview-150 int lengthOfLastWord(char* s) {int count 0;for (int i strlen(s) - 1; i…

智能家居的未来:AI让生活更智能还是更复杂?

内容概要 智能家居的概念源于将各种家居设备连接到互联网&#xff0c;并通过智能技术进行控制和管理。随着人工智能的迅速发展&#xff0c;这一领域也迎来了前所未有的机遇。从早期简单的遥控器到如今可以通过手机应用、语音助手甚至是环境感应进行操作的设备&#xff0c;智能…

1. 初步认识 Java 虚拟机

一、前言 其实一直都想系统性的学习一下 JVM&#xff0c;尝试过很多次&#xff0c;最终没能坚持下来&#xff0c;现在已经工作多年&#xff0c;发现对于 JVM这块知识还是很薄弱&#xff0c;不利于职业长远发展&#xff0c;并且之前掌握的都是一些零散的知识&#xff0c;没能形…

数据结构之二叉树的链式结构——递归的暴力美学

1. 实现链式的二叉树结构 我们之前用顺序表里面数组的底层结构实现了二叉树中堆的结构&#xff0c;但是不是所有的二叉树都具有着堆的性质&#xff0c;所以我们现在需要一个链式结构来描述普遍的二叉树。其底层结构类似一个链表&#xff0c;但是每一个结点由单个区域&#xff…