일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ansible install
- 도커 시작하기
- 데이트
- 자바
- 백준
- 앤서블 설치
- C언어
- 정보처리기사
- java
- c++
- mysql on docker
- 도커 elk
- nvidia docker
- 클라우드
- mysql docker
- 코딩
- c
- streamsets 강의
- 푸시푸시
- 도커
- 스트림셋
- 스트림셋이란?
- 도커 mysql
- MySQL
- 파이썬
- 알고리즘
- 데이터베이스
- elk stack
- python
- docker
- Today
- Total
리그캣의 개발놀이터
어셈블리 - 과일 게임 만들기 본문
게임방식
과일이 세 종류 있다. 바나나, 사과, 오렌지 각 과일의 개수는
사용자가 정할 수 있지만. 편의를 위해 게임 상에서는 정해 놓겠다.
컴퓨터와 사용자가 돌아가면서 게임을 시작한다. 이 때 컴퓨터를 User1이라 칭하고 사용자를 User2라 칭하겠다. 각 User 들은
돌아가며 차례가 오고 자신의 차례일 때 과일 한 종류에서 원하는
과일 내의 숫자들을 가져올 수 있다. 단 두 종류 이상의 과일은
가져오지 못한다. 그래서 결국 총 과일 개수중 마지막 하나남은
과일은 가져오는 쪽이 패배하는 게임이다.
구성방식
사용자와 컴퓨터와 대전을 한다. 과일의 종류는 총 3가지 바나나, 사과, 오렌지가 있다. 각 과일의 개수는 random으로 1~9까지 제공이 되고. 사용자가
유리하게끔 첫 게임은 사용자먼저 진행한다.(난이도가 높기에)
All number가 1이 되면 게임이 종료되게끔 하기 위해 편의상 All Number를
집어넣었다.
다음 사용자는 과일을 선택할 수 있다. 1,2,3중 하나를 입력하고 Enter를 친다.
다음은 해당 과일의 가져올 개수를 체크한다.
만약 사용자가 바나나를 선택해서 2개를 가져온다면 다시 과일의 개수를 출력
해준다. 이제 사용자의 차례는 끝났고 다음은 컴퓨터의 차례가 왔다.
컴퓨터는 random으로 과일 개수가 남은 것을 찾아서 해당 과일을 선택해 그 과일
개수를 가져간다.
남은 과일 하나를 선택하여 가져온다. 여기서 컴퓨터는 사과 5개를 가져왔다.
여기서 중요한 것은 컴퓨터가 그냥 가져오는 것이 아니라 규칙을 찾아 가져온다는
것이다. 자세한 알고리즘은 뒤에서 설명하겠다.
컴퓨터가 가져가면 다시 과일의 개수를 출력해 준다.
이제 다시 유저의 차례로 넘어 간다.
자 게임을 시작해 보자.
게임화면
컴퓨터가 승리하면 맨아래 화면처럼 Computer Win이라는 화면이 뜬다.
알고리즘
사용자의 게임은 사용자가 입력하는 데로 해당 과일을 가져오면 되지만
문제는 컴퓨터가 어떤 메뉴를 얼마나 가져올지 였다. 그래서 조건을 넣어서
해당 조건일 때 얼만큼 가져가는지를 정하기로 하였다.
else if문을 써서 중요도 순으로 가져오기로 하였다.
- 0,1,n(순서상관x)이 남았을 경우
n을 모두 가져온다.
- 0,0,n(순서상관x)이 남았을 경우
n-1을 모두 가져온다.
- 2,2,0(순서상관x)이 남았을 경우
2개가 남은 과일 중 에 선택하여 1을 가져온다.
- 2,3,0(순서상관x)이 남았을 경우
3개가 남은 과일에서 1개를 가져간다.
- n,1,1(순서상관x)이 남았을 경우
n개가 남은 과일에서 n개를 가져간다.
- n,2,2(순서상관x)이 남았을 경우(n이 1초과)
n개가 남은 과일에서 n-1개를 가져간다(2,2)로 만듦.
- n,2,3(순서상관x)이 남았을 경우
n개가 남은 과일에서 n-1개를 가져간다.(1,2,3) 로 만듦.
- 0,2,n(순서상관x)이 남았을 경우(n이 2초과)
n개가 남은 과일에서 n-2개를 가져간다.(2,2)로 만듦.
- n,1,3(순서상관x)이 남았을 경우(n이 2초과)
n개가 남은 과일에서 n-2개를 가져간다.(1,2,3)로 만듦.
- n,1,2(순서상관x)이 남았을 경우(n이 3초과)
n개가 남은 과일에서 n-3개를 가져간다.(1,2,3)로 만듦.
- n,3,3(순서상관x)이 남았을 경우
n개가 남은 과일에서 n개를 가져간다.(3,3)로 만듦.
- 0,3,n(순서상관x)이 남았을 경우(n이 3초과)
n개가 남은 과일에서 n-3개를 가져간다.(3,3)로 만듦.
- n,4,4(순서상관x)이 남았을 경우
n개가 남은 과일에서 n개를 가져간다.(4,4)로 만듦.
- n,0,4(순서상관x)이 남았을 경우(n이 4초과)
n개가 남은 과일에서 n-4개를 가져간다.(4,4)로 만듦.
- n,4,5(순서상관x)이 남았을 경우
n개가 남은 과일에서 n개를 가져간다.(4,5)로 만듦.
- n,1,4(순서상관x)이 남았을 경우(n이 5초과)
n개가 남은과일에서 n-5개를 가져간다.(1,4,5)로 만듦.
- n,1,5(순서상관x)이 남았을 경우(n이 4초과)
n개가 남은과일에서 n-4개를 가져간다.(1,4,5)로 만듦.
- n,5,5(순서상관x)이 남았을 경우
n개가 남은과일에서 n개를 가져간다.(5,5)로 만듦.
else
- n,n,0(순서상관x)이 남았을 경우
n개가 남은 과일에서 1개만 가져감(다 가져가면 지게됌)
- n,n,n(순서상관x)이 남았을 경우
아무 과일 중에 1개만 가져간다.
소스코드
DATATITLE Fruit GameINCLUDE Irvine32.inc.datastr1 BYTE "FruitGame Start",0Banana BYTE "Banana :",0Apple BYTE "Apple: ",0Orange BYTE "Orange: ",0allfruit BYTE "ALL NUMBER: ",0str2 BYTE "You can choose fruit.1.Banana 2.Apple 3.Orange : ",0str3 BYTE "Get num ",0str4 BYTE "THE Number is oversize you can repeat : ",0str5 BYTE "You Lose",0str6 BYTE "Computer choose fruit. : ",0str7 BYTE "Computer get num. : ",0str8 BYTE "You Win",0str9 BYTE "Computer Win",0Fruit DWORD 7,6,5,0 ;과일개수 지정AllNum DWORD ?,0 ;총 과일개수Menu DWORD ?,0 ;어떤과일 선택할지 선택Get DWORD ?,0 ;가져간 개수MAIN CODE.codemain PROCmov edx,OFFSET str1call WriteStringmov ecx,3 ;3개의 랜던숫자 출력mov esi,0L1: ;각 과일의 개수 저장mov eax,8call RandomRangeadd eax,1 ;+1함으로써 0이 되는것을 방지mov Fruit[esi],eaxadd esi,4loop L1 ;각 과일의 개수 및 총 과일 개수 저장완료call Num_out ;과일 개수 출력mov AllNum,0 ;모든 개수 초기화mov ecx,30L2:call User_game ;유저 게임call Num_out ;과일개수 출력.if AllNum==1jmp L3.endifmov AllNum,0 ;모든 개수 초기화call Com_game ;컴퓨터 게임call Num_out ;과일개수 출력.if AllNum==1jmp L4.endifmov AllNum,0 ;모든 개수 초기화Loop L2L3:call crlfmov edx,OFFSET str8call writestringexitL4:call crlfmov edx,OFFSET str9call writestringexitmain ENDP함수Num_out PROC 과일 개수 출력Num_out PROC ;과일 개수 출력call crlfmov esi,0mov edx,OFFSET Bananacall WriteStringmov eax, Fruit[esi]add AllNum,eaxcall WriteIntcall crlfadd esi,4mov edx,OFFSET Applecall WriteStringmov eax,Fruit[esi]add AllNum,eaxcall WriteIntcall crlfadd esi,4mov edx,OFFSET Orangecall WriteStringmov eax,Fruit[esi]add AllNum,eaxcall WriteIntcall crlfmov edx,OFFSET allfruitcall WriteStringmov eax,AllNumcall WriteIntretNum_out ENDPUser_game PROC ;사용자 게임User_game PROC ;사용자 게임call crlfmov edx,OFFSET str2call WriteStringcall ReadIntmov Menu,eax.if Menu==1mov esi,0mov edx,OFFSET str3call WriteStringmov edx,OFFSET Bananacall WriteStringcall ReadIntmov Get,eax.if eax > Fruit[esi] ;만약 개수가 초과하면 다시 입력mov edx,OFFSET str4call WriteStringcall ReadIntmov Get,eax.endifsub Fruit[esi],eax.elseif Menu==2mov esi,4mov edx,OFFSET str3call WriteStringmov edx,OFFSET Applecall WriteStringcall ReadIntmov Get,eax.if eax > Fruit[esi] ;만약 개수가 초과하면 다시 입력mov edx,OFFSET str4call WriteStringcall ReadIntmov Get,eax.endifsub Fruit[esi],eax.elseif Menu==3mov esi,8mov edx,OFFSET str3call WriteStringmov edx,OFFSET Applecall WriteStringcall ReadIntmov Get,eax.if eax > Fruit[esi] ;만약 개수가 초과하면 다시 입력mov edx,OFFSET str4call WriteStringcall ReadIntmov Get,eax.endifsub Fruit[esi],eax.endif.if AllNum==1mov edx,OFFSET str5call WriteString.endifretUser_game ENDPCom_game PROCCom_game PROCcall crlfmov edx,OFFSET str6call writestringmov esi,0.if (Fruit[esi]==1&&Fruit[esi+4]==1&&Fruit[esi+8]==0)||(Fruit[esi]==1&&Fruit[esi+4]==0&&Fruit[esi+8]==1);0,1,1이 남앗을 경우mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi],1call crlf.elseif (Fruit[esi]==0&&Fruit[esi+4]==1&&Fruit[esi+8]==1)mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi+4],1call crlf.elsief(Fruit[esi]==1&&Fruit[esi+4]==2&&Fruit[esi+8]==0)||(Fruit[esi]==0&&Fruit[esi+4]==2&&Fruit[esi+8]==1);0,2,1남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,2call writeintsub Fruit[esi+4],2call crlf.elseif (Fruit[esi]==2&&Fruit[esi+4]==1&&Fruit[esi+8]==0)||(Fruit[esi]==2&&Fruit[esi+4]==0&&Fruit[esi+8]==1)mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,2call writeintsub Fruit[esi],2call crlf.elseif (Fruit[esi]==0&&Fruit[esi+4]==1&&Fruit[esi+8]==2)||(Fruit[esi]==1&&Fruit[esi+4]==0&&Fruit[esi+8]==2)mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,2call writeintsub Fruit[esi+8],2call crlf.elseif (Fruit[esi+4]==0&&Fruit[esi+8]==0) ; 0,0,n이 남은경우mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,1call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==0&&Fruit[esi+8]==0) ; 0,0.n이 남은경우mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,1call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==0&&Fruit[esi+4]==0) ; 0,0,n이 남은경우mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,1call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]==2&&Fruit[esi+4]==2&&Fruit[esi+8]==0)||(Fruit[esi]==2&&Fruit[esi+4]==0&&Fruit[esi+8]==2);2,2이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==0&&Fruit[esi+4]==2&&Fruit[esi+8]==2);2,2이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==1&&Fruit[esi+8]==0)||(Fruit[esi]!=0&&Fruit[esi+4]==0&&Fruit[esi+8]==1);1,n이 남은경우mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==1&&Fruit[esi+4]!=0&&Fruit[esi+8]==0)||(Fruit[esi]==0&&Fruit[esi+4]!=0&&Fruit[esi+8]==1);1,n이 남은경우mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==1&&Fruit[esi+4]==0&&Fruit[esi+8]!=0)||(Fruit[esi]==0&&Fruit[esi+4]==1&&Fruit[esi+8]!=0);1,n이 남은경우mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]==3&&Fruit[esi+4]==2&&Fruit[esi+8]==0)||(Fruit[esi]==3&&Fruit[esi+4]==0&&Fruit[esi+8]==2);2,3이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==2&&Fruit[esi+4]==3&&Fruit[esi+8]==0)||(Fruit[esi]==0&&Fruit[esi+4]==3&&Fruit[esi+8]==2);2,3이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==2&&Fruit[esi+4]==0&&Fruit[esi+8]==3)||(Fruit[esi]==0&&Fruit[esi+4]==2&&Fruit[esi+8]==3);2,3이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==1&&Fruit[esi+8]==1);n,1,1이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,1call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==1&&Fruit[esi+4]!=0&&Fruit[esi+8]==1);n,1,1이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,1call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==1&&Fruit[esi+4]==1&&Fruit[esi+8]!=0);n,1,1이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,1call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==2&&Fruit[esi+8]==2);n,2,2이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==2&&Fruit[esi+4]!=0&&Fruit[esi+8]==2);n,2,2이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==2&&Fruit[esi+4]==2&&Fruit[esi+8]!=0);n,2,2이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==2&&Fruit[esi+8]==3)||(Fruit[esi]!=0&&Fruit[esi+4]==3&&Fruit[esi+8]==2);n,2,3이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,1call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==3&&Fruit[esi+4]!=0&&Fruit[esi+8]==2)||(Fruit[esi]==2&&Fruit[esi+4]!=0&&Fruit[esi+8]==3);n,2,3이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,1call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==3&&Fruit[esi+4]==2&&Fruit[esi+8]!=0)||(Fruit[esi]==2&&Fruit[esi+4]==3&&Fruit[esi+8]!=0);n,2,3이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,1call writeintsub Fruit[esi+8],eaxcall crlf.elseif Fruit[esi]>2||(Fruit[esi]!=0&&Fruit[esi+4]==2&&Fruit[esi+8]==0)||(Fruit[esi]!=0&&Fruit[esi+4]==0&&Fruit[esi+8]==2);2,n이 남은경우mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,2call writeintsub Fruit[esi],eaxcall crlf.elseif Fruit[esi+4]>2||(Fruit[esi]==2&&Fruit[esi+4]!=0&&Fruit[esi+8]==0)||(Fruit[esi]==0&&Fruit[esi+4]!=0&&Fruit[esi+8]==2);2,n이 남은경우mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,2call writeintsub Fruit[esi+4],eaxcall crlf.elseif Fruit[esi+8]>2||(Fruit[esi]==2&&Fruit[esi+4]==0&&Fruit[esi+8]!=0)||(Fruit[esi]==0&&Fruit[esi+4]==2&&Fruit[esi+8]!=0);2,n이 남은경우mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,2call writeintsub Fruit[esi+8],eaxcall crlf.elseif Fruit[esi]>2||(Fruit[esi]!=0&&Fruit[esi+4]==1&&Fruit[esi+8]==3)||(Fruit[esi]!=0&&Fruit[esi+4]==3&&Fruit[esi+8]==1);n,1,3이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,2call writeintsub Fruit[esi],eaxcall crlf.elseif Fruit[esi+4]>2||(Fruit[esi]==3&&Fruit[esi+4]!=0&&Fruit[esi+8]==1)||(Fruit[esi]==1&&Fruit[esi+4]!=0&&Fruit[esi+8]==3);n,1,3이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,2call writeintsub Fruit[esi+4],eaxcall crlf.elseif Fruit[esi+8]>2||(Fruit[esi]==3&&Fruit[esi+4]==1&&Fruit[esi+8]!=0)||(Fruit[esi]==1&&Fruit[esi+4]==3&&Fruit[esi+8]!=0);n,1,3이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,2call writeintsub Fruit[esi+8],eaxcall crlf.elseif Fruit[esi]>3||(Fruit[esi]!=0&&Fruit[esi+4]==1&&Fruit[esi+8]==2)||(Fruit[esi]!=0&&Fruit[esi+4]==2&&Fruit[esi+8]==1);n,1,2이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,3call writeintsub Fruit[esi],eaxcall crlf.elseif Fruit[esi+4]>3||(Fruit[esi]==2&&Fruit[esi+4]!=0&&Fruit[esi+8]==1)||(Fruit[esi]==1&&Fruit[esi+4]!=0&&Fruit[esi+8]==2);n,1,2이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,3call writeintsub Fruit[esi+4],eaxcall crlf.elseif Fruit[esi+8]>3||(Fruit[esi]==2&&Fruit[esi+4]==1&&Fruit[esi+8]!=0)||(Fruit[esi]==1&&Fruit[esi+4]==2&&Fruit[esi+8]!=0);n,1,2이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,3call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==3&&Fruit[esi+8]==3);n,3,3이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==3&&Fruit[esi+4]!=0&&Fruit[esi+8]==3);n,3,3이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==3&&Fruit[esi+4]==3&&Fruit[esi+8]!=0);n,3,3이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]call writeintsub Fruit[esi+8],eaxcall crlf.elseif Fruit[esi]>3||(Fruit[esi]!=0&&Fruit[esi+4]==0&&Fruit[esi+8]==3)||(Fruit[esi]!=0&&Fruit[esi+4]==3&&Fruit[esi+8]==0);n,0,3이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,3call writeintsub Fruit[esi],eaxcall crlf.elseif Fruit[esi+4]>3||(Fruit[esi]==3&&Fruit[esi+4]!=0&&Fruit[esi+8]==0)||(Fruit[esi]==0&&Fruit[esi+4]!=0&&Fruit[esi+8]==3);n,0,3이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,3call writeintsub Fruit[esi+4],eaxcall crlf.elsiefFruit[esi+8]>3||(Fruit[esi]==3&&Fruit[esi+4]==0&&Fruit[esi+8]!=0)||(Fruit[esi]==0&&Fruit[esi+4]==3&&Fruit[esi+8]!=0);n,0,3이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,3call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==4&&Fruit[esi+8]==4);n,4,4이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==4&&Fruit[esi+4]!=0&&Fruit[esi+8]==4);n,4,4이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==4&&Fruit[esi+4]==4&&Fruit[esi+8]!=0);n,4,4이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]call writeintsub Fruit[esi+8],eaxcall crlf.elseif Fruit[esi]>4||(Fruit[esi]!=0&&Fruit[esi+4]==0&&Fruit[esi+8]==4)||(Fruit[esi]!=0&&Fruit[esi+4]==4&&Fruit[esi+8]==0);n,0,4이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,4call writeintsub Fruit[esi],eaxcall crlf.elseif Fruit[esi+4]>4||(Fruit[esi]==4&&Fruit[esi+4]!=0&&Fruit[esi+8]==0)||(Fruit[esi]==0&&Fruit[esi+4]!=0&&Fruit[esi+8]==4);n,0,4이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,4call writeintsub Fruit[esi+4],eaxcall crlf.elseif Fruit[esi+8]>4||(Fruit[esi]==4&&Fruit[esi+4]==0&&Fruit[esi+8]!=0)||(Fruit[esi]==0&&Fruit[esi+4]==4&&Fruit[esi+8]!=0);n,0,4이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,4call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==4&&Fruit[esi+8]==5)||(Fruit[esi]!=0&&Fruit[esi+4]==5&&Fruit[esi+8]==4);n,4,5이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==4&&Fruit[esi+4]!=0&&Fruit[esi+8]==5)||(Fruit[esi]==5&&Fruit[esi+4]!=0&&Fruit[esi+8]==4);n,4,5이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==4&&Fruit[esi+4]==5&&Fruit[esi+8]!=0)||(Fruit[esi]==5&&Fruit[esi+4]==4&&Fruit[esi+8]!=0);n,4,5이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]call writeintsub Fruit[esi+8],eaxcall crlf.elseif Fruit[esi]>5||(Fruit[esi]!=0&&Fruit[esi+4]==1&&Fruit[esi+8]==4)||(Fruit[esi]!=0&&Fruit[esi+4]==4&&Fruit[esi+8]==1);n,1,4이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,5call writeintsub Fruit[esi],eaxcall crlf.elseif Fruit[esi+4]>5||(Fruit[esi]==4&&Fruit[esi+4]!=0&&Fruit[esi+8]==1)||(Fruit[esi]==1&&Fruit[esi+4]!=0&&Fruit[esi+8]==4);n,1,4이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,5call writeintsub Fruit[esi+4],eaxcall crlf.elseif Fruit[esi+8]>5||(Fruit[esi]==4&&Fruit[esi+4]==1&&Fruit[esi+8]!=0)||(Fruit[esi]==1&&Fruit[esi+4]==4&&Fruit[esi+8]!=0);n,1,4이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,5call writeintsub Fruit[esi+8],eaxcall crlf.elseif Fruit[esi]>4||(Fruit[esi]!=0&&Fruit[esi+4]==1&&Fruit[esi+8]==5)||(Fruit[esi]!=0&&Fruit[esi+4]==5&&Fruit[esi+8]==1);n,1,5이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]sub eax,4call writeintsub Fruit[esi],eaxcall crlf.elseif Fruit[esi+4]>4||(Fruit[esi]==5&&Fruit[esi+4]!=0&&Fruit[esi+8]==1)||(Fruit[esi]==1&&Fruit[esi+4]!=0&&Fruit[esi+8]==5);n,1,5이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]sub eax,4call writeintsub Fruit[esi+4],eaxcall crlf.elseif Fruit[esi+8]>4||(Fruit[esi]==5&&Fruit[esi+4]==1&&Fruit[esi+8]!=0)||(Fruit[esi]==1&&Fruit[esi+4]==5&&Fruit[esi+8]!=0);n,1,5이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]sub eax,4call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==5&&Fruit[esi+8]==5);n,5,5이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7mov eax,Fruit[esi]call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==5&&Fruit[esi+4]!=0&&Fruit[esi+8]==5);n,5,5이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+4]call writeintsub Fruit[esi+4],eaxcall crlf.elseif (Fruit[esi]==5&&Fruit[esi+4]==5&&Fruit[esi+8]!=0);n,5,5이남았을때mov edx,OFFSET Orangecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi+8]call writeintsub Fruit[esi+8],eaxcall crlf.elseif (Fruit[esi]!=0&&Fruit[esi+4]==0&&Fruit[esi+8]!=0)||(Fruit[esi]!=0&&Fruit[esi+4]!=0&&Fruit[esi+8]==0);0,n,n이남았을때mov edx,OFFSET Bananacall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi],eaxcall crlf.elseif (Fruit[esi]==0&&Fruit[esi+4]!=0&&Fruit[esi+8]!=0);0,n,n이남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,1call writeintsub Fruit[esi+4],eaxcall crlf.elseif ;n,n,n이 남았을때mov edx,OFFSET Applecall writestringcall crlfmov edx,OFFSET str7call writestringmov eax,Fruit[esi]call RandomRangeadd eax,1call writeintsub Fruit[esi],eaxcall crlf.endifretCom_game ENDPEND main
'프로그래밍 언어 > Assembly' 카테고리의 다른 글
어셈블리 - 계산기 (0) | 2018.01.22 |
---|---|
어셈블리 - 배열 교환 (0) | 2018.01.22 |
어셈블리 - 문제풀기2 (0) | 2018.01.22 |
어셈블리 - 문제풀기 1 (0) | 2018.01.22 |
어셈블리 - 과제2 (0) | 2018.01.22 |