回 帖 发 新 帖 刷新版面

主题:自编的五子棋算法(含源代码)

自己用javascript编了个五子棋算法,问题多多,谁能按照我的思路给出修改算法吗?谢谢了(源代码如下:)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>

</head>
<body>
<script language="javascript">
//////////画棋盘
var i,j;
var counter=10;
var obj;
var IsDown=false;
document.write("<table border='0'>");
for(i=1;i<=15;i++){
    document.write("<tr>")
    for(j=1;j<=15;j++){
        document.write("<td id="+i+j+" class=" +'['+i+']['+j+']'+ " bgcolor='#CCCCCC' width='20' height='23' onClick='down(this);IsWin()' onmouseover='xy(this)'>");
        document.write("</td>");
    }
    document.write("</tr>");
}        

///////显示坐标
function xy(which){
    document.form1.t1.value=which.className;
}

var flag=true;
var num_red=0;
var num_green=0;
var position_red=new Array();
var position_green=new Array();
var str1,str2
///////放棋子
function down(which){
if(IsDown==true){
    classname=which.className;
    counter=10;
    var c=new Array();
    for(var i=0;i<classname.length;i++)
        c[i]=classname.substring(i,i+1);
    for(var i=0;i<classname.length;i++)
        if(c[i]==']'&&c[i+1]=='['){
            str1=classname.substring(1,i);
            str2=classname.substring(i+2,classname.length-1);
        }        
    if(flag==true){
        which.style.background="red";
        position_red[num_red]=str1+"/"+str2;
        num_red++;
        flag=false;
        IsHave=true;
        return flag;
    }
    if(flag==false){
        which.style.background="green";
        position_green[num_green]=str1+"/"+str2;
        num_green++;
        flag=true;
        IsHave=false;
        return flag;
    }
}
else
    if(confirm("请先开始")==0)
        window.close();    
}

//////获得坐标值;
var position_red_x=new Array();
var position_red_y=new Array();
var position_green_x=new Array();
var position_green_y=new Array();
function IsWin(){
var i,j,k;
var ch_red=new Array();
for(i=0;i<position_red.length;i++){
    for(k=0;k<position_red.length;k++){
        ch_red[k]=position_red[i].substring(k,k+1);
        delete  k;
    }    
    for(var k=0;k<ch_red.length;k++){    
        if(ch_red[k]=='/'){
            position_red_x[i]=position_red[i].substring(0,k);
            position_red_y[i]=position_red[i].substring(k+1,position_red.length+1);
        }
        else continue;        
    }        
}    
var ch_green=new Array();    
for(i=0;i<position_green.length;i++){
    for(k=0;k<position_green.length;k++){
        ch_green[k]=position_green[i].substring(k,k+1);
        delete  k;
    }    
    for(var k=0;k<ch_green.length;k++){    
        if(ch_green[k]=='/'){
            position_green_x[i]=position_green[i].substring(0,k);
            position_green_y[i]=position_green[i].substring(k+1,position_red.length+1);
        }
        else continue;        
    }                
}    
if(Win(position_red_x)==1){
    alert("红方胜利");
    //location.reload();
}
if(Win(position_green_y)==1 || Win(position_green_y)==1){
    alert("绿方胜利");
    //location.reload();
}
}

////////是否胜利;
function Win(a){
var temp;
var n=0,k=0;
var w;
var t=new Array();
var win=new Array();
for(var i=0;i<a.length;i++){
    for(var j=i+1;j<a.length;j++){
        if(a[j]==a[i]){
            n++;
            break;
        }
        else{
            t[k++]=a[j];
            continue;
        }        
    }    
    for(var k=0;k<t.length;k++)
        if(a[i]==t[k])
            n++;    
}            
if(n==4)
    return 1;
}

////////////计时函数
function InTime()
{
    IsDown=true;
    document.form1.t2.value="你还剩下"+--counter+"秒";
    if(counter==0){
        alert("你的时间到了,系统将随机下子");
        counter=10;
        RandomDown();
    }
}
function MyInterval(){
    var myinterval=window.setInterval("InTime()",1000);
}
/////时间到随机下棋
function RandomDown()
{
}

/////////测试
function Fortest(){
for(var i=0;i<position_red_x.length;i++)
    document.write(position_red_x[i]+"\t\t");
}
</script>
<form name="form1" method="post" action="">
  <input name="t1" type="text" size="8" style="border-style:outside ">
  <input type="button" name="Submit" value="开始" onClick="MyInterval()"  >
  <input name="t2" type="text" style="font-family:Arial; font-weight:bolder; color:#FF0000; background-color:#fef4d9; padding:0px; border-style:none;" size="10">
  <input type="button" name="Submit" value="按钮" onClick="Fortest()">
</form>
</body>
</html>

回复列表 (共14个回复)

沙发

人机版的?我怎么没有看到AI部分啊~~~?

板凳

楼上的仁兄,暂时还没有完善啊.只是请教一下算法,至于人机版的很好实现.

3 楼

人机版的很好实现??怎么做?

对战版的基本上没有什么算法问题啊。你要问什么算法?

4 楼

至于人机版的你只要在相关的位置上进行搜索去放,以前见一个朋友写过,并不是很难.
我的程序采用的算法比较变态,.请高手们贴出安我的思路进行的代码.

5 楼

人机版的有AI,有AI就有棋力,随便写个棋力超差有什么意思,电脑傻B一个,谁会去玩?写人机版的不是难不难的问题,是要写出棋力强的AI难不难的问题。
我还是不知你要问什么算法,人和人下的话没有什么算法问题,程序提供一个环境,里面有棋类游戏的规则。
至于五子棋AI,现在世界上已经有棋力极强的AI程序了,在网上搜索一下,我知道的有five6,基本上下赢最强的BOSS是不可能的事。你想研究看看吧,对了,www.csdn.net里有五子棋AI大比拼的擂台,你如果觉得你的人机版写得好,去比比吧。

6 楼

我运行了一下,你的五子棋没有判断输赢,不完善啊
对战平台要用网上对战,整个自己和自己下棋,没什么意思

7 楼

不太对哦

8 楼

")MsbBox("hoo

9 楼

")MsgBox("hoo

10 楼

怎么看不懂?

我来回复

您尚未登录,请登录后再回复。点此登录或注册