//找到纵座标,也不在棋盘线外 isOutsideChessboard = false; break;
}
}
//纵标在棋盘线外 if(isOutsideChessboard){
return null; }
//横座标和纵座标都不在棋盘线外 return p;
}
4.2 人人对战
4.2.1 设置标记--whoRun
表示应该轮到谁下棋,1为玩家1下,2为玩家2下,-1表示玩家正在下
private void setPlayer2Run(){ }
whoRun = 2; //默认第一个玩家先行 private int whoRun = 1; private void setPlayer1Run(){ }
private boolean isPlayer1Run(){ }
private boolean isPlayer2Run(){ }
return whoRun==2; return whoRun==1; whoRun = 1;
//是否轮到人类玩家下子
//是否轮到人类玩家下子
//正在下的过程中,主是因为电脑有较长的计算时间,这期间一定不可以再响应触摸事件
private void setOnProcessing(){
8
}
whoRun = -1;
//是否正在下某一步棋过程中,主是电脑下棋时需要较长的计算时间,这期间一
private boolean isProcessing() { }
return whoRun == -1;
定不可以再响应触摸事件
4.2.2 改写onTouchEvent方法,监听触摸事件,在触摸处下棋子 //处理触摸事件
public boolean onTouchEvent(MotionEvent event) { }
private synchronized void playerRun(MotionEvent event){ }
private void player1Run(MotionEvent event){
//取得正确座标的棋子
Point point = newPoint(event.getX(), event.getY());
9
//只处理开局后的触摸弹起事件
if(event.getAction()!=MotionEvent.ACTION_UP){ }
//是否正在处理一步棋的过程中 if(isProcessing()){ }
//下一步棋 playerRun(event);
return true; return true;
return true;
4.2.3 playerRun方法判断轮到谁下棋子
if(isPlayer1Run()){//第一玩家下棋 }
player1Run(event); player2Run(event);
}else if(isPlayer2Run()){//第二玩家下棋
4.2.4 玩家一下棋的方法
}
if(point==null){//在棋盘外 }
if(allFreePoints.contains(point)){//此棋是否可下 }
//设置正在下棋子 setOnProcessing();
player1.run(player2.getMyPoints(),point); //刷新一下棋盘 refressCanvas();
//判断第一个玩家是否已经赢了 if(!player1.hasWin()){//我还没有赢 }
if(player2==computer){//如果第二玩家是电脑 }
//否则,提示游戏结束 setMode(PLAYER_TWO_LOST);
//10豪秒后才给玩家2下棋
refreshHandler.computerRunAfter(10); setPlayer2Run();
return ;
}else{
}else{
4.2.5 玩家二下棋的方法
private void player2Run(MotionEvent event){
Point point = newPoint(event.getX(), event.getY()); if(point==null){ }
if(allFreePoints.contains(point)){//此棋是否可下
setOnProcessing();
player2.run(player1.getMyPoints(),point); //刷新一下棋盘 refressCanvas(); //判断我是否赢了
10
return ;
}
}
if(!player2.hasWin()){//我还没有赢 }
setPlayer1Run(); //否则,提示游戏结束 setMode(PLAYER_ONE_LOST); }else{
4.2.6 实现判断输赢的方法
private final Point temp = new Point(0, 0); //我是否是否赢了
public final boolean hasWin(){
if(myPoints.size()<5){
return false; }
//只计算从最后一步棋子带来的变化
Point point = myPoints.get(myPoints.size()-1); int count = 1;
int x=point.getX(),y=point.getY(); //横向
temp.setX(x).setY(y);
while (myPoints.contains(temp.setX(temp.getX()-1)) && temp.getX()>=0
count ++;
&& count<5) {
}
if(count>=5){
return true; }
temp.setX(x).setY(y);
while (myPoints.contains(temp.setX(temp.getX()+1)) &&
count ++;
temp.getX() } if(count>=5){ return true; 11
相关推荐: