当前位置:首页 » 操作系统 » 中国象棋源码

中国象棋源码

发布时间: 2024-12-20 23:06:38

㈠ 求VB编写中国象棋的源代码。急求。必有重谢

您提供了一些VB代码片段,这些代码片段用于中国象棋程序中读取和保存棋局功能。我会逐一检查这些代码,并提出改进建议。
1. 确保文件路径正确:
确保 `App.Path & "\cchess.che"` 路径正确指向您的棋局文件。如果您的程序安装在不同的目录,需要相应地更改路径。
2. 检查文件存在性:
在读取文件之前,检查文件是否存在。如果不存在,应提示用户保存棋局到其他位置或创建新文件。
3. 正确的字符串处理:
使用 `vbCrLf` 作为换行符可能会导致问题,因为它代表的是回车和换行两个字符。通常在处理文本时,您应该只使用一个字符的换行符,例如 `Chr(10)`。
4. 字符串分割和棋盘大小验证:
`t = Split(s, " ")` 应该基于棋盘的实际尺寸来分割字符串。89似乎不是一个正确的数字,中国象棋棋盘应该有9列和10行,共90个棋子。请确保按照正确的棋盘尺寸来分割字符串。
5. 错误处理:
当读取或保存棋局时,如果发生错误,应该有适当的错误处理机制,比如 `On Error Resume Next` 或 try-catch 块。
6. 代码注释:
代码中的 `Rem` 表示这是一个注释行,但注释内容应该清晰地描述接下来的代码功能。
7. 对话框消息:
使用 `MsgBox` 时,确保消息对用户是有帮助的,让用户知道发生了什么以及如何解决。
8. 代码格式:
增加缩进和适当的空行可以提高代码的可读性。
下面是根据上述点评修改后的代码段:
```vb
' 读取棋局
Private Sub mnuRead_Click()
Dim s As String
Dim i As Integer
Dim pieces As Variant
Dim filePath As String
filePath = App.Path & "\cchess.che"
If Not FileExists(filePath) Then
MsgBox "没有棋局文件可以读入!请先保存棋局!", vbExclamation, "中国象棋"
Exit Sub
End If
Open filePath For Input As #1
Input #1, s
Close #1
s = Replace(s, vbCrLf, "")
s = Trim(s)
' 确保字符串长度正确
If s.Length > 90 Then
MsgBox "棋局文件已遭到破坏!请重新保存棋局!", vbExclamation, "中国象棋"
Exit Sub
End If
' 解析字符串为棋子数组
pieces = Split(s, " ")
' 将字符串转换为棋子值并赋值给数组
For i = 0 To 89
a(i) = Val(pieces(i))
Next i
MsgBox "棋局文件已成功读入!", vbInformation, "中国象棋"
End Sub
' 保存棋局
Private Sub mnuSave_Click()
Dim s As String
Dim i As Integer
Dim filePath As String
filePath = App.Path & "\cchess.che"
' 清空字符串
s = ""
' 遍历棋盘并构建字符串
For i = 0 To 89
s = s & " " & a(i)
Next i
' 删除字符串前后的空格
s = Trim(s)
Open filePath For Output As #1
Print #1, s
Close #1
MsgBox "当前棋局已成功保存!", vbInformation, "中国象棋"
End Sub
```
请注意,这里没有包含错误处理和文件存在的检查,您需要根据您的程序逻辑添加这些内容。此外,我假设 `a(i)` 是一个数组,用于存储棋盘上的棋子信息,您需要确保它已经被正确初始化。

㈡ 谁给个中国象棋的易语言源码给我电脑最好很厉害的

你能要到的源代码都不厉害 厉害的你别想要到 这是保密的

㈢ 急求C++设计象棋打谱程序的源代码

这是一个简单的程序,会自动计算提子,但不会数目。其它的运行一次估计就差不多会用了。稍微写了点注释。

#include<stdio.h>
#include<stdlib.h>

