home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / WDESAMPL.BIN / TicTacToe.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-09-18  |  3.4 KB  |  206 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.Graphics;
  7. import java.awt.Image;
  8.  
  9. public class TicTacToe extends Applet {
  10.    int white;
  11.    int black;
  12.    static final int[] moves = new int[]{4, 0, 2, 6, 8, 1, 3, 5, 7};
  13.    static boolean[] won = new boolean[512];
  14.    static final int DONE = 511;
  15.    // $FF: renamed from: OK int
  16.    static final int field_0 = 0;
  17.    static final int WIN = 1;
  18.    static final int LOSE = 2;
  19.    static final int STALEMATE = 3;
  20.    boolean first = true;
  21.    Image notImage;
  22.    Image crossImage;
  23.  
  24.    static void isWon(int var0) {
  25.       for(int var1 = 0; var1 < 511; ++var1) {
  26.          if ((var1 & var0) == var0) {
  27.             won[var1] = true;
  28.          }
  29.       }
  30.  
  31.    }
  32.  
  33.    int bestMove(int var1, int var2) {
  34.       int var3 = -1;
  35.  
  36.       label57:
  37.       for(int var4 = 0; var4 < 9; ++var4) {
  38.          int var5 = moves[var4];
  39.          if ((var1 & 1 << var5) == 0 && (var2 & 1 << var5) == 0) {
  40.             int var6 = var1 | 1 << var5;
  41.             if (won[var6]) {
  42.                return var5;
  43.             }
  44.  
  45.             for(int var7 = 0; var7 < 9; ++var7) {
  46.                if ((var6 & 1 << var7) == 0 && (var2 & 1 << var7) == 0) {
  47.                   int var8 = var2 | 1 << var7;
  48.                   if (won[var8]) {
  49.                      continue label57;
  50.                   }
  51.                }
  52.             }
  53.  
  54.             if (var3 == -1) {
  55.                var3 = var5;
  56.             }
  57.          }
  58.       }
  59.  
  60.       if (var3 != -1) {
  61.          return var3;
  62.       } else {
  63.          for(int var9 = 0; var9 < 9; ++var9) {
  64.             int var10 = moves[var9];
  65.             if ((var1 & 1 << var10) == 0 && (var2 & 1 << var10) == 0) {
  66.                return var10;
  67.             }
  68.          }
  69.  
  70.          return -1;
  71.       }
  72.    }
  73.  
  74.    boolean yourMove(int var1) {
  75.       if (var1 >= 0 && var1 <= 8) {
  76.          if (((this.black | this.white) & 1 << var1) != 0) {
  77.             return false;
  78.          } else {
  79.             this.black |= 1 << var1;
  80.             return true;
  81.          }
  82.       } else {
  83.          return false;
  84.       }
  85.    }
  86.  
  87.    boolean myMove() {
  88.       if ((this.black | this.white) == 511) {
  89.          return false;
  90.       } else {
  91.          int var1 = this.bestMove(this.white, this.black);
  92.          this.white |= 1 << var1;
  93.          return true;
  94.       }
  95.    }
  96.  
  97.    int status() {
  98.       if (won[this.white]) {
  99.          return 1;
  100.       } else if (won[this.black]) {
  101.          return 2;
  102.       } else {
  103.          return (this.black | this.white) == 511 ? 3 : 0;
  104.       }
  105.    }
  106.  
  107.    public void init() {
  108.       this.notImage = ((Applet)this).getImage(((Applet)this).getCodeBase(), "images/not.gif");
  109.       this.crossImage = ((Applet)this).getImage(((Applet)this).getCodeBase(), "images/cross.gif");
  110.    }
  111.  
  112.    public void paint(Graphics var1) {
  113.       Dimension var2 = ((Component)this).size();
  114.       var1.setColor(Color.black);
  115.       int var3 = var2.width / 3;
  116.       int var4 = var2.height / 3;
  117.       var1.drawLine(var3, 0, var3, var2.height);
  118.       var1.drawLine(2 * var3, 0, 2 * var3, var2.height);
  119.       var1.drawLine(0, var4, var2.width, var4);
  120.       var1.drawLine(0, 2 * var4, var2.width, 2 * var4);
  121.       int var5 = 0;
  122.  
  123.       for(int var6 = 0; var6 < 3; ++var6) {
  124.          for(int var7 = 0; var7 < 3; ++var5) {
  125.             if ((this.white & 1 << var5) != 0) {
  126.                var1.drawImage(this.notImage, var7 * var3 + 1, var6 * var4 + 1, this);
  127.             } else if ((this.black & 1 << var5) != 0) {
  128.                var1.drawImage(this.crossImage, var7 * var3 + 1, var6 * var4 + 1, this);
  129.             }
  130.  
  131.             ++var7;
  132.          }
  133.       }
  134.  
  135.    }
  136.  
  137.    public boolean mouseUp(Event var1, int var2, int var3) {
  138.       switch (this.status()) {
  139.          case 1:
  140.          case 2:
  141.          case 3:
  142.             ((Applet)this).play(((Applet)this).getCodeBase(), "audio/return.au");
  143.             this.white = this.black = 0;
  144.             if (this.first) {
  145.                this.white |= 1 << (int)(Math.random() * (double)9.0F);
  146.             }
  147.  
  148.             this.first = !this.first;
  149.             ((Component)this).repaint();
  150.             return true;
  151.          default:
  152.             Dimension var4 = ((Component)this).size();
  153.             int var5 = var2 * 3 / var4.width;
  154.             int var6 = var3 * 3 / var4.height;
  155.             if (this.yourMove(var5 + var6 * 3)) {
  156.                ((Component)this).repaint();
  157.                switch (this.status()) {
  158.                   case 1:
  159.                      ((Applet)this).play(((Applet)this).getCodeBase(), "audio/yahoo1.au");
  160.                      break;
  161.                   case 2:
  162.                      ((Applet)this).play(((Applet)this).getCodeBase(), "audio/yahoo2.au");
  163.                   case 3:
  164.                      break;
  165.                   default:
  166.                      if (this.myMove()) {
  167.                         ((Component)this).repaint();
  168.                         switch (this.status()) {
  169.                            case 1:
  170.                               ((Applet)this).play(((Applet)this).getCodeBase(), "audio/yahoo1.au");
  171.                               break;
  172.                            case 2:
  173.                               ((Applet)this).play(((Applet)this).getCodeBase(), "audio/yahoo2.au");
  174.                            case 3:
  175.                               break;
  176.                            default:
  177.                               ((Applet)this).play(((Applet)this).getCodeBase(), "audio/ding.au");
  178.                         }
  179.                      } else {
  180.                         ((Applet)this).play(((Applet)this).getCodeBase(), "audio/beep.au");
  181.                      }
  182.                }
  183.             } else {
  184.                ((Applet)this).play(((Applet)this).getCodeBase(), "audio/beep.au");
  185.             }
  186.  
  187.             return true;
  188.       }
  189.    }
  190.  
  191.    public String getAppletInfo() {
  192.       return "TicTacToe by Arthur van Hoff";
  193.    }
  194.  
  195.    static {
  196.       isWon(7);
  197.       isWon(56);
  198.       isWon(448);
  199.       isWon(73);
  200.       isWon(146);
  201.       isWon(292);
  202.       isWon(273);
  203.       isWon(84);
  204.    }
  205. }
  206.