战术游戏 : Applet程序 « 开发相关 « Java 教程

En
Java 教程
1. 语言基础
2. 数据类型
3. 操作符
4. 流程控制
5. 类定义
6. 开发相关
7. 反射
8. 正则表达式
9. 集合
10. 线
11. 文件
12. 泛型
13. 本土化
14. Swing
15. Swing事件
16. 二维图形
17. SWT
18. SWT 二维图形
19. 网络
20. 数据库
21. Hibernate
22. JPA
23. JSP
24. JSTL
25. Servlet
26. Web服务SOA
27. EJB3
28. Spring
29. PDF
30. 电子邮件
31. 基于J2ME
32. J2EE应用
33. XML
34. 设计模式
35. 日志
36. 安全
37. Apache工具
38. 蚂蚁编译
39. JUnit单元测试
Java
Java 教程 » 开发相关 » Applet程序 
6. 28. 9. 战术游戏
File: test.htm
<title>TicTacToe</title>
<hr>
<applet code=TicTacToe.class width=120 height=120>
</applet>



File: TicTacToe.java

/*
 * @(#)TicTacToe.java 1.2 95/10/13 
 *
 * Copyright (c) 1994-1996 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and
 * without fee is hereby granted. 
 * Please refer to the file http://java.sun.com/copy_trademarks.html
 * for further important copyright and trademark information and to
 * http://java.sun.com/licensing.html for further important licensing
 * information for the Java (tm) Technology.
 
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 
 * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
 * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
 * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
 * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
 * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
 * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
 * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES").  SUN
 * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
 * HIGH RISK ACTIVITIES.
 */

import java.awt.*;
import java.awt.image.*;
import java.net.*;
import java.applet.*;

/**
 * A TicTacToe applet. A very simple, and mostly brain-dead
 * implementation of your favorite game! 
 *
 * In this game a position is represented by a white and black
 * bitmask. A bit is set if a position is ocupied. There are
 * 9 squares so there are 1<<9 possible positions for each
 * side. An array of 1<<9 booleans is created, it marks
 * all the winning positions.
 *
 @version   1.2, 13 Oct 1995
 @author Arthur van Hoff
 * @modified 96/04/23 Jim Hagen : winning sounds
 */
public
class TicTacToe extends Applet {
    /**
     * White's current position. The computer is white.
     */
    int white;

    /**
     * Black's current position. The user is black.
     */
    int black;

    /**
     * The squares in order of importance...
     */
    final static int moves[] {402681357};

