아이템 3개 쓴 결과입니다.
애니팡은 역시 운빨...
아이템 3개 쓴 결과입니다.
애니팡은 역시 운빨...
오래전부터 공책에 구상하고 있었던 게임이 있었는데 10월 넷째주부터 본격적으로 작업을 시작했다.
만드려는 게임은 isometric 시점의 타일기반 rpg게임이다.
플래시빌더를 써서 action script 3.0으로 코딩을 하는데 오랜만에 다시 해보는거라 적응이 잘 안되어 힘들다.
우선 게임내의 지형을 처리/표시하는 클래스를 구현하기 시작했다. 지형 데이터파일과 이미지파일에서 각각
리소스를 로드하여 화면에 표시하는 부분이다. 타일과 맵 데이터 클래스를 만들고, 파일에서 지형 데이터를
읽어들이는 클래스를 만들었다.
화면 표시를 담당하는 클래스를 따로 만든 뒤 실행을 해 보았는데 흰 화면만 나타나는 것이었다.
한참을 살펴보아도 잘못된 부분을 찾을 수 없었지만 클래스들을 다시 훑어보다가 정작 메인클래스에는
아무런 내용도 넣어두지 않았다는 사실을 깨닫고 황당하지 않을 수 없었다. 이러한 착오들을 자주 일으켰기
때문에 다시 겪지 않기 위해 이렇게 기록해두기로 하였다.
보여질 때는 등각투상도(isometric view)로 보여지지만 맵 데이터는
이런 식으로 직사각형의 모양을 갖는 2차원 데이터가 기록되어 있다.(기록된 상태는 1차원이겠지만..)
데이터에서 특정 x, y위치에는 어떤 타입의 타일정보가 들어있는가를 읽어와서 타일을 하나씩 화면에 붙인다.
간단한 식을 유도하여 타일들이 표시될 위치를 화면에 들어맞게 잡아준 뒤 결과를 출력해 보았다.
타일들이 지형을 이루는 것을 보고 한숨을 돌렸다. 데이터대로 맵을 출력하는 걸 성공하긴 했으나 아직
남은 일들이 아득하다. 그래픽, 세부기획, 구현해야 할 기능들 등등..
그리고 이중for문을 쓸 때 변수초기화를 빼먹거나 String을 as uint로 캐스팅하려 하는 실수를 범한 상태라
앞으로 또 어떤 착오나 버그들이 나타날지 불안감이 엄습해 온다.
2007년에 만들었던 플래시인데 큰 오류가 있어서 약간 수정했습니다.
빨간원 : 태양
파란원 : 지구
초록원 : 화성
하얀원&빨간선 : 천구면에 투영된 화성의 겉보기 경로
천구의 천정(태양계의 위쪽)에서 바라본 시점이라서
아래 플래시에서는 역행할 때 경로가 겹쳐지게 되지만
지구와 화성의 공전궤도면이 일치하지 않기 때문에
실제 지구에서 볼 때는 S자 모양이나 α자 모양이 나타납니다.
나중에 한번 3D로도 만들어 봐야겠네요..
12.12.6 수정
3D로 만든 주소입니다.
http://tibyte.kr/141
- 블로그 스킨 가운데정렬
- 주소복사 버튼 삽입
- 모바일화면 전환버튼 삽입
- 애드센스 2개 삽입
- 모바일화면에 애드센스 1개 삽입
- 다음뷰 위치 이동
- 카테고리 정리
- 본문 폭 축소
- 우측 사이드바 간격 수정
제 블로그 본문 하단에 애드센스와 다음뷰가 있는데요,
글을 발행하면 400x80 짜리 다음뷰 박스가 336x250짜리 애드센스의 위쪽에 자리를 잡습니다.
그래서 모양을 맞추기 위해 다음뷰를 내리려고 카페 스킨 html로 들어가 애드센스보다 하단에 놓기로 했습니다.
html 코드에 다음뷰를 표시하기 위한 embed태그를 달고
<embed src="http://api.v.daum.net/static/recombox1.swf?nurl=글주소(티스토리블로그 치환자 사용)" quality="high" bgcolor="#ffffff" width="400" height="80" type="application/x-shockwave-flash"</embed> |
다시 블로그로 돌아와 글을 보니 다음뷰가 (당연히..)두개가 떠있는 것이었습니다.
그래서 아무 생각도 없이 플러그인 설정에서 다음뷰를 체크 해제했죠..
그랬더니 pc화면에서는 잘 나왔지만 모바일에서 뷰온 버튼이 표시가 안됐습니다.
본문에 다음뷰를 표시하는 embed 태그도 넣어봤지만 본문에서는 글번호를 불러오는 치환자가 먹히지 않더군요..
답은 간단했는데 플러그인 설정에서 view on 박스 항목에서 '표시하지 않음'을 선택하면 된다는 것이었습니다.
이렇게 하면 pc화면에서는 (추가적인)다음뷰가 보이지 않게 되지만,
모바일 스킨에서는 뷰온 버튼이 사라지지 않고 여전히 잘 나오게 됩니다.
* 멀티플렉서 (Multiplexer, MUX, 먹스, 다중화기)
멀티플렉서는 데이터입력과 선택입력(제어입력)을 가지고 있다.
제어입력(select)는 들어오는 n개의 입력 중 하나를 선택하는 역할을 한다.
출처
위 그림에서 sel에 0이 입력되면 out에는 I0 값이 출력되고,
sel에 1이 입력된다면 out으로 I1 값이 출력된다.
입력이 2개 출력이 1개이기 때문에 이와 같은 멀티플렉서를 2-to-1 멀티플렉서라고 한다.
- to - 1 멀티플렉서에서 입력 데이터 수가 개이면 select의 비트수는 n개가 된다.
입력 데이터 수가 8개(개)라고 한다면 select 3비트로 모든 가짓수(8가지) 선택할 수 있는 것이다.
8-to-1 멀티플렉서에서 각각의 경우를 써 보면
select가
000일때 0번 데이터,
001일때 1번 데이터,
010일때 2번 데이터,
011일때 3번 데이터,
100일때 4번 데이터,
101일때 5번 데이터,
110일때 6번 데이터,
111일때 7번 데이터.
를 선택하여 출력하게 된다.
* 멀티플렉서의 논리식 (불대수식)
2-to-1 멀티플렉서의 논리식을 살펴보자.
데이터 입력으로 D0,D1, 제어입력으로 s, 출력으로 Out이 있다고 할 때 논리식은
Out = s'D0 + sD1
이다. 자세히 살펴보면 곱의 합(SOP : Sum of Product)방식으로 이루어진 식이라는 것을 알 수 있는데 각각의 항을 보면
s가 0일 때는 sD1 항은 D1의 값과 관계없이 0이 되어 무시된다. (나머지 s'D0 항을 보면 s'는 1이므로 결과값은 D0이 됨)
s가 1일 때는 반대로 s'D0 항이 D0 값에 관계없이 0이 되어버린다. (남은 sD1 항을 보면 s는 1이므로 결과값은 D1과 같게 됨)
이번에는 4-to-1 멀티플렉서의 논리식을 보자.
데이터 입력으로 D0 D1 D2 D3이 있고 제어입력으로 s0 s1이 있을 때 식은 아래와 같다.
Out = s0's1'D0 + s0s1D1 + s0s1D2 + s0s1D3
제어입력이 00일때, 01일때, 10일때, 11일때의 각각의 경우에 대하여
위에서 2-to-1 멀티플렉서의 원리와 같이, 한 항을 제외한 나머지 모든 항들이 0이 되어서 무시된다.
이러한 원리로 여러 개의 입력 중 하나를 선택하여 출력하는 것이다.
* 쿼터스로 작성한 4-to-1 멀티플렉서의 블록도
제어입력인 두개의 sel이 이루는 4가지 경우가 각각의 4가지 입력과 POS를 이루고 있다.
관련글 : 디멀티플렉서(DEMUX)
관련글목록 : 블로그 '전자' 카테고리
그레이 코드(Gray Code)는 2진 비가중치 코드의 하나로,
연속된 수들의 코드가 한 비트씩만 차이가 나는 특징이 있다.
때문에 아날로그 신호와 같이 연속적인 신호가 입력될 때 그레이 코드를 사용하면 신뢰성이 높아진다.
* 4비트를 모두 사용한 이진코드와 그레이코드 비교
(이 글에서 언급한 '이진코드'는 이진법으로 나타낸 이진수를 의미합니다)
이진코드 |
그레이코드 |
0000 |
0000 |
0001 |
0001 |
0010 | 0011 |
0011 |
0010 |
0100 |
0110 |
0101 |
0111 |
0110 |
0101 |
0111 | 0100 |
1000 |
1100 |
1001 |
1101 |
1010 |
1111 |
1011 |
1110 |
1100 |
1010 |
1101 |
1011 |
1110 |
1001 |
1111 |
1000 |
그레이코드를 보면 0과 1이 일정한 주기로 반복되는 규칙을 확인할 수 있다.
2^3자리에서는 이진코드와 동일하고,
2^2자리에서는 최상위비트가 0일때 이진코드와 동일, 최상위비트가 1일때 이진코드와 반대.
2^1자리와 2^0자리에서도 마찬가지로 상위비트에 따라 이진코드와 동일한지 반대인지가 결정된다.
위와 같이, 이진코드를 그레이코드로 변환할 때는 최상위비트는 그대로 두고
자신의 비트와 그의 상위비트를 XOR연산하면 된다.
블록도로 나타내면 다음과 같다.
프로그램으로 작성한다면, 같은 원리로
(x>>1)^x
의 형식으로 작성할 수 있을 것이다. (^는 비트 XOR연산자)
반대로 그레이코드를 이진코드로 바꾸는 것을 생각해 보면,
이진코드의 각 자리를 DCBA라고 할 때 그레이코드는
D D⊕C C⊕B B⊕A 이다. (⊕ : XOR)
D⊕C를 다시 C로 되돌리기 위해서 D와 XOR연산을 하여 D⊕(D⊕C)꼴로 만든다.
XOR연산에서는 결합법칙이 성립하므로 (D⊕D)⊕C로 계산하면, 0⊕C가 되어 C라는 결과가 나온다.
다음 자리인 C⊕B를 B로 되돌리려면 위와 같은 방법으로 C와 XOR하면 된다.
이처럼 그레이코드를 이진코드로 변환하려면 이진->그레이 때와는 다르게
상위비트의 XOR연산 결과를 가지고 또 하위비트와 XOR시킨다.
알기 쉽게 블록도로 나타내면 아래 그림처럼 나온다.