| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6028 人关注过本帖
标题:用neo写的中国象棋社0.0.5,120%原创,提供代码
取消只看楼主 加入收藏
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
结帖率:100%
收藏
 问题点数:0 回复次数:7 
用neo写的中国象棋社0.0.5,120%原创,提供代码

先在这下吧: [attach]12634[/attach]


CHINESE CHESS 0.05 BY S.K
中国象棋社0.05

本版本加强了计算机人工智能的智力,是业余棋手很好的对手。
本版本为0.05正式版本,本版本核心源代码全部为S.K(孙锴)一人编写,无任何抄袭,受到国家知识产权法保护,S.K拥有全部版权。本版本源代码全部开放,任何人在不用于商业用途、非赢利前提下,可以任意使用全部或部分,也可以任意修改、散发。但使用必须注明 S.K的版权,否则将受到法律制裁。

本软件图形化库使用了NEO SDK
在此向NEO SDK开发者董凯致谢!

开发日志请参见 开发日志.H
文件说明请参见 文件说明.TXT

我的论坛:http://sunkai.b.lunqun.com/
欢迎与我讨论编程问题!

SK-CHINA 2006-2007 S.K

/*=====================================================================================

注:凡标注 * 者,均只在完全软件包中附带

---------------------------------------------------------------------------------------
MAIN.EXE-----------------CHESS主程序
Logo.skc-----------------CHESS的LOGO(BMP格式,可用任何绘图或图象处理\浏览软件打开及修改)
CHESS.skc----------------棋盘图片(BMP格式,可用任何绘图或图象处理\浏览软件打开及修改)
CHESSM.skc---------------右边的面板(BMP格式,可用任何绘图或图象处理\浏览软件打开及修改)
---------------------------------------------------------------------------------------
*MAIN.C------------------软件源代码,在TC2.0+NEO下编译通过
*ICCS类开局库转换程序1.c-开局库转换软件部分1源代码,用于扩充开局库
*ICCS类开局库转换程序2.c-开局库转换软件部分2源代码,用于扩充开局库
---------------------------------------------------------------------------------------
ChessK.skc---------------红框(BMP格式,可用任何绘图或图象处理\浏览软件打开及修改)
---------------------------------------------------------------------------------------
ChessLos.skc-------------胜利图片(BMP格式,可用任何绘图或图象处理\浏览软件打开及修改)
ChessWin.skc-------------失败图片(BMP格式,可用任何绘图或图象处理\浏览软件打开及修改)
---------------------------------------------------------------------------------------
POINT/2/3.skc------------鼠标指针的ICO,可通过软件修改
---------------------------------------------------------------------------------------
CHESS.ICO----------------软件图标
---------------------------------------------------------------------------------------
Open.skc-----------------开局库文件,可通过文本编辑器修改,扩充
---------------------------------------------------------------------------------------
Chess.ini----------------软件配置文件,可通过文本编辑软件更改设置
---------------------------------------------------------------------------------------
HZK16--------------------点阵字库文件(用来显示文字)
---------------------------------------------------------------------------------------
ChessBJ.skc
ChessBK.skc
ChessBM.skc
ChessBP.skc
ChessBS.skc
ChessBX.skc
ChessBZ.skc
以上为黑(蓝)方棋子图片(BMP格式,可用任何绘图或图象处理\浏览软件打开及修改)
---------------------------------------------------------------------------------------
ChessRJ.skc
ChessRK.skc
ChessRM.skc
ChessRP.skc
ChessRS.skc
ChessRX.skc
ChessRZ.skc
以上为红方棋子图片(BMP格式,可用任何绘图或图象处理\浏览软件打开及修改)
---------------------------------------------------------------------------------------
DATA.TXT-----------------棋局记录(每次下棋后生成)
======================================================================================*/
/*=====================================================================
Date: Success:
2006.7.24 Finish Startchess(*) Writechess()
2006.7.25 Finish Movechess-case 0-7(),8(*)
2006.7.26 Finish Movechess-case 8-11(*)
2006.7.27 Finish Movechess-case 12(***),13(**)
2006.7.28 Finish Movechess-case 14(***)
2006.7.29 Finish All of Movechess(*****) Do some note()
2006.7.30 Start Pcmovechess()
2006.7.31 Finish Pcmovechess-Open-case 1(*) Do Pcmovechess outline()
2006.8.1 Do graphics(***)
2006.8.2 Rewrite Pcmovechess-Open-case 1(***)
2006.8.3 Rewrite All of Pcmovechess-Open(****)
2006.8.4 Can use Mouse(**),Add Some Rules of Movechess(*)
2006.8.11 Finish Pcmoveandeat-case 1(**),other of Pcmoveandeat(**)
2006.8.12 Finish Pcmoveandeat-case 2(**),3-7(**),Pcmovevalue1/2(*)
FINISH CHESS 0.0.1
2006.8.13 Finish All of Pcmoveandeat
2006.8.13 Have Simple Artificial Intelligence
FINISH CHESS 0.0.2
2006.8.14 Add Some Functions
2006.8.15 Make the Artificial Intelligence cleverer
FINISH CHESS 0.0.3
2006.8.16 Finish Pccanbenursed,Improve the Artificial Intelligence
2006.8.17 Improve the Artificial Intelligence
FINISH CHESS 0.0.4
2006.8.18-26 Rewrite All the Code,Begin to use Alpha-Beta Search
2006.8.27-9.10 Finish A-B Search,Rewrite Openbook Code and Open.skc
FINISH CHESS 0.0.5
=======================================================================*/

