想问一下r和c的算法为什么要获取y再算(y - 25) /58
这是在别人的CSDN帖子中截取的代码(本来想借鉴着做个中国象棋的游戏的但是不是很明白这个算法的原因)
public Canvas(){
//chessimage = new ImageIcon("黑车.gif").getImage();
font = new Font("宋体",Font.BOLD,30);
initMap();
addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
//super.mouseClicked(e);
//System.out.println(e.getButton());
if(e.getButton()==MouseEvent.BUTTON1){
int x = e.getX();
int y = e.getY();
//System.out.println(e.getX()+","+e.getY()+"["+x+","+y+"]");
int r = (y - 25) /58;
int c = (x - 25) /58;
//System.out.println("r = "+r+", c = "+c);
//选子
if(select_c == -1&&map[r][c]!=0){
if(RangeChecker.selectInRange(map,r,c,isBlack)){//isBlack 是 红方
select_c = c;
select_r = r;
repaint();
}
else{
showFail("请选择己方棋子");
}
return ;// 选子阶段结束
}
boolean valid = RangeChecker.inRange(map, select_r,select_c,r, c, isBlack);
if(!valid){
showFail("下子失败");
}
Chess chess = manager.getTheChess(map[select_r][select_c]);
valid = chess.check(map, select_r, select_c, r, c, isBlack);
if(!valid||(map[select_r][select_c]<1000&&map[r][c]<1000&&map[r][c]!=0)||(map[select_r][select_c]>1000&&map[r][c]>1000&&map[r][c]!=0)){
showFail("下子失败,规则不允许");
select_c = -1;
select_r = -1;
repaint();
return ;
}
map[r][c] = map[select_r][select_c ];
map[select_r][select_c ] = 0;
select_c = -1;
select_r = -1;
isBlack = !isBlack;//对方来下
repaint();
}
}
});