리그캣의 개발놀이터

어셈블리 - 과일 게임 만들기 본문

프로그래밍 언어/Assembly

어셈블리 - 과일 게임 만들기

리그캣 2018. 1. 22. 15:24

게임방식


과일이 세 종류 있다. 바나나, 사과, 오렌지 각 과일의 개수는

사용자가 정할 수 있지만. 편의를 위해 게임 상에서는 정해 놓겠다.

컴퓨터와 사용자가 돌아가면서 게임을 시작한다. 이 때 컴퓨터를 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개만 가져간다.


소스코드


DATA
TITLE Fruit Game
INCLUDE Irvine32.inc
.data
str1 BYTE "FruitGame Start",0
Banana BYTE "Banana :",0
Apple BYTE "Apple: ",0
Orange BYTE "Orange: ",0
allfruit BYTE "ALL NUMBER: ",0
str2 BYTE "You can choose fruit.1.Banana 2.Apple 3.Orange : ",0
str3 BYTE "Get num ",0
str4 BYTE "THE Number is oversize you can repeat : ",0
str5 BYTE "You Lose",0
str6 BYTE "Computer choose fruit. : ",0
str7 BYTE "Computer get num. : ",0
str8 BYTE "You Win",0
str9 BYTE "Computer Win",0
Fruit DWORD 7,6,5,0 ;과일개수 지정
AllNum DWORD ?,0 ;총 과일개수
Menu DWORD ?,0 ;어떤과일 선택할지 선택
Get DWORD ?,0 ;가져간 개수
MAIN CODE
.code
main PROC
mov edx,OFFSET str1
call WriteString
mov ecx,3 ;3개의 랜던숫자 출력
mov esi,0
L1: ;각 과일의 개수 저장
mov eax,8
call RandomRange
add eax,1 ;+1함으로써 0이 되는것을 방지
mov Fruit[esi],eax
add esi,4
loop L1 ;각 과일의 개수 및 총 과일 개수 저장완료
call Num_out ;과일 개수 출력
mov AllNum,0 ;모든 개수 초기화
mov ecx,30
L2:
call User_game ;유저 게임
call Num_out ;과일개수 출력
.if AllNum==1
jmp L3
.endif
mov AllNum,0 ;모든 개수 초기화
call Com_game ;컴퓨터 게임
call Num_out ;과일개수 출력
.if AllNum==1
jmp L4
.endif
mov AllNum,0 ;모든 개수 초기화
Loop L2
L3:
call crlf
mov edx,OFFSET str8
call writestring
exit
L4:
call crlf
mov edx,OFFSET str9
call writestring
exit
main ENDP
함수
Num_out PROC 과일 개수 출력
Num_out PROC ;과일 개수 출력
call crlf
mov esi,0
mov edx,OFFSET Banana
call WriteString
mov eax, Fruit[esi]
add AllNum,eax
call WriteInt
call crlf
add esi,4
mov edx,OFFSET Apple
call WriteString
mov eax,Fruit[esi]
add AllNum,eax
call WriteInt
call crlf
add esi,4
mov edx,OFFSET Orange
call WriteString
mov eax,Fruit[esi]
add AllNum,eax
call WriteInt
call crlf
mov edx,OFFSET allfruit
call WriteString
mov eax,AllNum
call WriteInt
ret
Num_out ENDP
User_game PROC ;사용자 게임
User_game PROC ;사용자 게임
call crlf
mov edx,OFFSET str2
call WriteString
call ReadInt
mov Menu,eax
.if Menu==1
mov esi,0
mov edx,OFFSET str3
call WriteString
mov edx,OFFSET Banana
call WriteString
call ReadInt
mov Get,eax
.if eax > Fruit[esi] ;만약 개수가 초과하면 다시 입력
mov edx,OFFSET str4
call WriteString
call ReadInt
mov Get,eax
.endif
sub Fruit[esi],eax
.elseif Menu==2
mov esi,4
mov edx,OFFSET str3
call WriteString
mov edx,OFFSET Apple
call WriteString
call ReadInt
mov Get,eax
.if eax > Fruit[esi] ;만약 개수가 초과하면 다시 입력
mov edx,OFFSET str4
call WriteString
call ReadInt
mov Get,eax
.endif
sub Fruit[esi],eax
.elseif Menu==3
mov esi,8
mov edx,OFFSET str3
call WriteString
mov edx,OFFSET Apple
call WriteString
call ReadInt
mov Get,eax
.if eax > Fruit[esi] ;만약 개수가 초과하면 다시 입력
mov edx,OFFSET str4
call WriteString
call ReadInt
mov Get,eax
.endif
sub Fruit[esi],eax
.endif
.if AllNum==1
mov edx,OFFSET str5
call WriteString
.endif
ret
User_game ENDP
Com_game PROC
Com_game PROC
call crlf
mov edx,OFFSET str6
call writestring
mov 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi],1
call crlf
.elseif (Fruit[esi]==0&&Fruit[esi+4]==1&&Fruit[esi+8]==1)
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi+4],1
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,2
call writeint
sub Fruit[esi+4],2
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,2
call writeint
sub Fruit[esi],2
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,2
call writeint
sub Fruit[esi+8],2
call crlf
.elseif (Fruit[esi+4]==0&&Fruit[esi+8]==0) ; 0,0,n이 남은경우
mov edx,OFFSET Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,1
call writeint
sub Fruit[esi],eax
call crlf
.elseif (Fruit[esi]==0&&Fruit[esi+8]==0) ; 0,0.n이 남은경우
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,1
call writeint
sub Fruit[esi+4],eax
call crlf
.elseif (Fruit[esi]==0&&Fruit[esi+4]==0) ; 0,0,n이 남은경우
mov edx,OFFSET Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,1
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi],eax
call crlf
.elseif (Fruit[esi]==0&&Fruit[esi+4]==2&&Fruit[esi+8]==2);2,2이남았을때
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi+4],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi+8],eax
call crlf
.elseif (Fruit[esi]!=0&&Fruit[esi+4]==1&&Fruit[esi+8]==1);n,1,1이남았을때
mov edx,OFFSET Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,1
call writeint
sub Fruit[esi],eax
call crlf
.elseif (Fruit[esi]==1&&Fruit[esi+4]!=0&&Fruit[esi+8]==1);n,1,1이남았을때
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,1
call writeint
sub Fruit[esi+4],eax
call crlf
.elseif (Fruit[esi]==1&&Fruit[esi+4]==1&&Fruit[esi+8]!=0);n,1,1이남았을때
mov edx,OFFSET Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,1
call writeint
sub Fruit[esi+8],eax
call crlf
.elseif (Fruit[esi]!=0&&Fruit[esi+4]==2&&Fruit[esi+8]==2);n,2,2이남았을때
mov edx,OFFSET Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
call writeint
sub Fruit[esi],eax
call crlf
.elseif (Fruit[esi]==2&&Fruit[esi+4]!=0&&Fruit[esi+8]==2);n,2,2이남았을때
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
call writeint
sub Fruit[esi+4],eax
call crlf
.elseif (Fruit[esi]==2&&Fruit[esi+4]==2&&Fruit[esi+8]!=0);n,2,2이남았을때
mov edx,OFFSET Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,1
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,1
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,1
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,2
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,2
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,2
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,2
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,2
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,2
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,3
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,3
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,3
call writeint
sub Fruit[esi+8],eax
call crlf
.elseif (Fruit[esi]!=0&&Fruit[esi+4]==3&&Fruit[esi+8]==3);n,3,3이남았을때
mov edx,OFFSET Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
call writeint
sub Fruit[esi],eax
call crlf
.elseif (Fruit[esi]==3&&Fruit[esi+4]!=0&&Fruit[esi+8]==3);n,3,3이남았을때
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
call writeint
sub Fruit[esi+4],eax
call crlf
.elseif (Fruit[esi]==3&&Fruit[esi+4]==3&&Fruit[esi+8]!=0);n,3,3이남았을때
mov edx,OFFSET Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,3
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,3
call writeint
sub Fruit[esi+4],eax
call crlf
.elsief
Fruit[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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,3
call writeint
sub Fruit[esi+8],eax
call crlf
.elseif (Fruit[esi]!=0&&Fruit[esi+4]==4&&Fruit[esi+8]==4);n,4,4이남았을때
mov edx,OFFSET Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
call writeint
sub Fruit[esi],eax
call crlf
.elseif (Fruit[esi]==4&&Fruit[esi+4]!=0&&Fruit[esi+8]==4);n,4,4이남았을때
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
call writeint
sub Fruit[esi+4],eax
call crlf
.elseif (Fruit[esi]==4&&Fruit[esi+4]==4&&Fruit[esi+8]!=0);n,4,4이남았을때
mov edx,OFFSET Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,4
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,4
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,4
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,5
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,5
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,5
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
sub eax,4
call writeint
sub Fruit[esi],eax
call 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 Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
sub eax,4
call writeint
sub Fruit[esi+4],eax
call 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 Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
sub eax,4
call writeint
sub Fruit[esi+8],eax
call crlf
.elseif (Fruit[esi]!=0&&Fruit[esi+4]==5&&Fruit[esi+8]==5);n,5,5이남았을때
mov edx,OFFSET Banana
call writestring
call crlf
mov edx,OFFSET str7
mov eax,Fruit[esi]
call writeint
sub Fruit[esi],eax
call crlf
.elseif (Fruit[esi]==5&&Fruit[esi+4]!=0&&Fruit[esi+8]==5);n,5,5이남았을때
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+4]
call writeint
sub Fruit[esi+4],eax
call crlf
.elseif (Fruit[esi]==5&&Fruit[esi+4]==5&&Fruit[esi+8]!=0);n,5,5이남았을때
mov edx,OFFSET Orange
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi+8]
call writeint
sub Fruit[esi+8],eax
call 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 Banana
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi],eax
call crlf
.elseif (Fruit[esi]==0&&Fruit[esi+4]!=0&&Fruit[esi+8]!=0);0,n,n이남았을때
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,1
call writeint
sub Fruit[esi+4],eax
call crlf
.elseif ;n,n,n이 남았을때
mov edx,OFFSET Apple
call writestring
call crlf
mov edx,OFFSET str7
call writestring
mov eax,Fruit[esi]
call RandomRange
add eax,1
call writeint
sub Fruit[esi],eax
call crlf
.endif
ret
Com_game ENDP
END 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
Comments