[此贴子已经被作者于2006-10-15 17:39:49编辑过]

搜索更多相关主题的帖子: 中国象棋 neo 代码 
2006-10-13 19:55
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
我是 http://sunkai.b.lunqun.com/ 论坛的管理员,欢迎大家到那里去讨论编程问题!

我目前是个初中生,相当热爱计算机技术,现在14岁,已是计算机2级并准备明年考3级,我曾经获得全国中小学计算机作品大赛一等奖,初来,希望大家多多支持,这个作品是在暑假时无意间心血来潮的作品,有较高的智商与棋力,以后还会改进.

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-13 20:00
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
哈哈,谢谢大家的鼓励与支持,真的很感谢,10.21我要去参加noip(全国信息技术奥赛),最近较忙,还有就是偶的成绩并非你们大家想象中的那样,我是我们学校的级部第一.有关于人工智能这里要说,我对人工智能 并非 很了解,最近看一些英文的文章让我眼花缭乱,只学会了刚Alpha-Beta 静态搜索 期望窗口 等一基本的,而且在0.0.5中只用了A-B搜索,在0.0.6中我已实现了期望窗口,待我奥赛完后,有时间的话我将静态搜索加上后发到网上,我最近大都在 大榕树 (一个全国中学生奥赛的论坛 www.mydrs.org),在申请斑竹中,帐号是 我爱C,另外大家也可到我的论坛去找我.

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-14 19:50
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

附:新代码部分一(首发):
/*===================================================================================*/

/*判断 BLACKorRED 方的棋子是否能走到chess[x][y],返回可以移动到的个数*/

/*BLACKorRED=0 则是黑方,BLACKorRED=1则是红方*/

