계산기 2.1

※맵(첨부파일) 다운로드
1. (1)계산기 2.1.scx <- 1.16.1 전용
2. (1)계산기 2.1R.scx <- 리마스터 전용
3. Calculator Core 2.1.scx <- EUD사용안함(리마스터, 1.16.1 공용)
4. 외부명령코드, 오류코드.txt




안녕하세요? noname01입니다. 지난번 업로드 했었던 계산기 2.0의 나눗셈 알고리즘을
한번 더 수정하고 입출력 인터페이스를 추가하여 더욱 새로워진(?) 계산기 2.1버전이
드디어(?) 나왔습니다. ㅇㅅㅇ

우선 2.0버전과 마찬가지로 코어에 해당하는 트리거만 복붙하면 다른 맵에서도 계산기를
써먹을 수 있습니다.(하지만 트리거량과 데스값소비(12개)는 책임못져요 ^ㅅ^)
또한 2.0버전과 마찬가지로 unsigned int 타입(0포함한 자연수)의 연산만 취급합니다.
(당연히 소숫점은 모두 버림합니다.)




※ 다음 링크의 글에서 계산기에 사용된 트리거들의 원리를 자세히 알아볼 수 있습니다.




트리거 개수는 다소(?) 증가했습니다. 다시 통계를 내 보니...

sum : 1877
"All players" : 1804
"Player 1" : 70
"Player 2" : 3

무려 153개나 늘어났네요; ㅎㄷㄷ
("All players"의 트리거가 계산 트리거입니다. 즉 다른 맵에 사용하려고 할 때는
"All players"의 트리거만 복붙하면 됩니다.)
사실은 사용하지 않을 연산 트리거를 빼면 훨씬 적은 수의 트리거로도
연산을 수행할 수 있지만 이건 다음에 기회를 봐서(?) 한번 다뤄보겠습니다.




사용되는 12개의 데스값은 2.0버전과 동일합니다.

R : Uraj Crystal
r : Khaydarin Crystal
T : Data Disc
t : Khalis Crystal
A : Vespene Orb (Protoss Type 1)
a : Vespene Orb (Protoss Type 2)
B : Vespene Tank (Terran Type 1)
b : Vespene Tank (Terran Type 2)
C : Mineral Chunk (Type 1)
c : Mineral Chunk (Type 2)
X : Psi Emitter
x : Flag

만일 계산트리거를 사용하려는 맵에 위의 데스값중 이미 사용되고 있는 데스값이 있다면
SCMDraft2의 텍스트 트리거 편집기를 이용해 계산 트리거를 메모장에 붙여넣고
바꾸기 기능을 이용해 사용하지 않는 데스값으로 교체한 후 맵에 삽입하면 됩니다.

※이외에도 스위치 한개(switch 256)와 5개의 스트링을 사용합니다.




2.0버전이랑 사용 방법도 완전히 동일합니다.

계산값입력1 - A : Vespene Orb (Protoss Type 1)
계산값입력2 - B : Vespene Tank (Terran Type 1)
연산종류입력 - C : Mineral Chunk (Type 1)
계산결과1 - X : Psi Emitter
계산결과2 - x : Flag

A와 B에 연산할 값을 입력한 후, C에 연산코드를 입력하고 C값이 0이 될때까지 기다리면
X와 x에 결과값이 출력됩니다. C에 입력할 연산코드는 다음과 같습니다.
(이 코드 역시 2.0버전과 동일합니다.)

0 : ready (연산중이 아니라는 의미로, 연산이 완료되었다는 의미이기도 합니다.)
1 : reset (계산중 문제가 생기거나 기타 등등 이유로 인해 12개의 셋데스를 모두 0으로 초기화 합니다.)
2 : + (덧셈을 합니다.)
3 : -, >, =, < (음수연산이 안되는 관계로 뺄셈이 아닌 차를 계산하며 크기 비교도 합니다.)
4 : * (곱셈을 합니다.)
5 : /, % (몫과 나머지를 계산합니다.)
6 : √ (제곱근을 계산합니다.)
7 : ^ (지수계산을 합니다.)
8 : ! (팩토리얼을 계산합니다.)
9 : nPr (순열을 계산합니다.)
10 : nCr (조합을 계산합니다.)
11 : rand()%n; (0≤r<n 인 난수 r을 구합니다.)

※연산 범위도 2.0버젼과 같습니다. 즉 연산마다 조금씩 다른데 입력받는 수와 출력되는 수의 크기가
2^30까지는 무난하게 계산해낼 수 있을겁니다.




연산 종류에 대한 간단한 설명입니다.


1. 덧셈
A와 B에 값을 입력하면 X에 A와 B를 합한 값이 저장됩니다.


