用C++实现一个马里奥小游戏

下面是一个简单的C++马里奥小游戏示例,它使用了SFML库来绘制图形和处理用户输入。

#include <SFML/Graphics.hpp>  
  
int main()  
{  
    // 创建窗口  
    sf::RenderWindow window(sf::VideoMode(640, 480), "Mario Game");  
  
    // 创建马里奥角色  
    sf::Texture marioTexture;  
    marioTexture.loadFromFile("mario.png");  
    sf::Sprite mario(marioTexture);  
    mario.setPosition(100, 300);  
  
    // 创建障碍物  
    sf::Texture obstacleTexture;  
    obstacleTexture.loadFromFile("obstacle.png");  
    sf::Sprite obstacle(obstacleTexture);  
    obstacle.setPosition(200, 200);  
  
    // 创建地面  
    sf::Texture groundTexture;  
    groundTexture.loadFromFile("ground.png");  
    sf::Sprite ground(groundTexture);  
    ground.setPosition(0, 280);  
    ground.setScale(10, 1);  
  
    // 游戏循环  
    while (window.isOpen())  
    {  
        // 处理事件  
        sf::Event event;  
        while (window.pollEvent(event))  
        {  
            if (event.type == sf::Event::Closed)  
                window.close();  
        }  
  
        // 更新马里奥位置  
        sf::Vector2f marioVelocity(0, 0);  
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))  
            marioVelocity.x -= 5;  
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))  
            marioVelocity.x += 5;  
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))  
            marioVelocity.y -= 5;  
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))  
            marioVelocity.y += 5;  
        mario.move(marioVelocity);  
  
        // 检查是否碰到障碍物  
        if (mario.getGlobalBounds().intersects(obstacle.getGlobalBounds()))  
        {  
            window.close();  
            break;  
        }  
  
        // 更新地面位置  
        ground.move(sf::Vector2f(ground.getGlobalBounds().width / ground.getScale().x, 0));  
        if (ground.getGlobalBounds().left < window.getSize().x)  
            ground.move(-10, 0);  
  
        // 清除窗口内容  
        window.clear();  
  
        // 绘制马里奥、障碍物和地面  
        window.draw(mario);  
        window.draw(obstacle);  
        window.draw(ground);  
  
        // 显示窗口内容  
        window.display();  
    }  
  
    return 0;  
}

在这个示例中,我们使用了SFML库来创建窗口、加载纹理、创建精灵、处理用户输入等。马里奥角色和障碍物使用了一个纹理精灵(sf::Sprite),地面使用了一个具有多个单位的纹理精灵。通过键盘输入来控制马里奥移动,并在每个游戏循环中更新马里奥位置、检查是否碰到障碍物、更新地面位置等。最后,我们使用SFML的绘图函数将马里奥、障碍物和地面绘制到窗口中,并显示窗口内容。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值