哈喽,各位小小程序员们!今天我们要用Python变一个超酷的魔术——制作一款《接金币》游戏!你只需要动动鼠标,就能控制游戏里的小人左右移动,接住天上掉下来的金币啦!💰

一、我们的游戏目标是什么?

想象一下:你控制着一个可爱的小玩仔🧍,天空中不断有闪闪发光的金币掉下来,你要左右移动接住它们。每接住一个金币就得分!🎯

听起来是不是很酷?让我们一步步实现它!

二、编程前的“超级英雄”思想——面向对象

在开始写代码前,我们要学一个超级酷的编程思想,叫做“面向对象”

🤔 什么是“面向对象”?

简单来说,就是把游戏里的每个东西都当成一个独立的小机器人

比如:

  • 玩仔是一个机器人 🤖

  • 金币是一个机器人 ⭐

  • 游戏背景也是一个机器人 🎨

每个机器人都有:

  1. 长相(属性)—— 比如玩仔穿什么衣服、长什么样

  2. 本领(方法)—— 比如玩仔会跑、会跳

📚 举个例子:学生机器人

class Student():  # 创建一个“学生”类(就像设计图纸)
    def __init__(self, name, address):  # 初始化:给机器人起名字
        self.name = name      # 属性:名字
        self.address = address # 属性:来自哪里
        
    def introduce(self):      # 方法:自我介绍的技能
        print("大家好,我叫" + self.name)
        print("我来自" + self.address)

# 创建两个学生机器人
小明 = Student("小明", "北京")
小红 = Student("小红", "上海")

# 让机器人做自我介绍
小明.introduce()  # 输出:大家好,我叫小明
                  #       我来自北京
小红.introduce()  # 输出:大家好,我叫小红
                  #       我来自上海

看!我们用同一张“设计图纸”(Student类),造出了两个不同的学生机器人!

三、搭建游戏框架——就像建房子!🏗️

做游戏就像建房子,不能乱建,要有框架。我们的游戏框架主要有三部分:

🎮 1. 系统设置(房子的设计图)

# 系统常量(就像房子的尺寸规定)
image_path = 'resources/images/'  # 图片存放的文件夹
RUN = 1       # 游戏运行状态
PAUSE = 2     # 游戏暂停状态

🎮 2. 游戏主类(房子的主体结构)

class Game:
    def __init__(self):  # 初始化,就像打好地基
        pygame.init()  # 启动游戏引擎
        self.screen = pygame.display.set_mode((800, 600))  # 创建800x600的游戏窗口
        pygame.display.set_caption('接金币')  # 给窗口起名字
        
        # 加载背景图片
        self.background = pygame.image.load(image_path + 'background.png')
        self.state = RUN  # 设置游戏状态为“运行”

🎮 3. 游戏循环(让房子“活”起来)

def run(self):  # 游戏运行时
        while True:  # 不停循环,游戏才不会结束
            self.listen()   # 监听:看看玩家按了什么键
            self.control()  # 控制:根据按键做出反应

四、让玩仔跟着鼠标跑!🖱️

这是最有趣的部分!我们要让玩仔变成你的“小跟班”,鼠标去哪儿,它就跟到哪儿。

🎯 第一步:获取鼠标位置

# 获取鼠标当前位置
pos = pygame.mouse.get_pos()  # 这会得到鼠标的(x, y)坐标
# 比如:鼠标在窗口的(100, 200)位置,pos就是(100, 200)

小实验:试试这个代码,看看鼠标位置怎么变!

import pygame
from pygame.locals import *
from sys import exit

pygame.init()
screen = pygame.display.set_mode((400, 200))
font = pygame.font.SysFont(None, 30)  # 创建字体,用来显示文字
BLACK = (0, 0, 0)    # 黑色
WHITE = (255, 255, 255)  # 白色

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    
    pos = pygame.mouse.get_pos()  # 获取鼠标位置
    img = font.render(str(pos), True, WHITE)  # 把位置变成文字图片
    
    screen.fill(BLACK)  # 把屏幕涂成黑色
    screen.blit(img, (10, 10))  # 在(10,10)位置显示文字
    pygame.display.update()  # 更新屏幕

运行后,在窗口里移动鼠标,你会看到左上角的数字跟着变化!这就是鼠标的位置。

🎯 第二步:创建“玩仔”类

class Wanzai:
    def __init__(self, pos):  # 初始化玩仔
        # 加载玩仔图片
        self.image = pygame.image.load('resources/images/wanzai.png')
        # 获取图片的矩形区域(就像给图片画个框框)
        self.rect = self.image.get_rect()
        # 设置玩仔的初始位置
        self.rect.center = pos
    
    def move(self, pos_x):  # 让玩仔移动
        self.rect.centerx = pos_x  # 只改变x坐标(水平移动)

