第四篇【传奇开心果微博系列】Python微项目技术点案例示例:美女颜值判官
传奇开心果微博系列
- 系列微博目录
- Python微项目技术点案例示例系列
- 微博目录
- 一、微项目目标
- 二、雏形示例代码
- 三、扩展思路
- 四、添加不同类型的美女示例代码
- 五、增加难度等级示例代码
- 六、添加特殊道具示例代码
- 七、设计关卡系统示例代码
- 八、添加音效和背景音乐示例代码
- 九、多人游戏模式示例代码
- 十、排行榜和成就系统示例代码
- 十一、增加动画效果示例代码
系列微博目录
Python微项目技术点案例示例系列
微博目录
一、微项目目标
使用pygame实现面向对象的给美女打分小游戏示例代码,给美女打分,鉴赏颜值担当的美女,凑趣逗乐中学编程。
二、雏形示例代码
下面是使用Pygame实现面向对象的给美女打分程序的示例代码:
import pygame
import random# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分")# 定义美女类
class Beauty(pygame.sprite.Sprite):__init__(self, x, y):().__init__()self.image = pygame.image.loadbeauty.png") # 美女的self.rect = self.image.get_rect()self.rect.center = (x, y)def update(self):pass# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y):super().__init__()self.score = 0self.font = pygame.font.Font(None, 36)self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)def update(self):self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建美女对象
beauty = Beauty(screen_width // 2, screen_height // 2)
all_sprites.add(beauty)# 创建分数对象
score = Score(screen_width // 2, 50)
all_sprites.add(score)# 游戏主循环
running = True
clock = pygame.time.Clock()
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 更新精灵组中的所有精灵all_sprites.update()# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 退出游戏
pygame.quit()
请注意,以上代码中需要准备一张名为"beauty.png"的美女图片作为程序运行所需的资源文件。你可以根据自己的需求替换为其他美女图片。运行代码后,你可以使用鼠标在窗口中打分给美女。程序将在窗口标题栏显示当前得分。
三、扩展思路
使用Pygame实现面向对象的给美女打分程序只是一个简单的示例,扩展思路可以有很多,以下是一些可能的扩展思路:
-
添加不同类型的美女:可以创建多个美女对象,并使用不同的图片资源表示不同类型的美女。每个美女可以有自己的得分和特%殊属性。
-
增加难度等级:可以根据玩家的得分来调整游戏的难度,例如增加美女的移动速度、出现频率或者增加分数的获取难度。
-
添加特殊道具:可以在游戏中添加一些特殊道具,玩家可以通过点击获取道具来增加得分或改变游戏规则。
-
设计关卡系统:可以设计多个关卡,每个关卡中有不同的美女和游戏目标。玩家需要按照要求给美女打分才能过关。
-
添加音效和背景音乐:可以为游戏添加音效和背景音乐,增加游戏的趣味性和氛围。
-
多人游戏模式:可以添加多人游戏模式,允许多个玩家同时参与打分,比较谁的得分更高。
-
排行榜和成就系统:可以记录玩家的最高得分,并提供排行榜和成就系统,让玩家之间进行竞争和比较。
-
增加动画效果:可以为美女的出现、消失或得分时添加一些动画效果,使游戏更加生动和有趣。
这些只是一些可能的扩展思路,你可以根据自己的创意和需求来设计和实现更多有趣的功能和玩法。使用Pygame提供的丰富功能和灵活性,你可以将这个简单的打分程序扩展成一个有趣的游戏。
四、添加不同类型的美女示例代码
以下是扩展了不同类型美女的示例代码:
import pygame
import random# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800
screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分")# 定义美女类
class Beauty(pygame.sprite.Sprite):def __init__(self, x, y, image, score, special_attribute):super().__init__()self.image = pygame.image.load(image) # 美女的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.score = score # 美女的得分self.special_attribute = special_attribute # 美女的特殊属性def update(self):pass# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y):super().__init__()self.score = 0self.font = pygame.font.Font(None, 36)self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)def update(self):self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建美女对象
beauty1 = Beauty(screen_width // 2 - 100, screen_height // 2, "beauty1.png", 10, "可爱")
beauty2 = Beauty(screen_width // 2 + 100, screen_height // 2, "beauty2.png", 20, "靓丽")
all_sprites.add(beauty1)
all_sprites.add(beauty2)# 创建分数对象
score = Score(screen_width // 2, 50)
all_sprites.add(score)# 游戏主循环
running = True
clock = pygame.time.Clock()
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 更新精灵组中的所有精灵all_sprites.update()# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 退出游戏
pygame.quit()
在这个示例代码中,我们创建了两个不同类型的美女对象:beauty1和beauty2。它们分别使用了不同的图片资源(“beauty1.png"和"beauty2.png”),并且具有不同的得分和特殊属性。你可以根据自己的需要添加更多美女对象,并为每个美女设置不同的属性。
注意:你需要准备相应的美女图片资源,并将其命名为"beauty1.png"和"beauty2.png",并与示例代码放在同一目录下。
五、增加难度等级示例代码
以下是根据玩家得分调整游戏难度的示例代码:
import pygame
import random# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800
screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分")# 定义美女类
class Beauty(pygame.sprite.Sprite):def __init__(self, x, y, image, score, special_attribute, speed):super().__init__()self.image = pygame.image.load(image) # 美女的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.score = score # 美女的得分self.special_attribute = special_attribute # 美女的特殊属性self.speed = speed # 美女的移动速度def update(self):self.rect.x += self.speed# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y):super().__init__()self.score = 0self.font = pygame.font.Font(None, 36)self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)def update(self):self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建美女对象
beauty1 = Beauty(screen_width // 2 - 100, screen_height // 2, "beauty1.png", 10, "可爱", 2)
beauty2 = Beauty(screen_width // 2 + 100, screen_height // 2, "beauty2.png", 20, "性感", 3)
all_sprites.add(beauty1)
all_sprites.add(beauty2)# 创建分数对象
score = Score(screen_width // 2, 50)
all_sprites.add(score)# 游戏主循环
running = True
clock = pygame.time.Clock()
spawn_timer = 0
difficulty_level = 1
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 更新精灵组中的所有精灵all_sprites.update()# 控制美女的出现频率和移动速度spawn_timer += 1if spawn_timer >= 60 / difficulty_level:beauty = Beauty(screen_width + 50, random.randint(50, screen_height - 50), "beauty1.png", 10, "可爱", random.randint(2, 4))all_sprites.add(beauty)spawn_timer = 0# 碰撞检测collisions = pygame.sprite.spritecollide(beauty1, all_sprites, True)for collision in collisions:score.score += collision.score# 根据得分调整难度if score.score >= 50 and difficulty_level < 3:difficulty_level = 2elif score.score >= 100 and difficulty_level < 4:difficulty_level = 3# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 退出游戏
pygame.quit()
在这个示例代码中,我们引入了一个spawn_timer
变量来控制美女的出现频率。每帧递增spawn_timer
,当它达到一定值时,创建一个新的美女对象,并将spawn_timer
重置为0。随着得分的增加,difficulty_level
变量会逐渐增加,从而影响美女的移动速度和出现频率。
注意:你需要准备相应的美女图片资源,并将其命名为"beauty1.png"和"beauty2.png",并与示例代码放在同一目录下。
六、添加特殊道具示例代码
以下是添加特殊道具的示例代码:
import pygame
import random# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800
screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分")# 定义美女类
class Beauty(pygame.sprite.Sprite):def __init__(self, x, y, image, score, special_attribute, speed):super().__init__()self.image = pygame.image.load(image) # 美女的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.score = score # 美女的得分self.special_attribute = special_attribute # 美女的特殊属性self.speed = speed # 美女的移动速度def update(self):self.rect.x += self.speed# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y):super().__init__()self.score = 0self.font = pygame.font.Font(None, 36)self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)def update(self):self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))# 定义道具类
class PowerUp(pygame.sprite.Sprite):def __init__(self, x, y, image, effect):super().__init__()self.image = pygame.image.load(image) # 道具的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.effect = effect # 道具的效果def update(self):pass# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建美女对象
beauty1 = Beauty(screen_width // 2 - 100, screen_height // 2, "beauty1.png", 10, "可爱", 2)
beauty2 = Beauty(screen_width // 2 + 100, screen_height // 2, "beauty2.png", 20, "性感", 3)
all_sprites.add(beauty1)
all_sprites.add(beauty2)# 创建分数对象
score = Score(screen_width // 2, 50)
all_sprites.add(score)# 创建道具对象
power_up = PowerUp(screen_width // 2, screen_height // 2, "power_up.png", "double_score")
all_sprites.add(power_up)# 游戏主循环
running = True
clock = pygame.time.Clock()
spawn_timer = 0
difficulty_level = 1
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.MOUSEBUTTONDOWN:if power_up.rect.collidepoint(event.pos):if power_up.effect == "double_score":score.score *= 2power_up.kill()# 更新精灵组中的所有精灵all_sprites.update()# 控制美女的出现频率和移动速度spawn_timer += 1if spawn_timer >= 60 / difficulty_level:beauty = Beauty(screen_width + 50, random.randint(50, screen_height - 50), "beauty1.png", 10, "可爱", random.randint(2, 4))all_sprites.add(beauty)spawn_timer = 0# 碰撞检测collisions = pygame.sprite.spritecollide(beauty1, all_sprites, True)for collision in collisions:score.score += collision.score# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 退出游戏
pygame.quit()
在这个示例代码中,我们创建了一个PowerUp
类来表示道具,道具可以通过点击获取。在点击道具时,我们根据道具的效果来增加得分或改变游戏规则。在示例中,道具的效果是双倍得分,当玩家点击道具时,得分将会翻倍。
注意:你需要准备相应的美女图片资源(“beauty1.png"和"beauty2.png”)、道具图片资源(“power_up.png”),并将它们与示例代码放在同一目录下。
七、设计关卡系统示例代码
以下是设计关卡系统的示例代码:
import pygame
import random# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800
screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分")# 定义美女类
class Beauty(pygame.sprite.Sprite):def __init__(self, x, y, image, score, special_attribute, speed):super().__init__()self.image = pygame.image.load(image) # 美女的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.score = score # 美女的得分self.special_attribute = special_attribute # 美女的特殊属性self.speed = speed # 美女的移动速度def update(self):self.rect.x += self.speed# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y, target_score):super().__init__()self.score = 0self.target_score = target_score # 目标得分self.font = pygame.font.Font(None, 36)self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)def update(self):self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))# 定义关卡类
class Level:def __init__(self, target_score, beauties):self.target_score = target_score # 目标得分self.beauties = beauties # 美女列表def is_completed(self, score):return score >= self.target_score# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建关卡列表
levels = [Level(50, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty1.png", 10, "可爱", 2),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty2.png", 20, "性感", 3)]),Level(100, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty3.png", 15, "甜美", 3),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty4.png", 25, "迷人", 4)])
]current_level = 0
level = levels[current_level]# 创建分数对象
score = Score(screen_width // 2, 50, level.target_score)
all_sprites.add(score)# 将当前关卡的美女添加到精灵组中
for beauty in level.beauties:all_sprites.add(beauty)# 游戏主循环
running = True
clock = pygame.time.Clock()
spawn_timer = 0
difficulty_level = 1
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 更新精灵组中的所有精灵all_sprites.update()# 控制美女的出现频率和移动速度spawn_timer += 1if spawn_timer >= 60 / difficulty_level:beauty = random.choice(level.beauties)beauty = Beauty(screen_width + 50, random.randint(50, screen_height - 50), beauty.image, beauty.score, beauty.special_attribute, random.randint(2, 4))all_sprites.add(beauty)spawn_timer = 0# 碰撞检测collisions = pygame.sprite.spritecollide(beauty, all_sprites, True)for collision in collisions:score.score += collision.score# 检查当前关卡是否完成if level.is_completed(score.score):current_level += 1if current_level < len(levels):level = levels[current_level]score = Score(screen_width // 2, 50, level.target_score)all_sprites.add(score)for beauty in level.beauties:all_sprites.add(beauty)else:running = False# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 退出游戏
pygame.quit()
在这个示例代码中,我们创建了一个Level
类来表示关卡,每个关卡有一个目标得分和一组美女。在游戏主循环中,我们检查当前关卡的得分是否达到目标得分,如果达到则进入下一个关卡。如果所有关卡都完成,则游戏结束。
注意:你需要准备相应的美女图片资源(“beauty1.png”、“beauty2.png”、“beauty3.png”、“beauty4.png”),并将它们与示例代码放在同一目录下。每个关卡可以根据需求设计不同的美女和目标得分。
八、添加音效和背景音乐示例代码
以下是为游戏添加音效和背景音乐的示例代码:
import pygame
import random# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800
screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分")# 加载背景音乐
pygame.mixer.music.load("background_music.mp3")
pygame.mixer.music.set_volume(0.5) # 设置音量
pygame.mixer.music.play(-1) # 循环播放背景音乐# 加载音效
score_sound = pygame.mixer.Sound("score_sound.wav")# 定义美女类
class Beauty(pygame.sprite.Sprite):def __init__(self, x, y, image, score, special_attribute, speed):super().__init__()self.image = pygame.image.load(image) # 美女的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.score = score # 美女的得分self.special_attribute = special_attribute # 美女的特殊属性self.speed = speed # 美女的移动速度def update(self):self.rect.x += self.speed# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y, target_score):super().__init__()self.score = 0self.target_score = target_score # 目标得分self.font = pygame.font.Font(None, 36)self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)def update(self):self.text = self.font.render("Score: " + str(self.score), True, (255, 255, 255))# 定义关卡类
class Level:def __init__(self, target_score, beauties):self.target_score = target_score # 目标得分self.beauties = beauties # 美女列表def is_completed(self, score):return score >= self.target_score# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建关卡列表
levels = [Level(50, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty1.png", 10, "可爱", 2),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty2.png", 20, "性感", 3)]),Level(100, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty3.png", 15, "甜美", 3),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty4.png", 25, "迷人", 4)])
]current_level = 0
level = levels[current_level]# 创建分数对象
score = Score(screen_width // 2, 50, level.target_score)
all_sprites.add(score)# 将当前关卡的美女添加到精灵组中
for beauty in level.beauties:all_sprites.add(beauty)# 游戏主循环
running = True
clock = pygame.time.Clock()
spawn_timer = 0
difficulty_level = 1
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 更新精灵组中的所有精灵all_sprites.update()# 控制美女的出现频率和移动速度spawn_timer += 1if spawn_timer >= 60 / difficulty_level:beauty = random.choice(level.beauties)beauty = Beauty(screen_width + 50, random.randint(50, screen_height - 50), beauty.image, beauty.score, beauty.special_attribute, random.randint(2, 4))all_sprites.add(beauty)spawn_timer = 0# 碰撞检测collisions = pygame.sprite.spritecollide(beauty, all_sprites, True)for collision in collisions:score.score += collision.scorescore_sound.play() # 播放得分音效# 检查当前关卡是否完成if level.is_completed(score.score):current_level += 1if current_level < len(levels):level = levels[current_level]score = Score(screen_width // 2, 50, level.target_score)all_sprites.add(score)for beauty in level.beauties:all_sprites.add(beauty)else:running = False# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 停止背景音乐
pygame.mixer.music.stop()# 退出游戏
pygame.quit()
在这个示例代码中,我们使用pygame.mixer.music
模块加载并播放背景音乐。我们还使用pygame.mixer.Sound
类加载音效文件,并在美女被击中时播放得分音效。
注意:你需要准备相应的音乐文件(“background_music.mp3”)和音效文件(“score_sound.wav”),并将它们与示例代码放在同一目录下。确保音乐文件和音效文件的文件路径正确。
九、多人游戏模式示例代码
以下是添加多人游戏模式的示例代码:
import pygame
import random# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800
screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分 - 多人游戏模式")# 加载背景音乐
pygame.mixer.music.load("background_music.mp3")
pygame.mixer.music.set_volume(0.5) # 设置音量
pygame.mixer.music.play(-1) # 循环播放背景音乐# 加载音效
score_sound = pygame.mixer.Sound("score_sound.wav")# 定义美女类
class Beauty(pygame.sprite.Sprite):def __init__(self, x, y, image, score, special_attribute, speed):super().__init__()self.image = pygame.image.load(image) # 美女的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.score = score # 美女的得分self.special_attribute = special_attribute # 美女的特殊属性self.speed = speed # 美女的移动速度def update(self):self.rect.x += self.speed# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y, player_name):super().__init__()self.score = 0self.player_name = player_name # 玩家名称self.font = pygame.font.Font(None, 36)self.text = self.font.render(self.player_name + ": " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)def update(self):self.text = self.font.render(self.player_name + ": " + str(self.score), True, (255, 255, 255))# 定义关卡类
class Level:def __init__(self, target_score, beauties):self.target_score = target_score # 目标得分self.beauties = beauties # 美女列表def is_completed(self, score):return score >= self.target_score# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建关卡列表
levels = [Level(50, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty1.png", 10, "可爱", 2),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty2.png", 20, "性感", 3)]),Level(100, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty3.png", 15, "甜美", 3),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty4.png", 25, "迷人", 4)])
]num_players = 2 # 玩家数量
players = [] # 玩家列表# 创建玩家对象和分数对象
for i in range(num_players):player_name = "Player " + str(i+1)player_score = Score(screen_width // 2, 50 + i*50, player_name)players.append(player_score)all_sprites.add(player_score)current_level = 0
level = levels[current_level]# 将当前关卡的美女添加到精灵组中
for beauty in level.beauties:all_sprites.add(beauty)# 游戏主循环
running = True
clock = pygame.time.Clock()
spawn_timer = 0
difficulty_level = 1
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.MOUSEBUTTONDOWN:mouse_pos = pygame.mouse.get_pos()clicked_sprites = [s for s in all_sprites if s.rect.collidepoint(mouse_pos)]for sprite in clicked_sprites:if isinstance(sprite, Beauty):for player in players:if player.rect.collidepoint(mouse_pos):player.score += sprite.scorescore_sound.play() # 播放得分音效# 更新精灵组中的所有精灵all_sprites.update()# 控制美女的出现频率和移动速度spawn_timer += 1if spawn_timer >= 60 / difficulty_level:beauty = random.choice(level.beauties)beauty = Beauty(screen_width + 50, random.randint(50, screen_height - 50), beauty.image, beauty.score, beauty.special_attribute, random.randint(2, 4))all_sprites.add(beauty)spawn_timer = 0# 检查当前关卡是否完成if level.is_completed(players[0].score):current_level += 1if current_level < len(levels):level = levels[current_level]for player in players:player.score = 0for beauty in level.beauties:all_sprites.add(beauty)else:running = False# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 停止背景音乐
pygame.mixer.music.stop()# 退出游戏
pygame.quit()
在这个示例代码中,我们创建了一个players
列表来存储多个玩家的得分对象。在游戏主循环中,我们检查鼠标点击事件,并根据点击位置和美女对象的碰撞检测来增加玩家的得分。每个玩家都有自己的得分对象,并在屏幕上显示出来。
注意:你需要准备相应的美女图片资源(“beauty1.png”、“beauty2.png”、“beauty3.png”、“beauty4.png”),并将它们与示例代码放在同一目录下。你可以根据需要调整玩家数量和相关设置。
十、排行榜和成就系统示例代码
以下是添加排行榜和成就系统的示例代码:
import pygame
import random
import json# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800
screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分 - 多人游戏模式")# 加载背景音乐
pygame.mixer.music.load("background_music.mp3")
pygame.mixer.music.set_volume(0.5) # 设置音量
pygame.mixer.music.play(-1) # 循环播放背景音乐# 加载音效
score_sound = pygame.mixer.Sound("score_sound.wav")# 定义美女类
class Beauty(pygame.sprite.Sprite):def __init__(self, x, y, image, score, special_attribute, speed):super().__init__()self.image = pygame.image.load(image) # 美女的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.score = score # 美女的得分self.special_attribute = special_attribute # 美女的特殊属性self.speed = speed # 美女的移动速度def update(self):self.rect.x += self.speed# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y, player_name):super().__init__()self.score = 0self.player_name = player_name # 玩家名称self.font = pygame.font.Font(None, 36)self.text = self.font.render(self.player_name + ": " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)def update(self):self.text = self.font.render(self.player_name + ": " + str(self.score), True, (255, 255, 255))# 定义关卡类
class Level:def __init__(self, target_score, beauties):self.target_score = target_score # 目标得分self.beauties = beauties # 美女列表def is_completed(self, score):return score >= self.target_score# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建关卡列表
levels = [Level(50, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty1.png", 10, "可爱", 2),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty2.png", 20, "性感", 3)]),Level(100, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty3.png", 15, "甜美", 3),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty4.png", 25, "迷人", 4)])
]num_players = 2 # 玩家数量
players = [] # 玩家列表# 创建玩家对象和分数对象
for i in range(num_players):player_name = "Player " + str(i+1)player_score = Score(screen_width // 2, 50 + i*50, player_name)players.append(player_score)all_sprites.add(player_score)current_level = 0
level = levels[current_level]# 将当前关卡的美女添加到精灵组中
for beauty in level.beauties:all_sprites.add(beauty)# 加载排行榜数据
leaderboard_data = {}
try:with open("leaderboard.json", "r") as f:leaderboard_data = json.load(f)
except FileNotFoundError:pass# 游戏主循环
running = True
clock = pygame.time.Clock()
spawn_timer = 0
difficulty_level = 1
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.MOUSEBUTTONDOWN:mouse_pos = pygame.mouse.get_pos()clicked_sprites = [s for s in all_sprites if s.rect.collidepoint(mouse_pos)]for sprite in clicked_sprites:if isinstance(sprite, Beauty):for player in players:if player.rect.collidepoint(mouse_pos):player.score += sprite.scorescore_sound.play() # 播放得分音效# 更新精灵组中的所有精灵all_sprites.update()# 控制美女的出现频率和移动速度spawn_timer += 1if spawn_timer >= 60 / difficulty_level:beauty = random.choice(level.beauties)beauty = Beauty(screen_width + 50, random.randint(50, screen_height - 50), beauty.image, beauty.score, beauty.special_attribute, random.randint(2, 4))all_sprites.add(beauty)spawn_timer = 0# 检查当前关卡是否完成if level.is_completed(players[0].score):current_level += 1if current_level < len(levels):level = levels[current_level]for player in players:player.score = 0for beauty in level.beauties:all_sprites.add(beauty)else:running = False# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 停止背景音乐
pygame.mixer.music.stop()# 更新排行榜数据
for player in players:if player.player_name not in leaderboard_data:leaderboard_data[player.player_name] = player.scoreelse:leaderboard_data[player.player_name] = max(leaderboard_data[player.player_name], player.score)# 保存排行榜数据
with open("leaderboard.json", "w") as f:json.dump(leaderboard_data, f)# 输出排行榜
sorted_leaderboard = sorted(leaderboard_data.items(), key=lambda x: x[1], reverse=True)
print("排行榜:")
for i, (player_name, score) in enumerate(sorted_leaderboard):print(f"{i+1}. {player_name}: {score}")# 退出游戏
pygame.quit()
在这个示例代码中,我们使用json
模块来加载和保存排行榜数据。在游戏主循环结束后,我们根据玩家的得分更新排行榜数据,并将排行榜数据保存到leaderboard.json
文件中。最后,我们对排行榜数据进行排序,并输出排行榜的内容。
注意:你需要准备相应的美女图片资源(“beauty1.png”、“beauty2.png”、“beauty3.png”、“beauty4.png”),并将它们与示例代码放在同一目录下。确保音乐文件和音效文件的文件路径正确。
十一、增加动画效果示例代码
以下是为美女的出现、消失和得分时添加动画效果的示例代码:
import pygame
import random# 初始化游戏
pygame.init()# 设置窗口大小和标题
screen_width = 800
screen_height = 600
window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("给美女打分 - 多人游戏模式")# 加载背景音乐
pygame.mixer.music.load("background_music.mp3")
pygame.mixer.music.set_volume(0.5) # 设置音量
pygame.mixer.music.play(-1) # 循环播放背景音乐# 加载音效
score_sound = pygame.mixer.Sound("score_sound.wav")# 定义美女类
class Beauty(pygame.sprite.Sprite):def __init__(self, x, y, image, score, special_attribute, speed):super().__init__()self.image = pygame.image.load(image) # 美女的图片资源self.rect = self.image.get_rect()self.rect.center = (x, y)self.score = score # 美女的得分self.special_attribute = special_attribute # 美女的特殊属性self.speed = speed # 美女的移动速度self.animation_timer = 0self.animation_duration = 30def update(self):self.rect.x += self.speed# 美女出现动画效果if self.animation_timer < self.animation_duration:self.rect.y -= 2self.animation_timer += 1# 定义分数类
class Score(pygame.sprite.Sprite):def __init__(self, x, y, player_name):super().__init__()self.score = 0self.player_name = player_name # 玩家名称self.font = pygame.font.Font(None, 36)self.text = self.font.render(self.player_name + ": " + str(self.score), True, (255, 255, 255))self.rect = self.text.get_rect()self.rect.center = (x, y)self.animation_timer = 0self.animation_duration = 30def update(self):# 分数增加动画效果if self.animation_timer < self.animation_duration:self.rect.y -= 2self.animation_timer += 1# 定义关卡类
class Level:def __init__(self, target_score, beauties):self.target_score = target_score # 目标得分self.beauties = beauties # 美女列表def is_completed(self, score):return score >= self.target_score# 创建精灵组
all_sprites = pygame.sprite.Group()# 创建关卡列表
levels = [Level(50, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty1.png", 10, "可爱", 2),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty2.png", 20, "性感", 3)]),Level(100, [Beauty(screen_width // 2 - 100, screen_height // 2, "beauty3.png", 15, "甜美", 3),Beauty(screen_width // 2 + 100, screen_height // 2, "beauty4.png", 25, "迷人", 4)])
]num_players = 2 # 玩家数量
players = [] # 玩家列表# 创建玩家对象和分数对象
for i in range(num_players):player_name = "Player " + str(i+1)player_score = Score(screen_width // 2, 50 + i*50, player_name)players.append(player_score)all_sprites.add(player_score)current_level = 0
level = levels[current_level]# 将当前关卡的美女添加到精灵组中
for beauty in level.beauties:all_sprites.add(beauty)# 加载排行榜数据
leaderboard_data = {}
try:with open("leaderboard.json", "r") as f:leaderboard_data = json.load(f)
except FileNotFoundError:pass# 游戏主循环
running = True
clock = pygame.time.Clock()
spawn_timer = 0
difficulty_level = 1
while running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.MOUSEBUTTONDOWN:mouse_pos = pygame.mouse.get_pos()clicked_sprites = [s for s in all_sprites if s.rect.collidepoint(mouse_pos)]for sprite in clicked_sprites:if isinstance(sprite, Beauty):for player in players:if player.rect.collidepoint(mouse_pos):player.score += sprite.scorescore_sound.play() # 播放得分音效# 更新精灵组中的所有精灵all_sprites.update()# 控制美女的出现频率和移动速度spawn_timer += 1if spawn_timer >= 60 / difficulty_level:beauty = random.choice(level.beauties)beauty = Beauty(screen_width + 50, random.randint(50, screen_height - 50), beauty.image, beauty.score, beauty.special_attribute, random.randint(2, 4))all_sprites.add(beauty)spawn_timer = 0# 检查当前关卡是否完成if level.is_completed(players[0].score):current_level += 1if current_level < len(levels):level = levels[current_level]for player in players:player.score = 0for beauty in level.beauties:all_sprites.add(beauty)else:running = False# 绘制背景window.fill((0, 0, 0))# 绘制所有精灵all_sprites.draw(window)# 刷新屏幕pygame.display.flip()# 停止背景音乐
pygame.mixer.music.stop()# 更新排行榜数据
for player in players:if player.player_name not in leaderboard_data:leaderboard_data[player.player_name] = player.scoreelse:leaderboard_data[player.player_name] = max(leaderboard_data[player.player_name], player.score)# 保存排行榜数据
with open("leaderboard.json", "w") as f:json.dump(leaderboard_data, f)# 输出排行榜
sorted_leaderboard = sorted(leaderboard_data.items(), key=lambda x: x[1], reverse=True)
print("排行榜:")
for i, (player_name, score) in enumerate(sorted_leaderboard):print(f"{i+1}. {player_name}: {score}")# 退出游戏
pygame.quit()
在这个示例代码中,我们为美女的出现和得分时添加了动画效果。在Beauty
类和Score
类中,我们增加了animation_timer
和animation_duration
属性,用于控制动画的持续时间和当前时间。在update
方法中,我们根据动画的进度来修改美女和分数对象的位置,以实现动画效果。
注意:你需要准备相应的美女图片资源(“beauty1.png”、“beauty2.png”、“beauty3.png”、“beauty4.png”),并将它们与示例代码放在同一目录下。确保音乐文件和音效文件的文件路径正确。
相关文章:

第四篇【传奇开心果微博系列】Python微项目技术点案例示例:美女颜值判官
传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目目标二、雏形示例代码三、扩展思路四、添加不同类型的美女示例代码五、增加难度等级示例代码六、添加特殊道具示例代码七、设计关卡系统示例代码八、添加音效和背景音乐示例代码九、多人游戏…...
Python学习之路-初识爬虫:requests
Python学习之路-初识爬虫:requests requests的作用 作用:发送网络请求,返回响应数据 中文文档 : http://docs.python-requests.org/zh_CN/latest/index.html 为什么学requests而不是urllib requests的底层实现就是urllibrequests在pytho…...
Linux 常用的命令
① 基本命令 uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件(SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作系统信息arch 显示机器的处理器架构uname -m 显示机器的处…...

假期作业 10
1.整理磁盘操作的完整流程,如何接入虚拟机,是否成功识别,对磁盘分区工具的使用,格式化,挂载以及取消挂载 U盘接入虚拟机 在虚拟机--->可移动设备--->找到U盘---->连接 检测U盘是否被虚拟机识别 ls /dev/s…...
【洛谷 P3367】【模板】并查集 题解(并查集+路径压缩)
【模板】并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 N , M N,M N,M ,表示共有 N N N 个元素和 M M M 个操作。 接下来 M M M 行,每行包含三个整数 Z i , X i , Y i Z_i,X_i,Y…...

Netty应用(一) 之 NIO概念 基本编程
目录 第一章 概念引入 1.分布式概念引入 第二章 Netty基础 - NIO 1.引言 1.1 什么是Netty? 1.2 为什么要学习Netty? 2.NIO编程 2.1 传统网络通信中开发方式及问题(BIO) 2.1.1 多线程版网络编程 2.1.2 线程池版的网络编程…...

tkinter-TinUI-xml实战(10)展示画廊
tkinter-TinUI-xml实战(10)展示画廊 引言声明文件结构核心代码主界面统一展示控件控件展示界面单一展示已有展示多类展示 最终效果在这里插入图片描述  ………… 结语 引言…...

LeetCode二叉树的垂序遍历
题目描述 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到…...
[linux c]linux do_div() 函数用法
linux do_div() 函数用法 do_div() 是一个 Linux 内核中的宏,用于执行 64 位整数的除法操作,并将结果存储在给定的变量中,同时将余数存储在另一个变量中。这个宏通常用于内核编程中,特别是在处理大整数和性能敏感的场合。 函数原…...
Python学习之路-爬虫提高:常见的反爬手段和解决思路
Python学习之路-爬虫提高:常见的反爬手段和解决思路 常见的反爬手段和解决思路 明确反反爬的主要思路 反反爬的主要思路就是:尽可能的去模拟浏览器,浏览器在如何操作,代码中就如何去实现。浏览器先请求了地址url1,保留了cookie…...
python_numpy库_ndarray的聚合操作、矩阵操作等
一、ndarray的聚合操作 1、求和np.sum() import numpy as np n np.arange(10) print(n) s np.sum(n) print(s) n np.random.randint(0,10,size(3,5)) print(n) s1 np.sum(n) print(s1) #全部数加起来 s2 np.sum(n,axis0) print(s2) #表示每一列的多行求和 …...

python-自动化篇-终极工具-用GUI自动控制键盘和鼠标-pyautogui
文章目录 用GUI自动控制键盘和鼠标pyautogui 模块鼠标屏幕位置——移动地图——pyautogui.size鼠标位置——自身定位——pyautogui.position()移动鼠标——pyautogui.moveTo拖动鼠标滚动鼠标 键盘按下键盘释放键盘 开始与结束通过注销关闭所有程序 用GUI自动控制键盘和鼠标 在…...

面试:大数据和深度学习之间的关系是什么?
大数据与深度学习之间存在着紧密的相互关系,它们在当今技术发展中相辅相成。 大数据的定义与特点:大数据指的是规模(数据量)、多样性(数据类型)和速度(数据生成及处理速度)都超出了传统数据处理软件和硬件能力范围的数据集。它具有四个主要特点,通常被称…...

航芯ACM32G103开发板评测 08 ADC Timer外设测试
航芯ACM32G103开发板评测 08 ADC Timer外设测试 1. 软硬件平台 ACM32G103 Board开发板MDK-ARM Keil 2. 定时器Timer 在一般的MCU芯片中,定时器这个外设资源是非常重要的,一般可以分为SysTick定时器(系统滴答定时器)、常规定时…...

【Linux学习】生产者-消费者模型
目录 22.1 什么是生产者-消费者模型 22.2 为什么要用生产者-消费者模型? 22.3 生产者-消费者模型的特点 22.4 BlockingQueue实现生产者-消费者模型 22.4.1 实现阻塞队列BlockQueue 1) 添加一个容器来存放数据 2)加入判断Blocking Queue情况的成员函数 3)实现push和pop方法 4)完…...

