summaryrefslogblamecommitdiff
path: root/projects/09/K/Board.vm
blob: 985e81320fb402b8f3364bbb258ab09767b23964 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

                    












                   









                















































































































































                        














                        















                          














































                  
               

               
      
                          

               
              


                 
          
              


                 
          
              
               

                 
          
              
               












                 

               
                     

               
               
           


             
           
               
           



             
               
            


             

               
            
   

               






             
               
            
   
            



             
               












































































































































                      
               












































































































































                       
               


































































































                
               


































































































                
               


































































































                
               

               
               
      
                        

               









                








                    


                


           
               








                    


                

               

               
               

           
             


















                    



             
           



                
            


             










                  


                

                
               






























                    
            
   
            





               
                          






























                



               
   

             
            






                      
               
           
                
            



                  
              
            
           




                  






              


                   
            

               
           

                
            




                      
          
               




                     







                      
              
                         
          

               


















































































                             






                     





                







                        










































































































                         









                         
             

                         













                  

               

                        
                 
                       
          
























                       
                 
                       
          





                







                        
             




                         


             









                        
function Board.new 1
push constant 4
call Memory.alloc 1
pop pointer 0
push constant 4
call Array.new 1
pop this 0
push constant 0
pop local 0
label WHILE_EXP0
push local 0
push constant 4
lt
not
if-goto WHILE_END0
push local 0
push this 0
add
push constant 4
call Array.new 1
pop temp 0
pop pointer 1
push temp 0
pop that 0
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP0
label WHILE_END0
push pointer 0
call Board.initBoard 1
pop temp 0
push constant 0
pop this 2
push pointer 0
return
function Board.init 0
push constant 6
call String.new 1
push constant 43
call String.appendChar 2
push constant 45
call String.appendChar 2
push constant 45
call String.appendChar 2
push constant 45
call String.appendChar 2
push constant 45
call String.appendChar 2
push constant 43
call String.appendChar 2
pop static 0
push constant 9
call String.new 1
push constant 89
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 117
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 108
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 115
call String.appendChar 2
push constant 116
call String.appendChar 2
push constant 33
call String.appendChar 2
pop static 1
push constant 8
call String.new 1
push constant 89
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 117
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 119
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 33
call String.appendChar 2
pop static 4
push constant 25
call String.new 1
push constant 80
call String.appendChar 2
push constant 114
call String.appendChar 2
push constant 101
call String.appendChar 2
push constant 115
call String.appendChar 2
push constant 115
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 121
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 107
call String.appendChar 2
push constant 101
call String.appendChar 2
push constant 121
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 116
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 99
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 116
call String.appendChar 2
push constant 105
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 117
call String.appendChar 2
push constant 101
call String.appendChar 2
pop static 2
push constant 10
call String.new 1
push constant 71
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 109
call String.appendChar 2
push constant 101
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 118
call String.appendChar 2
push constant 101
call String.appendChar 2
push constant 114
call String.appendChar 2
push constant 33
call String.appendChar 2
pop static 3
push constant 6
call String.new 1
push constant 84
call String.appendChar 2
push constant 117
call String.appendChar 2
push constant 114
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 58
call String.appendChar 2
push constant 32
call String.appendChar 2
pop static 5
push constant 0
return
function Board.initBoard 3
push argument 0
pop pointer 0
push constant 0
pop local 0
label WHILE_EXP0
push local 0
push constant 4
lt
not
if-goto WHILE_END0
push constant 0
pop local 1
push local 0
push this 0
add
pop pointer 1
push that 0
pop local 2
label WHILE_EXP1
push local 1
push constant 4
lt
not
if-goto WHILE_END1
push local 1
push local 2
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
push local 1
push constant 1
add
pop local 1
goto WHILE_EXP1
label WHILE_END1
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP0
label WHILE_END0
push constant 0
push this 0
add
pop pointer 1
push that 0
pop local 2
push constant 0
push local 2
add
push constant 65
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 0
pop this 1
push constant 0
pop this 3
push constant 0
return
function Board.transpose 0
push argument 0
pop pointer 0
push pointer 0
push constant 0
push constant 1
call Board.exch 3
pop temp 0
push pointer 0
push constant 0
push constant 2
call Board.exch 3
pop temp 0
push pointer 0
push constant 0
push constant 3
call Board.exch 3
pop temp 0
push pointer 0
push constant 1
push constant 2
call Board.exch 3
pop temp 0
push pointer 0
push constant 1
push constant 3
call Board.exch 3
pop temp 0
push pointer 0
push constant 2
push constant 3
call Board.exch 3
pop temp 0
push constant 0
return
function Board.exch 3
push argument 0
pop pointer 0
push argument 1
push this 0
add
pop pointer 1
push that 0
pop local 1
push argument 2
push this 0
add
pop pointer 1
push that 0
pop local 2
push argument 2
push local 1
add
pop pointer 1
push that 0
pop local 0
push argument 2
push local 1
add
push argument 1
push local 2
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push argument 1
push local 2
add
push local 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 0
return
function Board.align 2
push argument 0
pop pointer 0
push constant 0
pop local 0
push constant 0
pop local 1
push argument 2
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
label WHILE_EXP0
push local 0
push constant 4
lt
not
if-goto WHILE_END0
push local 0
push argument 1
add
pop pointer 1
push that 0
push constant 64
gt
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push local 1
push argument 1
add
push local 0
push argument 1
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push local 1
push constant 1
add
pop local 1
label IF_FALSE1
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP0
label WHILE_END0
label WHILE_EXP1
push local 1
push constant 4
lt
not
if-goto WHILE_END1
push local 1
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
push local 1
push constant 1
add
pop local 1
goto WHILE_EXP1
label WHILE_END1
goto IF_END0
label IF_FALSE0
label WHILE_EXP2
push local 0
push constant 4
lt
not
if-goto WHILE_END2
push constant 3
push local 0
sub
push argument 1
add
pop pointer 1
push that 0
push constant 64
gt
if-goto IF_TRUE2
goto IF_FALSE2
label IF_TRUE2
push constant 3
push local 1
sub
push argument 1
add
push constant 3
push local 0
sub
push argument 1
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push local 1
push constant 1
add
pop local 1
label IF_FALSE2
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP2
label WHILE_END2
label WHILE_EXP3
push local 1
push constant 4
lt
not
if-goto WHILE_END3
push constant 3
push local 1
sub
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
push local 1
push constant 1
add
pop local 1
goto WHILE_EXP3
label WHILE_END3
label IF_END0
push constant 0
return
function Board.reduce 0
push argument 0
pop pointer 0
push constant 0
push argument 1
add
pop pointer 1
push that 0
push constant 1
push argument 1
add
pop pointer 1
push that 0
eq
push constant 2
push argument 1
add
pop pointer 1
push that 0
push constant 3
push argument 1
add
pop pointer 1
push that 0
eq
and
push constant 0
push argument 1
add
pop pointer 1
push that 0
push constant 64
gt
and
push constant 2
push argument 1
add
pop pointer 1
push that 0
push constant 64
gt
and
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
push argument 2
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push constant 0
push argument 1
add
push constant 0
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 1
push argument 1
add
push constant 2
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 2
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 3
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
goto IF_END1
label IF_FALSE1
push constant 3
push argument 1
add
push constant 3
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 2
push argument 1
add
push constant 1
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 1
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 0
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
label IF_END1
push constant 0
return
label IF_FALSE0
push constant 0
push argument 1
add
pop pointer 1
push that 0
push constant 1
push argument 1
add
pop pointer 1
push that 0
eq
push constant 0
push argument 1
add
pop pointer 1
push that 0
push constant 64
gt
and
if-goto IF_TRUE2
goto IF_FALSE2
label IF_TRUE2
push argument 2
if-goto IF_TRUE3
goto IF_FALSE3
label IF_TRUE3
push constant 0
push argument 1
add
push constant 0
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 1
push argument 1
add
push constant 2
push argument 1
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 2
push argument 1
add
push constant 3
push argument 1
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 3
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
goto IF_END3
label IF_FALSE3
push constant 1
push argument 1
add
push constant 1
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 0
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
label IF_END3
push constant 0
return
label IF_FALSE2
push constant 2
push argument 1
add
pop pointer 1
push that 0
push constant 3
push argument 1
add
pop pointer 1
push that 0
eq
push constant 2
push argument 1
add
pop pointer 1
push that 0
push constant 64
gt
and
if-goto IF_TRUE4
goto IF_FALSE4
label IF_TRUE4
push argument 2
if-goto IF_TRUE5
goto IF_FALSE5
label IF_TRUE5
push constant 2
push argument 1
add
push constant 2
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 3
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
goto IF_END5
label IF_FALSE5
push constant 3
push argument 1
add
push constant 3
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 2
push argument 1
add
push constant 1
push argument 1
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 1
push argument 1
add
push constant 0
push argument 1
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 0
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
label IF_END5
push constant 0
return
label IF_FALSE4
push constant 1
push argument 1
add
pop pointer 1
push that 0
push constant 2
push argument 1
add
pop pointer 1
push that 0
eq
push constant 1
push argument 1
add
pop pointer 1
push that 0
push constant 64
gt
and
if-goto IF_TRUE6
goto IF_FALSE6
label IF_TRUE6
push argument 2
if-goto IF_TRUE7
goto IF_FALSE7
label IF_TRUE7
push constant 1
push argument 1
add
push constant 1
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 2
push argument 1
add
push constant 3
push argument 1
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 3
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
goto IF_END7
label IF_FALSE7
push constant 2
push argument 1
add
push constant 2
push argument 1
add
pop pointer 1
push that 0
push constant 1
add
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 1
push argument 1
add
push constant 0
push argument 1
add
pop pointer 1
push that 0
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 0
push argument 1
add
push constant 32
pop temp 0
pop pointer 1
push temp 0
pop that 0
label IF_END7
push constant 0
return
label IF_FALSE6
push constant 0
return
function Board.addTile 5
push argument 0
pop pointer 0
push this 3
push constant 1
eq
not
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
push constant 0
return
label IF_FALSE0
push this 2
push constant 25173
call Math.multiply 2
push constant 13849
add
pop this 2
push this 2
push constant 0
lt
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push this 2
neg
pop this 2
label IF_FALSE1
push this 2
push this 2
push constant 2
call Math.divide 2
push constant 2
call Math.multiply 2
sub
push constant 0
eq
if-goto IF_TRUE2
goto IF_FALSE2
label IF_TRUE2
push constant 1
pop local 3
goto IF_END2
label IF_FALSE2
push constant 1
neg
pop local 3
label IF_END2
push this 2
push this 2
push constant 16
call Math.divide 2
push constant 16
call Math.multiply 2
sub
pop this 2
push this 2
push constant 4
call Math.divide 2
pop local 1
push this 2
push constant 4
push local 1
call Math.multiply 2
sub
pop local 2
push local 1
push this 0
add
pop pointer 1
push that 0
pop local 0
push constant 65
pop local 4
label WHILE_EXP0
push local 2
push local 0
add
pop pointer 1
push that 0
push constant 64
gt
not
if-goto WHILE_END0
push this 2
push local 3
add
pop this 2
push this 2
push constant 0
lt
if-goto IF_TRUE3
goto IF_FALSE3
label IF_TRUE3
push constant 15
pop this 2
label IF_FALSE3
push this 2
push this 2
push constant 16
call Math.divide 2
push constant 16
call Math.multiply 2
sub
pop this 2
push this 2
push constant 4
call Math.divide 2
pop local 1
push this 2
push constant 4
push local 1
call Math.multiply 2
sub
pop local 2
push local 1
push this 0
add
pop pointer 1
push that 0
pop local 0
push constant 131
push local 4
sub
pop local 4
goto WHILE_EXP0
label WHILE_END0
push local 2
push local 0
add
push local 4
pop temp 0
pop pointer 1
push temp 0
pop that 0
push constant 0
return
function Board.transform 3
push argument 0
pop pointer 0
push argument 1
push constant 0
eq
push argument 1
push constant 1
eq
or
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
push constant 0
not
pop local 1
goto IF_END0
label IF_FALSE0
push constant 0
pop local 1
label IF_END0
push argument 1
push constant 0
eq
push argument 1
push constant 2
eq
or
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push constant 0
pop local 0
goto IF_END1
label IF_FALSE1
push constant 0
not
pop local 0
label IF_END1
push local 0
if-goto IF_TRUE2
goto IF_FALSE2
label IF_TRUE2
push pointer 0
call Board.transpose 1
pop temp 0
label IF_FALSE2
push constant 0
pop local 2
label WHILE_EXP0
push local 2
push constant 4
lt
not
if-goto WHILE_END0
push pointer 0
push local 2
push this 0
add
pop pointer 1
push that 0
push local 1
call Board.align 3
pop temp 0
push pointer 0
push local 2
push this 0
add
pop pointer 1
push that 0
push local 1
call Board.reduce 3
pop temp 0
push local 2
push constant 1
add
pop local 2
goto WHILE_EXP0
label WHILE_END0
push local 0
if-goto IF_TRUE3
goto IF_FALSE3
label IF_TRUE3
push pointer 0
call Board.transpose 1
pop temp 0
label IF_FALSE3
push constant 0
return
function Board.next 0
push argument 0
pop pointer 0
push this 1
push constant 1
add
pop this 1
push pointer 0
push argument 1
call Board.transform 2
pop temp 0
push pointer 0
call Board.updateStatus 1
pop temp 0
push constant 0
return
function Board.getStatus 0
push argument 0
pop pointer 0
push this 3
return
function Board.setStatus 0
push argument 0
pop pointer 0
push argument 1
pop this 3
push constant 0
return
function Board.updateStatus 3
push argument 0
pop pointer 0
push constant 0
pop local 0
label WHILE_EXP0
push local 0
push constant 4
lt
not
if-goto WHILE_END0
push local 0
push this 0
add
pop pointer 1
push that 0
pop local 2
push constant 0
pop local 1
label WHILE_EXP1
push local 1
push constant 4
lt
not
if-goto WHILE_END1
push local 1
push local 2
add
pop pointer 1
push that 0
push constant 75
eq
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
push constant 3
pop this 3
push constant 0
return
label IF_FALSE0
push local 1
push local 2
add
pop pointer 1
push that 0
push constant 32
eq
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push constant 1
pop this 3
push constant 0
return
label IF_FALSE1
push local 1
push constant 1
add
pop local 1
goto WHILE_EXP1
label WHILE_END1
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP0
label WHILE_END0
push constant 2
pop this 3
push constant 0
return
function Board.draw 5
push argument 0
pop pointer 0
push constant 9
pop local 0
push constant 30
pop local 1
push this 3
push constant 0
eq
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
push local 0
push constant 1
sub
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push constant 75
call Output.printChar 1
pop temp 0
push local 0
push constant 1
add
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 2
call Output.printString 1
pop temp 0
goto IF_END0
label IF_FALSE0
push this 3
push constant 2
eq
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push local 0
push constant 1
sub
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 3
call Output.printString 1
pop temp 0
push local 0
push constant 1
add
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 1
call Output.printString 1
pop temp 0
push local 0
push constant 3
add
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 2
call Output.printString 1
pop temp 0
goto IF_END1
label IF_FALSE1
push this 3
push constant 3
eq
if-goto IF_TRUE2
goto IF_FALSE2
label IF_TRUE2
push local 0
push constant 1
sub
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 3
call Output.printString 1
pop temp 0
push local 0
push constant 1
add
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 4
call Output.printString 1
pop temp 0
push local 0
push constant 3
add
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 2
call Output.printString 1
pop temp 0
goto IF_END2
label IF_FALSE2
push local 0
push constant 1
sub
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 0
call Output.printString 1
pop temp 0
push local 0
push constant 4
add
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push static 0
call Output.printString 1
pop temp 0
push constant 0
pop local 2
label WHILE_EXP0
push local 2
push constant 4
lt
not
if-goto WHILE_END0
push constant 0
pop local 3
push local 0
push local 2
add
push local 1
push constant 1
sub
call Output.moveCursor 2
pop temp 0
push constant 124
call Output.printChar 1
pop temp 0
push local 2
push this 0
add
pop pointer 1
push that 0
pop local 4
label WHILE_EXP1
push local 3
push constant 4
lt
not
if-goto WHILE_END1
push local 3
push local 4
add
pop pointer 1
push that 0
call Output.printChar 1
pop temp 0
push local 3
push constant 1
add
pop local 3
goto WHILE_EXP1
label WHILE_END1
push constant 124
call Output.printChar 1
pop temp 0
push local 2
push constant 1
add
pop local 2
goto WHILE_EXP0
label WHILE_END0
push local 0
push constant 6
add
push local 1
push constant 2
sub
call Output.moveCursor 2
pop temp 0
push static 5
call Output.printString 1
pop temp 0
push this 1
call Output.printInt 1
pop temp 0
label IF_END2
label IF_END1
label IF_END0
push constant 0
return
function Board.dispose 0
push argument 0
pop pointer 0
push pointer 0
call Memory.deAlloc 1
pop temp 0
push constant 0
return