先看效果图:
首先需要先下载安装SFML安装包,这里我下载的是64位的
然后解压放在一个文件夹下,记好路径
然后要在VS中加入路径
在VC++目录中配置包含目录和库目录
包含目录的路径:D:\SFML-2.5.1\include
库目录的路径:D:\SFML-2.5.1\lib

然后在链接器-输入-添加依赖项中配置以下几个:
sfml-window-d.lib
sfml-system-d.lib
sfml-graphics-d.lib
sfml-audio-d.lib
运行代码时弹出报错
由于找不到sfml-window-d-2.dll,无法继续执行代码。重新安装程序可能会解决此问题。
这时候我们要把解压的sfml的bin文件夹下的内容,拷贝到当前代码程序的x64/Debug中去。
再次运行就会发现可以了。
完整代码如下:
#include<SFML/Graphics.hpp>
#include<time.h>
using namespace sf;
bool isCollide(Sprite s1, Sprite s2)
{
return s1.getGlobalBounds().intersects(s2.getGlobalBounds());
}
int main()
{
srand(time(0));
RenderWindow app(VideoMode(520, 450), "Arkanoid Game!");
app.setFramerateLimit(60);
Texture t1, t2, t3, t4;
t1.loadFromFile("./images/block01.png");
t2.loadFromFile("./images/background.jpg");
t3.loadFromFile("./images/ball.png");
t4.loadFromFile("./images/paddle.png");
Sprite sBackground(t2), sBall(t3), sPaddle(t4);
sPaddle.setPosition(300, 440);
sBall.setPosition(300, 300);
Sprite block[1000];
int n = 0;
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= 10; j++)
{
block[n].setTexture(t1);
block[n].setPosition(i * 43, j * 20);
n++;
}
}
float dx = 6;
float dy = 5;
while (app.isOpen())
{
Event e;
while (app.pollEvent(e))
{
if (e.type == Event::Closed)
{
app.close();
}
}
sBall.move(dx, 0);
for (int i = 0; i < n; i++)
{
if (isCollide(sBall, block[i]))
{
block[i].setPosition(-100, 0);
dx = -dx;
}
}
sBall.move(0, dy);
for (int i = 0; i < n; i++)
{
if (isCollide(sBall, block[i]))
{
block[i].setPosition(-100, 0);
dy = -dy;
}
}
Vector2f b = sBall.getPosition();
if (b.x < 0 || b.x > 520)
{
dx = -dx;
}
if (b.y < 0 || b.y > 450)
{
dy = -dy;
}
if (Keyboard::isKeyPressed(Keyboard::Right))
{
sPaddle.move(6, 0);
}
if (Keyboard::isKeyPressed(Keyboard::Left))
{
sPaddle.move(-6, 0);
}
if (isCollide(sPaddle, sBall))
{
dy = -(rand() % 5 + 2);
}
app.clear();
app.draw(sBackground);
app.draw(sBall);
app.draw(sPaddle);
for (int i = 0; i < n; i++)
{
app.draw(block[i]);
}
app.display();
}
return 0;
}
首先是界面的显示代码,这里用到了砖块block、背景background、小球ball、踏板paddle。
#include<SFML/Graphics.hpp>
#include<time.h>using namespace sf;
int main()
{
srand(time(0));RenderWindow app(VideoMode(520, 450), "Arkanoid Game!");
app.setFramerateLimit(60);Texture t1, t2, t3, t4;
t1.loadFromFile("./images/block01.png");
t2.loadFromFile("./images/background.jpg");
t3.loadFromFile("./images/ball.png");
t4.loadFromFile("./images/paddle.png");
Sprite sBackground(t2), sBall(t3), sPaddle(t4);
sPaddle.setPosition(300, 440);
sBall.setPosition(300, 300);Sprite block[1000];
int n = 0;
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= 10; j++)
{
block[n].setTexture(t1);
block[n].setPosition(i * 43, j * 20);
n++;
}
}while (app.isOpen())
{
Event e;
while (app.pollEvent(e))
{
if (e.type == Event::Closed)
{
app.close();
}
}app.clear();
app.draw(sBackground);
app.draw(sBall);
app.draw(sPaddle);for (int i = 0; i < n; i++)
{
app.draw(block[i]);
}
app.display();}
return 0;
}
然后实现小球的移动
#include<SFML/Graphics.hpp>
#include<time.h>using namespace sf;
int main()
{
srand(time(0));RenderWindow app(VideoMode(520, 450), "Arkanoid Game!");
app.setFramerateLimit(60);Texture t1, t2, t3, t4;
t1.loadFromFile("./images/block01.png");
t2.loadFromFile("./images/background.jpg");
t3.loadFromFile("./images/ball.png");
t4.loadFromFile("./images/paddle.png");
Sprite sBackground(t2), sBall(t3), sPaddle(t4);
sPaddle.setPosition(300, 440);
sBall.setPosition(300, 300);Sprite block[1000];
int n = 0;
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= 10; j++)
{
block[n].setTexture(t1);
block[n].setPosition(i * 43, j * 20);
n++;
}
}
float dx = 6;
float dy = 5;
while (app.isOpen())
{
Event e;
while (app.pollEvent(e))
{
if (e.type == Event::Closed)
{
app.close();
}
sBall.move(dx, dy);
Vector2f b = sBall.getPosition();
if (b.x < 0 || b.x>520) dx = -dx;
if (b.y < 0 || b.x>450) dy = -dy;
app.clear();
app.draw(sBackground);
app.draw(sBall);
app.draw(sPaddle);for (int i = 0; i < n; i++)
{
app.draw(block[i]);
}
app.display();}
return 0;
}
最后实现来回弹跳
#include<SFML/Graphics.hpp>
#include<time.h>using namespace sf;
bool isCollide(Sprite s1, Sprite s2)
{
return s1.getGlobalBounds().intersects(s2.getGlobalBounds());
}
int main()
{
srand(time(0));RenderWindow app(VideoMode(520, 450), "Arkanoid Game!");
app.setFramerateLimit(60);Texture t1, t2, t3, t4;
t1.loadFromFile("./images/block01.png");
t2.loadFromFile("./images/background.jpg");
t3.loadFromFile("./images/ball.png");
t4.loadFromFile("./images/paddle.png");
Sprite sBackground(t2), sBall(t3), sPaddle(t4);
sPaddle.setPosition(300, 440);
sBall.setPosition(300, 300);Sprite block[1000];
int n = 0;
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= 10; j++)
{
block[n].setTexture(t1);
block[n].setPosition(i * 43, j * 20);
n++;
}
}float dx = 6;
float dy = 5;while (app.isOpen())
{
Event e;
while (app.pollEvent(e))
{
if (e.type == Event::Closed)
{
app.close();
}
}sBall.move(dx, 0);
for (int i = 0; i < n; i++)
{
if (isCollide(sBall, block[i]))
{
block[i].setPosition(-100, 0);
dx = -dx;
}
}
sBall.move(0, dy);
for (int i = 0; i < n; i++)
{
if (isCollide(sBall, block[i]))
{
block[i].setPosition(-100, 0);
dy = -dy;
}
}
Vector2f b = sBall.getPosition();
if (b.x < 0 || b.x > 520)
{
dx = -dx;
}
if (b.y < 0 || b.y > 450)
{
dy = -dy;
}if (Keyboard::isKeyPressed(Keyboard::Right))
{
sPaddle.move(6, 0);
}
if (Keyboard::isKeyPressed(Keyboard::Left))
{
sPaddle.move(-6, 0);
}
if (isCollide(sPaddle, sBall))
{
dy = -(rand() % 5 + 2);
}
app.clear();
app.draw(sBackground);
app.draw(sBall);
app.draw(sPaddle);for (int i = 0; i < n; i++)
{
app.draw(block[i]);
}
app.display();}
return 0;
}