⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blackvswhite.java

📁 Java Applet实例编程.rar
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//filename Othello.java;
//filename Othello.class;

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.io.PrintStream;
import java.net.URL;

public class BlackVSWhite extends Applet implements Runnable,ActionListener,MouseListener
{
  private MediaTracker imageTracker;
  private Image redImage;
  private Image blueImage;
  private Image offScrImage;
  private Graphics offScrGraphics;
  private Font f;
  private int fontHeight;
  private int fontAscent;
  private Button button;
  private int buttonHeight;
  private Choice choice;
  private Choice moveFirst;
  private boolean redMoveFirst;
  private boolean illegalMove;
  private boolean blueNotMoving;
  private boolean animating;
  private int redScore;
  private int blueScore;
  private Thread aThread;
  private static final int EMPTY = 0;
  private static final int RED = 2;
  private static final int BLUE = 3;
  private static final int BLUE_TEMP = 4;
  private static final int RED_TEMP = 5;
  private static final int VERYGOOD = 9999;
  private static int DIM = 10;
  private int boardSize = 400;
  private int[] grid = new int[400];

  private synchronized void newGame()
  {
    DIM = (new Integer((String) choice.getSelectedItem())).intValue();
    int whoMoveFirst=moveFirst.getSelectedIndex();
    if(whoMoveFirst==0)
   	  redMoveFirst = true;
    else
   		redMoveFirst = false;
       		
    int n1;
    int n2;
    for( n1 = 0; n1 < DIM; ++n1 )
    {
      for( n2 = 0; n2 < DIM; ++n2 )
        grid[n1 * DIM + n2] = EMPTY;
    }
    n2 = DIM / 2;
    grid[(n2 - 1) * DIM + (n2 - 1)] = RED;
    grid[(n2 - 1) * DIM + n2] = BLUE;
    grid[n2 * DIM + (n2 - 1)] = BLUE;
    grid[n2 * DIM + n2] = RED;
    offScrGraphics.setColor( Color.white );
    offScrGraphics.fillRect( 0, 0, boardSize, boardSize );
    redScore = blueScore = 0;
    illegalMove = blueNotMoving = animating = false;
    boardSize = -1;
    repaint();
    if( !redMoveFirst )
    {
      blueMove();
      checkScore();
      repaint();
    }
  }

  public synchronized void init()
  {
    aThread = null;
    imageTracker = new MediaTracker( this );
    offScrImage = createImage( 400, 400 );
    offScrGraphics = offScrImage.getGraphics();
    f = new Font( "TimesRoman", 0, 12 );
    offScrGraphics.setFont( f );
    fontHeight = getFontMetrics( f ).getHeight();
    fontAscent = getFontMetrics( f ).getAscent();
    loadImages();
    if( button == null )
    {
      button = new Button( "新游戏" );
      button.addActionListener(this);
      setLayout( new FlowLayout( ) );
      add( button );
      choice = new Choice();
      choice.addItem( "6" );
      choice.addItem( "8" );
      choice.addItem( "10" );
      choice.addItem( "12" );
      choice.addItem( "14" );
      add( choice );
      choice.select( "10" );
    }
    if( moveFirst == null )
    {
      moveFirst = new Choice();
      moveFirst.addItem( "玩家先走" );
      moveFirst.addItem( "电脑先走" );
      add( moveFirst );
      moveFirst.select( 0 );
      redMoveFirst = true;
    }
    addMouseListener(this);
    newGame();
  }

  public synchronized void loadImages()
  {
    int i;
    try
    {
      redImage = getImage( getDocumentBase(), "p2.gif" );
      blueImage = getImage( getDocumentBase(), "p1.gif" );
      offScrGraphics.drawImage( redImage, 0, 0, this );
      offScrGraphics.drawImage( blueImage, 0, 0, this );
    }
    catch( Exception e1 )
    {
      System.out.println( e1 );
    }
    imageTracker.addImage( redImage, 0 );
    imageTracker.addImage( blueImage, 1 );
    for( i = 0; i < 2; ++i )
    {
      try
      {
        imageTracker.checkID( i, true );
        imageTracker.waitForID( i );
        showStatus( "Loading image P" + i + ".gif" );
      }
      catch( Exception e2 )
      {
        System.out.println( e2 );
      }
    }
  }

  public void start()
  {
    aThread = new Thread( this );
    aThread.start();
    imageTracker.statusID( 0, true );
    imageTracker.statusID( 1, true );
  }
    
  public void run()
  {
    for( ;; )
    {
      try
      {
        Thread.sleep( 50L );
        continue;
      }
      catch( Exception unused1 )
      {
        continue;
      }
    }
  }

  /*public void stop()
  {
    if( aThread != null && aThread.isAlive() )
      aThread.stop();
  }*/

  public void destroy()
  {
  }
    
