Casio Algebra fx-2.0에서 memory game

계산기 2022. 10. 21. 22:02 posted by tolkien

TI-83 plus에 구현해 놓은 memory game을 afx-2.0에 porting해봤습니다.
(원래 code는 여기에 있습니다.) 이걸 옮기다가 몇가지 변경을 했습니다.

  1. 카드 뒤집는 부분을 subroutine으로 뺐습니다. key 값을 X에 담고, Y에는 세트 구분 (0: 세트 A, 9: 세트 B), 처리 명령을 Z에 담았습니다. Z는 구체적으로...
    1. Z=0: 틀렸으므로 카드를 뒤집어라. (0으로 다시 돌려놓음)
    2. Z=1: 해당 카드의 숫자를 보여줄 것.
    3. Z=2: 맞았으니까, 해당 위치의 값을 0으로 바꾸고 출력 부분은 건드리지 않음.
    4. 반환시 Z=-1 : 해당 위치는 이미 뒤집었슴.
    5. 반환시 Z=-2 : invalid key input
  2. 카드 상태를 저장을 A,B,... 변수가 아닌 List를 사용했습니다. 덕분에 원래 source coe에서 보이던 변수 쥐어짜기를 할 필요가 없어졌습니다.
  3. 해놓고 보니, 괜찮아서 다시 TI-83 plus에 back porting했습니다. (그래서, 화면은 TI-83 plus)
  4. TI-83 plus로 다시 작성할 때, afx-2.0과 다른 점은
    1. muli statement가 되지 않아서 code가 길어졌습니다.
    2. key code가 다릅니다.
    3. repeat ~ while 문이 없어서 while ~ end문을 쓰다보니 S->0과 같은 변수 초기화를 해주어야 하네요. 그외에는 code는 대동소이합니다. 

code를 아래와 같습니다.  '->'는 →입니다. !=는 'not equal'입니다.

더보기
FILE:MEMORY
ClrText:100->Q
Lbl 0
For 1->I To 9
I->List 19[I]
Next
For 1->I To 9
Int (Ran# x10)->J
If J!=0:Then
List 19[I]->K
List 19[J]->List 19[I]
K->List 19[J]
EndIf:Next
0->List 19[10]
For 1->I To 9
I->List 19[10+I]
Next
For 1->I To 9
Int (Ran# x10)->J
If J!=0:Then
List 19[10+I]->K
List 19[10+J]->List 19[10+I]
K->List 19[10+J]
EndIf:Next

0->W:0->R
For 2->I To 6 Step 2
For 2->J To 6 Step 2
Locate I,J,0
Locate 10+I,J,0
Next:Next

Lbl 1
Locate 9,4,"<"
Locate 10,4,"-"
Do:LpWhile Getkey!=0
Do:Getkey->S
If S=47:Then Return:IfEnd
If S!=0:Then S->X:0->Y:1->Z:Prog "~MDISP":Z->U:IfEnd
LpWhile S=0 Or Z<0
Locate 9,4,"-"
Locate 10,4,">"
Do:LpWhile Getkey!=0
Do:Getkey->T
If T!=0:Then T->X:10->Y:1->Z:Prog "~MDISP":Z->V:IfEnd
LpWhile T=0 Or Z<0
Do:LpWhile Getkey!=0
Do:Getkey->K:LpWhile K=0
If U!=V:Then 0->Z
Else W+1->W:2->Z:IfEnd
S->X:0->Y:Prog "~MDISP"
T->X:10->Y:Prog "~MDISP"
R+1->R
Locate 2,7,"TRIAL:     "
Locate 9,7,R
If W<9:Then Goto 1:IfEnd
If Q>R:Then R->Q
Locate 2,7,"BEST : "
Locate 9,7,R
IfEnd
Goto 0

FILE:~MDISP
0->A
If X=74:Then
Y+2->A:2->B:Y+7->C
IfEnd
If X=73:Then
Y+2->A:4->B:Y+4->C
IfEnd
If X=72:Then
Y+2->A:6->B:Y+1->C
IfEnd
If X=64:Then
Y+4->A:2->B:Y+8->C
IfEnd
If X=63:Then
Y+4->A:4->B:Y+5->C
IfEnd
If X=62:Then
Y+4->A:6->B:Y+2->C
IfEnd
If X=54:Then
Y+6->A:2->B:Y+9->C
IfEnd
If X=53:Then
Y+6->A:4->B:Y+6->C
IfEnd
If X=52:Then
Y+6->A:6->B:Y+3->C
IfEnd
If A=0:Then
-2->Z:Return:IfEnd
If List 19[C]=0:Then
-1->Z:Return:IfEnd
If Z=2:Then 
0->List 19[C]:Return:IfEnd
If Z!=0:Then
List 19[C]->Z:IfEnd
Locate A,B,Z
Return

FX-9860에서 동작확인한 code입니다. (FA-124에서 IMPORT로 가져올 수 있습니다.)

MEMORY.G1M
0.00MB
MDISP.G1M
0.00MB

 

TI-83 plus에서 동작하는 code입니다. (text file. TI-83 plus에서 일일이 입력해야 합니다.)

memory_ti-83p.txt
0.00MB

이걸 Sharp EL-5230에 porting 할 수 있을지 생각중입니다. memory가 충분할 지...

( 2023/05/03 : fx-9860에서 동작하도록 Getkey buffer가 clear가 됨을 확인하는 code 추가. )