小球进蓝洞(运算符重载)
题目描述
小球进蓝洞游戏是指在n*m(n,m取值在2到10之间)的方阵中,设置红洞、蓝洞和若干绿色三角形块,调整绿色三角形块,使小球从红洞洞口方向出发,经三角形块斜边反射,不断改变前行方向,最终从蓝洞洞口方向进入蓝洞。例如:下图左图的初始游戏布局中,调整三角形块如右图所示,小球将沿蓝色虚线进入蓝洞。
红洞,蓝洞洞口位于方块的右、上、左、下四个方位之一,分别用数字0、1、2、3表示。例如:上图红洞洞口在方块的右边,用0表示。蓝洞洞口在方块的下方,用3表示。
单击三角形块可调整其方向,变化顺序如图(a)-(d)(分别用数值1-4表示)的顺序,在四个方向中不断循环。例如:单击上图左图中三角形块三次,即变为上图右图中的三角形块。
小球从红洞出发,直线前行,碰到三角形块的边则改变前行方向。小球改变路线的规则为:小球碰到直角边,则沿原方向的反方向前行,如下图左边的直线所示;小球碰到斜边,则沿90度改变前行方向,如下图右边的两条直线所示(直线的箭头方向可改变,从水平右边进入,变为向上前行)。
红洞、蓝洞、小球、三角形块都可以用x,y坐标加方向表示,定义基类CPoint类:属性:x,y,dir(方向),方法:带参构造,x,y,dir的公有访问接口,重载输出,输出x,y,dir。其它方法可根据需要自行添加。
定义CHole类:公有继承CPoint类。其它方法可自行添加。
定义三角形块CTriangle类:公有继承CPoint类。新增方法:重载前++,实现单击三角形块按上图(a)-(d)顺序调整三角形块方向。其它方法可自行添加。
定义CBall类:公有继承CPoint类。新增方法:重载*=,实现小球与三角形块碰撞的功能(改变小球前行方向)。
定义游戏类:属性:方阵大小n,m; CHole对象红洞、蓝洞;三角形块个数k,三角形块对象数组(存储三角形块数据)。方法:构造函数,play实现游戏功能,设置三角形块的形状,使小球从红洞出发,进入蓝洞。重载输出,按三角形块的输入顺序输出调整后的各三角形块坐标和方向。
主函数根据输入、输出编写。
假设n*m方阵左上角坐标为(0,0),右下角坐标为(n-1,m-1)。
输入
测试次数t
方阵大小n m
红洞坐标 洞口方位
蓝洞坐标 洞口方位
三角形块个数m
m行,每个一个三角形块数据:坐标 方向