这题的关键是正确判断“可见”。
窗口之间的遮挡规则本质上是一个优先级比较:
实现一个简单的窗口系统。首先初始化一个给定宽高的屏幕,并建立图像坐标系,以屏幕左上角 (0, 0) 为坐标原点。
窗口系统可以容纳窗口,窗口有以下属性:
支持的操作
窗口系统支持以下操作:
窗口遮挡与可见性规则
resize 和 move 操作不影响窗口创建的先后顺序move/resize 到屏幕外,完全处于屏幕外的窗口不可见需要实现的方法
init 方法true;反之,返回 falsecreateWindow 方法true,反之,返回 falseremoveWindow 方法true;如果窗口未创建无法执行移除操作,返回 falseresize 方法true,否则返回 falsemove 方法true,否则返回 falsequeryVisibility 方法truefalsequeryAllVisibleWindows 方法;分割;若无可见窗口则返回NoVisibleWindow一系列窗口操作,整体操作数不超过 100 个,第一个操作均为init方法,用于初始化屏幕。如果屏幕没有创建成功,不会有后续操作。
对应操作的返回值
输入
init 200 300
createWindow window1 10 10 100 100 1
createWindow window2 20 20 40 30 2
createWindow window3 70 90 50 3
removeWindow window2
removeWindow window4
queryVisibility window1
queryAllVisibleWindows 10 10 100 100
输出
true
true
true
true
true
false
true
window3;window1
说明
输入为一系列窗口系统的操作及对应参数,输出为每个操作的返回值。
输入
init 100 100
createWindow win1 0 0 50 50 1
createWindow win2 0 0 50 50 2
createWindow win3 0 0 50 50 3
queryVisibility win1
queryVisibility win2
queryVisibility win3
输出
true
true
true
false
false
true
说明
输入为一系列窗口系统的操作及对应参数,输出为每个操作的返回值。