int canmoveto(char x,char y,char BLACKorRED) {

int i,t[4]; /*临时数据*/
char pd=0; /*临时判断比较*/

char canmoveall=0; /*可移动到的个数*/

if(chess[x][y]>7)
pd=1;
if(BLACKorRED==pd && chess[x][y]==chessnum[BLACKorRED][4])
return 0;

/* t 数组预先计算,提高执行效率*/
t[0]=x+1;
t[1]=x-1;
t[2]=y+1;
t[3]=y-1;

if(BLACKorRED) {
/*帅*/
if(x>6 && x<10 && y>2 && y<6) {
if(x!=9)
if(chess[t[0]][y]==chessnum[BLACKorRED][4])
canmoveall++;
if(x!=7)
if(chess[t[1]][y]==chessnum[BLACKorRED][4])
canmoveall++;
if(y!=3)
if(chess[x][t[3]]==chessnum[BLACKorRED][4])
canmoveall++;
if(y!=5)
if(chess[x][t[2]]==chessnum[BLACKorRED][4])
canmoveall++;
}
/*仕*/
if(((x==7 || x==9) && ( y==3 || y==5)) || (x==8 && y==4) ) {
if(x==8 && y==4) {
if(chess[t[0]][t[2]]==chessnum[BLACKorRED][3] || chess[t[0]][t[3]]==chessnum[BLACKorRED][3] || chess[t[1]][t[2]]==chessnum[BLACKorRED][3] || chess[t[1]][t[3]]==chessnum[BLACKorRED][3] )
canmoveall++;
}
else
if(chess[8][4]==chessnum[BLACKorRED][3])
canmoveall++;
}
/*相*/
if((y==0 || y==4) && x==7) {
if(chess[t[0]][t[2]]==0) {
if(chess[x+2][y+2]==chessnum[BLACKorRED][2])
canmoveall++;
}
if(chess[t[1]][t[2]]==0) {
if(chess[x-2][y+2]==chessnum[BLACKorRED][2])
canmoveall++;
}
}
if((y==4 || y==8) && x==7) {
if(chess[t[1]][t[3]]==0) {
if(chess[x-2][y-2]==chessnum[BLACKorRED][2])
canmoveall++;
}
if(chess[t[0]][t[3]]==0) {
if(chess[x+2][y-2]==chessnum[BLACKorRED][2])
canmoveall++;
}
}
if((y==2 || y==6) && x==5) {
if(chess[t[0]][t[2]]==0) {
if(chess[x+2][y+2]==chessnum[BLACKorRED][2])
canmoveall++;
}
if(chess[t[0]][t[3]]==0) {
if(chess[x+2][y-2]==chessnum[BLACKorRED][2])
canmoveall++;
}
}
if((y==4 || y==8) && x==9) {
if(chess[t[1]][t[3]]==0) {
if(chess[x-2][y-2]==chessnum[BLACKorRED][2])
canmoveall++;
}
if(chess[t[1]][t[2]]==0) {
if(chess[x-2][y+2]==chessnum[BLACKorRED][2])
canmoveall++;
}
}
/*兵*/
if(chess[t[0]][y]==chessnum[BLACKorRED][6])
canmoveall++;
if(x<5 && y!=0)
if(chess[x][t[3]]==chessnum[BLACKorRED][6])
canmoveall++;
if(x<5 && y!=8)
if(chess[x][t[2]]==chessnum[BLACKorRED][6])
canmoveall++;
}
else {
/*将*/
if(x>-1 && x<3 && y>2 && y<6) {
if(x!=2)
if(chess[t[0]][y]==chessnum[BLACKorRED][4])
canmoveall++;
if(x!=0)
if(chess[t[1]][y]==chessnum[BLACKorRED][4])
canmoveall++;
if(y!=3)
if(chess[x][t[3]]==chessnum[BLACKorRED][4])
canmoveall++;
if(y!=5)
if(chess[x][t[2]]==chessnum[BLACKorRED][4])
canmoveall++;
}
/*士*/
if(((x==0 || x==2) && ( y==3 || y==5)) || (x==1 && y==4) ) {
if(x==1 && y==4) {
if(chess[t[0]][t[2]]==chessnum[BLACKorRED][3] || chess[t[0]][t[3]]==chessnum[BLACKorRED][3] || chess[t[1]][t[2]]==chessnum[BLACKorRED][3] || chess[t[1]][t[3]]==chessnum[BLACKorRED][3] )
canmoveall++;
}
else
if(chess[1][4]==chessnum[BLACKorRED][3])
canmoveall++;
}
/*象*/
if((y==0 || y==4) && x==2) {
if(chess[t[0]][t[2]]==0) {
if(chess[x+2][y+2]==chessnum[BLACKorRED][2])
canmoveall++;
}
if(chess[t[1]][t[2]]==0) {
if(chess[x-2][y+2]==chessnum[BLACKorRED][2])
canmoveall++;
}
}
if((y==4 || y==8) && x==2) {
if(chess[t[1]][t[3]]==0) {
if(chess[x-2][y-2]==chessnum[BLACKorRED][2])
canmoveall++;
}
if(chess[t[0]][t[3]]==0) {
if(chess[x+2][y-2]==chessnum[BLACKorRED][2])
canmoveall++;
}
}
if((y==2 || y==6) && x==0) {
if(chess[t[0]][t[2]]==0) {
if(chess[x+2][y+2]==chessnum[BLACKorRED][2])
canmoveall++;
}
if(chess[t[0]][t[3]]==0) {
if(chess[x+2][y-2]==chessnum[BLACKorRED][2])
canmoveall++;
}
}
if((y==4 || y==8) && x==4) {
if(chess[t[1]][t[3]]==0) {
if(chess[x-2][y-2]==chessnum[BLACKorRED][2])
canmoveall++;
}
if(chess[t[1]][t[2]]==0) {
if(chess[x-2][y+2]==chessnum[BLACKorRED][2])
canmoveall++;
}
}
/*卒*/
if(chess[t[1]][y]==chessnum[BLACKorRED][6])
canmoveall++;
if(x>4 && y!=0)
if(chess[x][t[3]]==chessnum[BLACKorRED][6])
canmoveall++;
if(x>4 && y!=8)
if(chess[x][t[2]]==chessnum[BLACKorRED][6])
canmoveall++;
}

/*俥\車/砲\炮*/
for(pd=0,i=t[0];i<10;i++) {
if(chess[i][y]==0)
continue;
if(!pd && chess[i][y]==chessnum[BLACKorRED][0])
canmoveall++;
else
if(pd==1 && chess[i][y]==chessnum[BLACKorRED][5])
canmoveall++;
else
pd++;
if(pd>1)
break;
continue;
}
for(pd=0,i=t[1];i>-1;i--) {
if(chess[i][y]==0)
continue;
if(!pd && chess[i][y]==chessnum[BLACKorRED][0])
canmoveall++;
else
if(pd==1 && chess[i][y]==chessnum[BLACKorRED][5])
canmoveall++;
else
pd++;
if(pd>1)
break;
continue;
}
for(pd=0,i=t[2];i<9 ;i++) {
if(chess[x][i]==0)
continue;
if(!pd && chess[x][i]==chessnum[BLACKorRED][0])
canmoveall++;
else
if(pd==1 && chess[x][i]==chessnum[BLACKorRED][5])
canmoveall++;
else
pd++;
if(pd>1)
break;
continue;
}
for(pd=0,i=t[3];i>-1;i--) {
if(chess[x][i]==0)
continue;
if(!pd && chess[x][i]==chessnum[BLACKorRED][0])
canmoveall++;
else
if(pd==1 && chess[x][i]==chessnum[BLACKorRED][5])
canmoveall++;
else
pd++;
if(pd>1)
break;
continue;
}
/*傌\馬*/
if(x>1 && y<8)
if(chess[t[1]][t[2]]==0)
if(chess[x-2][t[2]]==chessnum[BLACKorRED][1])
canmoveall++;
if(x>0 && y<7)
if(chess[t[1]][t[2]]==0)
if(chess[t[1]][y+2]==chessnum[BLACKorRED][1])
canmoveall++;
if(x>1 && y>0)
if(chess[t[1]][t[3]]==0)
if(chess[x-2][t[3]]==chessnum[BLACKorRED][1])
canmoveall++;
if(x>0 && y>1)
if(chess[t[1]][t[3]]==0)
if(chess[t[1]][y-2]==chessnum[BLACKorRED][1])
canmoveall++;
if(x<8 && y<8)
if(chess[t[0]][t[2]]==0)
if(chess[x+2][t[2]]==chessnum[BLACKorRED][1])
canmoveall++;
if(x<9 && y<7)
if(chess[t[0]][t[2]]==0)
if(chess[t[0]][y+2]==chessnum[BLACKorRED][1])
canmoveall++;
if(x<8 && y>0)
if(chess[t[0]][t[3]]==0)
if(chess[x+2][t[3]]==chessnum[BLACKorRED][1])
canmoveall++;
if(x<9 && y>1)
if(chess[t[0]][t[3]]==0)
if(chess[t[0]][y-2]==chessnum[BLACKorRED][1])
canmoveall++;

return canmoveall;
}

