Adaid's Workroom

[AW] 색섞기 알고리즘 아이디어 본문

프로젝트/AlcoWhale

[AW] 색섞기 알고리즘 아이디어

어데이드 2018. 5. 24. 22:05

동기

섞는 색 판정을 하드코딩이 아닌 다른 방법으로 해보고 싶었다.


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
Comments