我需要做一个五子棋,请问怎样在jb里画图? 用button 數組化棋盤吧!棋子在上畫圈!applacation he applet 無所謂了都一樣! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用button 數組化棋盤吧!棋子在上畫圈!applacation he applet 無所謂了都一樣! 使用控件或者API都只是实现,关键要看算法。 我最近也准备写一个类似的Applet,不过现在还没有开始,还在做一个画图的Java程序,多多联系. [email protected] http://j2me.motorola.com.cn/上有一个五子棋的程序演示。 代码如下,反编译过来的:)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); }} To sharetop(天生不笨):Thank u,可这个似乎是手机上的阿:( 我的五子棋是进学校软件中心的考核题目,要求用java写,界面要漂亮,但只要求人人对弈,支持鼠标,有音效。我前天买了jbuilder装上,做了一个helloworld,现在最大的问题是怎样显示图片,在vc里可以用一些api完成,那我在java里怎么做呢?似乎是不能调用api的。还有,jb做界面好麻烦阿:( To CanFly(我会飞):棋盘和棋子都要用专门的图片(很漂亮的) 非也,只是界面模拟了手机而已。手机的程序不能从Applet中extends的,这里用的类都是jsdk2里的东西。 如果要求是用 JAVA 写,我看你还是考虑使用 JDK1.3 吧,不要用 JB, 用 JCreator 舒服多了,简单易用。画图其实简单,你找个 JDK1.3 的文档,查一个 Java2D 的 API 就解决了。无非就是用 Graphics 画嘛。 ck4我从网上down的jbuilder怎么要通过internet注册呀!你用的是这一个吗Serial number:xa52-?npkv-gcqzw key:m69-tet你能告诉我一个注册码吗 To san_zi(秋风扫落业):和你一样:) To iamfancy(边城狂人):Thank u,I`ll try it!JB里自带了jdk1.3,我还需要别的工具吗? 我编译的时候怎么提示CXY不能解析呀? 我也是,那个CXY类还有CXiaZi类在哪呀? To sharetop(天生不笨):我去了摩托罗拉,没有五子棋,只有一个炸弹人:(http://www.chinajavaworld.com/有一个围棋很不错,可惜不给源代码,也没法下载 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反编译一下即可学习它了。祝好运。 问一个反射的问题 如何获取这个比较特殊的网页内容 JAVA怎样检测硬盘所有分区的剩余空间大小? 再问几个问题 用GZIPInputStream读取URL后,如何再直接读出来? MessageDigest和DigestInputStream中digest()方法的疑惑 Sun One Studio 4 有人用过吗? 一个关于在Graphics中setColor的问题,急啊!!! 分类统计,不同用户对应的IP,列出每个用户对应的每个IP的值和出现次数 关于TreeSet的排序问题 关于数据库的问题!我搞了几天拉!天啊!我不想学java拉!! 20天Java学习曲线高手请指点
applacation he applet 無所謂了都一樣!
[email protected]
http://j2me.motorola.com.cn/上有一个五子棋的程序演示。
代码如下,反编译过来的:)
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);
}
}
Thank u,可这个似乎是手机上的阿:(
还有,jb做界面好麻烦阿:(
棋盘和棋子都要用专门的图片(很漂亮的)
非也,只是界面模拟了手机而已。手机的程序不能从Applet中extends的,这里用的类都是jsdk2里的东西。
画图其实简单,你找个 JDK1.3 的文档,查一个 Java2D 的 API 就解决了。无非就是用 Graphics 画嘛。
我从网上down的jbuilder怎么要通过internet注册呀!
你用的是这一个吗Serial number:xa52-?npkv-gcqzw key:m69-tet
你能告诉我一个注册码吗
和你一样:)
Thank u,I`ll try it!
JB里自带了jdk1.3,我还需要别的工具吗?
我去了摩托罗拉,没有五子棋,只有一个炸弹人:(
http://www.chinajavaworld.com/有一个围棋很不错,可惜不给源代码,也没法下载
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反编译一下即可学习它了。祝好运。