Advertisement
Guest User

Untitled

a guest
Aug 6th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Strict
  2.  
  3. import mojo
  4.  
  5. Global myGame:MyGame
  6.  
  7. Function Main:int()
  8.     myGame = new MyGame
  9.     return 0
  10. End Function
  11.  
  12. Class MyGame extends App
  13.     Field list:LinkedList<Alien>
  14.  
  15.     Method OnCreate:Int()
  16.    
  17.         list = New LinkedList<Alien>
  18.    
  19.         Local a:Alien = new Alien()
  20.         a.name = "Fred"
  21.         a.x = 30
  22.         list.AddLast(a)
  23.  
  24.         a = new Alien()
  25.         a.name = "George"
  26.         a.x = 10
  27.         list.AddLast(a)
  28.  
  29.         For Local a:Alien = Eachin list
  30.             Print a.name
  31.         Next
  32.         Print list.Count()
  33.        
  34.         list.Sort()
  35.  
  36.         For Local a:Alien = Eachin list
  37.             Print a.name
  38.         Next
  39.  
  40.                
  41.         SetUpdateRate 60
  42.         return 0
  43.     End Method
  44.    
  45.     Method OnLoading:Int()
  46.         return 0
  47.     End Method
  48.    
  49.     Method OnUpdate:Int()
  50.         return 0
  51.     End Method
  52.    
  53.     Method OnRender:Int()
  54.         Cls
  55.        
  56.         return 0
  57.     End Method 
  58. end class
  59.  
  60. Class Sprite
  61.     Field x#, y#
  62. End
  63.  
  64. Class Alien Extends Sprite
  65.     Field name$
  66. End
  67.  
  68. Class LinkedList<T>
  69.     Field head:LinkedNode<T> = New LinkedNode<T>
  70.    
  71.     Method AddLast:LinkedNode<T>( data:T )
  72.         Return New LinkedNode<T>( head, head.pred, data )
  73.     End
  74.    
  75.     Method ObjectEnumerator:LinkedEnumerator<T>()
  76.         Return New LinkedEnumerator<T>( Self )
  77.     End Method
  78.    
  79.     Method Count:Int()
  80.         Local n:Int
  81.         local node := head.succ
  82.         While node <> head
  83.             node = node.succ
  84.             n+=1
  85.         Wend
  86.         Return n
  87.     End
  88.    
  89.     Method FirstLink:LinkedNode<T>()
  90.         Return head.succ
  91.     End
  92.  
  93.     Method Sort:Void( ascending%=True)',compareFunc( o1:Object,o2:Object )=CompareObjects )
  94.         Print "Sorting..."
  95.         Local ccsgn%=-1
  96.         If ascending ccsgn=1
  97.        
  98.         Local insize%=1
  99.         Repeat
  100.             Local merges%
  101.             Local tail:LinkedNode<T> = head
  102.             Local p:LinkedNode<T> = head.succ
  103.  
  104.             While p<>head
  105.                 merges+=1
  106.                 Local q:LinkedNode<T>=p.succ,qsize%=insize,psize%=1
  107.                
  108.                 While psize<insize And q<>head
  109.                     psize+=1
  110.                     q=q.succ
  111.                 Wend
  112.  
  113.                 Repeat
  114.                     Local t:LinkedNode<T>
  115.                     If psize And qsize And q<>head
  116.                         Local cc% = Compare(p.data, q.data) '( CompareFunc( p._value,q._value ) * ccsgn
  117.                         If cc<=0
  118.                             t=p
  119.                             p=p.succ
  120.                             psize-=1
  121.                         Else
  122.                             t=q
  123.                             q=q.succ
  124.                             qsize-=1
  125.                         EndIf
  126.                     Else If psize
  127.                         t=p
  128.                         p=p.succ
  129.                         psize-=1
  130.                     Else If qsize And q<>head
  131.                         t=q
  132.                         q=q.succ
  133.                         qsize-=1
  134.                     Else
  135.                         Exit
  136.                     EndIf
  137.                     t.pred=tail
  138.                     tail.succ=t
  139.                     tail=t
  140.                 Forever
  141.                 p=q
  142.             Wend
  143.             tail.succ=head
  144.             head.pred=tail
  145.  
  146.             If merges<=1 Return
  147.  
  148.             insize*=2
  149.         Forever
  150.     End Method
  151.        
  152. End
  153.  
  154. Function Compare:Int(o1:Object, o2:Object)
  155.     Local c1:Alien = Alien(o1)
  156.     Local c2:Alien = Alien(o2)
  157.     If c2 = c1 Return False
  158.  
  159.     If c1.x = c2.x
  160.         Return True
  161.     endif
  162.    
  163.     Return Sgn(c1.x - c2.x)
  164.    
  165. End
  166.  
  167. Class LinkedEnumerator<T>
  168.     Field list:LinkedList<T>
  169.     Field curr:LinkedNode<T>
  170.    
  171.     Method New( lst:LinkedList<T> )
  172.         list = lst
  173.         curr = lst.head.succ
  174.     End Method
  175.  
  176.     Method HasNext:Bool()
  177.         Return curr <> list.head
  178.     End
  179.  
  180.     Method NextObject:T()
  181.         Local data:T = curr.data
  182.         curr = curr.succ
  183.         Return data
  184.     End
  185.  
  186.  
  187. End
  188.  
  189. Class LinkedNode<T>
  190.     Field succ:LinkedNode
  191.     Field pred:LinkedNode
  192.     Field data:T
  193.    
  194.     Method New()
  195.         succ=Self
  196.         pred=Self
  197.     End
  198.    
  199.     Method New( succ:LinkedNode, pred:LinkedNode, data:T )
  200.         self.succ=succ
  201.         self.pred=pred
  202.         self.succ.pred=Self
  203.         self.pred.succ=Self
  204.         self.data=data
  205.     End
  206.    
  207.            
  208.     Method NextLink:LinkedNode<T>()
  209.         If succ.data<>succ Return succ
  210.         Return succ
  211.     End
  212.    
  213. End
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement