帮忙调下

sdc52o 2011-12-12 05:41:31


package 中国象棋打谱系统;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Demon extends JPanel implements ActionListener,Runnable
{
public JButton replay=null,next=null,auto=null,stop=null;
LinkedList 棋谱=null;
Thread 自动演示=null;
int index=-1;
ChessBoard board=null;
JTextArea text;
JTextField 时间间隔=null;
int time=1000;
String 演示过程="";
JSplitPane splitH=null,splitV=null;
public Demon(ChessBoard board)
{
this.board=board;
replay=new JButton("重新演示");
next=new JButton("下一步");
auto=new JButton("自动演示");
stop=new JButton("暂停演示");
自动演示=new Thread(this);
replay.addActionListener(this);
next.addActionListener(this);
auto.addActionListener(this);
stop.addActionListener(this);
text=new JTextArea();
时间间隔=new JTextField("1");
setLayout(new BorderLayout());
JScrollPane pane=new JScrollPane(text);
JPanel p=new JPanel(new GridLayout(3,2));
p.add(next);
p.add(replay);
p.add(auto);
p.add(stop);
p.add(new JLabel("时间间隔(秒)",SwingConstants.CENTER)) ;
p.add(时间间隔);
splitV=new JSplitPane(JSplitPane.VERTICAL_SPLIT,pane,p);
splitH=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,board,splitV);
splitV.setDividerSize(5);
splitV.setDividerLocation(400);
splitH.setDividerSize(5);
splitH.setDividerLocation(460);
add(splitH,BorderLayout.CENTER);
validate();
}
public void set棋谱(LinkedList 棋谱)
{
this.棋谱=棋谱;
}
public char numberToLetter(int n)
{
char c='\0';
switch(n)
{
case 1 : c='A'; break;
case 2 : c='B'; break;
case 3 : c='C'; break;
case 4 : c='D'; break;
case 5 : c='E'; break;
case 6 : c='F'; break;
case 7 : c='G'; break;
case 8 : c='H'; break;
case 9 : c='I'; break;
case 10 : c='J'; break;
}
return c;
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==next)
{
index++;
if(index<棋谱.size())
{
演示一步(index);
}
else
{
演示结束("棋谱演示完毕");
}
}
if(e.getSource()==replay)
{
board=new ChessBoard(45,45,9,10);
splitH.remove(board);
splitH.setDividerSize(5);
splitH.setDividerLocation(460);
splitH.setLeftComponent(board);
splitH.validate();
index=-1;
text.setText(null);
}
if(e.getSource()==auto)
{
next.setEnabled(false);
replay.setEnabled(false);
try
{
time=1000*Integer.parseInt(时间间隔.getText().trim());
}
catch(NumberFormatException ee)
{
time=1000;
}

if(!(自动演示.isAlive()))
{
自动演示=new Thread(this);
board=new ChessBoard(45,45,9,10);
splitH.remove(board);
splitH.setDividerSize(5);
splitH.setDividerLocation(460);
splitH.setLeftComponent(board);
splitH.validate();
text.setText(null);
自动演示.start();
}

}
if(e.getSource()==stop)
{
if(e.getActionCommand().equals("暂停演示"))
{
演示过程="暂停演示";
stop.setText("继续演示");
stop.repaint();
}
if(e.getActionCommand().equals("继续演示"))
{
演示过程="继续演示";
自动演示.interrupt();
stop.setText("暂停演示");
stop.repaint();
}
}
}
public synchronized void run()
{
for(index=0;index<棋谱.size();index++)
{
try{
Thread.sleep(time);
}
catch(InterruptedException e)
{
}
while(演示过程.equals("暂停演示"))
{
try{
wait();
}
catch(InterruptedException e)
{
notifyAll();
}
}
演示一步(index);
}
if(index>=棋谱.size())
{
演示结束("棋谱演示完毕");
next.setEnabled(true);
replay.setEnabled(true);
}
}
public void 演示一步(int index)
{
MoveStep step=(MoveStep)棋谱.get(index);
Point pStart=step.pStart;
Point pEnd =step.pEnd;
int startI =pStart.x;
int startJ =pStart.y;
int endI =pEnd.x;
int endJ =pEnd.y;
ChessPiece piece=(board.point)[startI][startJ].getPiece();
if((board.point)[endI][endJ].isPiece()==true)
{
ChessPiece pieceRemoved=(board.point)[endI][endJ].getPiece();
(board.point)[endI][endJ].reMovePiece(pieceRemoved,board);
board.repaint();
(board.point)[endI][endJ].setPiece(piece,board);
(board.point)[startI][startJ].set有棋子(false);
board.repaint();
}
else
{
(board.point)[endI][endJ].setPiece(piece,board);
(board.point)[startI][startJ].set有棋子(false);

}
String 棋子类别=piece.棋子类别();
String name=piece.getName();
String m="#"+棋子类别+name+": "+
startI+numberToLetter(startJ)+" 到 "+endI+numberToLetter(endJ);
text.append(m);
if(piece.棋子类别().equals(board.黑方颜色))
text.append("\n");
}
public void 演示结束(String message)
{
splitH.remove(board);
splitH.setDividerSize(5);
splitH.setDividerLocation(460);
JLabel label=new JLabel(message);
label.setFont(new Font("隶书",Font.BOLD,40));
label.setForeground(Color.blue);
label.setHorizontalAlignment(SwingConstants.CENTER);
splitH.setLeftComponent(label);
splitH.validate();
}
}
...全文
70 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
chensuper 2011-12-12
  • 打赏
  • 举报
回复
我晕,中文名称,你牛……这代码写的多慢,还得切换输入法。
hzc543806053 2011-12-12
  • 打赏
  • 举报
回复
不会吧,,

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