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

📄 sanziqi.java

📁 java编程,java applet下实现的一个小游戏,人机 三子棋游戏,和好的了!
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Sanziqi extends Applet 
{
    int white;
    int black;
    final static int moves[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};
    static boolean won[] = new boolean[512];    //将整数1左移9位变为(1000000000)2=2^9=512
    static final int DONE = 511;          //DONE=511
    static final int OK = 0;
    static final int WIN = 1;
    static final int LOSE = 2;
    static final int STALEMATE = 3;

    static void isWon(int pos) 
    {
	for (int i = 0 ; i < DONE ; i++) 
	   if (i==pos)                         //i与pos进行位与操作
	      won[i] = true;
    }
    static                  //这是什么语法?
    {
	isWon(7);           //  00000111=7
	isWon(56);          //  00111000=2^5+2^4+2^3=56
	isWon(448);         // 111000000=256+128+64=448
	isWon(73);          //  01001001=64+8+1=73
	isWon(146);         //  10010010=128+16+2=146
	isWon(292);         // 100100100=256+32+4=292
	isWon(273);         // 100010001=256+16+1=273
	isWon(84);          //  01010100=64+16+4=84
    }
    int bestMove(int white, int black)
    {
	int bestmove = -1;
      loop:
	for (int i = 0 ; i < 9 ; i++) 
	{
	    int mw = moves[i];         //  moves[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};
	    if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0))    //作啥用啊?
	    {
		int pw = white | (1 << mw);      //作啥用啊?
		if (won[pw])
		    return mw;
		for (int mb = 0 ; mb < 9 ; mb++)    //作啥用啊?
		    if (((pw & (1 << mb)) == 0) && ((black & (1 << mb)) == 0)) 
		    {
			int pb = black | (1 << mb);
			if (won[pb]) 
			    continue loop;              //带标号的continue语句
		    }
		if (bestmove == -1) 
		    bestmove = mw;
	    }
	}
	if (bestmove != -1) 
	    return bestmove;
	for (int i = 0 ; i < 9 ; i++) 
	{
	    int mw = moves[i];
	    if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0))     //作啥用啊?
		return mw;
	}
	return -1;
    }
    boolean yourMove(int m) 
    {
	if ((m < 0) || (m > 8)) 
	    return false;
	if (((black | white) & (1 << m)) != 0) 
	    return false;
	black |= 1 << m;    //作啥用啊?
	return true;
    }
    boolean myMove() 
    {
	if ((black | white) == DONE) 
	    return false;
	int best = bestMove(white, black);
	white |= 1 << best;
	return true;
    }
    int status() 
    {
	if (won[white]) 
	    return WIN;
	if (won[black]) 
	    return LOSE;
	if ((black | white) == DONE) 
	    return STALEMATE;
	return OK;
    }


    boolean first = true;
    Image notImage;
    Image crossImage;
    public void init() 
    {
	notImage = getImage(getCodeBase(), "images/not.gif");           //载入图片
	crossImage = getImage(getCodeBase(), "images/cross.gif");       //载入图片
	addMouseListener(new MouseReleasedHander());
    }
    public void paint(Graphics g) 
    {
	Dimension d = getSize();  //获得当前绘图区大小
	g.setColor(Color.GREEN);  //设置绘图颜色
	int xoff = d.width / 3;
	int yoff = d.height / 3;
	g.drawLine(xoff, 0, xoff, d.height);     //绘制棋盘网格
	g.drawLine(2*xoff, 0, 2*xoff, d.height);
	g.drawLine(0, yoff, d.width, yoff);
	g.drawLine(0, 2*yoff, d.width, 2*yoff);
	int i = 0;
	for (int r = 0 ; r < 3 ; r++) 
	   for (int c = 0 ; c < 3 ; c++, i++) 
	      if ((white & (1 << i)) != 0)
		 g.drawImage(notImage, c*xoff + 1, r*yoff + 1, this);   //在指定坐标绘制棋子
              else if ((black & (1 << i)) != 0) 
		 g.drawImage(crossImage, c*xoff + 1, r*yoff + 1, this);
    }
private class MouseReleasedHander extends MouseAdapter          //扩展MouseAdapter,只需重写必要的函数mouseReleased
 {
    public void mouseReleased(MouseEvent e) 
    {
	int x = e.getX();
	int y = e.getY();
	switch (status()) 
	{
	  case WIN:
	  case LOSE:
	  case STALEMATE:
	    white = black = 0;
	    if (first)
		white |= 1 << (int)(Math.random() * 9);
	    first = !first;
	    repaint();
	    return;
	}
	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:
	      case LOSE:
	      case STALEMATE:
		     break;
	      default:
		if (myMove()) 
		   repaint();
	    }
	} 
    }
 }  //inner class end 
}   //end of public class
 

⌨️ 快捷键说明

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