使用Pygame制作“嫦娥奔月”小游戏

前言

中秋节是中国传统的重要节日之一,起源于嫦娥奔月的神话故事。一个名叫逢蒙的人发现了这个秘密,他企图威胁嫦娥交出药丸。在紧急情况下,嫦娥为了保护后羿,不得不吞下了那包药。结果,她立即感觉身体飘离了地面,冲出窗口,向天上飞去。由于她牵挂着丈夫,她飞到了离人间最近的月亮上,成为了仙女。

在中秋节这个特殊的日子里,人们不仅会欣赏明亮的月亮和嫦娥奔月的美丽故事,还会举行一些庆祝活动。接下来,我们使用Pygame制作"嫦娥奔月"小游戏。

准备工作

  • pygame
  • sys

Pygame是一个用于开发2D游戏的Python库,它提供了许多用于游戏开发的工具和函数。使用Pygame,你可以创建各种类型的游戏,包括平台游戏、射击游戏、角色扮演游戏等。

程序代码及思路

我们先准备一张背景图,如上所示,嫦娥奔月怎么能少得了嫦娥呢。我们在准备一个嫦娥的图片。我们计划是通过嫦娥的图片实现奔月的过程。

安装相关库

arduino 复制代码
import pygame  
import sys  

初始化

ini 复制代码
# 初始化pygame
pygame.init()  

# 设置窗口大小
infoObject = pygame.display.Info()
width = infoObject.current_w
height = infoObject.current_h
print(width,height)
window_size =  (width,height-50)
screen = pygame.display.set_mode(window_size)

设置标题

Pygame的初始化和窗口大小设置部分,接下来,我们设置标题和加载相应的图片。

ini 复制代码
# 设置标题  
pygame.display.set_caption("嫦娥奔月")  
  
# 加载嫦娥的图片  
chang_e = pygame.image.load('chang_e.jpg')
# 加载背景图片  
background_image = pygame.image.load('background.png')
# 缩放背景图片以匹配窗口大小  
background_image = pygame.transform.scale(background_image, window_size)  
# 设置嫦娥的初始位置
chang_e_pos = [width*0.84, height*0.66]

我们执行的效果是这样的:

游戏主程序

vbnet 复制代码
# 游戏主循环  
while True:  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            pygame.quit()  
            sys.exit()
        elif event.type == pygame.KEYDOWN:  # 监听键盘按下事件  
            if event.key == pygame.K_q:  # 判断是否按下 Q 键  
                pygame.quit()  
                sys.exit()

嫦娥奔月

我们接下来就是按键控制移动,以及移动到月亮的位置显示奔月成功。

ini 复制代码
# 检测按键事件  
    keys = pygame.key.get_pressed()  
    if keys[pygame.K_LEFT]:  
        chang_e_pos[0] -= 1  
    if keys[pygame.K_RIGHT]:  
        chang_e_pos[0] += 1  
    if keys[pygame.K_UP]:  
        chang_e_pos[1] -= 1  
    if keys[pygame.K_DOWN]:  
        chang_e_pos[1] += 1  
          
    # 清屏  
    screen.fill((255, 255, 255))  
    # 绘制背景图片  
    screen.blit(background_image, (0, 0))
   
    # 绘制嫦娥  
    screen.blit(chang_e, chang_e_pos)
    # 检查图片是否接近(250,100)  
    if abs(chang_e_pos[0] - 250) < 10 and abs(chang_e_pos[1] - 100) < 10:
        sus = pygame.image.load('嫦娥奔月.jpg')
        font = pygame.font.Font('myfont.ttf', 40)  # 设置字体和大小
        tip = font.render('嫦娥奔月成功', True, (255, 0,0))
        #text = font.render("嫦娥奔月成功!", True, (255, 0,0))  # 创建文本  
        #screen.blit(text, (30, 30))  # 将文本绘制到屏幕上
        screen.blit(sus,(683,350))
        screen.blit(tip,(683,360))
        
    # 更新屏幕显示  
    pygame.display.update()

