云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > (只要10分)基于Android的五子棋游戏设计

(只要10分)基于Android的五子棋游戏设计

  • 62 次阅读
  • 3 次下载
  • 2026/4/27 15:16:42

canvas.drawLine(line.xStart, line.yStart, line.xStop, line.yStop, paint); }

}

4.4.2分析规则

判断各个四个方向的棋子:

在某个方向(八个中的一个)可下多少棋子,这个方法是第一分析中的核心方法

private void countPoint(List myPoints, List enemyPoints, Point point, FirstAnalysisResult fr,int direction,boolean forward) {

//在某个方向上是否还能下到满五个棋子

private int maxCountOnThisDirection(Point point,List enemyPoints,int

int x=point.getX(),y=point.getY(); switch (direction) { //横向 case HENG:

while (!enemyPoints.contains(point.setX(point.getX()-1)) && point.getX()>=0

}

if(myPoints.contains(pointToNext(point,direction,forward))){ }

fr.count ++;

if(myPoints.contains(pointToNext(point,direction,forward))){ }

fr.aliveState=HALF_ALIVE;

fr.count ++;

if(myPoints.contains(pointToNext(point,direction,forward))){

fr.count ++;

if(myPoints.contains(pointToNext(point,direction,forward))){

fr.count ++;

}else if(enemyPoints.contains(point) || }

fr.aliveState=HALF_ALIVE;

isOutSideOfWall(point,direction)){

}else if(enemyPoints.contains(point) || }

fr.aliveState=HALF_ALIVE;

fr.aliveState=HALF_ALIVE;

isOutSideOfWall(point,direction)){

}else if(enemyPoints.contains(point) || isOutSideOfWall(point,direction)){

}else if(enemyPoints.contains(point) || isOutSideOfWall(point,direction)){

direction,int count){

&& count<6) {

count ++;

- 21 -

}

point.setX(x);

while (!enemyPoints.contains(point.setX(point.getX()+1)) &&

point.getX()

}

point.setY(y);

while (!enemyPoints.contains(point.setY(point.getY()+1)) && } break;

count ++; count ++;

} break;

count ++;

//纵向 case ZHONG:

while (!enemyPoints.contains(point.setY(point.getY()-1)) && point.getY()>=0)

point.getY()

//正斜向 / case ZHENG_XIE:

while

(!enemyPoints.contains(point.setX(point.getX()-1).setY(point.getY()+1)) && point.getX()>=0 && point.getY()

}

point.setX(x).setY(y); while

count ++;

(!enemyPoints.contains(point.setX(point.getX()+1).setY(point.getY()-1)) && point.getX()=0 && count<6) {

} break;

count ++;

//反斜 / case FAN_XIE:

while

(!enemyPoints.contains(point.setX(point.getX()-1).setY(point.getY()-1)) && point.getX()>=0 && point.getY()>=0) {

}

point.setX(x).setY(y); while

count ++;

(!enemyPoints.contains(point.setX(point.getX()+1).setY(point.getY()+1)) && point.getX()

count ++;

- 22 -

}

}

} break;

return count;

4.4.3胜负判断

实际上,是根据当前最后一个落子的情况来判断胜负的。实际上需要从四个位置判

断,以该子为出发点的水平,竖直和两条分别为 45度角和135度角的线,目的是看在这四个方向是否最后落子的一方构成连续五个的棋子,如果是的话,就表示该盘棋局已经分出胜负。

4.4.4算法实现描述

开始分析,扫描所有空白点,形成第一次分析结果:

private Point doFirstAnalysis(List comuters, List humans){

int size = allFreePoints.size(); Point computerPoint = null; Point humanPoint = null; int x,y;

FirstAnalysisResult firstAnalysisResult; for (int i = 0; i < size; i++) {

computerPoint = allFreePoints.get(i);

//先把X、Y坐标记下来,因为在分析过程中会改变原来的对象 x = computerPoint.getX(); y = computerPoint.getY();

if(xcurrentRange.xStop || y

if(x==debugx && y==debugy){ }

//尝试在此位置上下一个棋子,并分析在“横向”这个方向上我方可形成的状态,如活4,活3,半活4,

System.out.println(\continue;

y>currentRange.yStop){

// // //

活2等所有状态

firstAnalysisResult = tryAndCountResult(comuters,humans, computerPoint, computerPoint.setX(x).setY(y);//回复点位的原值,以供下次分析

if(firstAnalysisResult!=null){//无返回结果此方向上不可能达到五个棋子,

if(firstAnalysisResult.count==5)//等于5表示在此点上下棋子即可连成5个,胜利了,

HENG);

不再往下进行分析

- 23 -

}

return computerPoint;

//记录第一次分析结果

addToFirstAnalysisResult(firstAnalysisResult,computerFirstResults);

第二次分析,分析第一次形成的结果,第一次分析结果会把一步棋在四个方向上可形成的结果生成最多四个FirstAnalysisResult对象(敌我各四)

//这里要把这四个对象组合成一个SencondAnalysisResult对象,

private Point doComputerSencondAnalysis(Map>

List list = null; SencondAnalysisResult sr = null;

for (Point p : firstResults.keySet()) {

sr = new SencondAnalysisResult(p); list = firstResults.get(p);

for (FirstAnalysisResult result : list) {

if(result.count==4){

if(result.aliveState==ALIVE){//经过前面的过滤,双方都排除了绝杀棋,有活4就

return result.point;//如果有绝杀,第一轮已返回,在此轮活4已经是好的棋子,

firstResults,List sencodResults) {

下这一步了,再下一步就赢了

直接返回,不再往下分析

}else{ }

if(result.aliveState==ALIVE){ }

sr.alive2++; if(sr.alive2==1){ }

computer2Alives.add(sr); computerDouble2Alives.add(sr); }else{

sr.alive3++; if(sr.alive3==1){ }

sr.halfAlive3++;

computer3HalfAlives.add(sr);

computer3Alives.add(sr); computerDouble3Alives.add(sr); }else{

sr.halfAlive4 ++;

computer4HalfAlives.add(sr);

}else if(result.count==3){

}else{

}else{//半活2在第一阶段已被排除,不再处理

- 24 -

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

canvas.drawLine(line.xStart, line.yStart, line.xStop, line.yStop, paint); } } 4.4.2分析规则 判断各个四个方向的棋子: 在某个方向(八个中的一个)可下多少棋子,这个方法是第一分析中的核心方法 private void countPoint(List myPoints, List enemyPoints, Point point, FirstAnalysisResult fr,int direction,boolean forward) { //在某个方向上是否还

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com