    /**
     * The winning positions.
     */
    static boolean won[] new boolean[<< 9];
    static final int DONE = (<< 91;
    static final int OK = 0;
    static final int WIN = 1;
    static final int LOSE = 2;
    static final int STALEMATE = 3;

    /**
     * Mark all positions with these bits set as winning.
     */
    static void isWon(int pos) {
  for (int i = ; i < DONE ; i++) {
      if ((i & pos== pos) {
    won[itrue;
      }
  }
    }

    /**
     * Initialize all winning positions.
     */
    static {
  isWon((<< 0(<< 1(<< 2));
  isWon((<< 3(<< 4(<< 5));
  isWon((<< 6(<< 7(<< 8));
  isWon((<< 0(<< 3(<< 6));
  isWon((<< 1(<< 4(<< 7));
  isWon((<< 2(<< 5(<< 8));
  isWon((<< 0(<< 4(<< 8));
  isWon((<< 2(<< 4(<< 6));
    }

    /**
     * Compute the best move for white.
     @return the square to take
     */
    int bestMove(int white, int black) {
  int bestmove = -1;
  
      loop:
  for (int i = ; i < ; i++) {
      int mw = moves[i];
      if (((white & (<< mw)) == 0&& ((black & (<< mw)) == 0)) {
    int pw = white | (<< mw);
    if (won[pw]) {
        // white wins, take it!
        return mw;
    }
    for (int mb = ; mb < ; mb++) {
        if (((pw & (<< mb)) == 0&& ((black & (<< mb)) == 0)) {
      int pb = black | (<< mb);
      if (won[pb]) {
          // black wins, take another
          continue loop;
      }
        }
    }
    // Neither white nor black can win in one move, this will do.
    if (bestmove == -1) {
        bestmove = mw;
    }
      }
  }
  if (bestmove != -1) {
      return bestmove;
  }

  // No move is totally satisfactory, try the first one that is open
  for (int i = ; i < ; i++) {
      int mw = moves[i];
      if (((white & (<< mw)) == 0&& ((black & (<< mw)) == 0)) {
    return mw;
      }
  }

  // No more moves
  return -1;
    }

    /**
     * User move.
     @return true if legal
     */
    boolean yourMove(int m) {
  if ((m < 0|| (m > 8)) {
      return false;
  }
  if (((black | white(<< m)) != 0) {
      return false;
  }
  black |= << m;
  return true;
    }

    /**
     * Computer move.
     @return true if legal
     */
    boolean myMove() {
  if ((black | white== DONE) {
      return false;
  }
  int best = bestMove(white, black);
  white |= << best;
  return true;
    }

    /**
     * Figure what the status of the game is.
     */
    int status() {
  if (won[white]) {
      return WIN;
  }
  if (won[black]) {
      return LOSE;
  }
  if ((black | white== DONE) {
      return STALEMATE;
  }
  return OK;
    }

    /**
     * Who goes first in the next game?
     */
    boolean first = true;

    /**
     * The image for white.
     */
    Image notImage;

    /**
     * The image for black.
     */
    Image crossImage;

    /**
     * Initialize the applet. Resize and load images.
     */
    public void init() {
  notImage = getImage(getClass().getResource("images/not.gif"));
  crossImage = getImage(getClass().getResource("images/cross.gif"));
    }

    /**
     * Paint it.
     */
    public void paint(Graphics g) {
  Dimension d = getSize();
  g.setColor(Color.black);
  int xoff = d.width / 3;
  int yoff = d.height / 3;
  g.drawLine(xoff, 0, xoff, d.height);
  g.drawLine(2*xoff, 02*xoff, d.height);
  g.drawLine(0, yoff, d.width, yoff);
  g.drawLine(02*yoff, d.width, 2*yoff);

  int i = 0;
  for (int r = ; r < ; r++) {
      for (int c = ; c < ; c++, i++) {
    if ((white & (<< i)) != 0) {
        g.drawImage(notImage, c*xoff + 1, r*yoff + 1this);
    else if ((black & (<< i)) != 0) {
        g.drawImage(crossImage, c*xoff + 1, r*yoff + 1this);
    }
      }
  }
    }

    /**
     * The user has clicked in the applet. Figure out where
     * and see if a legal move is possible. If it is a legal
     * move, respond with a legal move (if possible).
     */
    public boolean mouseUp(Event evt, int x, int y) {
  switch (status()) {
    case WIN:
    case LOSE:
    case STALEMATE:
      play(getClass().getResource("audio/return.au"));
      white = black = 0;
      if (first) {
    white |= << (int)(Math.random() 9);
      }
      first = !first;
      repaint();
      return true;
  }

  // Figure out the row/colum
  Dimension d = getSize();
  int c = (x * 3/ d.width;
  int r = (y * 3/ d.height;
  if (yourMove(c + r * 3)) {
      repaint();

      switch (status()) {
        case WIN:
    play(getClass().getResource("audio/yahoo1.au"));
    break;
        case LOSE:
    play(getClass().getResource("audio/yahoo2.au"));
    break;
        case STALEMATE:
    break;
        default:
    if (myMove()) {
        repaint();
        switch (status()) {
          case WIN:
      play(getClass().getResource("audio/yahoo1.au"));
      break;
          case LOSE:
      play(getClass().getResource("audio/yahoo2.au"));
      break;
          case STALEMATE:
      break;
          default:
      play(getClass().getResource("audio/ding.au"));
        }
    else {
        play(getClass().getResource("audio/beep.au"));
    }
      }
  else {
      play(getClass().getResource("audio/beep.au"));
  }
  return true;
    }

    public String getAppletInfo() {
  return "TicTacToe by Arthur van Hoff";
    }
}
6. 28. Applet程序
6. 28. 1. Applet程序
6. 28. 2. 一个真正的Applet程序
6. 28. 3. 添加JButton到JApplet
6. 28. 4. 访问applet的参数
6. 28. 5. 一个Swing为基础的程序骨架
6. 28. 6. Swing程序
6. 28. 7. 一个简单的Swing为基础的程序
6. 28. 8. 迷你Appletviewer
6. 28. 9. 战术游戏
6. 28. 10. WeatherWizard JApplet
6. 28. 11. 改变一个applet的背景颜色
6. 28. 12. 读取一个applet参数
6. 28. 13. 一个applet到JavaScript的方法调用
6. 28. 14. 参数传递到Java小程序
6. 28. 15. 在浏览器显示信息状态栏
6. 28. 16. Applet访问系统属性
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.