第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/19 20:07:39 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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分)基于Android的五子棋游戏设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1v9th2jl2g4x67j2pupj_6.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top