【ccf-csp题解】第7次csp认证-第二题-俄罗斯方块-简单碰撞检测算法

题目描述

思路讲解

本题的主要思路是实现一个draw函数,这个函数可以绘制每一个状态的画布。然后从第一个状态往后遍历,当绘制到某一个状态发生碰撞时,答案就是上一个状态的画布。

此处的状态x实际就是在原来的15*10画布上的第x行开始画我们的4*4的自定义像素块

如何检测碰撞与否呢?

对于每一次使用draw并开始将我们的4*4像素放到15*10画布上时,如果4*4像素上的一个位置为0直接跳过,如果为1的话,就让15*10画布相应位置上加1,然后检测这个位置现在是否为2,如果为2就直接返回true表明这个状态已经发生碰撞,那么答案就是上个状态的draw后的结果!

最后一个问题:下面这种情况怎么办?

蓝色像素掉下来的时候会直接掉出边界,为了简单起见,我们此处使用的方法是在第16行加一层“地板”,这样就一定保证碰撞和出界都可以在drow中返回true

ac代码

#include<iostream>
#include<cstring>
using namespace std;
const int N=20;
int s[N][N],g[N][N];
int p[4][4];
bool draw(int x,int y)//画在s[][]上面
{memcpy(s,g,sizeof s);for(int i=0;i<4;i++){for(int j=0;j<4;j++){if(p[i][j]){int a=i+x,b=j+y;s[a][b]++;if(s[a][b]==2)return true;}}}return false;
} 
int main()
{for(int i=0;i<15;i++){for(int j=0;j<10;j++)cin>>g[i][j];}for(int i=0;i<10;i++)g[15][i]=1;for(int i=0;i<4;i++){for(int j=0;j<4;j++)cin>>p[i][j];}int c;cin>>c;c--;for(int i=0;;i++){if(draw(i,c)){draw(i-1,c);break;}}for(int i=0;i<15;i++){for(int j=0;j<10;j++){cout<<s[i][j]<<" ";}cout<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/130215.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端js八股文大全

一、js的数据类型 值类型(基本类型)&#xff1a;数字(Number)、字符串&#xff08;String&#xff09;、布尔(Boolean)、对空&#xff08;Null&#xff09;、未定义&#xff08;Undefined&#xff09;、Symbol,大数值类型(BigInt) 引用数据类型&#xff1a;对象(Object)、数组…

照片处理软件Lightroom Classic mac中文版功能介绍(Lrc2021)

Lightroom Classic 2022 mac是一款桌面编辑工具&#xff0c;lrc2021 mac包括提亮颜色、使灰暗的摄影更加生动、删除瑕疵、将弯曲的画面拉直等。您可以在电脑桌面上轻松整理所有照片。使用Lightroom Classic&#xff0c; 轻松整理编辑照片&#xff0c;为您的作品锦上添花。 Ligh…

一种针对嵌入式KEIL工程的版本管理和跟踪的python脚本

这是去年写的一个python脚本&#xff0c;和KEIL V5配套使用的&#xff0c;借助git对工程文件进行版本管理和跟踪。打包后的exe和源文件整理到网盘了&#xff0c;有需要的可以自取&#xff0c;链接&#xff1a;https://pan.quark.cn/s/6c28fb43e8dc 提取码&#xff1a;R17N 关于…

信息系统项目管理师第四版学习笔记——项目立项管理

项目建议与立项申请 立项申请又称为项目建议书&#xff0c;是项目建设单位向上级主管部门提交项目申请时所必须的文件&#xff0c;项目建议书是项目发展周期的初始阶段&#xff0c;是国家或上级主管部门选择项目的依据&#xff0c;也是可行性研究的依据。 项目建议书应该包括…

关于ABB速度,加速度,轴监控指令

关于ABB速度&#xff0c;加速度&#xff0c;轴监控 关于轴监控指令要选择启用和关闭&#xff0c;这个指令是为了防止机器人在抓件放件过程中6轴来回旋转&#xff0c;已最佳的姿态运动 收录于合集 #ABB机器人 9个 上一篇关于ABB机器人的IO创建和设置

好用的Java工具类库—— Hutool

目录 一、简介 1、介绍 2、Hutool名称的由来 3、Hutool如何改变我们的coding方式 4、包含组件&#xff08;核心&#xff09; 5、官方文档 二、安装与使用 1、引入 import方式 exclude方式 2、安装(POM) 三、使用 1、DateUtil 2、StrUtil 3、NumberUtil 4、MapU…

CloudCompare——计算点云到点云的距离

目录 1.Cloud-cloud distances2.操作流程3.完整操作4.相关代码 1.Cloud-cloud distances Cloud-cloud distances 可以通过选择两个点云&#xff0c;然后点击如下图所示的图标来计算。 或者在功能按钮中找到该功能&#xff1a; 要启动这个工具&#xff0c;用户必须选择两个点云…

对于使用win32 API获取性能计数器的理解

微软提供了获取性能计数器的接口&#xff0c;如下 LSTATUS RegQueryValueExA([in] HKEY hKey,[in, optional] LPCSTR lpValueName,LPDWORD lpReserved,[out, optional] LPDWORD lpType,[out, optional] LPBYTE lpData,[in, out, optional] L…

数据结构和算法(10):B-树

B-树&#xff1a;大数据 现代电子计算机发展速度空前&#xff0c;就存储能力而言&#xff0c;情况似乎也是如此&#xff1a;如今容量以TB计的硬盘也不过数百元&#xff0c;内存的常规容量也已达到GB量级。 然而从实际应用的需求来看&#xff0c;问题规模的膨胀却远远快于存储能…

Go Gin Gorm Casbin权限管理实现 - 3. 实现Gin鉴权中间件

文章目录 0. 背景1. 准备工作2. gin中间件2.1 中间件代码2.2 中间件使用2.3 测试中间件使用结果 3. 添加权限管理API3.1 获取所有用户3.2 获取所有角色组3.3 获取所有角色组的策略3.4 修改角色组策略3.5 删除角色组策略3.6 添加用户到组3.7 从组中删除用户3.8 测试API 4. 最终目…

Python Opencv实践 - 车辆识别(1)读取视频,移除背景,做预处理

示例中的图像的腐蚀、膨胀和闭运算等需要根据具体视频进行实验得到最佳效果。代码仅供参考。 import cv2 as cv import numpy as np#读取视频文件 video cv.VideoCapture("../../SampleVideos/Traffic.mp4") FPS 10 DELAY int(1000 / FPS) kernel cv.getStructu…