2. 뺄셈
A와 B에 값을 입력하면 X에는 A와 B의 차가 저장되며
x에는
A가 B보다 클 경우 1
A와 B가 같을 경우 2
B가 A보다 클 경우 3
이 저장됩니다.


3. 곱셈
A와 B에 값을 입력하면 X에 A와 B를 곱한 값이 저장됩니다.


4. 나눗셈(나머지)
A와 B에 값을 입력하면 X에는 A를 B로 나눈 몫이 저장되며
x에는 A를 B로 나눈 나머지가 저장됩니다.


5. 제곱근
A에 값을 입력하면 X에 A의 제곱근이 저장됩니다.
B에 입력한 값은 무시됩니다.


6. 지수
A와 B에 값을 입력하면 X에 A^B의 값이 저장됩니다.


7. 팩토리얼
A에 값을 입력하면 X에 A!의 값이 저장됩니다.
B에 입력한 값은 무시됩니다.


8. 순열
A와 B에 값을 입력하면 X에 APB의 값이 저장됩니다.


9. 조합
A와 B에 값을 입력하면 X에 ACB의 값이 저장됩니다.


10. 난수생성
A에 값을 입력하면 X에 0≤r<A인 난수가 저장됩니다.
B에 입력한 값은 무시됩니다.




나눗셈을 제외한 알고리즘은 계산기 2.0과 동일하므로
나눗셈 알고리즘만 살펴봅시다.

이 나눗셈 알고리즘은 구글에서 검색하다 발견한 것입니다.
따라서 제가 쓰지 않고 그 글의 주소를 적습니다.

http://blastic.tistory.com/136

이 글의 내용중 양수끼리의 나눗셈에 관한 알고리즘을 트리거로 적용해본 것입니다.




혹시 계산기 2.0버전을 살펴보고 싶으신 분은 아래 링크를 열어주세요.

계산기 2.0




여기까지가 핵심 계산 트리거에 관한 설명입니다.
계산 트리거를 복사하려면 첨부파일중
"Calculator Core 2.1.scx"
맵파일을 열어 "All players"의 트리거만 복붙
하시면 됩니다.

그리고 같이 첨부되어 있는 "(1)계산기 2.1.scx"맵파일은 계산기 코어에다가
입출력 장치를 덧붙인 맵파일 입니다. 지금부터는 이 맵파일에 관한 설명입니다.




우선 실행직후 화면입니다.

M4-1

화면을 보시면 리더보드가 하나 있는데 이 리더보드에는 계산을 수행하는데 사용한
트리거 주기를 나타냅니다. 만일 9105+11이라는 계산을 수행한 뒤 리더보드의 값이 2
라고 되어 있으면 이 계산을 수행하는데 트리거의 2주기 만에 계산이 완료되었다는
의미입니다.

이 맵에서 모든 계산결과의 출력은 자원량이나 리더보드가 아닌 미니맵에서 이루어집니다.
미니맵을 살펴보면 9자리의 10진수가 출력될 수 있는 디스플레이(?)가 있는 것을 볼 수 있는데
이 디스플레이를 통해 최대 9자리수(10진수)의 표현이 가능합니다. 만일 숫자가 9자리를
넘어서게 되면 이 맵에서의 트리거 작동을 예측할 수 없습니다.
(예측불가능은 아니지만 귀찮아서....)

이 맵에는 맵 위의 마우스 포인터 좌표를 인식하는 EUD트리거가 탑재되어 있어
EUD실행부를 사용할 수 있는 환경에서만 정상적인 실행이 가능합니다.
이 EUD트리거를
이용해 현재 마우스 포인터가 위치한 곳을 인식하고, 마우스 클릭을 EUD로 인식하여
지도 위의 특정 지역을 클릭하는 것만으로 트리거가 작동됩니다. 즉 1을 누르고 싶다면
다음 스샷처럼 화면을 1이 적혀있는 지형으로 화면을 옮기고 1이 적힌 지형을 클릭하기만 하면
됩니다.

M4-2

정말 간단하죠??
이 맵에서의 모든 조작은 이렇게 땅 위에서의 마우스 클릭으로 이루어지며,
마우스 클릭이 정상적으로 되었을 경우 클릭한 버튼의 위치가 미니맵에 핑으로 보여집니다.

어떤 버튼인지는 보면 직감적으로 알수 있으실 겁니다.
만일 직감적으로 모르겠다면 한번 클릭(선택)해서 기능을 사용해 보세요.
그럼 이것으로 마치도록 하겠습니다.




P.S. "(1)계산기 2.1.scx"에는 "Calculator Core 2.1.scx"의 기능 중
크기비교, 나머지계산, 난수생성 이렇게 3개의 기능은 사용하지 않습니다.




noname01이 제작한 다른 맵을 보려면 이 이미지를 클릭해 주세요.