Home
JavaEE
Java GUI
Framework
DHtml
Android
插画
教程下载

ATOM 2.0   RSS 2.0
Add to iGoogle Add to Live.com
  • 今天终于收到金山快盘的邀请码
  • 利用最短ie判断在不同浏览器上播放背景音乐
  • 对插画方面的一点感受与回忆
  • 网上看到的两个死里逃生的图片,记录一下
  • 今天开通了糖果社区,附几个激活码
  • 终于可以实现我的多个微博实时同步了
  • 备案和现场拍照就是对站长们的瞎折腾
  • 对Android在互联网应用开发上的纠结
  • 收藏夹中的书签都没了,决定写一个自已的书签管理器
  • 测试自已整理的本机的webapps客户端发送博文能否成功。
  • 今天开通了糖果社区,附几个激活码
  • 终于可以实现我的多个微博实时同步了
  • 备案和现场拍照就是对站长们的瞎折腾
  • 昨天借用飞姐的佳作做的一个浪漫爱情网页
  • 有几个腾讯微博的邀请码(实时更新)
  • BB的网站移到了GAE-JAVA上了
  • 一个基于GAE Python Web.py和JQuery的留言本程序
  • 类许愿墙的一个告白网站和一个电子书网站
  • Android中用Bitmap获取图片中某个区域的图象
  • 对暴力破解带密码的QQ相册的可行性分析
  • 对淘宝web旺旺版一些通讯接口的研究

简单的井字过3关,5子棋等的多子棋的游戏算法实现

posted by David Chen at September 14, 2008, 1:27 PM    

以下这个算法很简单,未用代码验证过。
1) 定义类Point
class Point {
int pno; //索引,唯一, 在网格中的位置(左上角为0,向右为1)
int r; //point所在的行
int c; //所在的列
Player player; //如果该点还未放子,则为null;多对一关联
boolean samePlayer ( Point p ) {
return p!=null && player.equals(p.player);
}
}

2) 定义玩家类Player
class Player {
int pid; //玩家索引号,唯一
boolean equals (Object player) {
return (player != null && pid == ((Player) player).pid);
}
}

3) 定义全局变量
int totalColumns; int totalRows; List allPoints;

4) 当某玩家占领一个点的时候,将该点看成p0,其周边的点看成p1~p8,由此计算连线的状态。
如图,p0.pno是p0在网格中的位置(左上角为0,0,向右为0,1),
p1.pno = p0.pno - (totalColumns + 1);
... ...
p8.pno = p0.pno + (totalColumns + 1);

5) 取得Point的函数 Point getPoint( int pno ) {}
取得Player的函数 Player getPlayer( int pid ) {}

6) 递归函数, gameN 表示n子棋游戏
int count( Point p, int gameN ) {
int total1 = 1, total2 = 1, total3 = 1, total4 = 1;
// 初始为1,是因为包括p这个点
// 计算 p1 ~ p8
int direction1 = (totalColumns + 1);
Point p1 = getPoint( p.pno - direction1 );
Point p8 = getPoint( p.pno + direction1 );
//... ... p2 ~ p8
if( p.samePlayer(p1) ) {
total1 += count( p1, -1 * direction1 ) + count( p8, direction1 );
if( gameN <= total1 ) return total1;
}
if( p.samePlayer(p2) ) {
total2 += count( p2, -1 * direction2 ) + count( p7, direction2 );
if( gameN <= total2 ) return total2;
}
if( p.samePlayer(p3) ) {
total3 += count( p3, -1 * direction3 ) + count( p6, direction3 );
if( gameN <= total3 ) return total3;
}
if( p.samePlayer(p4) ) {
total4 += count( p4, -1 * direction4 ) + count( p5, direction4 );
if( gameN <= total4 ) return total4;
}
return Math.max(total1, Math.max(total2, Math.max(total3, total4)));
}

int count( Point p, int direction) {
int total = 0;
// 计算 direction 方向上的点
Point tmp = getPoint( p.pno + direction );
if( p.samePlayer(tmp) ) {
total = 1;
total += count( tmp, direction);
}
return total;
}
Labels:   Others  
Trackback:   http://cwq.iou1314.com/game-3-5_a339
微博最近更新
[2010-07-31 16:33]    今天下午又将昨天赢的哎齐出来了,郁闷,一进一出,要有入没出才行啊。
[2010-07-31 07:40]    昨晚又去啊泄度开台,呢次赢左差唔多3旧水,下周星期一请假,回郁南去转社保和入党资料。
本站内的任何文章,只代表个人意见或学习所用,如有版权声明,请尊重作者的劳动成果,在转载时请保留原始链接并注明出处。
Power by David's PhpCms, © 2007 - 2010 CWQ.IOU1314.COM All Rights Reserved.