char board[21][21];
char move[5][2]=,,,,};

void initBoard();//初始化棋盘
void showBoard();//输出棋盘
char set(int x,int y,char color);//下子
void process(int xx,int yy);//计算提子

int main()
{
FILE * fptr=NULL;
char pufile[256]=;
char op;
int s;
int x,y,r;
char color;
char win;
int cnt;

start:
s=8;
while(s!=1 && s!=2)
{
printf("选择模式:\n1---下棋\n2---看棋谱\n0---退出\n");
printf("下棋模式下,下子请输入s x y(x,y为位置),认输输入g,和棋输入h\n选择:");
scanf("%d",&s);
if(s==0) return 0;
//Egg1
if(s==10) printf("Programmer: swordlance :)\n");
//Egg1 end
}
getchar();
printf("输入棋谱路径:");
gets(pufile);

if(s==1) fptr=fopen(pufile,"w");
else fptr=fopen(pufile,"r");

if(!fptr)
{
printf("文件无法打开(创建)!\n");
system("PAUSE");
return -1;
}

initBoard();
cnt=0;
color='B';
while(op!='g')
{
system("CLS");
showBoard();
printf("(第%d手)",++cnt);
if(s==1)
{
printf("%c 方:",color);
scanf("%c",&op);
//printf("[%c]",op);
if(op=='s')
{
scanf("%d %d",&x,&y);
getchar();
if(set(x,y,color)!=0)
{
printf("该处不能落子!\n");
cnt--;
system("PAUSE");
}
else
{
process(x,y);
fprintf(fptr,"%d %d\n",x,y);
if(color=='B') color='W';
else color='B';
}
}
else if(op=='g')
{
printf("%c 方认输。\n",color);
if(color=='B') fprintf(fptr,"0 1\n");
else fprintf(fptr,"0 -1\n");
fflush(fptr);
fclose(fptr);
system("PAUSE");
goto start;
}
else if(op=='h')
{
printf("和棋。\n");
fprintf(fptr,"0 0\n");
fflush(fptr);
fclose(fptr);
system("PAUSE");
goto start;
}
else
{
printf("参数错误,下子请输入s x y(x,y为位置),认输输入 g,和棋输入h");
cnt--;
system("PAUSE");
}
}
else
{
fscanf(fptr,"%d %d",&x,&y);
if(x==0)
{
if(y>0) printf("W 方胜!\n");
else if(y<0) printf("B 方胜!\n");
else printf("和棋!\n");
system("PAUSE");
goto start;
}
else
{
printf("%c 方落子(%d,%d)\n",color,x,y);
set(x,y,color);
process(x,y);
if(color=='B') color='W';
else color='B';
}
system("PAUSE");
}
}

system("PAUSE");
return 0;
}

void initBoard()
{
int i,j;
board[0][0]='O';
for(i=1;i<=19;i++) board[0][i]='-';
board[0][20]='O';
for(i=1;i<=19;i++)
{
board[i][0]='|';
for(j=1;j<=19;j++) board[i][j]='+';
board[i][20]='|';
}
board[20][0]='O';
for(i=1;i<=19;i++) board[20][i]='-';
board[20][20]='O';
board[4][4]=board[4][10]=board[4][16]=
board[10][4]=board[10][10]=board[10][16]=
board[16][4]=board[16][10]=board[16][16]='*';
}

void showBoard()
{
int i,j;
for(i=0;i<=20;i++)
{
for(j=0;j<=20;j++)
{
printf("%c",board[i][j]);
}
printf("\n");
}
}

char set(int x,int y,char color)
{
if(board[x][y]=='W' || board[x][y]=='B') return -1;//不能落子
else board[x][y]=color;
return 0;
}

