Past/Matlab GUI

Matlab GUI로 스타크래프트 빌드메이커 제작 #3/6 - Add버튼 콜백 설정

Ratatui 2017. 12. 14. 04:28

<프로그램 설명 포스팅 링크>


'Add'버튼을 누르면 일어나는 동작은
M파일의 Callback함수에서 정해진다.


Callback함수의 위치는 'Add' 객체의
태그 이름 'pushbutton2'를 찾으면 나온다.


Callback함수의 위치를 찾고 그 밑에
원하는 코드를 작성하게 되면
'Add'버튼을 누를 때 그 코드가 실행된다.




224~226줄은 먼저 초기조건에서 선언된
pro, num, ppl 변수를 불러온다.
함수 내에서 사용하기 위해서이다.


227줄부터는 if문이 시작되는데
'Add'버튼을 누르면 판단해야될 조건이
여러가지가 있기 때문에 굉장히 길다.


227줄은 'menu1'의 값이 1인지 확인한다.
'menu1'태그는 아래 그림의 첫번째
종족선택 창인데 값이 1이면 팝업메뉴의
첫번째 줄이 선택되어 있다는 뜻이다.
값이 2이면 두번째 줄인 Protoss,
3이면 Terran, 4는 Zerg가 선택된 상태이다.


228줄에서는 'menu1'의 값이 1이면
어떤 종족을 추가해야 될지 알 수 없기에
종족을 먼저 선택하라는 경고문을 띄운다.




위 그림과 같은 경고문이 뜬다.
코드 내용에 경고창의 제목과 내용을
적어놓은 그대로 경고창이 뜨게 된다.




else 아래는 'menu1'의 값이 1이 아닌
경우인데 이 땐 종족별로 선택창을 보인다.
그 전에, 현재 채워진 axes수를 뜻하는
pro변수를 먼저 확인해야한다.


왜냐하면 pro=0이면 당연히
게임 시작시 존재하는 일꾼 4마리가
추가되어야 하고 pro=33이면 더이상
채울 수 있는 칸이 없기 때문에
또다른 경고문을 표시해야 되기 때문이다.
그래서 else 아래 pro값이 0보다 크고
33보다 작은지 묻는 조건이 필요하다.


만약 조건을 충족시킨다면, 231줄에서
어떤 종족이 선택되어 있는지 확인하고,
2번이 선택되어 있으면 프로토스 종족의
유닛과 건물 이미지 객체가 있는 'panelp'의
'visible' 속성을 'on'으로 변경하고
나머지 모든 객체의 'visible' 속성을 'off'한다.




위의 설명과 같은 명령 코드이다.
3번이 선택되어 있으면 테란 종족으로
'panelt'의 속성을 변경해준다.




마지막으로 4번이 선택되어 있으면
저그의 'panelz'의 속성을 변경하고
그 다음 end로 하위의 if문을 닫는다.


아직 pro값을 판별하는 if문은 열린상태.




만약 pro값이 0이라면 아직 그림이
채워진 Axes가 한 개도 없다는 것이며
프로그램 사용자가 'Add'버튼을 처음
눌렀다는 것을 의미한다.


따라서 게임 시작시 주어지는 기본
일꾼 4마리와 인구수를 표시해줘야 한다.


263줄에서 먼저 각 칸의 유닛 수를
저장하는 num벡터의 1번값을 4로한다.
264줄에선 선택되어있는 종족을 확인하고
종족에 맞는 인구수와 이미지를 표시한다.


'menu1'의 값이 2이면 앞쪽 코드처럼
프로토스 종족이 선택된 것이며
265줄에서 인구수를 저장하는 행렬변수
ppl의 1번 벡터를 4, 9로 저장한다.(4/9)
266~267줄에서 초기조건 때 불러왔던
프로토스 유닛 프로브의 이미지를
pushbutton의 'cdata'의 속성에서 불러온다.


그리고 268~269줄에서는 실제로 사용자가
볼 수 있는 'StaticText'의 'String' 속성을
전역변수에 저장한 값과 같게 변경해준다.




나의 종족을 Protoss로 하고
처음으로 'Add'버튼을 누르면
앞의 코드대로 정상적으로 진행되어
프로브의 이미지와 유닛수, 인구수가
제대로 표시되는 것을 볼 수 있다.




테란과 저그의 경우에도
각각 인구수 (4/10)에 SCV 이미지를
불러오고 인구수 (4/9)에 드론 이미지를
불러올 수 있도록 코딩을 한다.


pro값이 0일때 코딩한 내용에서는
첫번째 Axes에 이미지가 추가되었으니
283줄에서 pro의 값을 1 더해준다.




그 다음 else 아래는 pro의 값이
0도 아니고 0과 33 사이의 값도
아니라는 뜻인데, pro의 값이
순차적으로 증감하는 것을 생각해보면
pro=33인 경우를 의미한다.


이 때는 33개의 모든 슬롯(Axes)을 다
채운 상태이므로 슬롯을 모두 사용했다는
경고문을 표시하는 코드를 작성하고
Callback함수 내부의 전체 if문을 닫는다.


다음 포스팅에서는 종족의 이미지 패널이
열린 상태에서 이미지 클릭시 실행되는
Callback함수를 찾아서 알아보자.


프로그램을 다운로드 할 수 있는 링크가 폐쇄되어
현재는 프로그램을 다운로드 받을 수 없다