home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / GAMETP.ZIP / OOPOBJS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-10-29  |  5.5 KB  |  240 lines

  1. Unit OopObjs;
  2.  
  3. { OOPOBJS.PAS  Version 1.0 Scott D. Ramsay }
  4.  
  5. {  OOPOBJS.PAS is free! Go crazy. }
  6. {  When I was learning Linked-List in High School, I thought that I'd only  }
  7. { need it in boring stuff like database programming.  Doubled linked-list,  }
  8. { is a great way to handle multiple objects for games.  Throw in some OOP   }
  9. { design and Volia!  Easy managable sprites.                                }
  10. {  I give this code to Public Domain.  Use it as you see fit.  Just include }
  11. { the first comment line when distributing the source code, Thanks.         }
  12.  
  13. Interface
  14.  
  15. type
  16.   plist   = ^tlist;
  17.   PObjs   = ^TObjs;
  18.   TObjs   = object
  19.               nx,ny,                       { Sprite Position               }
  20.               flp,                         { Sprite number (for animation) }
  21.               nrx,                         { I forget what this does       }
  22.               num_sprite,                  { Num of sprites per objects    }
  23.               timeo,                       { How long this object lasts    }
  24.               pointage     : integer;      { Score value (for gamers)      }
  25.               mapcolor     : byte;         { Color for radar display       }
  26.               id,                          { I forget this one too         }
  27.               explo,                       { TRUE if the object is explodin}
  28.               overshow     : boolean;      { See: PROCEDURE DRAWITEMS      }
  29.               powner       : plist;        { The PLIST node which this     }
  30.                                            {  object belongs               }
  31.               constructor init(vx,vy:integer);
  32.               procedure drawitemobject;virtual;
  33.               procedure calcitemobject;virtual;
  34.               function checkhit(hx,hy:integer):boolean;virtual;
  35.               destructor done; virtual;
  36.             end;
  37.   PobjMov = ^TobjMov;
  38.   TobjMov = object(TObjs)
  39.               ndx,ndy : integer;
  40.               constructor init(vx,vy,vdx,vdy:integer);
  41.               procedure calcitemobject; virtual;
  42.             end;
  43.   tlist = record
  44.             item      : pobjs;
  45.             prev,next : plist;
  46.           end;
  47.   pkill = ^tkill;
  48.   tkill = record
  49.             tk   : plist;
  50.             next : pkill;
  51.           end;
  52.  
  53. procedure addp(var nkbeg,nkend,p:plist);
  54. procedure deletep(var nkbeg,nkend,p:plist);
  55. procedure calcitems(var nkbeg:plist);
  56. procedure drawitems(var nkbeg:plist;over:boolean);
  57. procedure add2kill_list(var kill:pkill;var i:plist);
  58. procedure cleankill_list(var kill:pkill;var nkbeg,nkend:plist);
  59. procedure clean_plist(var nkbeg,nkend:plist);
  60.  
  61. Implementation
  62.  
  63. procedure calcitems(var nkbeg:plist);
  64. var
  65.   p : plist;
  66. begin
  67.   p := nkbeg;
  68.   while p<>nil do
  69.     begin
  70.       p^.item^.calcitemobject;
  71.       p := p^.next;
  72.     end;
  73. end;
  74.  
  75.  
  76. procedure drawitems(var nkbeg:plist;over:boolean);
  77. {
  78.   This procedure is usually called from:  (GMORPH.PAS)
  79.      Tmorph.pre_map
  80.      Tmorph.post_map
  81.   The OVER flag tells when this object should be drawn.  Behind
  82.    geomorph or infront of the geomorph.
  83. }
  84. var
  85.   p : plist;
  86. begin
  87.   p := nkbeg;
  88.   while p<>nil do
  89.     begin
  90.       if (p^.item^.overshow=over)
  91.         then p^.item^.drawitemobject;
  92.       p := p^.next;
  93.     end;
  94. end;
  95.  
  96.  
  97. procedure clean_plist(var nkbeg,nkend:plist);
  98. var
  99.   p,p2 : plist;
  100. begin
  101.   p := nkbeg;
  102.   while p<>nil do
  103.     begin
  104.       p2 := p;
  105.       p := p^.next;
  106.       dispose(p2^.item,done);
  107.       dispose(p2);
  108.     end;
  109.   nkbeg := nil;
  110.   nkend := nil;
  111. end;
  112.  
  113.  
  114. procedure addp(var nkbeg,nkend,p:plist);
  115. begin
  116.   p^.next := nil;
  117.   if nkend=nil
  118.     then
  119.       begin
  120.         nkbeg := p;
  121.         nkend := p;
  122.         p^.prev := nil;
  123.       end
  124.     else
  125.       begin
  126.         p^.prev := nkend;
  127.         nkend^.next := p;
  128.         nkend := p;
  129.       end;
  130. end;
  131.  
  132.  
  133. procedure deletep(var nkbeg,nkend,p:plist);
  134. begin
  135.   if nkbeg=nkend
  136.     then
  137.       begin
  138.         nkbeg := nil;
  139.         nkend := nil;
  140.       end
  141.     else
  142.   if nkbeg=p
  143.     then
  144.       begin
  145.         nkbeg := nkbeg^.next;
  146.         nkbeg^.prev := nil;
  147.       end
  148.     else
  149.   if nkend=p
  150.     then
  151.       begin
  152.         nkend := nkend^.prev;
  153.         nkend^.next := nil;
  154.       end
  155.     else
  156.       begin
  157.         p^.next^.prev := p^.prev;
  158.         p^.prev^.next := p^.next;
  159.       end;
  160.   dispose(p^.item,done);
  161.   dispose(p);
  162. end;
  163.  
  164.  
  165. procedure cleankill_list(var kill:pkill;var nkbeg,nkend:plist);
  166. var
  167.   p,p2 : pkill;
  168. begin
  169.   p := kill;
  170.   while p<>nil do
  171.     begin
  172.       p2 := p;
  173.       p := p^.next;
  174.       deletep(nkbeg,nkend,p2^.tk);
  175.       dispose(p2);
  176.     end;
  177.   kill := nil;
  178. end;
  179.  
  180.  
  181. procedure add2kill_list(var kill:pkill;var i:plist);
  182. var
  183.   p : pkill;
  184. begin
  185.   new(p);
  186.   p^.tk := i;
  187.   p^.next := kill;
  188.   kill := p
  189. end;
  190.  
  191. (**) { Tobjs Methods }
  192.  
  193. constructor TObjs.init(vx,vy:integer);
  194. begin
  195.   nx := vx; ny := vy; num_sprite := 1;
  196.   mapcolor := $fb; pointage := 0;
  197.   flp := 0; overshow := false;
  198. end;
  199.  
  200.  
  201. destructor tobjs.done;
  202. begin
  203. end;
  204.  
  205.  
  206. procedure tobjs.drawitemobject;
  207. begin
  208.   { i.e.
  209.      fbitdraw(nx,ny,pic[flip]^);
  210.   }
  211. end;
  212.  
  213.  
  214. procedure tobjs.calcitemobject;
  215. begin
  216. end;
  217.  
  218.  
  219. function tobjs.checkhit(hx,hy:integer):boolean;
  220. begin
  221. end;
  222.  
  223. (**) { TobjMov methods }
  224.  
  225. constructor TobjMov.init(vx,vy,vdx,vdy:integer);
  226. begin
  227.   nx := vx; ny := vy; ndx := vdx; ndy := vdy;
  228.   mapcolor := $fb; pointage := 0;
  229.   flp := 0; overshow := false;
  230. end;
  231.  
  232.  
  233. procedure TobjMov.calcitemobject;
  234. begin
  235.  { These are just simple examples of what should go in the methods }
  236.   inc(nx,ndx); inc(ny,ndy);
  237.   flp := (flp+1)mod num_sprite;
  238. end;
  239.  
  240. end.