题目描述
游戏中需要检测元素是否碰撞到一起,比如打飞机游戏,没躲避炮弹就算碰撞,检测出来,游戏game over。假设将游戏中的元素当作矩形,当两个矩形有重合点,则认为它们发生碰撞。
设屏幕左上角坐标为(0,0),x轴向右,y轴向下,屏幕上的点用(X,Y)坐标表示,如下图所示。
屏幕中的矩形用其左上角和右下角坐标标识。分别输入两个矩形的左上角和右下角坐标,检测其是否碰撞。
输入
测试次数T
每组测试数据两行:
第一行,矩形1的左上角坐标,右下角坐标
第二行,矩形2的左上角坐标,右下角坐标
输出
对每组测试数据,输出碰撞检测结果,YES(碰撞)或NO(无碰撞)
样例查看模式 正常显示查看格式
输入样例1
3
0 0 10 10
11 11 20 20
10 10 15 15
8 13 13 20
4 4 20 20
20 20 30 30
输出样例1
NO
YES
YES
#include<stdio.h>
int main()
{
int t,i,q,w,j,z,x1,x2,y1,y2,x3,y3,x4,y4;
scanf("%d",&t);
for(i=0;i<t;i++)
{
int sign=0;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
scanf("%d %d %d %d",&x3,&y3,&x4,&y4);
for(j=y1;j<=y2;j+=1)
{
if(y3==j||y4==j)
{
sign++;
break;
}
}
for(z=x1;z<=x2;z+=1)
{
if(x3==z||x4==z)
{
sign++;
break;
}
}
for(q=x3;q<=x4;q++)
{
if(x1==q||x2==q)
{
sign++;
break;
}
}
for(w=y3;w<=y4;w++)
{
if(y1==w||y2==w)
{
sign++;
break;
}
}
if(sign>=2)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
这里我的想法主要是去看其中一个矩形的两个点是否经过另一个矩形对应的(即x对应x,y对应y)两个点之间,并且用一个记号变量来记录,这里我一开始犯了个小错误,就是我一开始只写了两个循环,而这样的话会忽略一种情况,就是一个矩形被另一个矩形完全包住的情况,不过好在后来意识到了这一点。