效果展示

全部源码

ini 复制代码
import pygame  
import sys  
  
# 初始化pygame  
pygame.init()  
  
# 设置窗口大小
infoObject = pygame.display.Info()
width = infoObject.current_w
height = infoObject.current_h
print(width,height)
window_size =  (width,height-50)
screen = pygame.display.set_mode(window_size)  
  
# 设置标题  
pygame.display.set_caption("嫦娥奔月")  
  
# 加载嫦娥的图片  
chang_e = pygame.image.load('chang_e.jpg')
# 加载背景图片  
background_image = pygame.image.load('background.png')
 # 缩放背景图片以匹配窗口大小  
background_image = pygame.transform.scale(background_image, window_size)  
# 设置嫦娥的初始位置
#chang_e_pos = [width*0.84, height*0.66]
  
# 游戏主循环  
while True:  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            pygame.quit()  
            sys.exit()
        elif event.type == pygame.KEYDOWN:  # 监听键盘按下事件  
            if event.key == pygame.K_q:  # 判断是否按下 Q 键  
                pygame.quit()  
                sys.exit()
      
    # 检测按键事件  
    keys = pygame.key.get_pressed()  
    if keys[pygame.K_LEFT]:  
        chang_e_pos[0] -= 1  
    if keys[pygame.K_RIGHT]:  
        chang_e_pos[0] += 1  
    if keys[pygame.K_UP]:  
        chang_e_pos[1] -= 1  
    if keys[pygame.K_DOWN]:  
        chang_e_pos[1] += 1  
          
    # 清屏  
    screen.fill((255, 255, 255))  
    # 绘制背景图片  
    screen.blit(background_image, (0, 0))
   
    # 绘制嫦娥  
    screen.blit(chang_e, chang_e_pos)
    # 检查图片是否接近(250,100)  
    if abs(chang_e_pos[0] - 250) < 10 and abs(chang_e_pos[1] - 100) < 10:
        sus = pygame.image.load('嫦娥奔月.jpg')
        font = pygame.font.Font('myfont.ttf', 40)  # 设置字体和大小
        tip = font.render('嫦娥奔月成功', True, (255, 0,0))
        #text = font.render("嫦娥奔月成功!", True, (255, 0,0))  # 创建文本  
        #screen.blit(text, (30, 30))  # 将文本绘制到屏幕上
        screen.blit(sus,(683,350))
        screen.blit(tip,(683,360))
        
    # 更新屏幕显示  
    pygame.display.update()
    
# 退出游戏前释放资源  
pygame.quit()
相关推荐
kszlgy3 小时前
Day 52 神经网络调参指南
python
wrj的博客5 小时前
python环境安装
python·学习·环境配置
Pyeako5 小时前
深度学习--BP神经网络&梯度下降&损失函数
人工智能·python·深度学习·bp神经网络·损失函数·梯度下降·正则化惩罚
摘星编程6 小时前
OpenHarmony环境下React Native:Geolocation地理围栏
python
充值修改昵称6 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
q_35488851538 小时前
AI大模型:python新能源汽车推荐系统 协同过滤推荐算法 Echarts可视化 Django框架 大数据毕业设计(源码+文档)✅
大数据·人工智能·python·机器学习·信息可视化·汽车·推荐算法
Yeats_Liao8 小时前
开源生态资源:昇腾社区ModelZoo与DeepSeek的最佳实践路径
python·深度学习·神经网络·架构·开源
被星1砸昏头8 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
love530love9 小时前
彻底解决 ComfyUI Mixlab 插件 Whisper.available False 的报错
人工智能·windows·python·whisper·win_comfyui
不解风水10 小时前
《深度学习入门:基于 Python 的理论与实现》(斋藤康毅)
人工智能·python·深度学习