📄 javaxq.java
字号:
drawR(i, j, g);
}
public void drawRedH(int i, int j, Graphics g)
{
g.setColor(Color.red);
g.fillOval(i, j, cx - 2, cy - 2);
g.setColor(Color.white);
drawH(i, j, g);
}
public void drawRedC(int i, int j, Graphics g)
{
g.setColor(Color.red);
g.fillOval(i, j, cx - 2, cy - 2);
g.setColor(Color.white);
drawC(i, j, g);
}
public void drawBlkK(int i, int j, Graphics g)
{
g.setColor(Color.blue);
g.fillOval(i, j, cx - 2, cy - 2);
g.setColor(Color.white);
g.drawLine(i + 6, j + 7, i + 6, j + 9);
g.drawLine(i + 7, j + 6, i + 7, j + 7);
g.drawLine(i + 7, j + 9, i + 10, j + 9);
g.drawLine(i + 5, j + 10, i + 7, j + 10);
g.drawLine(i + 5, j + 12, i + 5, j + 13);
g.drawLine(i + 6, j + 12, i + 13, j + 12);
g.drawLine(i + 6, j + 13, i + 6, j + 16);
g.drawLine(i + 5, j + 16, i + 5, j + 17);
g.drawLine(i + 9, j + 5, i + 10, j + 5);
g.drawLine(i + 9, j + 6, i + 9, j + 18);
g.drawLine(i + 8, j + 11, i + 8, j + 11);
g.drawLine(i + 14, j + 4, i + 14, j + 5);
g.drawLine(i + 12, j + 6, i + 13, j + 6);
g.drawLine(i + 16, j + 6, i + 17, j + 6);
g.drawLine(i + 12, j + 7, i + 16, j + 7);
g.drawLine(i + 11, j + 8, i + 12, j + 8);
g.drawLine(i + 15, j + 8, i + 15, j + 8);
g.drawLine(i + 12, j + 9, i + 14, j + 9);
g.drawLine(i + 13, j + 10, i + 13, j + 10);
g.drawLine(i + 11, j + 11, i + 19, j + 11);
g.drawLine(i + 16, j + 9, i + 16, j + 20);
g.drawLine(i + 18, j + 12, i + 19, j + 12);
g.drawLine(i + 11, j + 14, i + 12, j + 14);
g.drawLine(i + 11, j + 15, i + 13, j + 15);
g.drawLine(i + 13, j + 18, i + 13, j + 18);
g.drawLine(i + 14, j + 19, i + 15, j + 19);
}
public void drawBoard(Graphics g)
{
g.setColor(backColor);
g.fillRect(0, 0, cx * 12, cy * 15);
g.setColor(foreColor);
// Draw border
g.setColor(Color.gray);
g.drawRect(3, 3, boardW - 6, boardH - 6);
g.setColor(Color.white);
g.drawRect(4, 4, boardW - 6, boardH - 6);
g.setColor(foreColor);
// Draw H line
for(int i = 0; i < 10; i++) drawBoardLine(g, 0, i, 8, i);
// Draw V line
drawBoardLine(g, 0, 0, 0, 9);
for(int i = 1; i < 8; i++)
{
drawBoardLine(g, i, 0, i, 4);
drawBoardLine(g, i, 5, i, 9);
}
drawBoardLine(g, 8, 0, 8, 9);
// Draw X pos
drawX(g, 1, 2);
drawX(g, 7, 2);
for(int j = 0; j < 9; j += 2)
{
drawX(g, j, 3);
drawX(g, j, 6);
}
drawX(g, 1, 7);
drawX(g, 7, 7);
// Draw King pos
drawBoardLine(g, 3, 0, 5, 2);
drawBoardLine(g, 3, 2, 5, 0);
drawBoardLine(g, 3, 9, 5, 7);
drawBoardLine(g, 3, 7, 5, 9);
}
public void drawX(Graphics g, int i, int j)
{
byte byte0 = 4;
int k = x0 + cx * i;
int l = y0 + cy * j;
if(i > 0)
{
g.drawLine(k - 2, l - cy / byte0, k - 2, l - 2);
g.drawLine(k - 2, l + cy / byte0, k - 2, l + 2);
g.drawLine(k - cx / byte0, l - 2, k - 2, l - 2);
g.drawLine(k - cx / byte0, l + 2, k - 2, l + 2);
}
if(i < 8)
{
g.drawLine(k + 2, l - cy / byte0, k + 2, l - 2);
g.drawLine(k + 2, l + cy / byte0, k + 2, l + 2);
g.drawLine(k + cx / byte0, l - 2, k + 2, l - 2);
g.drawLine(k + cx / byte0, l + 2, k + 2, l + 2);
}
}
public void paint(Graphics g)
{
if (isPaintBusy) return;
isPaintBusy = true;
if(offScreen == null)
{
offScreen = createImage(cx * 12, cy * 15);
offGraphics = offScreen.getGraphics();
offGraphics.setFont(getFont());
offGraphics.setColor(getBackground());
}
drawBoard(offGraphics);
drawPosition(offGraphics);
g.drawImage(offScreen, 0, 0, null);
lblStepNo.setText(stepNo + "/" + stepNum);
isPaintBusy = false;
}
void drawPiece(Graphics g, char pieceChar, int xPos, int yPos)
{
if (isRedAtBottom)
{
yPos = 9 - yPos;
}
else
{
xPos = 8 - xPos;
}
int x = (x0 + cx * xPos) - cx / 2 + 1;
int y = (y0 + cy * yPos) - cy / 2 + 1;
switch(pieceChar)
{
case 'r': drawBlkR(x, y, g); return;
case 'h': drawBlkH(x, y, g); return;
case 'c': drawBlkC(x, y, g); return;
case 'k': drawBlkK(x, y, g); return;
case 'a': drawBlkA(x, y, g); return;
case 'e': drawBlkE(x, y, g); return;
case 'p': drawBlkP(x, y, g); return;
case 'R': drawRedR(x, y, g); return;
case 'H': drawRedH(x, y, g); return;
case 'C': drawRedC(x, y, g); return;
case 'K': drawRedK(x, y, g); return;
case 'A': drawRedA(x, y, g); return;
case 'E': drawRedE(x, y, g); return;
case 'P': drawRedP(x, y, g); return;
}
}
public void drawBoardLine(Graphics g, int xPos1, int yPos1, int xPos2, int yPos2)
{
g.drawLine(x0 + cx * xPos1, y0 + cy * yPos1, x0 + cx * xPos2, y0 + cy * yPos2);
}
void drawPosition(Graphics g)
{
for (int i = 0; i < 32; i++) pieceCurrXY[i] = pieceInitXY[i];
// Get current position
for (int iStep = 0; iStep < stepNo; iStep++)
{
for (int i = 0; i < 32; i++)
{
if (pieceCurrXY[i] == stepListXYt[iStep]) pieceCurrXY[i] = 100;
if (pieceCurrXY[i] == stepListXYf[iStep]) pieceCurrXY[i] = stepListXYt[iStep];
}
}
for (int i = 0; i < 32; i++)
{
if (pieceCurrXY[i] > 89) continue;
drawPiece(g, pieceName.charAt(i), pieceCurrXY[i]/10, pieceCurrXY[i]%10);
}
}
public void init()
{
setLayout(null);
setBackground(backColor);
isRedAtBottom = true;
btnSwitchSide = new Button("@");
btnShowLast = new Button("#");
hsbStepNo = new Scrollbar(0, 0, 1, 0, 30);
lblStepNo = new Label("0/0");
btnBack = new Button("<");
btnNext = new Button(">");
add(btnSwitchSide);
add(btnShowLast);
add(hsbStepNo);
add(lblStepNo);
add(btnBack);
add(btnNext);
int y = ((y0 + cy * 10) - cy / 2) + 4;
btnSwitchSide.reshape(14, y, 15, 19);
btnShowLast.reshape(32, y, 15, 19);
hsbStepNo.reshape(50, y, 100, 19);
lblStepNo.reshape(153, y, 45, 19);
lblStepNo.setAlignment(1);
btnBack.reshape(201, y, 15, 19);
btnNext.reshape(219, y, 15, 19);
String s;
// Init "Position" param
if ((s = getParameter("Position")) == null)
{
s = "I0,H0,G0,F0,E0,D0,C0,B0,A0,H2,B2,I3,G3,E3,C3,A3|A9,B9,C9,D9,E9,F9,G9,H9,I9,B7,H7,A6,C6,E6,G6,I6";
}
for(int i = 0; i < 32; i++)
{
pieceInitXY[i] = 100;
if ((s.charAt(i * 3) >= 'A') && (s.charAt(i * 3) <= 'I'))
{
pieceInitXY[i] = (s.charAt(i * 3) - 'A') * 10 + (s.charAt(i * 3 + 1) - '0');
}
}
// Init "MoveList" param
if((s = getParameter("MoveList")) != null)
{
int iStep = 0;
for (int i=0; i < s.length(); i+=6, iStep++)
{
stepListXYf[iStep] = (s.charAt(i ) - 'A') * 10 + (s.charAt(i + 1) - '0');
stepListXYt[iStep] = (s.charAt(i + 3) - 'A') * 10 + (s.charAt(i + 4) - '0');
}
stepNum = iStep;
hsbStepNo.setValues(hsbStepNo.getValue(), 1, hsbStepNo.getMinimum(), stepNum + 1);
hsbStepNo.setPageIncrement((stepNum < 5)?1:(stepNum/5));
}
}
public boolean handleEvent(Event event)
{
if(event.target.equals(hsbStepNo))
{
stepNo = hsbStepNo.getValue();
paint(getGraphics());
return true;
}
else
{
return super.handleEvent(event);
}
}
public boolean action(Event event, Object obj)
{
if(obj.equals("@"))
{
isRedAtBottom = !isRedAtBottom;
paint(getGraphics());
return true;
}
else if(obj.equals(">"))
{
if(stepNo < stepNum)
{
hsbStepNo.setValue(hsbStepNo.getValue() + 1);
stepNo = hsbStepNo.getValue();
paint(getGraphics());
return true;
}
}
else if(obj.equals("<"))
{
if(stepNo > 0)
{
hsbStepNo.setValue(hsbStepNo.getValue() - 1);
stepNo = hsbStepNo.getValue();
paint(getGraphics());
return true;
}
}
return super.action(event, obj);
}
private Scrollbar hsbStepNo;
private Button btnSwitchSide;
private Button btnShowLast;
private Label lblStepNo;
private Button btnNext;
private Button btnBack;
private int x0 = 20;
private int y0 = 20;
private int cx = 26;
private int cy = 26;
private int boardW = 247;
private int boardH = 299;
private Color foreColor = Color.white;
private Color backColor = new Color(153, 204, 153);
private Color boxColor;
private int pieceInitXY[] = new int[32];
private int pieceCurrXY[] = new int[32];
private String pieceName = "RHEAKAEHRCCPPPPPrheakaehrccppppp";
private int stepNo = 0;
private int stepNum = 0;
private boolean isRedAtBottom;
private int stepListXYf[] = new int[512];
private int stepListXYt[] = new int[512];
private boolean isPaintBusy = false;
private Image offScreen;
private Graphics offGraphics;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -