Adaid's Workroom
[AW] 색섞기 알고리즘 아이디어 본문
동기
섞는 색 판정을 하드코딩이 아닌 다른 방법으로 해보고 싶었다.
if(색1 == 빨강)
{
if(색2 == 노랑)
...
else if(색2 = 파랑)
....
}
이런식으로 하드코딩하지 않고 깔끔하게 계산할수 있는 방법을 찾고 싶다!
해서 생각해본 아이디어 끄적끄적
3비트 색깔 코드
먼저 각각의 색 코드를 3비트로 나타낸다.
각 비트의 값은 빨강 / 노랑 / 파랑 값을 의미한다.
(엄밀히 말하면 색의 3원색이라 마젠타 / 노랑 / 사이안 이지만 편의상 빨노파로 씀)
즉 2진법으로 했을 때
빨강 = 100
노랑 = 010
파랑 = 001
주황(빨+노) = 110
초록(노+파) = 011
보라(파+빨) = 101
위와같이 된다.
색 섞임 판정
우리게임에서 빨강+주황 등은 섞을 수 없는 규칙이 있다.
둘 모두 '빨강' 속성을 가지고 있기 때문이다.
(주황 = 빨강+노랑)
앞에서의 색 코드와 AND 연산을 이용해 두 색이 섞일 수 있는지 판별할 수 있다.
두 색의 각 자리수의 비트가 중복되는 것이 있으면 섞일 수 없다.
그러므로 AND연산을 하여 그 값이 0이 아니면 두 색은 섞일 수 없다.
(ex1) 빨강+주황
빨강 = 100
주황 = 110
AND = 100
-> 결과값이 0이 아니므로 섞일 수 없음
(ex2) 노랑+파랑
노랑 = 100
파랑 = 001
AND = 000
-> 결과값이 0 이므로 섞일 수 있음
+ 나중에 혼합색은 섞을수 없다는 기획이 추가됨.
(ex) 주황+파랑은 불가
이 것은 두 색이 모두 기본색인지도 판별해주면 될 것 같다.
기본색 판정은 각 비트값의 합이 1임을 판별하면 됨.
반복문으로 0x1과 AND 연산한 값 더하고 시프트연산>>하면서 합을 구하면 된다.
또는 3자리뿐이니 하드코딩으로 세번 계산해서 더해주는 것도 좋을 듯하다
섞은 결과색 계산
섞음 판정을 마쳤으면 그색이 어떤색일지 계산도 해야된다.
이는 OR 연산으로 간단히 구해진다.
(ex) 노랑+파랑
노랑 = 100
파랑 = 001
OR = 101
-> 결과 색은 초록 = 101
구현
이렇게 알고리즘 생각한걸 말해줬더니 ㅁㅅ오빠가 잘 구현해줌
감사감사
'프로젝트 > AlcoWhale' 카테고리의 다른 글
| [AW] 신버전 게임 아트 (0) | 2018.05.22 |
|---|---|
| [AW] 타일맵 에디터 제작기 - (1) 기획 (0) | 2018.01.24 |
| [AW] 프로젝트 개요 (0) | 2018.01.24 |