  public synchronized void blueMove()
  {
    int num1 = -1;
    int num2 = -1;
    int num3 = -1;
    int num4 = -1;
    int num5;

    for( num5 = 0; num5 < DIM; ++num5 )
    {
      int num6;
      for( num6 = 0; num6 < DIM; ++num6 )
      {
        if( grid[num5 * DIM + num6] == 0 )
        {
          num2 = isGood( num5, num6, 3, 2 );
          if( num1 < num2 && num2 > 0 )
          {
            num1 = num2;
            num3 = num5;
            num4 = num6;
          }
        }
      }
    }
    blueNotMoving = false;
    if( num1 > 0 )
    {
      grid[num3 * DIM + num4] = BLUE;
      change( num3, num4, 3, 2, 4 );
    }
    else
      blueNotMoving = true;
  }
    
  public synchronized int isGood(int num1, int num2, int num3, int num4)
  {
    int num6 = 0;
    int num5 = 0;
    int num7;
    int num8;
    int num9;
    int num10;
    for( num8 = num2 + 1; num8 < DIM; ++num8 )
    {
      if( grid[num1 * DIM + num8] == num4 )
        ++num5;
      else
      {
        if( grid[num1 * DIM + num8] == num3 )
          break;
        if( grid[num1 * DIM + num8] == 0 )
        {
          num5 = 0;
          break;
        }
      }
    }
    if( num8 >= DIM )
      num5 = 0;
    num6 += num5;
    num5 = 0;
    for( num8 = num2 - 1; num8 >= 0; --num8 )
    {
      if( grid[num1 * DIM + num8] == num4 )
        ++num5;
      else
      {
        if( grid[num1 * DIM + num8] == num3 )
    	    break;
        if( grid[num1 * DIM + num8] == 0 )
        {
          num5 = 0;
          break;
        }
      }
    }
    if( num8 <= -1 )
      num5 = 0;
    num6 += num5;
    num5 = 0;
    for( num7 = num1 + 1; num7 < DIM; ++num7 )
    {
      if( grid[num7 * DIM + num2] == num4 )
        ++num5;
      else
      {
        if( grid[num7 * DIM + num2] == num3 )
          break;
        if( grid[num7 * DIM + num2] == 0 )
        {
          num5 = 0;
          break;
        }
      }
    }
    if( num7 >= DIM )
      num5 = 0;
    num6 += num5;
    num5 = 0;
    num7 = num1 - 1;
    while( num7 >= 0 )
    {
      if( grid[num7 * DIM + num2] == num4 )
        ++num5;
      if( grid[num7 * DIM + num2] == num3 )
        break;
      if( grid[num7 * DIM + num2] == 0 )
      {
        num5 = 0;
        break;
      }
      else
        --num7;
    }
    if( num7 <= -1 )
      num5 = 0;
    num6 += num5;
    num5 = 0;
    num9 = num2 + 1;
    num10 = num1 - 1;
    while( num9 >= 0 && num10 >= 0 )
    {
      if( grid[num10 * DIM + num9] == num4 )
        ++num5;
      if( grid[num10 * DIM + num9] == num3 )
        break;
      if( grid[num10 * DIM + num9] == 0 )
      {
        num5 = 0;
        break;
      }
      else
      {
        ++num9;
        --num10;
      }
    }
    if( num9 >= DIM || num10 <= -1 )
      num5 = 0;
    num6 += num5;
    num5 = 0;
    num9 = num2 + 1;
    for( num10 = num1 + 1; num9 < DIM && num10 < DIM; ++num10 )
    {
      if( grid[num10 * DIM + num9] == num4 )
        ++num5;
      else
      {
        if( grid[num10 * DIM + num9] == num3 )
          break;
        if( grid[num10 * DIM + num9] == 0 )
        {
          num5 = 0;
          break;
        }
      }
      ++num9;
    }
    if( num9 >= DIM || num10 >= DIM )
      num5 = 0;
    num6 += num5;
    num5 = 0;
    num9 = num2 - 1;
    for( num10 = num1 - 1; num9 >= 0 && num10 >= 0; --num10 )
    {
      if( grid[num10 * DIM + num9] == num4 )
        ++num5;
      else
      {
        if( grid[num10 * DIM + num9] == num3 )
          break;
        if( grid[num10 * DIM + num9] == 0 )
        {
          num5 = 0;
          break;
        }
      }
      --num9;
    }
    if( num9 <= -1 || num10 <= -1 )
      num5 = 0;
    num6 += num5;
    num5 = 0;
    num9 = num2 - 1;
    for( num10 = num1 + 1; num9 < DIM && num10 < DIM; ++num10 )
    {
      if( grid[num10 * DIM + num9] == num4 )
        ++num5;
      else
      {
        if( grid[num10 * DIM + num9] == num3 )
          break;
        if( grid[num10 * DIM + num9] == 0 )
        {
          num5 = 0;
          break;
        }
      }
      --num9;
    }
    if( num9 <= -1 || num10 >= DIM )
      num5 = 0;
    num6 += num5;
    return num6;
  }

  public synchronized void change(int num1, int num2, int num3, int num4, int num5)
  {
    int num6 = 0;
    int num8 = num2 + 1;
    int num7;
    int num9;
    int num10;
    int num11;
    int num12;
    int num13;
    int num14;
    int num15;
    int num16;
    int num17;
    int num18;
    int num19;

    while( num8 < DIM )
    {
      num7 = num1 * DIM + num8;
      if( grid[num7] != num4 )
      {
        if( grid[num7] == num3 )
          num6 = 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -