import random
import time
import pygame.sprite
import sys
class Util:
@staticmethod
def click_check(sprite):
if pygame.mouse.get_pressed()[0]:
if sprite.rect.collidepoint(pygame.mouse.get_pos()):
return True
return False
class MusicMange:
@staticmethod
def play_bg_music():
pygame.mixer.music.load("beijing.mp3")
pygame.mixer.music.play(True)
@staticmethod
def play_sound(name):
sound = pygame.mixer.Sound(name)
sound.play()
class UiSprice(pygame.sprite.Sprite):
def __init__(self, name):
super().__init__()
self.image = pygame.image.load(name)
self.rect = self.image.get_rect()
def update(self):
pass
class BackSprice(UiSprice):
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
def update(self):
pass
class BackMange:
def __init__(self, gm):
self.gm = gm
self.back_group = pygame.sprite.Group()
self.background = BackSprice("back1.jpg", (300, 200))
self.background.add(self.back_group)
def update(self):
self.back_group.update()
self.back_group.draw(self.gm.screen)
class PersonSprice(UiSprice):
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
def update(self):
key_prssed = pygame.key.get_pressed()
if key_prssed[pygame.K_LEFT] and self.rect.left > 0:
self.rect.left -= 1
if key_prssed[pygame.K_RIGHT] and self.rect.right < 600:
self.rect.right += 1
class PersonManger:
def __init__(self, gm):
self.gm = gm
self.per_group = pygame.sprite.Group()
self.person = PersonSprice("img/4.jpg", (25, 375))
self.person.add(self.per_group)
def update(self):
self.per_group.update()
self.per_group.draw(self.gm.screen)
class GoldSprice(UiSprice):
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
def update(self):
self.rect.top += 1
if self.rect.top > 400:
self.kill()
class GoldMange:
def __init__(self, gm):
self.gm = gm
self.time_shi = 2
self.gold_group = pygame.sprite.Group()
def appear(self):
self.gold_group = pygame.sprite.Group()
for i in range(random.randint(3, 10)):
self.gold = GoldSprice("gold.png", (random.randint(0, 600), random.randint(0, 0)))
self.gold.add(self.gold_group)
def update(self):
self.time_shi -= 0.003
if self.time_shi <= 0:
self.time_shi = 2
self.appear()
self.gold_group.update()
self.gold_group.draw(self.gm.screen)
class ExplosiveSprice(UiSprice):
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
def update(self):
self.rect.top += 1
if self.rect.top > 400:
self.kill()
class ExplosiveMange:
def __init__(self, gm):
self.gm = gm
self.time_shi = 3
self.explosive_group = pygame.sprite.Group()
def grow(self):
for i in range(6):
self.explosive = ExplosiveSprice("zhadan.png", (random.randint(0, 600), random.randint(0, 0)))
self.explosive.add(self.explosive_group)
def update(self):
self.time_shi -= 0.003
if self.time_shi <= 0:
self.time_shi = 3
self.grow()
self.explosive_group.update()
self.explosive_group.draw(self.gm.screen)
class AppleSprice(UiSprice):
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
def update(self):
self.rect.top += 1
if self.rect.top > 400:
self.kill()
class AppleMange:
def __init__(self, gm):
self.gm = gm
self.time_shi = 4
self.apple_group = pygame.sprite.Group()
def occur(self):
for i in range(3):
self.apple = AppleSprice("pingguo.png", (random.randint(0, 600), random.randint(0, 0)))
self.apple.add(self.apple_group)
def update(self):
self.time_shi -= 0.003
if self.time_shi <= 0:
self.time_shi = 4
self.occur()
self.apple_group.update()
self.apple_group.draw(self.gm.screen)
class AuttonSprice(UiSprice):
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
class AuttonMange:
def __init__(self, gm):
self.gm = gm
self.count = 0
self.tally = 3
self.go_group = pygame.sprite.Group()
self.go = AuttonSprice("agin.jpg", (300, 200))
self.go.add(self.go_group)
self.agin_group = pygame.sprite.Group()
self.argin = AuttonSprice("kaishi.jpg", (25, 25))
self.argin.add(self.agin_group)
self.exit_group = pygame.sprite.Group()
self.exit_jie = AuttonSprice("exit.png", (300, 300))
self.exit_jie.add(self.exit_group)
self.zai_group = pygame.sprite.Group()
self.zai = AuttonSprice("zailai.png", (300, 200))
self.zai.add(self.zai_group)
def update(self):
if self.gm.state == "ready":
self.go_group.update()
self.go_group.draw(self.gm.screen)
if Util.click_check(self.go):
self.gm.state = "gaming"
if self.gm.state == "gaming":
self.agin_group.update()
self.agin_group.draw(self.gm.screen)
if Util.click_check(self.argin):
pygame.time.wait(5000)
self.gm.persom_mange.update()
self.gm.gold_mange.update()
self.gm.explosive_mange.update()
self.gm.apple_mange.update()
self.font = pygame.font.Font("font/font.ttf", 32)
self.score_surface = self.font.render(f"Score:{self.count}", True, "#FF4500")
self.gm.screen.blit(self.score_surface, (450, 15))
self.font = pygame.font.Font("font/font.ttf", 32)
self.score_surface = self.font.render(f"HP:{self.tally}", True, "#FF4500")
self.gm.screen.blit(self.score_surface, (200, 15))
if pygame.sprite.groupcollide(self.gm.persom_mange.per_group, self.gm.gold_mange.gold_group, False, True):
self.count += 1
if pygame.sprite.groupcollide(self.gm.persom_mange.per_group, self.gm.explosive_mange.explosive_group,
False, True):
self.tally -= 1
self.count -= 10
if self.tally <= 0:
pygame.sprite.groupcollide(self.gm.explosive_mange.explosive_group, self.gm.persom_mange.per_group,
False, True)
self.gm.state = "end"
if pygame.sprite.groupcollide(self.gm.persom_mange.per_group, self.gm.apple_mange.apple_group, False, True):
self.count += 3
if self.gm.state == "end":
self.zai_group.update()
self.zai_group.draw(self.gm.screen)
self.exit_group.update()
self.exit_group.draw(self.gm.screen)
self.font = pygame.font.Font("font/simkai.ttf", 32)
self.score_surface = self.font.render(f"你的分数为:{self.count}", True, "#FF4500")
self.gm.screen.blit(self.score_surface, (200, 75))
if Util.click_check(self.zai):
self.gm.state = "gaming"
self.tally += 3
self.count = 0
if Util.click_check(self.exit_jie):
exit()
class GameMange:
def __init__(self):
pygame.init()
self.state = "ready"
self.clock = pygame.time.Clock()
self.screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("吃金币")
self.back_mange = BackMange(self)
self.apple_mange = AppleMange(self)
self.explosive_mange = ExplosiveMange(self)
self.gold_mange = GoldMange(self)
self.persom_mange = PersonManger(self)
self.autton_mange = AuttonMange(self)
def chen_chenk(self):
self.clock.tick(600)
self.back_mange.update()
def run(self):
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
self.chen_chenk()
self.autton_mange.update()
pygame.display.flip()
gm = GameMange()
gm.run()
运行截图
import pygame
import random
# 初始化Pygame
pygame.init()
# 游戏窗口尺寸
WIDTH = 800
HEIGHT = 600
# 定义颜色
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
# 创建窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Jumping Ball Game")
# 加载小球图像
ball_image = pygame.image.load("gold.png")
ball_rect = ball_image.get_rect()
ball_rect.center = (WIDTH // 2, HEIGHT // 2)
# 设置小球的速度和跳跃高度
ball_speed = 5
jump_height = 100
is_jumping = False
# 游戏循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 处理用户输入
keys = pygame.key.get_pressed()
if keys[pygame.K_SPACE] and not is_jumping:
is_jumping = True
# 更新小球位置
if is_jumping:
if ball_rect.y > HEIGHT - jump_height:
ball_rect.y -= ball_speed
else:
is_jumping = False
else:
if ball_rect.y < HEIGHT - ball_rect.height:
ball_rect.y += ball_speed
# 绘制背景和小球
screen.fill(WHITE)
screen.blit(ball_image, ball_rect)
# 刷新屏幕
pygame.display.flip()
# 退出游戏
pygame.quit()
按空格键它可以向上跳起,之后落下