本文主要是介绍Python 用pygame简简单单实现一个打砖块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
# -*- coding: utf-8 -*-
# #
# Copyright (C) 2024 , Inc. All Rights Reserved
# #
# @Time : 2024/3/30 14:34
# @Author : 赫凯
# @Email : hekaiiii@163.com
# @File : ballgame.py
# @Software: PyCharm
import math
import randomimport pygame
import sys# 球体类
class Ball:def __init__(self, radius):self.radius = radiusself.pos = [screen_width // 2, screen_height - 20 - radius]self.velocity = [2, -2]def draw(self, surface):pygame.draw.circle(surface, WHITE, self.pos, self.radius)def update(self):self.pos[0] += self.velocity[0]self.pos[1] += self.velocity[1]# print(self.pos)# 碰到墙壁反弹# print(screen_width - self.radius)if self.pos[0] < self.radius or self.pos[0] > (screen_width - self.radius):# self.pos[0] = -self.pos[0]self.velocity[0] *= -1# if self.pos[0] < 0:# self.pos[0] = -self.pos[0]# print(screen_height - self.radius)if self.pos[1] <= self.radius or self.pos[1] > (screen_height - self.radius):self.velocity[1] *= -1# if self.pos[1] < 0:# self.pos[1] = -self.pos[1]# 挡板类
class Paddle:def __init__(self, width, height):self.width = widthself.height = heightself.pos = [screen_width // 2 - width // 2, screen_height - 20]self.velocity = [-5, 0]def draw(self, surface):pygame.draw.rect(surface, WHITE, (self.pos[0], self.pos[1], self.width, self.height), 0, 0)def update(self):keys = pygame.key.get_pressed()if keys[pygame.K_LEFT] and self.pos[0] > 0:self.pos[0] += self.velocity[0]if keys[pygame.K_RIGHT] and self.pos[0] < screen_width - self.width:self.pos[0] -= self.velocity[0]class Brick:def __init__(self, x, y, width, height, color):self.rect = pygame.Rect(x, y, width, height)self.color = colordef draw(self, surface):pygame.draw.rect(surface, self.color, self.rect)def check_collision(ball, brick):# 检查球与砖块的左右边界碰撞if (brick.rect.x - ball.radius <= ball.pos[0] <= brick.rect.x + brick.rect.width + ball.radius) and (brick.rect.y <= ball.pos[1] <= brick.rect.y + brick.rect.height):return 1 # 返回1表示碰撞发生在砖块的左右边界# 检查球与砖块的上下边界碰撞if (brick.rect.y - ball.radius <= ball.pos[1] <= brick.rect.y + brick.rect.height + ball.radius) and (brick.rect.x <= ball.pos[0] <= brick.rect.x + brick.rect.width):return 2 # 返回2表示碰撞发生在砖块的上下边界return 0def update_bricks(ball, bricks):score = 0for brick in bricks[:]:if check_collision(ball, brick) == 1:# 处理碰撞效果,比如删除砖块或改变球的方向bricks.remove(brick)ball.velocity[0] *= -1score += 10breakelif check_collision(ball, brick) == 2:bricks.remove(brick)ball.velocity[1] *= -1score += 10break# 可能还需要更新分数或其他游戏状态return scoredef create_explosion(brick):# 创建一个表示爆炸效果的对象或动画passdef update_explosions(explosions, bricks):for explosion in explosions[:]:# 更新爆炸效果if explosion.is_finished():explosions.remove(explosion)# 如果爆炸与砖块碰撞,移除砖块if explosion.intersects(brick):bricks.remove(brick)if __name__ == '__main__':# 初始化Pygamepygame.init()# 设置屏幕大小screen_width, screen_height = 640, 480screen = pygame.display.set_mode((screen_width, screen_height))# 设置标题和时钟pygame.display.set_caption('Bounce Game')clock = pygame.time.Clock()# 定义颜色WHITE = (255, 255, 255)BLACK = (0, 0, 0)RED = (255, 0, 0)# 创建球体和挡板ball = Ball(10)paddle = Paddle(80, 10)# 创建砖块bricks = []for x in range(0, screen_width, 80): # 假设每个砖块宽度为80像素for y in range(0, screen_height // 4, 20): # 假设每个砖块高度为40像素brick = Brick(x + 2, y + 2, 80 - 2, 20 - 2, (255, 255, 255)) # 白色砖块bricks.append(brick)# 得分变量score = 0# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 更新球体和挡板的位置ball.update()paddle.update()# print(ball.pos, paddle.pos)# 检测球体是否碰到挡板if ball.pos[1] + ball.radius > paddle.pos[1]:if ball.pos[0] < paddle.pos[0] or ball.pos[0] > paddle.pos[0] + paddle.width:# running = Falsescore -= 1else:ss = abs(ball.pos[0] - (paddle.pos[0]+paddle.width//2)) / 20ball.velocity[0] = 2+ss*2ball.velocity[1] *= -1# screen.fill(BLACK)# 渲染背景screen.fill(BLACK)# 绘制球体和挡板ball.draw(screen)paddle.draw(screen)xx = random.randint(0, 255)# 绘制砖块for brick in bricks:# 渐变ß# r = math.sqrt((ball.pos[0] - brick.rect.x) ** 2 + (ball.pos[1] - brick.rect.y) ** 2)# brick.color = ((r)/720 *255 % 255, 255, (r)/720*255 % 255)brick.draw(screen)if ball.pos[1] <= screen_height//2:score += update_bricks(ball, bricks)# 显示得分font = pygame.font.Font(None, 36)score_text = font.render('Score: ' + str(score), True, RED)screen.blit(score_text, (10, 10))# 更新屏幕显示pygame.display.flip()# 设置帧率clock.tick(60)# 退出游戏pygame.quit()sys.exit()
这篇关于Python 用pygame简简单单实现一个打砖块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!