import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.sql.*;
public class Chessboard extends JPanel {
private Image img;
//棋盘顶上距离
final static int BRODER_LENGTH =40;
//棋盘格子长与高
final static int GRID_LENGTH =58;
//棋子位置
private int X;
private int Y;
//0 表示该位置没有下棋,1-7表示红棋车,马,象,士,将,炮,兵,8-14 表示黑棋车,马,象,士,将,炮,兵
//内存棋盘数组
public static int[][] chess_have=new int[9][10];
//棋子是否选中,0表示未选中,1表示选中
public static int isSelect=0;
//选中棋子位置
public static Point hisPoint;
//要走的棋子的位置
public static Point nowPoint;
//棋子长与高
final static int CHSSMAN_LENGTH =52;
//下棋步数
int chess_count=0;
//对方将位置
public static Point king;
//是否将军,0表示未将军,1表示将军
public static int kill=0;
//自己将对方造成危险棋子的位置
ArrayList danger=new ArrayList();
//记录下棋历史
HashMap history= new HashMap();
public Chessboard(Image img)
{
this.img=img;
Dimension size=new Dimension(img.getWidth(null),img.getHeight(null));
this.setSize(size);
this.setPreferredSize(size);
this.setMaximumSize(size);
this.setMaximumSize(size);
this.setLayout(null);
this.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
X=(e.getX()-BRODER_LENGTH+GRID_LENGTH/2)/GRID_LENGTH;
Y=(e.getY()-BRODER_LENGTH+GRID_LENGTH/2)/GRID_LENGTH;
if ((X>=0&& X<=8) && (Y>=0 && Y<=9))
{
nowPoint=new Point(X,Y);
if(isSelect==1 && Start.rule.checkRule(Chessboard.hisPoint, Chessboard.nowPoint))
playChess();
}
}
});
}
public void paintComponent(Graphics g)
{
g.drawImage(img,0,0,null);
}
//下棋,传入棋子X,Y相对坐标
public void playChess()
{
//下棋步数加一
chess_count++;
history.put(String.valueOf(chess_count), new History(chess_have[hisPoint.x][hisPoint.y],
chess_have[nowPoint.x][nowPoint.y],hisPoint,nowPoint));
//停止闪烁
if (Start.select!=null)
{
Start.select.setFlag(false);
Start.select.setRemove(true);
}
//前台绘图
if (chess_have[nowPoint.x][nowPoint.y]>0)
{
//吃棋
this.remove(getComponentAt(getlocation(nowPoint)));
}
this.remove(getComponentAt(getlocation(hisPoint)));
add(getChessman(chess_have[hisPoint.x][hisPoint.y],nowPoint));
//记录对方老王位置
if (chess_have[hisPoint.x][hisPoint.y]%7==5 && hisPoint.y<5)
king=nowPoint;
String msg=checkWin();
//加载声音
if (chess_have[nowPoint.x][nowPoint.y]>0)
new BasicPlayer("sound/eat.wav").start();
else
new BasicPlayer("sound/go.wav").start();
//内存数组变换
chess_have[nowPoint.x][nowPoint.y]=chess_have[hisPoint.x][hisPoint.y];
chess_have[hisPoint.x][hisPoint.y]=0;
isSelect=0;
if (Start.chessState==1)
{
Chess.JBrepent.setEnabled(true);
int killking=checkKill();
if (killking==1)
{
new BasicPlayer("sound/danger.wav").start();
Start.msg.jt.setText(Start.msg.jt.getText()+"我方将军!\n");
}
if (Start.socket!=null)
{
Start.socket.sendData("P/*&"+hisPoint.x+":"+hisPoint.y+":"+nowPoint.x+":"+nowPoint.y+":"+killking);
}
}
else
Chess.JBrepent.setEnabled(false);
//下棋状态切换
switch (Start.chessState)
{
case 1:Start.chessState=2;
break;
case 2:Start.chessState=1;
break;
default:
break;
}
repaint();
if (msg!=null)
{
if (msg.equals("我方胜出"))
new BasicPlayer("sound/gamewin.wav").start();
else
new BasicPlayer("sound/gameover.wav").start();
JOptionPane.showMessageDialog(null, msg, "提示信息", JOptionPane.ERROR_MESSAGE);
Start.chessState=0;
Start.chessConfirm=0;
Chess.JBStart.setEnabled(true);
}
}
//悔棋,悔最后一步
public void replay()
{
if (chess_count>0)
{
//remove(chess_count-1);
History his=(History)history.get(String.valueOf(chess_count));
this.remove(getComponentAt(getlocation(his.getNowPoint())));
//还原被吃的棋子
if (his.getEatchess()!=0)
{
add(getChessman(his.getEatchess(),his.getNowPoint()));
}
//还原棋子
add(getChessman(his.getChess(),his.getHisPoint()));
repaint();
//内存棋盘数组同步更新
chess_have[his.getHisPoint().x][his.getHisPoint().y]=his.getChess();
chess_have[his.getNowPoint().x][his.getNowPoint().y]=his.getEatchess();
history.remove(String.valueOf(chess_count));
chess_count--;
if (Start.select!=null)
Start.select.setFlag(false);
//下棋状态切换
switch (Start.chessState)
{
case 1:Start.chessState=2;
break;
case 2:Start.chessState=1;
break;
default:
break;
}
}
}
//检查是否赢了,返回true为赢,false继续下
public String checkWin()
{
String Msg=null;
if (chess_have[nowPoint.x][nowPoint.y]%7==5)
{
if(nowPoint.y<5)
{
Msg="我方胜出";
Connection con;
Statement sql;
ResultSet rs;
String s=DengluPanel.name1;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e1){System.out.println(""+e1);}
try{
String s3=null;
con=DriverManager.getConnection("jdbc:odbc:user","","");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM login WHERE 用户名='"+s+"'");
if(rs.next()) s3=rs.getString("积分");
int n=Integer.parseInt(s3);
n=n+2;
String s2=String.valueOf(n);
sql.executeUpdate("UPDATE login SET 积分='"+s2+"' WHERE 用户名='"+s+"'");
}
catch(SQLException e2){System.out.println(""+e2);}
}
else
Msg="对方胜出";
}
return Msg;
}
//棋盘初始化
public void init()
{
this.removeAll();
//初始化棋盘内存数组
ChessInit chessinit=new ChessInit();
//判断自己是红棋还是黑棋
//单局由客户端先下,即客户端是红棋
if (Start.chessCount%2==1)
{
if(Start.isServer==0)
{
chessinit.initTop(7);
chessinit.initUnder(0);
}
else if(Start.isServer==1)
{
chessinit.initTop(0);
chessinit.initUnder(7);
}
}
//双局由客户端后下,即服务器端是红棋
else
{
if(Start.isServer==0)
{
chessinit.initTop(0);
chessinit.initUnder(7);
}
else if(Start.isServer==1)
{
chessinit.initTop(7);
chessinit.initUnder(0);
}
}
//根据内存棋盘画出棋盘
for(int i=0;i<9;i++)
{
for(int j=0;j<10;j++)
if (chess_have[i][j]>0)
{
add(getChessman(chess_have[i][j],new Point(i,j)));
}
}
repaint();
//初始化下棋相关参数
history.clear();
isSelect=0;
chess_count=0;
king=new Point(4,0);
kill=0;
danger.clear();
//加入车,炮位置到danger
danger.add(new Point(0,9));
danger.add(new Point(8,9));
danger.add(new Point(1,7));
danger.add(new Point(7,7));
}
public Point getlocation(Point p)
{
int x_location=p.x*GRID_LENGTH+BRODER_LENGTH-CHSSMAN_LENGTH/2;
int y_location=p.y*GRID_LENGTH+BRODER_LENGTH-CHSSMAN_LENGTH/2;
return new Point(x_location,y_location);
}
public Chessman getChessman(int chessCode,Point p)
{
String imageFile="images/"+chessCode+".jpg";
Chessman man=new Chessman(new ImageIcon(getdir(imageFile)));
man.setLocation(getlocation(p));
return man;
}
//检查是否将军
public int checkKill()
{
for (int i=0;i<danger.size();i++)
{
Point p=(Point)danger.get(i);
if ((chess_ha
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
中国象棋JAVA网络对战游戏代码 (106个子文件)
HandingMsg.java.bak 6KB
Start.java.bak 5KB
DengluPanel.java.bak 4KB
Message.java.bak 2KB
UdpServer.java.bak 2KB
b.bat 45B
b.bat 35B
a.bat 33B
Chessboard.class 8KB
DengluPanel.class 5KB
HandingMsg.class 5KB
ZhucePanel.class 5KB
Server_thread.class 4KB
Start.class 4KB
BasicPlayer.class 3KB
Rule.class 3KB
NetSocket.class 3KB
ZaiXian.class 3KB
Collection.class 3KB
Message.class 2KB
StartServer.class 2KB
Collection$2.class 2KB
Collection$4.class 2KB
Start$1.class 2KB
Chess.class 2KB
UdpServer.class 2KB
Chess$1.class 2KB
Select.class 1KB
Chess$3.class 1KB
Chessman$1.class 1KB
Collection$1.class 1KB
ChatServer.class 1KB
Chessboard$1.class 1KB
Collection$3.class 1KB
History.class 931B
Chessman.class 853B
ChessInit.class 836B
UserName.class 836B
Button.class 820B
Chess$2.class 701B
Chess$4.class 616B
Message$2.class 557B
DengluPanel$1.class 499B
Message$3.class 495B
ZhucePanel$1.class 482B
Message$1.class 428B
Main.class 287B
Chessboard.java 9KB
HandingMsg.java 6KB
Start.java 5KB
Rule.java 5KB
Collection.java 5KB
ChatServer.java 4KB
DengluPanel.java 4KB
Chess.java 4KB
ZhucePanel.java 3KB
BasicPlayer.java 3KB
Message.java 2KB
NetSocket.java 2KB
UdpServer.java 2KB
ChessInit.java 2KB
ZaiXian.java 2KB
Chessman.java 1KB
StartServer.java 1KB
Select.java 1KB
History.java 972B
Button.java 805B
UserName.java 464B
Main.java 100B
chessboard.jpg 88KB
main.jpg 49KB
back.jpg 15KB
10.jpg 13KB
9.jpg 13KB
12.jpg 13KB
13.jpg 13KB
8.jpg 13KB
6.jpg 13KB
14.jpg 13KB
11.jpg 13KB
1.jpg 13KB
3.jpg 13KB
2.jpg 13KB
4.jpg 13KB
7.jpg 13KB
5.jpg 13KB
black.jpg 11KB
white.jpg 10KB
button_press.jpg 2KB
button_normal.jpg 1KB
dengluzhuce.ldb 128B
dengluzhuce.mdb 164KB
back.mid 15KB
denglu.png 162KB
zhuce.png 108KB
zhuce5.png 90KB
zhece4.png 90KB
zhuce2.png 81KB
anniu2.png 81KB
Begin.wav 124KB
共 106 条
- 1
- 2
wangru3050
- 粉丝: 2
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页