//计算提子
void process(int xx,int yy)
{
char his[21][21]=;//记录算过的棋子以节约效率
char Q[400][2]=;//某一片棋
int e;//Q的长度。
char mcolor;//这片棋的颜色
char ecolor;//另一种颜色
int QI=0;//气数
int i,j,k,l,m;
int x,y;

for(m=0;m<5;m++)
{
i=xx+move[m][0];//为了能够完成打劫,先算别人再算自己
j=yy+move[m][1];
if(his[i][j]==0 && (board[i][j]=='W' || board[i][j]=='B')) //该位置有子开始算气
{
QI=0;
his[i][j]=1;
mcolor=board[i][j];
ecolor=(board[i][j]=='W'?'B':'W');
//printf("m=%c e=%c\n",mcolor,ecolor);
Q[0][0]=i;
Q[0][1]=j;
e=1;
for(k=0;k<e;k++)
{
for(l=0;l<4;l++)
{
x=Q[k][0]+move[l][0];
y=Q[k][1]+move[l][1];
//printf("x=%d y=%d\n",x,y);
//system("PAUSE");
if(x>0 && y>0 && x<20 && y<20 && his[x][y]==0)
{
if(board[x][y]==mcolor)//己方,长气
{
Q[e][0]=x;
Q[e][1]=y;
e++;
his[x][y]=1;
}
else
{
if(board[x][y]=='+') QI++; //空地,加气,忽略重复计算
}
}
}
}
//printf("QI=%d\n",QI);
//system("PAUSE");
if(!QI)//死棋,提子
{
for(k=0;k<e;k++)
{
board[Q[k][0]][Q[k][1]]='+';
his[Q[k][0]][Q[k][1]]=0;
}
}
}
}
}

㈣ c++程序设计 中国象棋源代码

我提供两个功能完善,而且最重要的,我认为算法设计比较好的中国象棋源代码,因为是源码网的,所以可以学习参考下:
http://www.codefans.net/soft/1466.shtml
http://www.codefans.net/soft/1289.shtml

㈤ 求VB编写中国象棋的源代码。急求。必有重谢

贴保存棋局和读取棋局部分的,你先看看:
Rem 读取棋局
Private Sub mnuRead_Click()
Dim s As String, i As Integer, t
If Dir(App.Path & "\cchess.che") = "" Then MsgBox "没有棋局文件可以读入!请先保存棋局!", , "中国象棋": Exit Sub

Open App.Path & "\cchess.che" For Input As #1
Input #1, s
Close #1

s = Replace(s, vbCrLf, "")
s = Trim(s)

t = Split(s, " ")
If UBound(t) <> 89 Then MsgBox "棋局文件已遭到破坏!请重新保存棋局!", , "中国象棋": Exit Sub

For i = 0 To 89
a(i) = Val(t(i))
Next

MsgBox "棋局文件已成功读入!", , "中国象棋"
End Sub

Rem 保存棋局
Private Sub mnuSave_Click()
Dim s As String, i As Integer
s = ""
For i = 0 To 89
s = s & " " & a(i)
Next
s = Trim(s)
Open App.Path & "\cchess.che" For Output As #1
Print #1, s;
Close #1
MsgBox "当前棋局已成功保存!", , "中国象棋"
End Sub

热点内容
sql查询在某个时间段 发布:2024-12-21 04:29:21 浏览:206
光遇脚本刷蜡烛软件 发布:2024-12-21 04:24:28 浏览:835
如何下载安装python 发布:2024-12-21 04:24:25 浏览:456
php传值与传引用 发布:2024-12-21 04:10:46 浏览:748
openofficelinux启动 发布:2024-12-21 04:06:55 浏览:999
为什么用安卓手机的人多 发布:2024-12-21 04:05:28 浏览:920
安卓50和81哪个好 发布:2024-12-21 04:04:56 浏览:6
奈拉盒子密码是多少 发布:2024-12-21 04:04:52 浏览:98
300玩家在王者该如何调配置 发布:2024-12-21 03:52:23 浏览:528
java获取系统当前时间 发布:2024-12-21 03:52:19 浏览:557