由于最近C++大作业需要,所以来记录下自己写大作业的记录(自留)
效果图
有目标才有动力
先来看下最终的效果图吧
代码加上注释总计不足三百行,简化版本200行左右
环境配置SFML
首先由于我们想要最终的结果不仅仅是一个简单的终端用文字输出的界面,希望有一个图形化的界面,所以我们决定采用一个图像-----SFML
将这个库搭载到VS上的过程和我们之前说过的讲OPENCV搭载到VS上的操作过程是类似的,我们在这里就简单的提一下
首先去官网下载这个库
百度里直接搜索SFML就可以了
下载到电脑中,并且解压
然后就可以打开VS并且新建一个c++项目文件了
并且在解决方案资源管理器进行右键->属性->VC++目录->包含文件这里加上刚刚下载压缩包的include文件的目录
在库目录里面加上lib文件
这是我电脑中的位置,每个人下载解压的位置不一样这个路径也是不一样的
然后我们在链接器->输入->附加依赖项中添加
sfml-graphics-d.lib
sfml-audio-d.lib
sfml-window-d.lib
sfml-system-d.lib
到这里有些同学的电脑上可能已经可以实现调用库了
但是在我的电脑上还是不行
于是经过查找资料之后我发现解决的方法是讲解压文件里面的lib文件拷贝到对应的debug文件内即可。
在完成环境的配置之后,我们就可以愉快的开始写代码了。
代码书写
首先进行最常见最常见的操作------导入库和床照命名空间
#include<SFML/Graphics.hpp>//处理图像的头文件
#include<SFML/Audio.hpp>//处理声音文件
#include<time.h>//处理时间文件
using namespace sf;
要做一个小游戏,首先得有游戏界面对不,所以我们先把游戏界面显示出来
int main(void) {
srand(time(0));//用当前时间生成随机种子
RenderWindow window(VideoMode(320, 416),"HEY");//创建窗口
Texture bg;//加载背景图片
bg.loadFromFile("C:/Users/Hey/Desktop/俄罗斯方块/ConsoleApplication1/image/bg.jpg");
Sprite spriteBg(bg);//根据图片创造对象
window.draw(spriteBg);
system("pause");
return 0;
}
这样就可以展现出一个简单的背景图像了
有背景之后我们要一步步丰富我们的代码,就是要开始编写游戏循环了
//进入游戏循环
//进入游戏
while (window.isOpen()) {
//如果窗口没有被关闭
window.draw(spriteBg);
window.draw(spriteFrame);
//绘制方块,绘制游戏
drawBlocks(&window,&spriteBlock);
//渲染方块
window.draw(textScore);//显示分数
window.display();//
}
system("pause");
return 0;
}
//启动到现在的时间
float time = clock.getElapsedTime().asSeconds();
clock.restart();
timer += time;
//等待用户按键
keyEvent(&window);//左右移动和旋转
if (timer > delay)
{
//降落
drop();//下降一个位置
timer = 0;
}
for (int i = 0; i < 10; i++) {
if (table[0][i]||table[1][0]|| table