【C++大作业】实现俄罗斯方块(附代码+实现思路带详细注释)

这篇博客记录了作者使用C++和SFML库完成俄罗斯方块游戏的大作业过程。主要内容包括:设置图形界面、游戏逻辑实现、方块表示与绘制、键盘控制、旋转、移动、加速、消行功能及计分系统的实现。通过详细注释的代码,介绍了整个项目的开发流程。
摘要由CSDN通过智能技术生成

由于最近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
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值