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

📄 othello.jad

📁 手机黑白棋
💻 JAD
📖 第 1 页 / 共 2 页
字号:
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov  Date: 2003-6-3 11:54:16
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   Othello.java

import java.applet.Applet;
import java.awt.*;
import java.io.PrintStream;

public class Othello extends Applet
    implements Runnable
{

    synchronized void newGame()
    {
        for(int i = 0; i < DIM; i++)
        {
            for(int j = 0; j < DIM; j++)
                grid[i * DIM + j] = 0;

        }

        int k = DIM / 2;
        grid[(k - 1) * DIM + (k - 1)] = 2;
        grid[(k - 1) * DIM + k] = 3;
        grid[k * DIM + (k - 1)] = 3;
        grid[k * DIM + k] = 2;
        offScrGraphics.setColor(Color.white);
        offScrGraphics.fillRect(0, 0, boardSize, boardSize);
        whiteScore = blackScore = 0;
        illegalMove = blackNotMoving = animating = false;
        boardSize = -1;
        repaint();
        if(!whiteMoveFirst)
        {
            blackMove();
            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("New Game");
            setLayout(new FlowLayout(0));
            add(button);
            choice = new Choice();
            choice.addItem("6");
            choice.addItem("8");
            choice.addItem("10");
            choice.addItem("12");
            choice.addItem("14");
            choice.addItem("16");
            choice.addItem("20");
            add(choice);
            choice.select("10");
        }
        if(moveFirst == null)
        {
            moveFirst = new Choice();
            moveFirst.addItem("Player Move First");
            moveFirst.addItem("Computer Move First");
            add(moveFirst);
            moveFirst.select(0);
            whiteMoveFirst = true;
        }
        newGame();
    }

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

    }

    public boolean action(Event event, Object obj)
    {
        if(event.target == button)
        {
            newGame();
            return true;
        }
        if(event.target == choice)
        {
            Integer integer = new Integer((String)obj);
            DIM = integer.intValue();
            newGame();
            return true;
        }
        if(event.target == moveFirst)
        {
            if((String)obj == "Computer Move First")
                whiteMoveFirst = false;
            else
                whiteMoveFirst = true;
            return true;
        } else
        {
            return super.action(event, obj);
        }
    }

    public void start()
    {
        aThread = new Thread(this);
        aThread.start();
        imageTracker.statusID(0, true);
        imageTracker.statusID(1, true);
    }

    public void run()
    {
        do
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }
        while(true);
    }

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

    public void destroy()
    {
    }

    public synchronized void blackMove()
    {
        int i = -1;
        byte byte0 = -1;
        int k = -1;
        int l = -1;
        for(int i1 = 0; i1 < DIM; i1++)
        {
            for(int j1 = 0; j1 < DIM; j1++)
                if(grid[i1 * DIM + j1] == 0)
                {
                    int j = howGood(i1, j1, 3, 2);
                    if(i < j && j > 0)
                    {
                        i = j;
                        k = i1;
                        l = j1;
                    }
                }

        }

        blackNotMoving = false;
        if(i > 0)
        {
            grid[k * DIM + l] = 3;
            turnPlys(k, l, 3, 2, 4);
            return;
        } else
        {
            blackNotMoving = true;
            return;
        }
    }

    public synchronized int howGood(int i, int j, int k, int l)
    {
        int j1 = 0;
        int i1 = 0;
        int l1;
        for(l1 = j + 1; l1 < DIM; l1++)
        {
            if(grid[i * DIM + l1] == l)
            {
                i1++;
                continue;
            }
            if(grid[i * DIM + l1] == k)
                break;
            if(grid[i * DIM + l1] != 0)
                continue;
            i1 = 0;
            break;
        }

        if(l1 >= DIM)
            i1 = 0;
        j1 += i1;
        i1 = 0;
        for(l1 = j - 1; l1 >= 0; l1--)
        {
            if(grid[i * DIM + l1] == l)
            {
                i1++;
                continue;
            }
            if(grid[i * DIM + l1] == k)
                break;
            if(grid[i * DIM + l1] != 0)
                continue;
            i1 = 0;
            break;
        }

        if(l1 <= -1)
            i1 = 0;
        j1 += i1;
        i1 = 0;
        int k1;
        for(k1 = i + 1; k1 < DIM; k1++)
        {
            if(grid[k1 * DIM + j] == l)
            {
                i1++;
                continue;
            }
            if(grid[k1 * DIM + j] == k)
                break;
            if(grid[k1 * DIM + j] != 0)
                continue;
            i1 = 0;
            break;
        }

        if(k1 >= DIM)
            i1 = 0;
        j1 += i1;
        i1 = 0;
        for(k1 = i - 1; k1 >= 0; k1--)
        {
            if(grid[k1 * DIM + j] == l)
                i1++;
            if(grid[k1 * DIM + j] == k)
                break;
            if(grid[k1 * DIM + j] != 0)
                continue;
            i1 = 0;
            break;
        }

        if(k1 <= -1)
            i1 = 0;
        j1 += i1;
        i1 = 0;
        int i2 = j + 1;
        int j2;
        for(j2 = i - 1; i2 >= 0 && j2 >= 0; j2--)
        {
            if(grid[j2 * DIM + i2] == l)
                i1++;
            if(grid[j2 * DIM + i2] == k)
                break;
            if(grid[j2 * DIM + i2] == 0)
            {
                i1 = 0;
                break;
            }
            i2++;
        }

        if(i2 >= DIM || j2 <= -1)
            i1 = 0;
        j1 += i1;
        i1 = 0;
        i2 = j + 1;
        for(j2 = i + 1; i2 < DIM && j2 < DIM; j2++)
        {
            if(grid[j2 * DIM + i2] == l)
            {
                i1++;
            } else
            {
                if(grid[j2 * DIM + i2] == k)
                    break;
                if(grid[j2 * DIM + i2] == 0)
                {
                    i1 = 0;
                    break;
                }
            }
            i2++;
        }

        if(i2 >= DIM || j2 >= DIM)
            i1 = 0;
        j1 += i1;
        i1 = 0;
        i2 = j - 1;
        for(j2 = i - 1; i2 >= 0 && j2 >= 0; j2--)
        {
            if(grid[j2 * DIM + i2] == l)
            {
                i1++;
            } else
            {
                if(grid[j2 * DIM + i2] == k)
                    break;
                if(grid[j2 * DIM + i2] == 0)
                {
                    i1 = 0;
                    break;
                }
            }
            i2--;
        }

        if(i2 <= -1 || j2 <= -1)
            i1 = 0;
        j1 += i1;
        i1 = 0;
        i2 = j - 1;
        for(j2 = i + 1; i2 < DIM && j2 < DIM; j2++)
        {
            if(grid[j2 * DIM + i2] == l)
            {
                i1++;
            } else
            {
                if(grid[j2 * DIM + i2] == k)
                    break;
                if(grid[j2 * DIM + i2] == 0)
                {
                    i1 = 0;
                    break;
                }
            }
            i2--;
        }

        if(i2 <= -1 || j2 >= DIM)
            i1 = 0;
        j1 += i1;
        return j1;
    }

    public synchronized void turnPlys(int i, int j, int k, int l, int i1)
    {
        boolean flag = false;
        for(int j5 = j + 1; j5 < DIM; j5++)
        {
            int j1 = i * DIM + j5;
            if(grid[j1] == l)
                continue;
            if(grid[j1] == k)
                flag = true;
            break;
        }

        if(flag)
        {
            for(int k5 = j + 1; k5 < DIM; k5++)
            {
                int k1 = i * DIM + k5;
                if(grid[k1] == l)
                {
                    grid[k1] = i1;
                    continue;

⌨️ 快捷键说明

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