home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / w / wgt3_ex.zip / PACMAN.C < prev    next >
C/C++ Source or Header  |  1992-09-15  |  6KB  |  261 lines

  1. #include <dos.h>
  2. #include <alloc.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <wgt.h>
  6. #include <scroll.h>
  7.  
  8. void checkpos(void);
  9.  
  10. int spx,spy;
  11. int pacanim,pacdir;
  12. int ox,oy;
  13.  
  14. wgtmap mymap;            // our world map
  15.  
  16. int kbdon[35]={0,0,0,0,0};    // our keyboard on/off array;
  17. int kbdscanlist[35]={72,80,75,77,1};    // our keyboard scan codes;
  18. // You must have the above two if you want the keyboard interrupt 
  19.  
  20. color palette[256];        // our palette of colours
  21.  
  22. block blocks[201];        // our blocks for the map
  23. block sprites[201];        // our sprites 
  24.  
  25.  
  26. int bonus,traptime[5];
  27. int killtime[5];
  28. int i;
  29. int pacspeed=8,ghostspeed=8;
  30. int moved[5],movedir[5];
  31. int bluetime;
  32.  
  33. void moveghost(int);
  34.  
  35. void main(void)
  36. {
  37. vga256();
  38.  
  39. wloadsprites(&palette,"pacman.spr",blocks);        // load blocks
  40. wloadsprites(&palette,"pac.spr",sprites);        // load sprites
  41.  
  42. mymap=wloadmap("pacman.wmp");        // load our world map
  43.  
  44.  
  45. winitscroll(10,10);                // make a 12x10 box
  46.                         // for the scrolling
  47.  
  48. wnormscreen();                    // go back to normal screen
  49. wcls(0);                    // clear it
  50. wbutt(1,1,318,198);
  51.  
  52. wshowwindow(7,6,mymap);            // start looking at world
  53.                         // at 0,0
  54. installkbd();                    // start new keyboard interrupt
  55.  
  56. numsprites=5;
  57. wobject[0].on=1; wobject[0].x=192; wobject[0].y=176; wobject[0].num=1;
  58.  
  59. wobject[1].on=1; wobject[1].x=176; wobject[1].y=112; wobject[1].num=21;
  60. wobject[2].on=1; wobject[2].x=176; wobject[2].y=112; wobject[2].num=22;
  61. wobject[3].on=1; wobject[3].x=176; wobject[3].y=112; wobject[3].num=23;
  62. wobject[4].on=1; wobject[4].x=176; wobject[4].y=112; wobject[4].num=24;
  63. for (i=1; i<5; i++) moved[i]=0;
  64. pacanim=1;
  65.  
  66.  
  67. do
  68. {
  69.  
  70. spx=0;
  71. spy=0;
  72. ox=wobject[0].x;
  73. oy=wobject[0].y;
  74.  
  75. if (kbdon[2]==1)        // Pressing left
  76.   {
  77.   wobject[0].x-=pacspeed;
  78.   checkpos();
  79.   pacdir=2;
  80.   }
  81. else if (kbdon[3]==1)    // Pressing right
  82.   {
  83.   wobject[0].x+=pacspeed;
  84.   checkpos();
  85.   pacdir=0;
  86.   }
  87. else if (kbdon[0]==1)        // Pressing up
  88.   {
  89.   wobject[0].y-=pacspeed;
  90.   checkpos();
  91.   pacdir=1;
  92.   }
  93. else if (kbdon[1]==1)    // Pressing down
  94.   {
  95.   wobject[0].y+=pacspeed;
  96.   checkpos();
  97.   pacdir=3;
  98.   }
  99.  
  100.     if (bluetime>0)
  101.     bluetime--;
  102.  
  103. for (i=1; i<5; i++)
  104.  {
  105.  if (traptime[i]==0)
  106.    {
  107.    moveghost(i);
  108.  if (bluetime>0)
  109.     wobject[i].num=25;
  110.  if ((bluetime==1) | ((bluetime<40) & (bluetime % 2==1)))
  111.     wobject[i].num=20+i;
  112.  if ((soverlap(i,0)==1) & (traptime[i]==0))
  113.    {
  114.    if (bluetime>0)
  115.      {
  116.      wobject[i].num=27+bonus;
  117.      bonus++;
  118.      traptime[i]=100;
  119.      sound(440);
  120.      }
  121.    }
  122.   }
  123.   else traptime[i]--;
  124.  if (traptime[i]==1)
  125.     {
  126.     wobject[i].x=192;
  127.     wobject[i].y=144;
  128.     wobject[i].num=20+i;
  129.     bonus=0;
  130.  }
  131. }
  132.  
  133. if ((wobject[0].x<16) & (wobject[0].y==176))
  134.     {   wobject[0].x=352; wshowwindow(14,6,mymap); }
  135. if ((wobject[0].x>352) & (wobject[0].y==176))
  136.     {   wobject[0].x=16;  wshowwindow(0,6,mymap); }
  137.  
  138. pacanim++;
  139. if (pacanim>5)
  140.   pacanim=1;
  141. wobject[0].num=pacanim+(pacdir*5);
  142.  
  143.  
  144. if (wobject[0].x-worldx<windowmaxx/2-1)
  145.    spx=-pacspeed;
  146. else if (wobject[0].x-worldx>windowmaxx/2+1)
  147.    spx=pacspeed;
  148. if (wobject[0].y-worldy<windowmaxy/2-1)
  149.    spy=-pacspeed;
  150. else if (wobject[0].y-worldy>windowmaxy/2+1)
  151.    spy=pacspeed;
  152.  
  153. nosound();
  154. wscrollwindow(spx,spy,mymap);    // update the scrolling window
  155. wshowobjects();
  156. wcopyscroll(80,15);
  157. } while (kbdon[4] !=1);            // until right button is pressed
  158.  
  159. uninstallkbd();
  160. wendscroll();
  161. wfreesprites(blocks);
  162. wfreesprites(sprites);
  163. wfreemap(mymap);
  164. free(wgtlibrary);
  165. textmode(C80);
  166. }
  167.  
  168. void checkpos(void)
  169. {
  170. int hit=0;
  171.  
  172.   i=wgetworldblock(wobject[0].x,wobject[0].y,mymap);
  173.   if (tiletype[i]==0)
  174.     hit=1;
  175.   i=wgetworldblock(wobject[0].x+15,wobject[0].y,mymap);
  176.   if (tiletype[i]==0)
  177.     hit=1;
  178.   i=wgetworldblock(wobject[0].x,wobject[0].y+15,mymap);
  179.   if ((tiletype[i]==0) | (tiletype[i]==4))
  180.     hit=1;
  181.   i=wgetworldblock(wobject[0].x+15,wobject[0].y+15,mymap);
  182.   if (tiletype[i]==0)
  183.     hit=1;
  184.   i=wgetworldblock(wobject[0].x+7,wobject[0].y+7,mymap);
  185.   if (tiletype[i]==2)
  186.     {
  187.     sound(500);
  188.     wputworldblock(wobject[0].x+7,wobject[0].y+7,12,mymap);
  189.     }
  190.   if (tiletype[i]==3)
  191.      {
  192.     sound(800);
  193.     wputworldblock(wobject[0].x+7,wobject[0].y+7,12,mymap);
  194.      bluetime+=150;
  195.      }
  196.  
  197.   if (hit==1)
  198.      {
  199.      wobject[0].x=ox;
  200.      wobject[0].y=oy;                   
  201.      }
  202.   }
  203.  
  204.  
  205. void moveghost(int numb)
  206. {
  207. int gox,goy,hit=0,j;
  208.  
  209. gox=wobject[numb].x;
  210. goy=wobject[numb].y;
  211.  
  212. if (moved[numb]==0)
  213.    movedir[numb]=(rand() % 5)+1;
  214.  
  215.    if (movedir[numb]==1)
  216.    wobject[numb].x+=ghostspeed;
  217.    else if (movedir[numb]==2)
  218.    wobject[numb].x-=ghostspeed;
  219.    else if (movedir[numb]==3)
  220.    wobject[numb].y+=ghostspeed;
  221.    else if (movedir[numb]==4)
  222.    wobject[numb].y-=ghostspeed;
  223.  
  224.    moved[numb]+=ghostspeed;
  225.    if (moved[numb]>=16)
  226.      moved[numb]=0;
  227.  
  228.  if (wobject[numb].x<0)
  229.     wobject[numb].x=0;
  230. else if (wobject[numb].x>(mapwidth-1)*16)
  231.     wobject[numb].x=(mapwidth-1)*16;
  232.  if (wobject[numb].y<0)
  233.     wobject[numb].y=0;
  234. else if (wobject[numb].y>(mapheight-1)*16)
  235.     wobject[numb].y=(mapheight-1)*16;
  236.  
  237.   j=wgetworldblock(wobject[numb].x,wobject[numb].y,mymap);
  238.   if (tiletype[j]==0)
  239.     hit=1;
  240.   j=wgetworldblock(wobject[numb].x+15,wobject[numb].y,mymap);
  241.   if (tiletype[j]==0)
  242.     hit=1;
  243.   j=wgetworldblock(wobject[numb].x,wobject[numb].y+15,mymap);
  244.   if (tiletype[j]==0)
  245.     hit=1;
  246.   if ((tiletype[j]==4) & (movedir[numb]==3))
  247.     hit=1;
  248.   j=wgetworldblock(wobject[numb].x+14,wobject[numb].y+15,mymap);
  249.   if (tiletype[j]==0)
  250.     hit=1;
  251.   if (hit==1)
  252.      {
  253.      wobject[numb].x=gox;
  254.      wobject[numb].y=goy;
  255.      moved[numb]=0;
  256.      }
  257. if ((wobject[numb].x==gox) & (wobject[numb].y==goy))
  258.   moveghost(numb);
  259.  
  260. }
  261.