home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 Mobile / Chip_Mobile_2001.iso / palm / spiele / hkmajong / hkmajong.exe / majong / src / majong.java < prev    next >
Text File  |  1999-03-10  |  12KB  |  399 lines

  1.   /* Majong
  2.  
  3.    by Tenny Woo 
  4.    tennywoo@hotmail.com
  5.  
  6.   */
  7.  
  8.  
  9. import waba.fx.*;
  10. import waba.ui.*;
  11. import waba.sys.*;
  12.  
  13. public class majong extends App
  14. {
  15.   // game stage
  16.   int intGameStage=0, intSavedStage=0;
  17.   int intWhoWin=0; // 1=player,2=computer
  18.   int intPlayerOwn=Var.MONEYSTART, intComputerOwn=Var.MONEYSTART; // init money
  19.   int intLevel=0; // init level
  20.   int intPlayerSeat=MJ.EAST, intComputerSeat=MJ.SOUTH;
  21.   int intWind=MJ.EAST;
  22.  
  23.   Graphics g=new Graphics(this);
  24.   Table objTable=new Table(g, intLevel, intWind, intPlayerOwn, intComputerOwn);
  25.   Player objPlayer=new Player(g, intPlayerOwn, intWind, intPlayerSeat);
  26.   Computer objComputer=new Computer(g, intComputerOwn, intWind, intComputerSeat, intLevel);
  27.  
  28.   public void onStart()
  29.   {
  30.     SetRandomSeed();
  31.   }
  32.  
  33.   public void onPaint(Graphics gPaint)
  34.   {
  35.     ClearScreen();
  36.     PrintFrame();
  37.  
  38.     switch (intGameStage)
  39.     {
  40.       case 0:
  41.         PrintPicture("welcome.wbm");
  42.         break;
  43.  
  44.       case 1:
  45.       case 2:
  46.         objTable.Paint();
  47.         objPlayer.Paint();
  48.         objComputer.Paint();
  49.         break;
  50.       case 99:
  51.         g.drawImage(new Image("closebutton.wbm"), Var.WIDTH-Var.CLOSEBUTTONW, Var.TOP);
  52.         PrintAuthor();
  53.         break;
  54.     }
  55.   }
  56.  
  57.   void SetRandomSeed()
  58.   {
  59.     Time t = new Time();
  60.     MJ.srand((float)t.minute * t.second);
  61.   }
  62.  
  63.   void PrintPicture(String strFileName)
  64.   {
  65.     ClearScreen();
  66.     PrintFrame();
  67.     g.drawImage(new Image(strFileName), 1, 1);
  68.     g.drawImage(new Image("closebutton.wbm"), Var.WIDTH-Var.CLOSEBUTTONW, Var.TOP);
  69.     PrintAuthor();
  70.     intSavedStage=intGameStage;
  71.     intGameStage=99;
  72.   }
  73.  
  74.   void PrintFrame()
  75.   {
  76.     g.setColor(Var.BLACK, Var.BLACK, Var.BLACK);
  77.     g.drawLine(Var.LEFT,Var.TOP,Var.RIGHT,Var.TOP);
  78.     g.drawLine(Var.RIGHT,Var.TOP,Var.RIGHT,Var.BOTTOM);
  79.     g.drawLine(Var.RIGHT,Var.BOTTOM,Var.LEFT,Var.BOTTOM);
  80.     g.drawLine(Var.LEFT,Var.BOTTOM,Var.LEFT,Var.TOP);
  81.   }
  82.  
  83.   void ClearScreen()
  84.   {
  85.     g.setColor(Var.WHITE, Var.WHITE, Var.WHITE);
  86.     g.fillRect(Var.LEFT,Var.TOP,Var.WIDTH,Var.HEIGHT);
  87.   }
  88.  
  89.  
  90.   void PrintAuthor()
  91.   {
  92.     Font f = new Font("Arial", Font.PLAIN, 10);
  93.  
  94.     g.setColor(Var.BLACK,Var.BLACK,Var.BLACK);
  95.     g.setFont(f);
  96.     g.drawText("HK Majong v0.5b, 1999.",        Var.LEFT+2, Var.BOTTOM-((Var.FONTH+Var.FONTVSPACE)*6));
  97.  
  98.     g.drawText("Original by Tenny Woo",         Var.LEFT+2, Var.BOTTOM-((Var.FONTH+Var.FONTVSPACE)*4));
  99.     g.drawText("   tennywoo@hotmail.com",       Var.LEFT+2, Var.BOTTOM-((Var.FONTH+Var.FONTVSPACE)*3));
  100.     g.drawText("PalmPilot Version by Alex Lau", Var.LEFT+2, Var.BOTTOM-((Var.FONTH+Var.FONTVSPACE)*2));
  101.     g.drawText("   alex_lau@bigfoot.com",       Var.LEFT+2, Var.BOTTOM-((Var.FONTH+Var.FONTVSPACE)*1));
  102.   }
  103.  
  104.   public void onEvent(Event event)
  105.   {
  106.     int intRet=0;
  107.     int intGotFace=0;
  108.     int x=0, y=0;
  109.  
  110.     if (event.type!=PenEvent.PEN_DOWN)
  111.     {
  112.       return;
  113.     }
  114.     PenEvent penEvent = (PenEvent)event;
  115.     x = penEvent.x; y = penEvent.y;
  116.  
  117.     switch (intGameStage)
  118.     {
  119.       case 0:
  120.         intGameStage=1;
  121.         ClearScreen();
  122.         PrintFrame();
  123.         objTable.Paint();
  124.         objPlayer.Paint();
  125.         objComputer.Paint();
  126.         break;
  127.  
  128.       case 1:  //show MJs
  129.         int i,j;
  130.  
  131.         // show dice
  132.         objTable.PaintDice();
  133.         if (Var.PLATFORM != 1) Vm.sleep(8*Var.DELAY);
  134.         // get MJs
  135.         for(i=0;i<3;i++)
  136.         {
  137.           if (intPlayerSeat==MJ.EAST)
  138.           {
  139.             for (j=0;j<4;j++) objPlayer.AddMJ(objTable.GetMJ());
  140.             objTable.Paint();
  141.             objPlayer.Paint();
  142.             if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  143.             for (j=0;j<4;j++) objComputer.AddMJ(objTable.GetMJ());
  144.             objTable.Paint();
  145.             objComputer.Paint();
  146.             if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  147.           }
  148.           else
  149.           {
  150.             for (j=0;j<4;j++) objComputer.AddMJ(objTable.GetMJ());
  151.             objTable.Paint();
  152.             objComputer.Paint();
  153.             if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  154.             for (j=0;j<4;j++) objPlayer.AddMJ(objTable.GetMJ());
  155.             objTable.Paint();
  156.             objPlayer.Paint();
  157.             if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  158.           }
  159.         }
  160.         // who is the host?
  161.         if (intPlayerSeat==MJ.EAST)
  162.         {
  163.           objPlayer.AddMJ(objTable.GetMJ());
  164.           objTable.Paint();
  165.           objPlayer.Paint();
  166.           if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  167.           objComputer.AddMJ(objTable.GetMJ());
  168.           objTable.Paint();
  169.           objComputer.Paint();
  170.           if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  171.           objPlayer.AddMJ(objTable.GetMJ());
  172.           objTable.Paint();
  173.           objPlayer.Paint();
  174.         }
  175.         else
  176.         {
  177.           objComputer.AddMJ(objTable.GetMJ());
  178.           objTable.Paint();
  179.           objComputer.Paint();
  180.           if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  181.           objPlayer.AddMJ(objTable.GetMJ());
  182.           objTable.Paint();
  183.           objPlayer.Paint();
  184.           if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  185.           objComputer.AddMJ(objTable.GetMJ());
  186.           objTable.Paint();
  187.           objComputer.Paint();
  188.         }
  189.  
  190.         if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  191.         objPlayer.SetStage(Var.MJNOTDEFINED,MJ.Stage.CLOSE);
  192.         objComputer.SetStage(Var.MJNOTDEFINED,MJ.Stage.CLOSE);
  193.         objPlayer.Paint();
  194.         objComputer.Paint();
  195.         objPlayer.SortMJ();
  196.         objComputer.SortMJ();
  197.         if (Var.PLATFORM != 1) Vm.sleep(10*Var.DELAY);
  198.         objPlayer.SetStage(Var.MJNOTDEFINED,MJ.Stage.SHOW);
  199.         objComputer.SetStage(Var.MJNOTDEFINED,MJ.Stage.HIDE);
  200.         objPlayer.Paint();
  201.         objComputer.Paint();
  202.  
  203.         if (Var.PLATFORM != 1) Vm.sleep(15*Var.DELAY);
  204.         objComputer.GetDone();
  205.         objComputer.Paint();
  206.  
  207.  
  208.         // who is the host?
  209.         if (intComputerSeat==MJ.EAST)
  210.         {
  211.           if (Var.PLATFORM != 1) Vm.sleep(4*Var.DELAY);
  212.           objComputer.SeatEast();
  213.         }
  214.  
  215.         intGameStage=2;
  216.         break;
  217.  
  218.       case 2:  // get next face
  219.         if (x>=Var.MISCAREAX && x<=Var.MISCAREAX+Var.MISCAREAW && y>=Var.MISCAREAY && y<=Var.MISCAREAY+Var.MISCAREAH)
  220.         {
  221.           if (x>=Var.MISCAREAW-((Var.BUTTONW+1)*2) && x<=Var.MISCAREAW-((Var.BUTTONW+1)*2)+Var.BUTTONW) // press four
  222.           {
  223.             intRet=objPlayer.PressFour();
  224.           }
  225.           if (x>=Var.MISCAREAW-Var.BUTTONW-1 && x<=Var.MISCAREAW-1) // press Done
  226.           {
  227.             intRet=objPlayer.CheckDone(objComputer.LastAbortFace());
  228.             if (intRet>0)
  229.             {
  230.               intWhoWin=1;
  231.               intGameStage=3;
  232.               intPlayerOwn=intPlayerOwn + CalcMoney(intRet);
  233.               intComputerOwn=intComputerOwn - CalcMoney(intRet);
  234.               break;
  235.             }
  236.           }
  237.         }
  238.  
  239.         if (x>=Var.LEFTAREAX && x<=Var.LEFTAREAX+Var.LEFTAREAW && y>=Var.LEFTAREAY && y<=Var.LEFTAREAY+Var.LEFTAREAH)
  240.         {
  241.           // pretend hit new face area
  242.           x=Var.PLAYERHANDX+Var.PLAYERHANDW-2; y=Var.PLAYERHANDY+Var.PLAYERHANDH-2;
  243.         }
  244.  
  245.         if (x>=Var.PLAYERHANDX && x<=Var.PLAYERHANDX+Var.PLAYERHANDW && y>=Var.PLAYERHANDY && y<=Var.PLAYERHANDY+Var.PLAYERHANDH)
  246.         {
  247.           if (objPlayer.onPenDown(x-Var.PLAYERHANDX, y-Var.PLAYERHANDY))
  248.           {
  249.             if (objPlayer.LastAction()==1) // get a new face
  250.             {
  251.               intGotFace=objTable.GetMJ();
  252.               if(intGotFace==Var.MJNOTDEFINED)
  253.               {
  254.                 intWhoWin=0;
  255.                 intGameStage=3;
  256.                 break;
  257.               }
  258.               objPlayer.AddMJ(intGotFace);
  259.               objTable.Paint();
  260.               objPlayer.Paint();
  261.             }
  262.             if (objPlayer.LastAction()==2) // abort a title
  263.             {
  264.               intRet=objComputer.CheckPlayerAbort(objPlayer.LastAbortFace());
  265.               if (intRet>0)
  266.               {
  267.                 intWhoWin=2;
  268.                 intGameStage=3;
  269.                 intPlayerOwn=intPlayerOwn - CalcMoney(intRet);
  270.                 intComputerOwn=intComputerOwn + CalcMoney(intRet);
  271.                 break;
  272.               }
  273.               if (objComputer.LastAction()==3 || objComputer.LastAction()==4)
  274.               {
  275.                 objPlayer.RemoveLastAbortFace();
  276.               }
  277.              
  278.               intRet=1;
  279.               while(intRet==1 || objComputer.LastAction()==3)
  280.               {
  281.                 intGotFace=objTable.GetMJ();
  282.                 if(intGotFace==Var.MJNOTDEFINED)
  283.                 {
  284.                   intWhoWin=0;
  285.                   intGameStage=3;
  286.                   intRet=0;
  287.                   break;
  288.                 }
  289.                 objTable.Paint();
  290.                 intRet=objComputer.GetNewFace(intGotFace);
  291.               }
  292.               if(intRet>0)
  293.               {
  294.                 intWhoWin=2;
  295.                 intGameStage=3;
  296.                 intPlayerOwn=intPlayerOwn - CalcMoney(intRet);
  297.                 intComputerOwn=intComputerOwn + CalcMoney(intRet);
  298.                 break;
  299.               }
  300.             }
  301.           }
  302.         }
  303.         if (x>=Var.COMPPOOLX && x<=Var.COMPPOOLX+Var.COMPPOOLW && y>=Var.COMPPOOLY && y<=Var.COMPPOOLY+Var.COMPPOOLH)
  304.         {
  305.           intRet=objPlayer.OppPoolClick(objComputer.LastAbortFace());
  306.           if (intRet==1)
  307.           {
  308.             objComputer.RemoveLastAbortFace();
  309.           }
  310.         }
  311.         break;
  312.  
  313.       case 3:
  314.         if(intWhoWin==0 || (x>=Var.SHOWFANX+Var.SHOWFANW-Var.CLOSEBUTTONW && x<=Var.SHOWFANX+Var.SHOWFANW && y>=Var.SHOWFANY && y<=Var.SHOWFANY+Var.CLOSEBUTTONH))
  315.         {
  316.           intGameStage=4;
  317.           if(intWhoWin==1) // player  win
  318.           {
  319.             if (intComputerOwn<=0)
  320.             {
  321.               intPlayerOwn=Var.MONEYSTART;
  322.               intComputerOwn=Var.MONEYSTART;
  323.               intLevel++;
  324.             }
  325.             if (intPlayerSeat==MJ.SOUTH)
  326.             {
  327.               intPlayerSeat=MJ.EAST;
  328.               intComputerSeat=MJ.SOUTH;
  329.               intWind=intWind+20;
  330.               if (intWind>MJ.NORTH) intWind=MJ.EAST;
  331.             }
  332.             PrintPicture("playerwin.wbm");
  333.           }
  334.           else if(intWhoWin==2) // computer win
  335.           {
  336.             if (intPlayerOwn<=0)
  337.             {
  338.               intGameStage=5; // gameover
  339.               PrintPicture("gameover.wbm");
  340.             }
  341.             else
  342.             {
  343.               if (intComputerSeat==MJ.SOUTH)
  344.               {
  345.                 intPlayerSeat=MJ.SOUTH;
  346.                 intComputerSeat=MJ.EAST;
  347.               }
  348.               PrintPicture("computerwin.wbm");
  349.             }
  350.           }
  351.           else
  352.           {
  353.             PrintPicture("drawgame.wbm");
  354.           }
  355.         }
  356.         break;
  357.  
  358.       case 4:
  359.         MJ.Init();
  360.         intGameStage=1;
  361.         intWhoWin=0;
  362.         objTable=new Table(g, intLevel, intWind, intPlayerOwn, intComputerOwn);
  363.         objPlayer=new Player(g, intPlayerOwn, intWind, intPlayerSeat);
  364.         objComputer=new Computer(g, intComputerOwn, intWind, intComputerSeat, intLevel);
  365.         ClearScreen();
  366.         PrintFrame();
  367.         objTable.Paint();
  368.         objPlayer.Paint();
  369.         objComputer.Paint();
  370.         MJ.srand(x+y);
  371.         break;
  372.  
  373.       case 5:
  374.         exit(0);
  375.  
  376.       case 99:  // close button control
  377.         if(x>=Var.WIDTH-Var.CLOSEBUTTONW && x<=Var.WIDTH && y>=Var.TOP && y<=Var.TOP+Var.CLOSEBUTTONH)
  378.         {
  379.           intGameStage=intSavedStage;
  380.           onEvent(event);
  381.         }
  382.         break;
  383.     }
  384.   }
  385.  
  386.   public int CalcMoney(int intFan)
  387.   {
  388.     int i=0;
  389.     int intMoney=Var.MONEYPERFAN;
  390.  
  391.     for(i=1;i<intFan;i++)
  392.     {
  393.       intMoney=intMoney*2;
  394.     }
  395.     return intMoney;
  396.   }
  397. }
  398.  
  399.