/*===================================================================================*/


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-14 19:54
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

附:新代码二(首发):
/*空着剪裁
wherecanmoveto(!BLACKorRED,depth-R);

v=-Ponder_AlphaBeta(-beta,-beta+1,depth-1-R,BLACKorRED);
if (v>=beta)
return beta;
默认关闭,使用时去掉注释*/


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-14 19:55
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
将下载放改到了站内

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-15 17:58
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
RE ljhzz:674456991.

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-16 12:55
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

改进的库转换,只用一个程序

最近好忙呀~~~~~~

/*SK-CHINA 2006-2007*/
/*开局库转换程序0.0.1 ICCS类开局库转换程序*/
#include "stdio.h"

main() {
char w;
char a,b,c,d;
FILE *openc,*openb;
printf("SK-CHINA 2006-2007 S.K\n开局库转换程序 0.0.1\n本程序用于将ICCS类开局库转换为CHESS 0.0.5可读取的类型\n\n输入ICCS类文件:open.skc\n转换后将在open.skc覆盖输出,请注意备份文件!\n按任意键开始转换\n");
getch();
openc=fopen("open.skc","r");
openb=fopen("open.txt","w");
while((w=getc(openc))!=EOF) {
switch(w) {
case '9': putc('0',openb); break;
case '8': putc('1',openb); break;
case '7': putc('2',openb); break;
case '6': putc('3',openb); break;
case '5': putc('4',openb); break;
case '4': putc('5',openb); break;
case '3': putc('6',openb); break;
case '2': putc('7',openb); break;
case '1': putc('8',openb); break;
case '0': putc('9',openb); break;

case 'A': putc('0',openb); break;
case 'B': putc('1',openb); break;
case 'C': putc('2',openb); break;
case 'D': putc('3',openb); break;
case 'E': putc('4',openb); break;
case 'F': putc('5',openb); break;
case 'G': putc('6',openb); break;
case 'H': putc('7',openb); break;
case 'I': putc('8',openb); break;

default: putc(w,openb);
}
}
fclose(openc);
fclose(openb);

openc=fopen("open.txt","r");
openb=fopen("open.skc","w");
while((a=getc(openc))!=EOF) {
if(a==' ') { putc(' ',openb); continue; }
if(a==10) { putc(10,openb); continue; }
b=getc(openc); c=getc(openc); d=getc(openc);
putc(b,openb);
putc(a,openb);
putc(d,openb);
putc(c,openb);
}
fclose(openc);
fclose(openb);
printf("\n\n\n完成!");
}


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-27 20:23
快速回复:用neo写的中国象棋社0.0.5,120%原创,提供代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018962 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved