大道五目Flash英文版(Renju Problems)程序分析之禁手判断

现在界面已经完成了,

 

刚刚完成了禁手算法,把代码共享出来:

ContractedBlock.gifExpandedBlockStart.gifCode
ExpandedBlockStart.gifContractedBlock.gifprivate function IsForbidden(x:int, y:int, board:Array):int {
            var index:
int = x*15+y;
            
            
// set this position(x,y) to black.
            board[index] = CellType.BLACK;
            
            
// 1st check whether there is overline.
            var array:Array =this.GetAnalyseArray(x,y,board);
            
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if(this.IsOverline(array)) {
                board[index] 
= CellType.EMPTY;
                
return ResultType.OVERLINE;
            }

            
            
// use recursion to check whether there is double-4 or double-3.
            
// the check methord is count the open 3 and open 4's count,
            
// if one of them larger than 1 so is a forbidden.
            var count3:int = 0;
            var count4:
int = 0;
            
            var i, j:
int = 0;
ExpandedSubBlockStart.gifContractedSubBlock.gif            
for(i=0; i<4; i++{
                
                
// calculate open 4's count.
ExpandedSubBlockStart.gifContractedSubBlock.gif
                for(j=3; j<7; j++{
                    
// patten: ?0x000?
                    if(array[i][j]==CellType.BLACK&&this.IsEmpty(i,j+1,array)&& 
                        array[i][j
+2]==CellType.BLACK&&array[i][j+3]==CellType.BLACK&&
                        array[i][j
+4]==CellType.BLACK&&
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
this.IsNotBlack(i,j-1,array)&&this.IsNotBlack(i,j+5,array)) {
                        count4
++;
                        
continue;    
                    }

                    
// patten: ?00x00?
                    if(array[i][j]==CellType.BLACK&&array[i][j+1]==CellType.BLACK&& 
                        
this.IsEmpty(i,j+2,array)&&array[i][j+3]==CellType.BLACK&&
                        array[i][j
+4]==CellType.BLACK&&
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
this.IsNotBlack(i,j-1,array)&&this.IsNotBlack(i,j+5,array)) {
                        count4
++;
                        
continue;
                    }

                    
// patten: ?000x0?
                    if(array[i][j]==CellType.BLACK&&array[i][j+1]==CellType.BLACK && 
                        array[i][j
+2]==CellType.BLACK&&this.IsEmpty(i,j+3,array) &&
                        array[i][j
+4]==CellType.BLACK&&
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
this.IsNotBlack(i,j-1,array)&&this.IsNotBlack(i,j+5,array)) {
                        count4
++;
                        
continue;
                    }

                    
// patten: ??0000??
                    
// not like above three, this check index is the above index plus 1.
                    
// in other words, the check index is 4 to 8 and above index is 3 to 7.
                    if(array[i][j+1]==CellType.BLACK&&array[i][j+2]==CellType.BLACK&& 
ExpandedSubBlockStart.gifContractedSubBlock.gif                        array[i][j
+3]==CellType.BLACK&&array[i][j+4]==CellType.BLACK) {
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
if(this.IsEmpty(i,j,array)&&this.IsNotBlack(i,j-1,array)&&this.IsNotBlack(i,j+5,array)) {
                            count4
++;
                            
continue;
                        }

ExpandedSubBlockStart.gifContractedSubBlock.gif                        
if(this.IsEmpty(i,j+5,array)&&this.IsNotBlack(i,j+4,array)&&this.IsNotBlack(i,j,array)) {
                            count4
++;
                            
continue;
                        }

                    }

                }

                
                var tmpIndex:
int;
                
// calculate open 3's count
ExpandedSubBlockStart.gifContractedSubBlock.gif
                for(j=4; j<7; j++{
                    
// patten: ??0x00??
                    if(array[i][j]==CellType.BLACK&&this.IsEmpty(i,j+1,array)&&
                        array[i][j
+2]==CellType.BLACK&&array[i][j+3]==CellType.BLACK&&
                        
this.IsEmpty(i,j-1,array)&&this.IsEmpty(i,j+4,array)&&
ExpandedSubBlockStart.gifContractedSubBlock.gif                        (
this.IsNotBlack(i,j-2,array)||this.IsNotBlack(i,j+5,array))) {
                        tmpIndex 
= this.IndexConverter(i,j+1,x,y);
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
if(this.IsForbidden(Math.floor(tmpIndex/15),tmpIndex%15,board)==ResultType.NOTHING){
                            count3
++;
                        }

                        
continue;
                    }

                    
// patten: ??00x0??
                    if(array[i][j]==CellType.BLACK&&array[i][j+1]==CellType.BLACK&&
                        
this.IsEmpty(i,j+2,array)&&array[i][j+3]==CellType.BLACK&&
                        
this.IsEmpty(i,j-1,array)&&this.IsEmpty(i,j+4,array)&&
ExpandedSubBlockStart.gifContractedSubBlock.gif                        (
this.IsNotBlack(i,j-2,array)||this.IsNotBlack(i,j+5,array))) {
                        tmpIndex 
= this.IndexConverter(i,j+2,x,y);
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
if(this.IsForbidden(Math.floor(tmpIndex/15),tmpIndex%15,board)==ResultType.NOTHING) {    
                            count3
++;
                        }

                        
continue;
                    }

                    
// patten: ??000??
ExpandedSubBlockStart.gifContractedSubBlock.gif
                    if(array[i][j]==CellType.BLACK&&array[i][j+1]==CellType.BLACK&&array[i][j+2]==CellType.BLACK) {
                        
if(this.IsEmpty(i,j-2,array)&&this.IsEmpty(i,j-1,array)&&
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
this.IsEmpty(i,j+3,array)&&this.IsNotBlack(i,j-3,array)) {
                            tmpIndex 
= this.IndexConverter(i,j-1,x,y);
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
if(this.IsForbidden(Math.floor(tmpIndex/15),tmpIndex%15,board)==ResultType.NOTHING) {
                                count3
++;
                                
continue;
                            }

                        }

                        
if(this.IsEmpty(i,j-1,array)&&this.IsEmpty(i,j+3,array)&&
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
this.IsEmpty(i,j+4,array)&&this.IsNotBlack(i,j+5,array)) {
                            tmpIndex 
= this.IndexConverter(i,j+3,x,y);
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
if(this.IsForbidden(Math.floor(tmpIndex/15),tmpIndex%15,board)==ResultType.NOTHING) {
                                count3
++;
                                
continue;
                            }

                        }

                    }

                }

            }
    
            
            
// reset the position to empty and return result.
            board[index] = CellType.EMPTY;
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if(count3>1{
                
return ResultType.DOUBLE_THREE;
            }

ExpandedSubBlockStart.gifContractedSubBlock.gif            
if(count4>1{
                
return ResultType.DOUBLE_FOUR;
            }

            
return ResultType.NOTHING;
        }

就是通过一个递归判断是否当前下子为禁手。

测试后发现可以判断复杂的禁手,如:


转载于:https://www.cnblogs.com/boringlamb/archive/2008/11/04/1326291.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google Earth的十个常用技巧应用

2004年10月27日Google宣布收购了美国的一家卫星图像公司Keyhole公司&#xff0c;并于2005年6月推出了Google Earth系列软件。用户们可以通过下载一个Google Earth客户端软件&#xff0c;就可以免费浏览全球各地的高清晰度卫星图片。 Google卫星地图的横空出世&#xff0c;催生了…

BENET上海分公司网络改造项目设计实施方案(S1项目实践)

BENET上海分公司网络改造项目设计实施方案 目录 目录- - 1 - 一、企业用户需求分析- - 2 - 1.1、项目概述-- - 2 - 1.2、系统需求概括-- - 3 - 1.3、项目建设的要求-- - 4 - 二、项目方案的整体设计与实施- - 5 - 2.1、网络系统的分析与设计-- - 5 - 2.2、系统及应用服务的分析…

IIS6.0应用程序池回收和工作进程【转:http://www.cnblogs.com/freshman0216/archive/2008/06/02/1212460.html】...

公司的一个网站程序长时间运行后&#xff0c;速度变慢&#xff0c;重新启动网站后速度明显变快&#xff0c;估计是网站程序占用的内存和CPU资源没能及时释放&#xff0c;才需要每隔一段时间重启网站释放资源。但手工重启总不能算解决问题的方法&#xff0c;怎样才能实现自动管理…

配置IPsec on GRE Tunnel with IOS Firewall and NAT

配置IPsec on GRE Tunnel with IOS Firewall and NAT<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />详细配置见附件

广播地址详谈!

一、问题的提出大家看到这个标题&#xff0c;一定会觉得非常简单&#xff0c;不错&#xff0c;对于高手们来说&#xff0c;这确实不值一提&#xff0c;但是&#xff0c;对于广大非高手的兄弟&#xff0c;还是有必要了解一下。以前&#xff0c;我对广播地址的认识也是模模糊糊&a…

多核分布式队列的实现:“偷”与“自私”的运用(1)

多核分布式队列的实现&#xff1a;"偷"与"自私"的运用 在讨论本文的正题前&#xff0c;不得不先说一些闲话&#xff0c;嫌哆嗦者可以跳过"前言"部分不读。1. 前言在发表了"老子是伟大的多核计算科学家" &#xff08;链接&#xff1a;[…

近期刷题记录表

9月14日&#xff1a;   luogu P1627 [CQOI2009]中位数 题意&#xff1a;给出1~n的一个排列&#xff0c;统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后&#xff0c;位于中间的数。 题解&#xff1a;根据中位数的性质&#xff0c…

《性能测试从零开始--LoadRunner入门》读书笔记(四)

终于看完了澳网的赛事了&#xff0c;今天要把第五章的读书笔记完成&#xff0c;哈哈。 4.参数化 书中花了不少力气说明这方面的用法&#xff0c;可见参数化在整个脚本的制作过程中的重要性。在这个session开始的时候&#xff0c;书使用了不少的废话去说明白参数化的意义和参数化…

我的RSS我做主:My RSS

昨天晚上通过google reader 浏览自己的网站时发现&#xff0c;Rss输出的内容比较简单&#xff0c;没有我想输出内容,诸如“评论数”、“评论文章”&#xff0c;“永久链接”等等。修改wordpress RSS 输出函数话&#xff0c;每次更新更新wordpress又要重新改一次&#xff0c;比较…

luogu P3407 散步 二分答案

题目描述 一条道路上&#xff0c;位置点用整数A表示。 当A0时&#xff0c;有一个王宫。当A>0&#xff0c;就是离王宫的东边有A米&#xff0c;当A<0&#xff0c;就是离王宫的西边有A米。 道路上&#xff0c;有N个住宅从西向东用1-N来标号。每个住宅有一个人。住宅只会存在…

网络攻击与防御 实验1

做实验的截图 转载于:https://www.cnblogs.com/ma1998/p/11536582.html

SQL注入原理-手工联合注入查询技术

实验报告记录 得到实验结果 转载于:https://www.cnblogs.com/ma1998/p/11536959.html

51CTO寄来的奖品

这两周都是天天上班面对着电脑,挺无聊的.不过幸好有51CTO与我相伴,一直都在关注51CTO的活动.最近我所在的项目组的老员工个个都新买了笔记本,之前他们所用的旧笔记本自然退还给公司了.呵呵,这样像我这样的新员工就有笔记本分配的了,虽然旧了些还是将就着用了.就这样,回到员工宿…

实验3 SQL注入原理-万能密码注入

实验目的 &#xff08;1&#xff09;理解【万能密码】的原理 &#xff08;2&#xff09;学习【万能密码】的使用 实验原理 一、访问目标网站 1.选择一个存在漏洞的论坛 http://192.168.1.3:8009 进入 2.输入用户名【admin】&#xff0c;密码【2‘ or 1】 转载于:https://www.cn…

[转]使用URLConnection下载文件或图片并保存到本地

Codeimport java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; /** * 使用URLConnection下载文件或图片并保存到本地。 * * author 老紫竹(laozizhu.com) …

整理了一些t-sql技巧

把长日期转换为短日期 Convert(char(10),getdate(),120) MS-SQL数据库开发常用汇总 1.按姓氏笔画排序:Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 2.数据库加密:select encrypt(原始密码)select pwdencrypt(原始密码)select pwdcompa…

STM32——IDA反编译 Hex\Bin文件成C代码(转)

转&#xff1a;https://blog.csdn.net/daidi1989/article/details/86304843 IDA是一款功能强大的反编译软件&#xff0c;网上找了许久没找到它的使用教程&#xff0c;经过摸索可将STM32的hex文件进行反汇编&#xff0c;操作步骤如下&#xff0c;首先下载IDA Pro版破解软件&…

STM32——ST-LINK通过BIN文件烧录STM32芯片(转)

转&#xff1a;https://www.cnblogs.com/schips/p/8215711.html 提供2种下载方式 KEIL编译下载 KEIL 5 在开发中还算是比较强大的一种平台。在开发中通过编译再下载会显得很方便。 尽管这个是老生常谈的问题&#xff0c;但还是在这里补全这个设置步骤 1.点击“魔法棒” 2.Debug…

离线应用架构

看完了Google的官方架构文档&#xff08; [url]http://code.google.com/apis/gears/architecture.html[/url]&#xff09;&#xff0c; 结合了Modal和Modeless两种优点&#xff0c;总结出如下架构模式&#xff1a;这种架构的好处是&#xff0c;用户总是把数据存在本地&#xff…

突破PTU网页认证校园网开热点

人总有浮躁&#xff0c; 之前只是把脚本写好&#xff0c;没有实操过。 [这是更新过的教程&#xff0c;保证只要按教程走一定可以--->运行成功] 教程可能有些生涩&#xff0c;需要一点耐心 ###ps&#xff1a;不保证热点不出现断网情况【此时手机WiFi关开一次既解决】 教程篇 …