首先,你需要安装Pygame库。如果你还没有安装,可以使用以下命令进行安装:
【bash】
pip install pygame
- 运行效果展示
- 接下来是示例代码:
【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等语言的特定知识和框架。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » Python小游戏23——捕鱼达人
发表评论 取消回复