변수 및 함수
-
cell: 칸, ver: 세로 벽, hor: 가로 벽
- cell(x, y): ver(x, y) ver(x+1, y) hor(x, y) hor(x, y+1)로 둘러싸임
모든 오브젝트(칸, 벽)에 대해 (x, y)의 인덱스를 가질 때, 그것은 해당 오브젝트의 좌하단의 실제 좌표이다.
-
pos: (x,y) 현재 발사자가 서 있는 위치의 칸 인덱스
-
stPos: (x,y) = pos + (0.5, 0.5) 발사자의 실제 위치
-
tarMir: 적중된 거울 정보
- tarMir.pos: 거울의 좌하단 좌표
- tarMir.len: 거울의 길이
- tarMir.dir: 거울의 방향, ver 혹은 hor
-
parRay: list<pair<float, float> > 현재 단계에서 나아가고 있는 빛줄기
- 초기설정: {(0,1)}
- void SubtractRay(list<pair<float, float> >parRay, pair<float, float> sub)
parRay에서 sub만큼을 빼는 것
- parRay의 모든 원소에 대해 parRay[].first, parRay[].second, sub[].first, sub[].second를 float[4] arr에 넣고 오름차순 정렬
- arr[0] == sub.first && arr[1] == sub.second || arr[2] == sub.first && arr[3] == sub.second
- 패스
- arr[0] == sub.first && arr[2] == sub.second
- parRay[].first = sub.second
- arr[1] == sub.first && arr[3] == sub.second
- parRay[].second = sub.first
- arr[1] == sub.first && arr[2] == sub.second
- Add(parRay[].second, sub.second)
- parRay[].second = sub.first
- arr[0] == sub.first && arr[1] == sub.second || arr[2] == sub.first && arr[3] == sub.second
- parRay의 모든 원소에 대해 parRay[].first, parRay[].second, sub[].first, sub[].second를 float[4] arr에 넣고 오름차순 정렬
- bool IsInRay(list<pair<float, float> >parRay, pair <float, float> range)
parRay에 range가 포함되는지 보는 것
- parRay의 모든 원소에 대해