- 分享
C++SFML小游戏:贪吃蛇
- @ 2026-7-26 11:51:58
一、配置SFML库
首先,去这个网站:(https://www.sfml-dev.org/)
下载2.5.1版本(如果用其他版本的编译器就用其他匹配的版本)
一定不要下成3.x版本!!!!不然会报错!!!!
然后,将其解压到桌面或其他路径,把里面的include文件夹拿出来(注意! 一定要看下级目录,里面有.hpp文件的才对)将其重命名成SFML,放在编程软件官方头文件库,再从首级目录中的lib文件夹中的所有东西全部复制到编程软件官方lib文件夹里。最后,把bin文件夹中的所有东西复制到编程软件官方bin文件夹。
二、编译配置
打开工具栏,在编译选项里在链接参数中写-DSFML_STATIC -lsfml-graphics-s -lsfml-window-s -lsfml-system-s -lsfml-audio-s -lsfml-network-s -lopengl32 -lfreetype -lwinmm -lgdi32 -lopenal32 -lflac -lvorbisenc -lvorbisfile -lvorbis -logg
这样就配置完成了。
三、测试
创建新文件,输入以下代码
#include <SFML/Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Test");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Blue); // 试试蓝色
shape.setPosition(350, 250);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color::White); // 背景设为白色,更容易看清
window.draw(shape);
window.display();
}
return 0;
}
只要能看到蓝色圆形就说明成功了。
四、贪吃蛇程序
(程序)[file:///Q:/c/pc/C++/SFML/贪吃蛇]
2 条评论
-
-
呃呃呃,链接出了点问题,代码:
#include<SFML/Graphics.hpp> #include<time.h> #include<stdlib.h> using namespace sf; int N=30; int M=20; int size=16; int w=size*N; int h=size*M; int dir,num=4; struct Snake{ int x,y; }s[100]; struct Food{ int x,y; }f; struct Shit{ int x,y; }sh; void Tick(){ for(int i=num;i>0;i--){ s[i].x=s[i-1].x; s[i].y=s[i-1].y; } if(dir==0){ s[0].y+=1; } if(dir==1){ s[0].x-=1; } if(dir==2){ s[0].x+=1; } if(dir==3){ s[0].y-=1; } if(s[0].x==f.x && s[0].y==f.y){ num++; f.x=rand()%N; f.y=rand()%M; } if(s[0].x==sh.x && s[0].y==sh.y){ num--; sh.x=rand()%N; sh.y=rand()%M; } if(num<=0){ num=4; } if(s[0].x>N){ s[0].x=0; } if(s[0].x<0){ s[0].x=N; } if(s[0].y>M){ s[0].y=0; } if(s[0].y<0){ s[0].y=M; } for(int i=1;i<=num;i++){ if(s[0].x==s[i].x && s[0].y==s[i].y){ num=i; } } } int main(){ srand((unsigned)time(NULL)); RenderWindow window(VideoMode(w,h),"Snake Game!"); Texture t1,t2,t3,t4; t1.loadFromFile("images/white.png"); t2.loadFromFile("images/red.png"); t3.loadFromFile("images/food.png"); t4.loadFromFile("images/shit.png"); Sprite sprite1(t1); Sprite sprite2(t2); Sprite sprite3(t3); Sprite sprite4(t4); Clock clock; float timer=0,delay=0.1; f.x=10; f.y=10; while(window.isOpen()){ float time=clock.getElapsedTime().asSeconds(); clock.restart(); timer+=time; Event e; while(window.pollEvent(e)){ if(e.type==Event::Closed){ window.close(); } } if(Keyboard::isKeyPressed(Keyboard::Down)){ dir=0; } if(Keyboard::isKeyPressed(Keyboard::Left)){ dir=1; } if(Keyboard::isKeyPressed(Keyboard::Right)){ dir=2; } if(Keyboard::isKeyPressed(Keyboard::Up)){ dir=3; } if(timer>delay){ timer=0; Tick(); } window.clear(); for(int i=0;i<N;i++){ for(int j=0;j<M;j++){ sprite1.setPosition(i*size,j*size); window.draw(sprite1); } } for(int i=0;i<num;i++){ sprite2.setPosition(s[i].x*size,s[i].y*size); window.draw(sprite2); } sprite3.setPosition(f.x*size,f.y*size); window.draw(sprite3); sprite4.setPosition(sh.x*size,sh.y*size); window.draw(sprite4); window.display(); } }图片:
保存在/images目录
- 1