三、案例 - MySQL数据迁移至ClickHouse
MySQL数据迁移至ClickHouse 一、生成测试数据表和数据1.在MySQL创建数据表和数据2.在ClickHouse创建数据表 二、生成模板文件1.模板文件内容2.模板文件参数详解2.1 全局设置2.2 数据读取(Reader)2.3 数据写入(Writer)2.4 性能设置…...

[WinForm开源]概率计算器 - Genshin Impact(V1.0)
创作目的:为方便旅行者估算自己拥有的纠缠之缘能否达到自己的目的,作者使用C#开发了一款小型软件供旅行者参考使用。 创作说明:此软件所涉及到的一切概率与规则完全按照游戏《原神》(V4.4.0)内公示的概率与规则(包括保底机制&…...

vscode 代码调试from IPython import embed
一、讲解 这种代码调试方法非常的好用。 from IPython import embed上面的代码片段是用于Python中嵌入一个交互式IPython shell的方法。这可以在任何Python脚本或程序中实现,允许在执行到该点时暂停程序,并提供一个交互式环境,以便于检查、…...

双活工作关于nacos注册中心的数据迁移
最近在做一个双活的项目,在纠结一个注册中心是在双活机房都准备一个,那主机房的数据如果传过去呢,查了一些资料,最终在官网查到了一个NacosSync 的组件,主要用来做数据传输的,并且支持在线替换注册中心的&a…...

5G NR 信道号计算
一、5G NR的频段 增加带宽是增加容量和传输速率最直接的方法,目前5G最大带宽将会达到400MHz,考虑到目前频率占用情况,5G将不得不使用高频进行通信。 3GPP协议定义了从Sub6G(FR1)到毫米波(FR2)的5G目标频谱。 其中FR1是5G的核心频段࿰…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...
SpringCloud优势
目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...
MyBatis-Plus 常用条件构造方法
1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...