知识点rect是PyGame中表示矩形区域的对象,有这些常用属性:

  • rect.center- 矩形的中心点

  • rect.topleft- 矩形的左上角

  • rect.width- 矩形的宽度

  • rect.height- 矩形的高度

🎯 第三步:完整的游戏代码

import pygame
from pygame.locals import *
from sys import exit

# 1. 系统设置
image_path = 'resources/images/'
RUN = 1
PAUSE = 2

# 2. 玩仔类
class Wanzai:
    def __init__(self, pos):
        self.image = pygame.image.load(image_path + 'wanzai.png')
        self.rect = self.image.get_rect()
        self.rect.center = pos
    
    def move(self, pos_x):
        self.rect.centerx = pos_x

# 3. 游戏主类
class Game:
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((800, 600))
        pygame.display.set_caption('接金币')
        
        # 加载背景
        self.background = pygame.image.load(image_path + 'background.png')
        # 创建玩仔对象,放在屏幕底部中央
        self.wanzai = Wanzai((400, 500))
        
        self.state = RUN
    
    def listen(self):  # 监听事件
        for event in pygame.event.get():
            if event.type == QUIT:  # 如果点了关闭按钮
                exit()  # 退出游戏
    
    def control(self):  # 控制游戏
        if self.state == RUN:
            # 绘制背景
            self.screen.blit(self.background, (0, 0))
            
            # 获取鼠标x坐标(水平位置)
            mouse_x = pygame.mouse.get_pos()[0]
            # 移动玩仔
            self.wanzai.move(mouse_x)
            
            # 绘制玩仔
            self.screen.blit(self.wanzai.image, self.wanzai.rect)
            
            pygame.display.update()  # 更新屏幕显示
    
    def run(self):  # 运行游戏
        while True:
            self.listen()
            self.control()

# 4. 启动游戏!
if __name__ == "__main__":
    game = Game()
    game.run()

五、运行你的游戏!🚀

  1. 准备图片:在代码文件夹里创建resources/images/文件夹,放入:

    • background.png(800×600的背景图)

    • wanzai.png(玩仔图片,建议100×100左右)

  2. 运行代码:双击你的Python文件,游戏窗口就会出现!

  3. 玩起来:移动鼠标,看看玩仔是不是乖乖跟着你走?

六、挑战升级!✨

学会了基础操作,试试这些挑战吧:

🎮 挑战1:让玩仔在窗口内移动

现在的玩仔能跑到窗口外面,你能修改代码,让它只能在窗口内移动吗?

提示:用screen.get_rect()获取窗口矩形,用rect.contains()判断玩仔是否在窗口内。

🎮 挑战2:改变移动速度

觉得玩仔移动太快或太慢?可以调整移动的步长!

🎮 挑战3:改变窗口大小

尝试修改pygame.display.set_mode((800, 600))中的数字,看看窗口有什么变化?

七、常见问题解答❓

Q:运行代码时显示“找不到图片”怎么办?

A:检查图片路径是否正确,图片是否放在resources/images/文件夹里。

Q:游戏窗口点关闭按钮关不掉怎么办?

A:按键盘上的Alt + F4强制关闭。

Q:想用键盘控制玩仔怎么办?

A:可以用pygame.key.get_pressed()获取按键状态,下节课我们会学到!

八、知识点总结📚

今天我们学到了:

  1. 面向对象思想:把游戏里的每个东西都当成独立的对象

  2. 游戏框架搭建:像建房子一样有序地组织代码

  3. 鼠标控制:用pygame.mouse.get_pos()获取鼠标位置

  4. 矩形对象(Rect):用get_rect()获取图片的矩形区域

  5. 图片绘制:用screen.blit()在屏幕上显示图片

🎉 恭喜你!

你已经成功创建了第一个Python游戏!虽然现在只能控制玩仔移动,但这是很棒的开始!下一节课,我们会让天上掉下金币和炸弹,让游戏变得更有趣!

记得保存好你的代码,下次我们继续完善这个游戏。你可以在评论区分享你的作品,或者遇到什么问题都可以问我哦!

小任务:试着改变玩仔的图片,换成你喜欢的卡通形象吧!😄


作者的话:编程就像搭积木,一开始可能有点难,但每学会一块,你就能搭出更酷的东西!坚持下去,你会发现自己越来越厉害!💪

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