java applet 教程写象棋的问题

&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
Java Applet 问题汇总
摘要:??浏览器兼容??这里讨论限于IE,Firefox&和Chrome&主流浏览器。之前有写过一篇&Chrome设置使用已安装JRE的方式&汇总一下,就是Firefox和Chrome要能找到java,依赖于在[HKEY_LOCAL_MACHINE/SOFTWARE/MozillaPlugins/]下是否有&@java.com/JavaPlugin这一项配置。安装jre-6u11版本时,并不会自动把@java.com/JavaPlu
??浏览器兼容?? 这里讨论限于 IE, Firefox& 和Chrome& 主流浏览器。 之前有写过一篇 汇总一下,就是 Firefox 和 Chrome 要能找到 java , 依赖于在[HKEY_LOCAL_MACHINE/SOFTWARE/MozillaPlugins/] 下是否有& @java.com/JavaPlugin 这一项配置。 安装jre-6u11 版本时,并不会自动把@java.com/JavaPlugin写入注册表。 安装jre-6u24 版本,就已经可以自动把@java.com/JavaPlugin写入注册表。 所以安装完jre-6u24, IE, Chrome, Firefox 就可以直接使用applet, 而不会跳出让你安装java 插件的提示了。
??Chrome提示, 因过期而遭到阻??止 有两个选项, “更新插件”, “运行一次” 必须点击运行一次才能正常。 如果让chrome 不去检查? 在Chrome 的快捷图标点&属性&--& 在“目标” 一栏末尾加上&& --allow-outdated-plugins 重启Chrome. ??
安全问题,报 java.io??.EOFException 情况描述: 访问一个有 applet 的网址, 弹出一个错误页面, 页面信息如下: The publisher cannot be verified by a trusted source. Code will be treated as unsigned. Java.io.EOFException (以上信息也可能是中文的)。 问题分析: EOFException 异常表示输入过程中意外地到达文件尾或流尾的信号。 不过看上去是安全相关的问题。 打开java 控制面板(在jre 的bin目录下点击 &javacpl.exe&) ,点到”安全“的标签页中, 点一下 &证书& 按钮, 果然,报相同的错误。 因为问题是发生在客户机器上的,所以无法重现问题:以下提供几种解法可以尝试: 1.& 解法一: 认为是无法访问本地资源导致的。 可以修改& java.policy 文件,添加以下内容进行授权
grant{&&&&&&&&&permission&&&java.security.AllP&};
这个文件的位置有两个地方:C:/Documents&& and&& Settings/User Name/.java.policy 或是 /jre6/lib/security/java.policy 2. 解法二: 认为是.keystore 文件被破坏了导致的,解法是删除这个文件。 位置在: C:/Documents and Settings/&username& 这个下面 (找了一下,在本地机器没有找到这个文件) 3. 解法三: 删除java 临时文件目录 .java/deployment/security/下的&trusted.certs& 和 &auth.dat& 这两个文件 临时目录可以通过 Java 控制面板的“常规”标签 ,点“设置”, 就可以看到保存临时文件的位置了。
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
为您提供0门槛上云实践机会
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
Java Applet 问题汇总相关信息,包括
的信息,所有Java Applet 问题汇总相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
Java中国象棋程序源代码.doc 98页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
import java.io.*;
import java.applet.A
import java.applet.AudioC
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
//主框架类
public class ChineseChess
public static void main(String args[])
new ChessMainFrame(&中国象棋&);
class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable
MusicDemo t = new MusicDemo();
JLabel play[] = new JLabel[32];
//重新开始
JButton showO
JButton showS
//当前信息
//保存当前操作
Vector FileV
//规则类对象(使于调用方法)
/*单击棋子**********************************/
/*chessManClick = true 闪烁棋子 并给线程响应*/
/*chessManClick = false 吃棋子 停止闪烁
并给线程响应*/
boolean chessManC
/*控制玩家走棋****************************/
/*chessPlayClick=1 黑棋走棋*/
/*chessPlayClick=2 红棋走棋 默认红棋*/
/*chessPlayClick=3 双方都不能走棋*/
int chessPlayClick=2;
//控制棋子闪烁的线程
//把第一次的单击棋子给线程响应
static int Man,i;
ChessMainFrame(){}
ChessMainFrame(String Title)
//获行客格引用
con = this.getContentPane();
con.setLayout(null);
//实例化规则类
rule = new ChessRule();
= new Vector();
Var = new Vector();
//创建工具栏
jmain = new JToolBar();
text = new JLabel(&
热烈欢迎&);
text.setToolTipText(&提示信息&);
anew = new JButton(& 新 游 戏 & );
anew.setToolTipText(&重新开始新的一局&);
exit = new JButton(& 退
exit.setToolTipText(&退出本程序&);
repent = new JButton(& 悔
repent.setToolTipText(&返回到上次走棋的位置&);
showOpen = new JButton(&打开&);
showOpen.setToolTipText(&打开以前棋局&);
showSave = new JButton(&保存&);
showSave.setToolTipText(&保存当前棋局&);
//把组件添加到工具栏
正在加载中,请稍后...周热销排行
用户评论(0)
在此可输入您对该资料的评论~
添加成功至
资料评价:温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
发表的博文有些来自网络,非本人“版权所有”,纯属闲暇自娱。
在此,衷心感谢所有原创者。
本博不作商用,不保证其真实性和客观性,一切有关个股的有效信息,以沪深交易所的公告为准,敬请注意风险。
因为博文太多,难免出现纰漏现象,敬请各位朋友谅解。
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(184)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'Java中国象棋程序源代码',
blogAbstract:'import java.io.*; \nimport java.applet.A \nimport java.applet.AudioC \nimport javax.swing.*;\nimport java.awt.*;\nimport java.awt.event.*;\nimport javax.swing.*;\nimport java.util.*;\nimport java.io.*;\n',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:8,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'亲们:\n
发表的博文有些来自网络,非本人“版权所有”,纯属闲暇自娱。\n
在此,衷心感谢所有原创者。\n
本博不作商用,不保证其真实性和客观性,一切有关个股的有效信息,以沪深交易所的公告为准,敬请注意风险。\n
因为博文太多,难免出现纰漏现象,敬请各位朋友谅解。',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Java开发实战:仿QQ游戏大厅五子棋
本篇主要讲本科时学习时写的一个小游戏。五子棋对于锻炼Java初级很有帮助。
素材搜集与设计
五子棋的游戏算法就不说了,当时写的比较一般。这里讲一讲游戏设计吧。首先是棋盘,我花了一早上用PPT画了个棋盘,主要是不会PS啊。效果如图:
画了各种颜色的棋盘,最后再画个棋子:
以及棋子选框:
大功告成!
我觉得QQ大厅的形象挺好看的,就扒下来了一些:
从百度里找了几段短的片段。
为了防止无聊,从好多人的QQ签名上摘了一些话下来。写了个聊天线程。
就一个类从头到尾,全都写在一起了。当时刚学Java,啥也不懂哈。
import java.applet.A
import java.applet.AudioC
import java.awt.BorderL
import java.awt.C
import java.awt.D
import java.awt.G
import java.awt.P
import java.awt.R
import java.awt.event.ActionE
import java.awt.event.ActionL
import java.awt.event.MouseA
import java.awt.event.MouseE
import java.awt.event.MouseMotionL
import java.awt.event.WindowA
import java.awt.event.WindowE
import java.awt.event.WindowL
import java.awt.image.BufferedI
import java.io.F
import java.io.IOE
import java.io.RandomAccessF
import java.net.MalformedURLE
import java.net.URL;
import java.sql.T
import java.util.C
import java.util.R
import javax.imageio.ImageIO;
import javax.management.timer.T
import javax.swing.B
import javax.swing.BoxL
import javax.swing.JD
import javax.swing.JF
import javax.swing.JL
import javax.swing.JM
import javax.swing.JMenuB
import javax.swing.JMenuI
import javax.swing.JOptionP
import javax.swing.JP
import javax.swing.JRadioButtonMenuI
import javax.swing.JTextA
import javax.swing.JTextF
import javax.swing.border.LineB
import javax.swing.plaf.metal.MetalIconFactory.FileIcon16;
public class ChessFive {
//计时开始标志
private static int timerFlag=0;
//下棋步数
private static int steps=0;
private int highestGrade=0;
//棋盘、棋子
BufferedImage playerI
BufferedImage comI
BufferedImage starI
//鼠标选择框
//棋盘大小
private static int BOARD_SIZE=15;
//棋盘宽高
private final int TABLE_WIDTH=612;
private final int TABLE_HEIGHT=612;
//棋盘边框
private final int X_OFFSET=12;
private final int Y_OFFSET=12;
//像素与棋盘数组之间的比率
private final
int rate=(TABLE_WIDTH-X_OFFSET*3)/(BOARD_SIZE);
private final int CHESS_BLACK=1;
private final int CHESS_WHITE=2;
private final int CHESS_NONE=0;
//静态变量
static private int[][] board=new int[BOARD_SIZE][BOARD_SIZE];
//游戏窗口
JFrame f=new JFrame(&五子棋游戏&);
ChessBoard chessBoard=new ChessBoard();
private int selectedX=-1;
private int selectedY=-1;
//创建菜单
JMenuBar mb=new JMenuBar();
JMenu gameMenu=new JMenu(&游戏&);
JMenu helpMenu=new JMenu(&帮助&);
JMenuItem newGameItem=new JMenuItem(&新游戏&);
JMenuItem inforItem=new JMenuItem(&统计信息&);
JMenuItem optionItem=new JMenuItem(&选项&);
JMenuItem exitItem=new JMenuItem(&退出&);
JMenuItem lookHelpItem=new JMenuItem(&查看帮助&);
JMenuItem aboutItem=new JMenuItem(&关于五子棋&);
//******************创建游戏双方窗口部件*************************
PlayBoard player=new PlayBoard();
PlayBoard computer=new PlayBoard();
JLabel pJLabel=new JLabel(&玩家&);
JLabel cJLabel=new JLabel(&计算机&);
Box rightBox=new Box(BoxLayout.Y_AXIS);
//聊天窗口
JTextField pJField=new JTextField(20);
JTextArea cJArea=new JTextArea(1,20);
static JTextField cTime=new JTextField(10);
//*********************创建选项窗口****************************
JDialog opJDialog=new JDialog(f,&选项&);
JRadioButtonMenuItem easyItem=new JRadioButtonMenuItem(&容易&,true);
JRadioButtonMenuItem middleItem=new JRadioButtonMenuItem(&中等&,true);
Box bBox=new Box(BoxLayout.Y_AXIS);
//*******************主程序初始化******************************
public void init()throws Exception{
new File(&./data&).mkdir();
File userFile=new File(&./data/user.dat&);
File finalFile=new File(&./data/final.dat&);
final RandomAccessFile userRaf=new RandomAccessFile(userFile, &rw&);
final RandomAccessFile finalRaf=new RandomAccessFile(finalFile, &rw&);
if(userRaf.length()==0){
highestGrade=0;
highestGrade=userRaf.readInt();
if(finalRaf.length()!=15*15*4){
for(int i=0;i&=14;i++)
for(int j=0;j&=14;j++){
board[i][j]=finalRaf.readInt();
//计算机说话线程
Thread csThread=new Thread(new ComputerSpeakThread());
csThread.setDaemon(true);
csThread.start();
Thread timerThread=new Thread(new TimerThread());
timerThread.start();
//游戏声音
String separator=System.getProperty(&file.separator&);
String preface=&file:&+System.getProperty(&user.dir&)+separator+&sounds&+
final AudioClip startMusic=Applet.newAudioClip(new URL(preface+&start.wav&));
final AudioClip downMusic=Applet.newAudioClip(new URL(preface+&down.wav&));
final AudioClip winMusic=Applet.newAudioClip(new URL(preface+&winning.wav&));
final AudioClip overMusic=Applet.newAudioClip(new URL(preface+&over.wav&));
startMusic.play();
//选项对话框
opJDialog.setSize(600, 300);
bBox.add(easyItem);
bBox.add(middleItem);
opJDialog.add(bBox);
//菜单事件
newGameItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
startMusic.play();
inforItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
optionItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
opJDialog.show();
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
lookHelpItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String[] helpString={&五子棋游戏说明:\n
我方为黑棋,电脑为白棋。\n游戏开始后,我方先走子。\n&
+&先使五个棋子连在一起的赢得游戏。\n游戏共有容易、中等两个等级。&
JOptionPane.showMessageDialog(f, helpString,&关于&,1);
aboutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(f, &作者:goodluckcwl\n 版本:1.01\n日期:\n联系方式:&, &关于&, 1);
table=ImageIO.read(new File(&./img/table_default.png&));
black=ImageIO.read(new File(&./img/black.png&));
white=ImageIO.read(new File(&./img/white.png&));
selected=ImageIO.read(new File(&./img/selected.png&));
playerImg=ImageIO.read(new File(&./icon/male.gif&));
comImg=ImageIO.read(new File(&./icon/female.gif&));
starImg=ImageIO.read(new File(&./icon/star.png&));
//设置棋盘为合适大小
chessBoard.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
//棋盘事件
chessBoard.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
//将用户鼠标事件转换为棋子坐标
int xPos=(int)((e.getX()-X_OFFSET)/rate);
int yPos=(int)((e.getY()-Y_OFFSET)/rate);
if(board[xPos][yPos]!=CHESS_NONE){
System.out.println(xPos);
System.out.println(yPos);
board[xPos][yPos]=CHESS_BLACK;
downMusic.play();
chessBoard.repaint();
//判断是否游戏结束
Boolean playerWin=new Judgement().judgement(board,xPos,yPos,CHESS_BLACK);
System.out.println(&win&+playerWin);
//***********************电脑下棋******************************************
Computer com=new Computer();
com.checkMode(board,xPos, yPos);
downMusic.play();
//判断游戏是否结束
Boolean comWin=new Judgement().judgement(board,com.getTargetPoint().x,com.getTargetPoint().y,CHESS_WHITE);
System.out.println(&computer win&+comWin);
chessBoard.repaint();
if(comWin){
overMusic.play();
int grade=steps*3-TimerThread.getTimer();
String s=grade&highestGrade?(&游戏结束!\n计算机赢了!\n最高分:& +grade+&分!&):
(&游戏结束!\n计算机赢了!\n最后分数:& +grade+&分!&);
highestGrade=grade&highestGrade?grade:highestG
JOptionPane.showMessageDialog(f, s);
else if(playerWin){
winMusic.play();
int grade=10000-TimerThread.getTimer()-steps*10;
String s=grade&highestGrade?(&游戏结束!\n你赢了!\n最高分:& +grade+&分!&):
(&游戏结束!\n你赢了!\n最后分数:& +grade+&分&);
highestGrade=grade&highestGrade?grade:highestG
JOptionPane.showMessageDialog(f, s);
//鼠标退出棋盘
public void mouseExited(MouseEvent e){
selectedX=-1;
selectedY=-1;
chessBoard.repaint();
chessBoard.addMouseMotionListener(new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
//鼠标移动时改变选中点坐标
selectedX=e.getX();
selectedY=e.getY();
chessBoard.repaint();
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
f.addWindowListener(new WindowListener() {
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
userRaf.seek(0);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
userRaf.writeInt(highestGrade);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
userRaf.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
finalRaf.seek(0);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
for(int i=0;i&=14;i++)
for(int j=0;j&=14;j++){
finalRaf.writeInt(board[i][j]);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
finalRaf.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
//组装菜单
gameMenu.add(newGameItem);
gameMenu.add(inforItem);
gameMenu.add(optionItem);
gameMenu.add(exitItem);
helpMenu.add(lookHelpItem);
helpMenu.add(aboutItem);
mb.add(gameMenu);
mb.add(helpMenu);
//玩家面板
player.setImg(playerImg);
computer.setImg(comImg);
player.setPreferredSize(new Dimension(200,200));
computer.setPreferredSize(new Dimension(200,200));
player.repaint();
computer.repaint();
cTime.setEditable(false);
cTime.setFocusable(false);
cTime.setBackground(Color.LIGHT_GRAY);
rightBox.add(cJLabel);
rightBox.add(computer);
rightBox.add(cTime);
rightBox.add(Box.createVerticalStrut(20));
rightBox.add(cJArea);
rightBox.add(Box.createVerticalStrut(20));
rightBox.add(pJLabel);
rightBox.add(player);
rightBox.add(pJField);
rightBox.add(Box.createVerticalStrut(100));
f.add(mb,BorderLayout.NORTH);
f.add(rightBox,BorderLayout.EAST);
f.add(chessBoard,BorderLayout.CENTER);
f.setMaximizedBounds(new Rectangle(f.getWidth(),f.getHeight()));
f.setVisible(true);
//*****************开始游戏初始化********************************
public void begin(){
timerFlag=1;
System.out.println(&线程数&+Thread.activeCount());
//每个元素赋值为0
for(int i=0;i&=BOARD_SIZE-1;i++){
for(int j=0;j&=BOARD_SIZE-1;j++){
board[i][j]=CHESS_NONE;
class Judgement{
//连在一起的棋子数目
private int repeat=0;
private int chessType=CHESS_NONE;
//相连棋子的起始、结束坐标
private Point connectBegin=
private Point connectEnd=
//当前棋子的行、列、对角线的起点
private Point beginPoint=new Point();
//偏移步长
private int XOffset=0;
private int YOffset=0;
private int yLine[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
private int xLine[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
private int a[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
private Boolean judgement(int[][]board,int x,int y,int type){
win=judge(board,x,y,0,5,type)|judge(board,x,y,1,5,type)|
judge(board,x,y,2,5,type)|judge(board,x,y,3,5,type);
//*******设置要判决的棋子类型**************************************
private void setChessType(int type){
chessType=
//返回相连棋子的起始坐标
public Point getBeginPoint(){
return this.connectB
//返回相连棋子的结束坐标
public Point getEndPoint(){
return this.connectE
//***************************************************************
//判断在(x,y)坐标所在行、列、斜线上连在一起的棋子的数目
//设置连在一起的棋子的起始坐标、结束坐标
//flag:可取0,1,2,3分别代表行、列、正对角线、反对角线
//type:指定所判断的棋子类型;
//num:连在一起的棋子数目
//connectBegin:连在一起的棋子的起始坐标
//connectEnd:连在一起的棋子的结束坐标
private Boolean judge(int[][]board,int x,int y,int flag,int num,int type){
//所下棋子的行线、列线
for(int i=0;i&=BOARD_SIZE-1;i++){
yLine[i]=board[x][i];
xLine[i]=board[i][y];
//设置棋子类型
setChessType(type);
switch(flag){
XOffset=0;
YOffset=1;
beginPoint=new Point(x,0);
XOffset=1;
YOffset=0;
beginPoint=new Point(0,y);
//正对角线
//所下棋子的正对角线
int xbegin=x&=y?0:x-y;
int ybegin=y&=x?0:y-x;
beginPoint=new Point(xbegin,ybegin);
for(int i=0;xbegin&=BOARD_SIZE-1&&ybegin&=BOARD_SIZE-1;xbegin++,ybegin++,i++){
a[i]=board[xbegin][ybegin];
XOffset=1;
YOffset=1;
//所下棋子的反对角线
int xbegin2=x+y&=14?0:x+y-14;
int ybegin2=x+y&=14?14:x+y;
beginPoint=new Point(xbegin2,ybegin2);
for(int i=0;xbegin2&=BOARD_SIZE-1&&ybegin2&=0;xbegin2++,ybegin2--,i++){
a[i]=board[xbegin2][ybegin2];
XOffset=1;
YOffset=-1;
for(int i=0;i&=a.length-1;i++){
if(a[i]!=chessType){
connectBegin=new Point(beginPoint.x+XOffset*i,beginPoint.y+YOffset*i);
for(int k=i;k&=a.length-1;k++){
if(a[k]==chessType){
System.out.println(&repeat&+repeat);
if(repeat&=num){
System.out.println(&a[0]=&+a[0]);
System.out.println(&a[1]=&+a[1]);
System.out.println(&beginPoint.x=&+beginPoint.x);
System.out.println(&beginPoint.y=&+beginPoint.y);
System.out.println(&
connectEnd=new Point(beginPoint.x+XOffset*k,beginPoint.y+YOffset*k);
System.out.println(&num&+num);
System.out.println(&else&+k);
//检查是否有num个棋子相连,若是,则返回建议点坐标;否则返回错误点。
private Point continuous(int[][]board,int num,int type){
for(int i=0;i&=BOARD_SIZE-1;i++){
for(int j=0;j&=BOARD_SIZE-1;j=j+ (i==0?1:15) ){
if(judge(board, i, j, 0, num, type)){
if(isValid(board,getBeginPoint().x,getBeginPoint().y-1))
return new Point(getBeginPoint().x,getBeginPoint().y-1);
if(isValid(board, getEndPoint().x, getEndPoint().y+1))
return new Point(getEndPoint().x,getEndPoint().y+1);
if(judge(board,i,j,1,num,type)){
if(isValid(board,getBeginPoint().x-1,getBeginPoint().y))
return new Point(getBeginPoint().x-1,getBeginPoint().y);
if(isValid(board,getEndPoint().x+1,getEndPoint().y))
return new Point(getEndPoint().x+1,getEndPoint().y);
//主对角线
if(judge(board, i, j, 2, num, type)){
if(isValid(board,getBeginPoint().x-1,getBeginPoint().y-1))
return new Point(getBeginPoint().x-1,getBeginPoint().y-1);
if(isValid(board,getEndPoint().x+1,getEndPoint().y+1))
return new Point(getEndPoint().x+1,getEndPoint().y+1);
//反对角线
if(judge(board, i, j, 3, num, type)){
if(isValid(board,getBeginPoint().x-1,getBeginPoint().y+1))
return new Point(getBeginPoint().x-1,getBeginPoint().y+1);
if(isValid(board,getEndPoint().x+1,getEndPoint().y-1))
return new Point(getEndPoint().x+1,getEndPoint().y-1);
//检查是否有num个type棋子相连,相连的棋子前后没有其他类型的棋子,若是,则返回建议点坐标;否则返回空指针。
private Point stepWin(int[][]board,int num,int type){
for(int i=0;i&=BOARD_SIZE-1;i++){
for(int j=0;j&=BOARD_SIZE-1;j=j+ (i==0?1:15) ){
if(judge(board, i, j, 0, num, type)
&&isValid(board,getBeginPoint().x,getBeginPoint().y-1)
&&isValid(board, getEndPoint().x, getEndPoint().y+1)){
return new Point(getBeginPoint().x,getBeginPoint().y-1);
if(judge(board,i,j,1,num,type)
&&isValid(board,getBeginPoint().x-1,getBeginPoint().y)
&&isValid(board,getEndPoint().x+1,getEndPoint().y))
return new Point(getBeginPoint().x-1,getBeginPoint().y);
//主对角线
if(judge(board, i, j, 2, num, type)
&&isValid(board,getBeginPoint().x-1,getBeginPoint().y-1)
&&isValid(board,getEndPoint().x+1,getEndPoint().y+1))
return new Point(getBeginPoint().x-1,getBeginPoint().y-1);
//反对角线
if(judge(board, i, j, 3, num, type)
&&isValid(board,getBeginPoint().x-1,getBeginPoint().y+1)
&&isValid(board,getEndPoint().x+1,getEndPoint().y-1))
return new Point(getBeginPoint().x-1,getBeginPoint().y+1);
private Boolean isValid(int board[][],int xPos,int yPos){
return xPos&=0&&xPos&=14&&yPos&=0&&yPos&=14&&board[xPos][yPos]==CHESS_NONE;
//计算机下棋类
class Computer{
Computer(){};
Random random=new Random();
//计算机下棋坐标
Point targetP
targetPoint=new Point(0,0);
public Point getTargetPoint(){
return this.targetP
public void randomMode(){
targetPoint.x=random.nextInt()%BOARD_SIZE;
targetPoint.y=random.nextInt()%BOARD_SIZE;
targetPoint.x=abs(targetPoint.x);
targetPoint.y=abs(targetPoint.y);
}while(ChessFive.board[targetPoint.x][targetPoint.y]!=CHESS_NONE);
ChessFive.board[targetPoint.x][targetPoint.y]=CHESS_WHITE;
public void followMode(int xPos,int yPos){
int ch=random.nextInt(4);
int i=0,j=0;
switch (ch) {
i=random.nextInt()%2;
j=random.nextInt()%2;
i=random.nextInt()%2;
j=random.nextInt()%2;
targetPoint.x=abs((xPos+i)%BOARD_SIZE);
targetPoint.y=abs((yPos+j)%BOARD_SIZE);
System.out.println(&xC&+targetPoint.x);
System.out.println(&yC&+targetPoint.y);
}while(ChessFive.board[targetPoint.x][targetPoint.y]!=CHESS_NONE);
ChessFive.board[targetPoint.x][targetPoint.y]=CHESS_WHITE;
public void checkMode(int[][] board,int x,int y){
Judgement jug=new Judgement();
//判断白方是否能一步取胜
if(jug.continuous(board,4,CHESS_WHITE)!=null){
targetPoint=jug.continuous(board,4,CHESS_WHITE);
ChessFive.board[targetPoint.x][targetPoint.y]=CHESS_WHITE;
//判断黑方是否能一步取胜
if(jug.continuous(board, 4, CHESS_BLACK)!=null){
targetPoint=jug.continuous(board, 4, CHESS_BLACK);
ChessFive.board[targetPoint.x][targetPoint.y]=CHESS_WHITE;
//黑方无法一步取胜,白方寻找连在一起的3个棋子
if(jug.continuous(board, 3, CHESS_WHITE)!=null){
targetPoint=jug.continuous(board, 3, CHESS_WHITE);
ChessFive.board[targetPoint.x][targetPoint.y]=CHESS_WHITE;
//判断黑方是否能两步取胜
if(jug.stepWin(board, 3, CHESS_BLACK)!=null){
targetPoint=jug.stepWin(board, 3, CHESS_BLACK);
ChessFive.board[targetPoint.x][targetPoint.y]=CHESS_WHITE;
//判断黑方是否有三个棋子连在一起
if(jug.continuous(board, 3, CHESS_BLACK)==null){
//寻找两个连在一起的白棋
if(jug.continuous(board, 2, CHESS_WHITE)!=null){
targetPoint=jug.continuous(board, 2, CHESS_WHITE);
ChessFive.board[targetPoint.x][targetPoint.y]=CHESS_WHITE;
for(int num=4;num&=1;num--){
System.out.println(&num=&+num);
if(jug.judge(board, x, y,0,num,CHESS_BLACK)){
targetPoint.x=x;
if(isValid(board,targetPoint.x, jug.getEndPoint().y+1)){
targetPoint.y=jug.getEndPoint().y+1;
System.out.println(&进入列,后&);
if(isValid(board, targetPoint.x, jug.getBeginPoint().y-1)){
targetPoint.y=jug.getBeginPoint().y-1;
System.out.println(&进入列,前&);
if(jug.judge(board, x, y,1,num,CHESS_BLACK)){
targetPoint.y=y;
if(isValid(board,jug.getEndPoint().x+1, targetPoint.y)){
targetPoint.x=jug.getEndPoint().x+1;
System.out.println(&进入行,后&);
if(isValid(board,jug.getBeginPoint().x-1,targetPoint.y)){
targetPoint.x=jug.getBeginPoint().x-1;
System.out.println(&进入行,前&);
//正对角线
if(jug.judge(board, x, y, 2, num, CHESS_BLACK)){
System.out.println(&正对角x,y&);
System.out.println(jug.getEndPoint().x+1);
System.out.println(jug.getEndPoint().y+1);
if(isValid(board, jug.getEndPoint().x+1, jug.getEndPoint().y+1)){
targetPoint.x=jug.getEndPoint().x+1;
targetPoint.y=jug.getEndPoint().y+1;
System.out.println(&进入正对角,后&);
if(isValid(board, jug.getBeginPoint().x-1, jug.getBeginPoint().y-1)){
targetPoint.x=jug.getBeginPoint().x-1;
targetPoint.y=jug.getBeginPoint().y-1;
System.out.println(&进入正对角,前&);
//反对角线
if(jug.judge(board, x, y,3, num,CHESS_BLACK)){
if(isValid(board,jug.getEndPoint().x+1,jug.getEndPoint().y-1)){
targetPoint.x=jug.getEndPoint().x+1;
targetPoint.y=jug.getEndPoint().y-1;
System.out.println(&进入反对角线,后&);
if(isValid(board,jug.getBeginPoint().x-1,jug.getBeginPoint().y+1)){
targetPoint.x=jug.getBeginPoint().x-1;
targetPoint.y=jug.getBeginPoint().y+1;
System.out.println(&进入反对角线,前&);
ChessFive.board[targetPoint.x][targetPoint.y]=CHESS_WHITE;
private Boolean isValid(int board[][],int xPos,int yPos){
return xPos&=0&&xPos&=14&&yPos&=0&&yPos&=14&&board[xPos][yPos]==CHESS_NONE;
private int abs(int n){
return n=n&=0?-n:n;
//棋盘类,绘制棋盘与棋子
class ChessBoard extends JPanel{
//重写paint方法
public void paint(Graphics g){
//绘制五子棋棋盘
g.drawImage(table,0,0,null);
//绘制选中点的红框
if(selectedX&=0&&selectedY&=0){
g.drawImage(selected,selectedX-selected.getHeight()/2,
selectedY-selected.getWidth()/2,null);
//遍历数组,绘制棋子
for(int i=0;i&=BOARD_SIZE-1;i++){
for(int j=0;j&=BOARD_SIZE-1;j++){
if(board[i][j]==CHESS_BLACK){
g.drawImage(black, i*rate+X_OFFSET, j*rate+Y_OFFSET, null);
else if(board[i][j]==CHESS_WHITE){
g.drawImage(white, i*rate+X_OFFSET, j*rate+Y_OFFSET, null);
//玩家面板类,绘制玩家画像
class PlayBoard extends JPanel{
private BufferedI
public void setImg(BufferedImage bufferedImage){
img=bufferedI
public void paint(Graphics g){
g.drawImage(img, 0, 0,null);
g.drawImage(starImg, 110, 80, null);
g.drawImage(starImg, 120, 80, null);
g.drawImage(starImg, 130, 80, null);
//计时线程
static class TimerThread implements Runnable{
private static int i=0;
public void run(){
while(true){
timerFlag=0;
cTime.setText(&
游戏时间:&+i+&s&);
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(timerFlag==1)
static public int getTimer(){
//聊天窗口线程
class ComputerSpeakThread implements Runnable{
public void run(){
String []comS={&正值年少,何不长啸&,&悟已往之不谏,知来者之可追&,&得失随缘,心无增减&,&难过|总不能什么&
+&都不努力就\n指望着做得好吧&,&生活就像蒲公英,看似自由,却身不由己&,&成大事者,不计较一时一事之得失&,
&但行其事,莫问前程&,&人就是这样,记不得理所当然的好,\n只记得偶尔的疲惫&,&暖日生烟,夜凉如水&,
&踏实做人,认真做事&,&拆下肋骨当火把&,&盲学,弃,致用,纯粹&,&失败只代表你还不够努力&,
&经世纬国,江山志远&,&行多久,方为执,思多久,方为远&};
//聊天窗口显示
Random r=new Random();
while(true){
int i=r.nextInt(15);
cJArea.setText(null);
cJArea.append(comS[i]);
cJArea.setFocusable(false);
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void main(String []args)throws Exception{
new ChessFive().init();
游戏效果图
游戏逻辑还是有些问题,存在一些bug。

我要回帖

更多关于 chrome java applet 的文章

 

随机推荐