下面是一个简单的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的绘图函数将马里奥、障碍物和地面绘制到窗口中,并显示窗口内容。