This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Topics - Toctave
Pages: [1]
1
« on: April 14, 2014, 10:03:18 am »
hi. I'm Toctave, a 15 years old french student, I don't program much (mostly during class ), and almost only program in Axe Parser. For now I've just gone to this forum to get some help with axe parser but now that I have my own account I should be able to really be a part of the community
2
« on: April 14, 2014, 09:39:41 am »
Hi guys! I recently created a game in axe, you probably know it, it's 2048. So here's the code with as much comments as I thought were needed, don't hesitate about asking me about a part of it if it's not clear enough. Variables : Pic** : Sprites and Bitmaps I, J, K : Counters for the For( loops in movements subroutines L1 : Pointer to the game table. I store the cells as their power of 2 (e. g. 2 is 1, 64 is 6, and 2048 is 11) appvA : 20 bytes appvar to save the current game table, score, and high score Q : Pointer to appvA theta : If it's non zero, at least one cell has moved (helps to know when to create new cells) N : limit variable, explained below V : Value of the evaluated cell T : Value of the targetted cell .A2048 .Sprite for the Tiles [FF818181818181FF]->Pic0 [FF818199998181FF]->Pic1 [FF8189B99D9181FF]->Pic2 [FF81FF8181FF81FF]->Pic3 [FF81BDA5A5BD81FF]->Pic4 [FFA5FFA5A5FFA5FF]->Pic5 [FF9999FFFF9999FF]->Pic6 [FFC3A59999A5C3FF]->Pic7 [FFC3BDBDBDBDC3FF]->Pic8 [FFFFC3DBDBC3FFFF]->Pic9 [FFFFFFE7E7FFFFFF]->Pic10 [FFABD5ABD5ABD5FF]->Pic11 [FFFFFFFFFFFFFFFF]->Pic12 .Logo Bitmap Data(40,16)->Pic0A [FFFFF0FF00818190818081819F8180F999999980F999999980819981818081998181809F99F999809F99F9998081818981808181898180FFFF8FFF807FFF87FF80000000000000000000000000000000] .Help screen Bitmaps Data(16,56)->Pic0B [FF00810081609910992081408170FF000000FF0081008940B9509D7091108110FF000000FF008100FF7081508170FF508170FF000000FF008100BD23A564A527BD258177FF000000FF00A500FF66A511A522FF14A567FF000000FF0099009934FF45FF7799519971FF00000000000000] Data(24,56)->Pic0C [0000FF0000C304CEA50C2A99044E99048AA50EEEC30000FF0000000000FF0000C30CE6BD0288BD04CEBD082ABD0ECEC30000FF0000000000FF0000FF0E4CC308C2DB0C44DB0248C30CEEFF0000FF0000000000FF0000FF44C8FFCA2AE74A4EE74A82FFE4E2FF0000FF0000000000FF0000ABC48ED52AAAAB4AEED58A2AABE42ED50000FF0000000000FF0000FF84E6FFAAA8FFEAEEFF2A2AFF24CEFF0000FF000000000000000000] DiagnosticOff ExprOn Full
Fill(L1,16,0) 0->I->J->K
.Default value for the NEW subroutine, see below 1->{L1+16}
.Create or load an appvar for the game table UnArchive "appvA" !If GetCalc("appvA" GetCalc("appvA",20)->Q R() Else GetCalc("appvA")->Q End
.Recover last session LOAD()
.Main Loop Repeat getKey(15) If getKey If getKey(1) DOWN() End If getKey(2) LEFT() End If getKey(3) RIGHT() End If getKey(4) UP() End If getKey(55) R() End If getKey(54) H() End End D() End If S>{Q+18}^^r S->{Q+18}^^r End SAVE() Return
Lbl DOWN .By default, no move has been done 0->theta .Check all columns (J) For(J,0,3) 3->N For(K,1,3) .K is used to make a For( loop with I from 3 to 1 .X is the address of the target cell, it's by default the cell below the evaluated one 3-K->I+1->X .If the evaluated cell contains a number If {4*I+J+L1}->V!=0 .Main loop to find a target position .Find a cell with the same value as the evaluated cell .or an obstacle .or X reaches the limit Repeat {4*X+J+L1}->T=V or (T!=V and (T!=0)) or (X=N) X++ End {4*X+J+L1}->T .If an obstacle was found, the target cell is one row upwards If T!=V and (T!=0) X-- End .If any movement is made (target cell is different from evaluated cell) If X!=I .If target cell is empty If {4*X+J+L1}=0 V->{4*X+J+L1} Else .If we're there, the target cell value needs to be increased V+1->{4*X+J+L1} .And the limit value goes upwards (see in the message for more information) X-1->N e^(V+1)+S->S End .Empty the evaluated cell and tell the program a move has been made 0->{4*I+J+L1} theta++ End End End End .If at least one move has been made, create a new cell If theta NEW() End Return
Lbl LEFT 0->theta For(J,0,3) 0->N For(I,1,3) If {4*J+I+L1}->V!=0 I-1->X Repeat {4*J+X+L1}->T=V or (T!=V and (T!=0)) or (X=N) X-- End {4*J+X+L1}->T If T!=V and (T!=0) X++ End If X!=I If {4*J+X+L1}=0 V->{4*J+X+L1} Else V+1->{4*J+X+L1} X+1->N e^(V+1)+S->S End 0->{4*J+I+L1} theta++ End End End End If theta NEW() End Return
Lbl RIGHT 0->theta For(J,0,3) 3->N For(K,1,3) 3-K->I+1->X If {4*J+I+L1}->V!=0 Repeat {4*J+X+L1}->T=V or (T!=V and (T!=0)) or (X=N) X++ End If (T!=V and (T!=0)) X-- End If X!=I If {4*J+X+L1}=0 V->{4*J+X+L1} Else X-1->N V+1->{4*J+X+L1} e^(V+1)+S->S End 0->{4*J+I+L1} theta++ End End End End If theta NEW() End Return
Lbl UP 0->theta For(J,0,3) 0->N For(I,1,3) I-1->X If {4*I+J+L1}->V!=0 Repeat {4*X+J+L1}->T=V or (T!=V and (T!=0)) or (X=N) X-- End {4*X+J+L1}->T If T!=V and (T!=0) X++ End If X!=I If {4*X+J+L1}=0 V->{4*X+J+L1} Else X+1->N V+1->{4*X+J+L1} e^(V+1)+S->S End 0->{4*I+J+L1} theta++ End End End End If theta NEW() End Return
Lbl SAVE Copy(L1,Q,16) S->{Q+16}^^r Return
Lbl LOAD Copy(Q,L1,16) {Q+16}^^r->S Return
Lbl NEW .L is set to 16 so the new cell position changes everytime 16->L Repeat {L1+L}=0 rand^16->L End rand^6/5+1->{L1+L} Return
Lbl R 0->S Fill(L1,16,0 NEW() NEW() Return
Lbl H .Clear the screen and draw the help bitmaps ClrDraw Tangent(20,5,Pic0B) Tangent(52,5,Pic0C) DispGraph^^r Text(58,58,"by Toctave" Repeat getKey End ClrDraw^^r^^r Return
.Subroutine to easily create rectangles for the scores and game table itself, r1 to r4 is the same as for the Rect( command, r5 is used to tell how the corners will look Lbl RECT HLine({r2},{r1}-{r5},{r1}+{r3}+{r5} HLine({r2}+{r4},{r1}-{r5},{r1}+{r3}+{r5} VLine({r1},{r2}-{r5},{r2}+{r4}+{r5} VLine({r1}+{r3},{r2}-{r5},{r2}+{r4}+{r5} Return
.No need to explain here I think Lbl D Tangent(32,3,Pic0A For(I,0,15) L1+I->P I^4*9+31->F I/4*9+21->G If {P}=1 Pt-On(F,G,Pic1) ElseIf {P}=2 Pt-On(F,G,Pic2) ElseIf {P}=3 Pt-On(F,G,Pic3) ElseIf {P}=4 Pt-On(F,G,Pic4) ElseIf {P}=5 Pt-On(F,G,Pic5) ElseIf {P}=6 Pt-On(F,G,Pic6) ElseIf {P}=7 Pt-On(F,G,Pic7) ElseIf {P}=8 Pt-On(F,G,Pic8) ElseIf {P}=9 Pt-On(F,G,Pic9) ElseIf {P}=10 Pt-On(F,G,Pic10) ElseIf {P}=11 Pt-On(F,G,Pic11) ElseIf {P}=12 Pt-On(F,G,Pic12) Else Pt-On(F,G,Pic0)^^r End End RECT(29,19,38,38,1 RECT(70,21,24,14,~1 RECT(70,38,24,14,~1 DispGraphClrDraw^^r
Text(72,22,"Score:" Text(73,28,S>Dec Text(75,39,"Best:" Text(73,45,{Q+18}^^r>Dec
About the N variable : The problem was that when going Left for example, with 3 as a limit, the program was doing this : [8,4,4,0]=>[0,0,0,16] with steps : [8,4,4,0]=>[8,4,0,4]=>[8,0,0,8]=>[0,0,0,16] Now, it does the following : [8,4,4,0]=>[0,0,8,8] [8,4,4,0]=>[8,4,0,4]=>[8,0,0,8]=>Set the limit to the third cell (targetted cell was fourth, limit is target-1) => [0,0,8,8] (the 8 stopped at the third cell because the limit was reached And here's a gif, as you can see the Text is laggy and causes the grayscale to look bad, and I have no idea how to fix this, if anyone could help that could be great. Here's a gif without the text to show how fast it should be : Controls : Arrows to swipe in a direction 2nd to show the help screen mode to reset the game Clear to quit
Pages: [1]
|