用button 數組化棋盤吧!棋子在上畫圈!
applacation  he applet 無所謂了都一樣!

解决方案 »

  1.   

    用button 數組化棋盤吧!棋子在上畫圈!
    applacation  he applet 無所謂了都一樣!
      

  2.   

    使用控件或者API都只是实现,关键要看算法。
      

  3.   

    我最近也准备写一个类似的Applet,不过现在还没有开始,还在做一个画图的Java程序,多多联系.
     [email protected]
      

  4.   


    http://j2me.motorola.com.cn/上有一个五子棋的程序演示。
      

  5.   


    代码如下,反编译过来的:)
    import java.applet.Applet;
    import java.applet.AudioClip;
    import java.awt.*;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Random;public class wzq extends Applet
        implements Runnable
    {    int GRIDWIDTH;
        int GRIDSUM;
        byte QiPan[][];
        int oAdd[][];
        Thread LoopThread;
        int scHong;
        int scHei;
        byte who;
        byte winner;
        boolean playing;
        boolean playerdo;
        CXY xy;
        CXiaZi xiazi;
        String Status;
        Random rd;
        int passes;
        int steps;
        int LoseTimes;
        CXY recLU;
        CXY recRD;
        int PosAdd[][];
        int level;
        int EnterTimes;
        int CalcTimes;
        Image image_you;
        Image image_phone;
        AudioClip ac_you;
        AudioClip ac_phone;
        boolean haveWin;    public wzq()
        {
            haveWin = false;
            GRIDWIDTH = 14;
            GRIDSUM = 15;
            QiPan = new byte[GRIDSUM][GRIDSUM];
            oAdd = new int[8][2];
            playing = false;
            playerdo = true;
            xy = new CXY();
            xiazi = new CXiaZi();
            rd = new Random();
            recLU = new CXY();
            recRD = new CXY();
            PosAdd = new int[4][4];
        }    private int CPUDo(CXY cxy, byte byte0)
        {
            int ai[] = new int[2];
            int ai1[] = new int[2];
            int ai2[] = new int[2];
            boolean flag = false;
            EnterTimes++;
            ai2[0] = 0;
            for(int i = recLU.x; i <= recRD.x; i++)
            {
                for(int j = recLU.y; j <= recRD.y; j++)
                {
                    int l = 0;
                    if(QiPan[i][j] == 0)
                    {
                        DoAStep(i, j, byte0);
                        l = CalcCPU(i, j, byte0);
                    }
                    if(l > 0)
                    {
                        int i1 = 0;
                        byte byte1;
                        if(byte0 == 1)
                            byte1 = 2;
                        else
                            byte1 = 1;
                        if(EnterTimes <= level && steps < ((GRIDSUM * GRIDSUM) / 100) * 80)
                            i1 = CPUDo(cxy, byte1);
                        l += i1;
                        if(l + Math.abs(rd.nextInt()) % 5 > ai2[0] || !flag)
                        {
                            ai[0] = i;
                            ai1[0] = j;
                            ai2[0] = l;
                            flag = true;
                        }
                        QiPan[i][j] = 0;
                    }
                }        }        if(EnterTimes <= 1)
            {
                cxy.x = ai[0];
                cxy.y = ai1[0];
                int k = 0;
                do
                {
                    try
                    {
                        Thread.sleep(300L);
                    }
                    catch(InterruptedException _ex) { }
                    QiPan[cxy.x][cxy.y] = byte0;
                    repaint();
                    try
                    {
                        Thread.sleep(300L);
                    }
                    catch(InterruptedException _ex) { }
                    QiPan[cxy.x][cxy.y] = 0;
                    repaint();
                } while(++k < 2);
            }
            EnterTimes--;
            return ai2[0];
        }    private void CPUInit()
        {
            PosAdd[0][0] = 8;
            PosAdd[0][1] = -2;
            PosAdd[1][0] = -2;
            PosAdd[0][2] = 3;
            PosAdd[2][0] = 3;
            PosAdd[0][3] = 2;
            PosAdd[3][0] = 2;
            PosAdd[1][1] = -7;
            PosAdd[1][2] = -1;
            PosAdd[2][1] = -1;
            PosAdd[1][3] = -1;
            PosAdd[3][1] = -1;
            PosAdd[2][2] = 4;
            PosAdd[3][3] = 4;
            PosAdd[2][3] = 4;
            PosAdd[3][2] = 4;
        }    private int CalcCPU(int i, int j, byte byte0)
        {
            CXY cxy = new CXY();
            String s = "";
            String s1 = "";
            String s2 = "";
            byte byte1 = 0;
            CalcTimes++;
            if(byte0 == 1)
                byte1 = 2;
            else
            if(byte0 == 2)
                byte1 = 1;
            int k = 0;
            int l = 0;
            do
            {
                int i1 = 0;
                String s3 = "";
                String s4 = "";
                String s5 = "";
                int j1 = 0;
                do
                {
                    int k1 = 0;
                    cxy.x = i;
                    for(cxy.y = j; MoveAGrid(cxy, l + 4 * j1) && k1 < 6 && QiPan[cxy.x][cxy.y] != byte1; k1++)
                        if(QiPan[cxy.x][cxy.y] == byte0)
                        {
                            if(j1 == 0)
                                s4 = s4 + "1";
                            else
                                s5 = "1" + s5;
                            i1++;
                        } else
                        if(j1 == 0)
                            s4 = s4 + "0";
                        else
                            s5 = "0" + s5;                if(j1 == 0)
                        s4 = s4 + "2";
                    else
                        s5 = "2" + s5;
                } while(++j1 < 2);
                i1++;
                s3 = s5 + "1" + s4;
                if(s3.indexOf("11111") != -1)
                    i1 += 1000;
                else
                if(s3.indexOf("011110") != -1)
                    i1 += 500;
                else
                if(s3.indexOf("211110") != -1 || s3.indexOf("011112") != -1 || s3.indexOf("01110") != -1 || s3.indexOf("01110") != -1 || s3.indexOf("011010") != -1 || s3.indexOf("010110") != -1 || s3.indexOf("11101") != -1 || s3.indexOf("10111") != -1 || s3.indexOf("11011") != -1)
                    i1 += 100;
                else
                if(s3.indexOf("21110") != -1 || s3.indexOf("01112") != -1 || s3.indexOf("0110") != -1 || s3.indexOf("211010") != -1 || s3.indexOf("210110") != -1)
                    i1 += 20;
                if(l == 1 || l == 3)
                    i1 += (i1 * 20) / 100;
                k += i1;
            } while(++l < 4);
            if(CalcTimes <= 1)
                k += CalcCPU(i, j, byte1);
            else
            if(k > 10)
                k -= 10;
            CalcTimes--;
            return k;
        }    private int CalcZi(int i, int j, byte byte0)
        {
            CXY cxy = new CXY();
            int k = 0;
            int l = 0;
            do
            {
                int i1 = 0;
                int j1 = 0;
                do
                {
                    cxy.x = i;
                    cxy.y = j;
                    if(MoveAGrid(cxy, l + 4 * j1) && QiPan[cxy.x][cxy.y] == byte0)
                        do
                        {
                            if(QiPan[cxy.x][cxy.y] == 0 || QiPan[cxy.x][cxy.y] != byte0)
                                break;
                            i1++;
                        } while(MoveAGrid(cxy, l + 4 * j1));
                } while(++j1 < 2);
                if(i1 > k)
                    k = i1;
            } while(++l < 4);
            return ++k;
        }    private boolean CanDo()
        {
            return steps < ((GRIDSUM * GRIDSUM) / 100) * 80;
        }    public void ClearPan()
        {
            for(int i = 0; i < GRIDSUM; i++)
            {
                for(int j = 0; j < GRIDSUM; j++)
                    QiPan[i][j] = 0;        }        scHong = 0;
            scHei = 0;
            steps = 0;
            recLU.x = 8;
            recRD.x = 9;
            recLU.y = 8;
            recRD.y = 9;
            haveWin = false;
        }    private int DoAStep(int i, int j, byte byte0)
        {
            if(QiPan[i][j] != 0 || byte0 == 0 || byte0 > 2)
            {
                return 0;
            } else
            {
                QiPan[i][j] = byte0;
                return 1;
            }
        }    private void FreshRec(int i, int j)
        {
            if(i - recLU.x < 2)
            {
                recLU.x = i - 2;
                if(recLU.x < 0)
                    recLU.x = 0;
            }
            if(recRD.x - i < 2)
            {
                recRD.x = i + 2;
                if(recRD.x >= GRIDSUM)
                    recRD.x = GRIDSUM - 1;
            }
            if(j - recLU.y < 2)
            {
                recLU.y = j - 2;
                if(recLU.y < 0)
                    recLU.y = 0;
            }
            if(recRD.y - j < 2)
            {
                recRD.y = j + 2;
                if(recRD.y >= GRIDSUM)
                    recRD.y = GRIDSUM - 1;
            }
        }    private boolean MoveAGrid(CXY cxy, int i)
        {
            boolean flag = false;
            i %= 8;
            int j = cxy.x + oAdd[i][0];
            int k = cxy.y + oAdd[i][1];
            if(j >= 0 && j < GRIDSUM && k >= 0 && k < GRIDSUM)
            {
                cxy.x = j;
                cxy.y = k;
                flag = true;
            }
            return flag;
        }    public void drawQi(Graphics g, int i, int j, int k)
        {
            switch(k)
            {
            case 0: // '\0'
                g.clearRect(i * GRIDWIDTH + 1, j * GRIDWIDTH + 1, GRIDWIDTH - 1, GRIDWIDTH - 1);
                return;        case 1: // '\001'
                g.setColor(Color.black);
                g.fillArc(i * GRIDWIDTH - 6, j * GRIDWIDTH - 6, GRIDWIDTH - 2, GRIDWIDTH - 2, 0, 360);
                return;        case 2: // '\002'
                g.setColor(Color.white);
                break;
            }
            g.fillArc(i * GRIDWIDTH - 6, j * GRIDWIDTH - 6, GRIDWIDTH - 2, GRIDWIDTH - 2, 0, 360);
            g.setColor(Color.black);
            g.drawArc(i * GRIDWIDTH - 6, j * GRIDWIDTH - 6, GRIDWIDTH - 2, GRIDWIDTH - 2, 0, 360);
        }    public boolean handleEvent(Event event)
        {
            if(event.id != 501 || event.target != this)
            {
                return super.handleEvent(event);
            } else
            {
                mouseDOWNThis(event);
                return true;
            }
        }    public void init()
        {
            super.init();
            LoopThread = null;
            oAdd[0][0] = 0;
            oAdd[0][1] = -1;
            oAdd[1][0] = 1;
            oAdd[1][1] = -1;
            oAdd[2][0] = 1;
            oAdd[2][1] = 0;
            oAdd[3][0] = 1;
            oAdd[3][1] = 1;
            oAdd[4][0] = 0;
            oAdd[4][1] = 1;
            oAdd[5][0] = -1;
            oAdd[5][1] = 1;
            oAdd[6][0] = -1;
            oAdd[6][1] = 0;
            oAdd[7][0] = -1;
            oAdd[7][1] = -1;
            CPUInit();
            setLayout(null);
            resize(197, 200);
            try
            {
                image_you = getImage(new URL("http://203.212.5.161/6288/simulator/game/you-win.gif"));
                image_phone = getImage(new URL("http://203.212.5.161/6288/simulator/game/phone-win.gif"));
            }
            catch(MalformedURLException _ex) { }
            ac_you = getAudioClip(getCodeBase(), "Ok01.au");
            ac_phone = getAudioClip(getCodeBase(), "Ok04.au");
        }    public void mouseDOWNThis(Event event)
        {
            if(playerdo)
                xiazi.put(event.x, event.y);
        }    public void paint(Graphics g)
        {
            super.paint(g);
            setBackground(new Color(150, 185, 96));
            g.clearRect(0, 0, GRIDSUM * GRIDWIDTH + 5, GRIDSUM * GRIDWIDTH + 5);
            g.translate(5, 5);
            for(int i = 0; i < GRIDSUM; i++)
            {
                g.drawLine(0, i * GRIDWIDTH, (GRIDSUM - 1) * GRIDWIDTH, i * GRIDWIDTH);
                g.drawLine(i * GRIDWIDTH, 0, i * GRIDWIDTH, (GRIDSUM - 1) * GRIDWIDTH);
            }        for(int j = 0; j < GRIDSUM; j++)
            {
                for(int k = 0; k < GRIDSUM; k++)
                    drawQi(g, j, k, QiPan[j][k]);        }        int l = xy.x;
            int i1 = xy.y;
            if(l > 0 && i1 > 0 && who != 1)
            {
                g.setColor(Color.black);
                g.drawLine(l * GRIDWIDTH - 3, i1 * GRIDWIDTH - 3, l * GRIDWIDTH + 3, i1 * GRIDWIDTH + 3);
                g.drawLine(l * GRIDWIDTH - 3, i1 * GRIDWIDTH + 3, l * GRIDWIDTH + 3, i1 * GRIDWIDTH - 3);
            }
            if(scHong >= 5)
            {
                g.drawImage(image_you, 0, 0, this);
                if(!haveWin)
                {
                    ac_you.play();
                    haveWin = true;
                }
            } else
            if(scHei >= 5)
            {
                g.drawImage(image_phone, 0, 40, this);
                if(!haveWin)
                {
                    ac_phone.play();
                    haveWin = true;
                }
            }
        }    int random(int i)
        {
            return (int)Math.floor(Math.random() * (double)i);
        }    public void run()
        {
            for(; Thread.currentThread() == LoopThread; xiazi.get(xy))
            {
                ClearPan();
                repaint();
                playing = true;
                who = (byte)(Math.abs(rd.nextInt()) % 2 + 1);
                for(passes = 0; playing && passes < 2;)
                {
                    if(steps < ((GRIDSUM * GRIDSUM) / 100) * 80)
                    {
                        passes = 0;
                        if(who == 1)
                        {
                            if(scHong == 0 && scHei == 0)
                            {
                                xy.x = 7;
                                xy.y = 7;
                            } else
                            {
                                xiazi.get(xy);
                            }
                            for(; DoAStep(xy.x, xy.y, who) == 0; xiazi.get(xy));
                            scHong = CalcZi(xy.x, xy.y, who);
                            FreshRec(xy.x, xy.y);
                            steps++;
                        } else
                        {
                            if(scHong == 0 && scHei == 0)
                            {
                                xy.x = 7;
                                xy.y = 7;
                            } else
                            {
                                CPUDo(xy, who);
                            }
                            for(; DoAStep(xy.x, xy.y, who) == 0; CPUDo(xy, who));
                            scHei = CalcZi(xy.x, xy.y, who);
                            FreshRec(xy.x, xy.y);
                            steps++;
                        }
                    } else
                    {
                        passes = 2;
                    }
                    if(scHong >= 5 || scHei >= 5)
                        playing = false;
                    repaint();
                    who = (byte)((1 - (who - 1)) + 1);
                    Thread.yield();
                }            if(scHong >= 5)
                {
                    Status = "red win";
                    LoseTimes++;
                } else
                if(scHei >= 5)
                {
                    Status = "black win";
                    if(LoseTimes > 0)
                        LoseTimes--;
                } else
                {
                    Status = "notknow!";
                }
                repaint();
            }    }    public void start()
        {
            if(LoopThread == null)
                LoopThread = new Thread(this, "wbqloop");
            LoopThread.setPriority(1);
            LoopThread.start();
        }    public void stop()
        {
            LoopThread = null;
        }    public void update(Graphics g)
        {
            paint(g);
        }
    }
      

  6.   

    To sharetop(天生不笨):
    Thank u,可这个似乎是手机上的阿:(
      

  7.   

    我的五子棋是进学校软件中心的考核题目,要求用java写,界面要漂亮,但只要求人人对弈,支持鼠标,有音效。我前天买了jbuilder装上,做了一个helloworld,现在最大的问题是怎样显示图片,在vc里可以用一些api完成,那我在java里怎么做呢?似乎是不能调用api的。
    还有,jb做界面好麻烦阿:(
      

  8.   

    To CanFly(我会飞):
    棋盘和棋子都要用专门的图片(很漂亮的) 
      

  9.   


    非也,只是界面模拟了手机而已。手机的程序不能从Applet中extends的,这里用的类都是jsdk2里的东西。
      

  10.   

    如果要求是用 JAVA 写,我看你还是考虑使用 JDK1.3 吧,不要用 JB, 用 JCreator 舒服多了,简单易用。
    画图其实简单,你找个 JDK1.3 的文档,查一个 Java2D 的 API 就解决了。无非就是用 Graphics 画嘛。
      

  11.   

    ck4
    我从网上down的jbuilder怎么要通过internet注册呀!
    你用的是这一个吗Serial number:xa52-?npkv-gcqzw key:m69-tet
    你能告诉我一个注册码吗
      

  12.   

    To san_zi(秋风扫落业):
    和你一样:)
      

  13.   

    To iamfancy(边城狂人):
    Thank u,I`ll try it!
    JB里自带了jdk1.3,我还需要别的工具吗?
      

  14.   

    我编译的时候怎么提示CXY不能解析呀?
      

  15.   

    我也是,那个CXY类还有CXiaZi类在哪呀?
      

  16.   

    To sharetop(天生不笨):
    我去了摩托罗拉,没有五子棋,只有一个炸弹人:(
    http://www.chinajavaworld.com/有一个围棋很不错,可惜不给源代码,也没法下载 
      

  17.   


    class CXY
    {    public int x;
        public int y;    public CXY()
        {
            x = 0;
            y = 0;
        }
    }
    class CXiaZi
    {    private CXY xy;
        private boolean ready;
        private int GRIDWIDTH;
        private int GRIDSUM;    public synchronized void get(CXY cxy)
        {
            ready = false;
            notify();
            while(!ready) 
                try
                {
                    wait();
                }
                catch(InterruptedException _ex) { }
            ready = false;
            notify();
            cxy.x = xy.x;
            cxy.y = xy.y;
        }    public synchronized void put(int i, int j)
        {
            if(i < GRIDWIDTH * GRIDSUM && j < GRIDWIDTH * GRIDSUM)
            {
                xy.x = i / GRIDWIDTH;
                xy.y = j / GRIDWIDTH;
                ready = true;
                notify();
            }
        }    public CXiaZi()
        {
            GRIDWIDTH = 14;
            GRIDSUM = 15;
            xy = new CXY();
            ready = false;
        }
    }这是另两个类,我是反编译的,能不能通过我都不知道,可能要修改部分代码吧。不错五子棋没提供源码,不过applet是可以下载class文件的,你再用jad反编译一下即可学习它了。祝好运。