前言
该中国象棋为单机版程序,实现了全部的象棋走棋,并且实现了悔棋,落子标记等功能。唯一不足的是,该程序没有实现联机功能,后续有时间持续跟进的。
界面效果图
图1
部分代码
public bool
RulesForChess(int row
, int col
)
{
bool tempCanDrop
= false
;
if (row
== _pickRow
&& col
== _pickCol
)
tempCanDrop
= false
;
else
{
if (_pickChess
== Piece
.蓝象
)
{
if (Math
.Abs(_pickRow
- row
) == 2 && Math
.Abs(_pickCol
- col
) == 2
&& _chess
[(_pickRow
+ row
) / 2, (_pickCol
+ col
) / 2] == Piece
.无子
&& row
<= 5)
tempCanDrop
= true
;
}
else if (_pickChess
== Piece
.红相
)
{
if (Math
.Abs(_pickRow
- row
) == 2 && Math
.Abs(_pickCol
- col
) == 2
&& _chess
[(_pickRow
+ row
) / 2, (_pickCol
+ col
) / 2] == Piece
.无子
&& row
>= 6)
tempCanDrop
= true
;
}
else if (_pickChess
== Piece
.红马
|| _pickChess
== Piece
.蓝马
)
{
if (Math
.Abs(_pickRow
- row
) == 1 && Math
.Abs(_pickCol
- col
) == 2 &&
_chess
[_pickRow
, (_pickCol
+ col
) / 2] == Piece
.无子
)
tempCanDrop
= true
;
else if (Math
.Abs(_pickRow
- row
) == 2 && Math
.Abs(_pickCol
- col
) == 1 &&
_chess
[(_pickRow
+ row
) / 2, _pickCol
] == Piece
.无子
)
tempCanDrop
= true
;
}
else if (_pickChess
== Piece
.红车
|| _pickChess
== Piece
.蓝车
)
{
if (_pickRow
== row
)
{
int max
= col
> _pickCol
? col
: _pickCol
;
int min
= col
> _pickCol
? _pickCol
: col
;
int chessNum
= 0;
for (int i
= min
+ 1; i
<= max
- 1; i
++)
if (_chess
[row
, i
] != Piece
.无子
)
chessNum
++;
if (chessNum
== 0)
{
if (_chess
[row
, col
] == Piece
.无子
|| _chess
[row
, col
].ToString().IndexOf(_curPlayer
.ToString()) == -1)
tempCanDrop
= true
;
}
}
else if (_pickCol
== col
)
{
int max
= row
> _pickRow
? row
: _pickRow
;
int min
= row
> _pickRow
? _pickRow
: row
;
int chessNum
= 0;
for (int i
= min
+ 1; i
<= max
- 1; i
++)
if (_chess
[i
, col
] != Piece
.无子
)
chessNum
++;
if (chessNum
== 0)
{
if (_chess
[row
, col
] == Piece
.无子
|| _chess
[row
, col
].ToString().IndexOf(_curPlayer
.ToString()) == -1)
tempCanDrop
= true
;
}
}
}
else if (_pickChess
== Piece
.红士
)
{
if(row
>= 8 && col
<= 6 && col
>= 4 && Math
.Abs(row
- _pickRow
) == 1 && Math
.Abs(col
- _pickCol
) == 1)
tempCanDrop
= true
;
}
else if (_pickChess
== Piece
.蓝士
)
{
if (row
<= 3 && col
<= 6 && col
>= 4 && Math
.Abs(row
- _pickRow
) == 1 && Math
.Abs(col
- _pickCol
) == 1)
tempCanDrop
= true
;
}
else if (_pickChess
== Piece
.红帅
)
{
if(row
>= 8 && col
>= 4 && col
<= 6 && (Math
.Abs(row
- _pickRow
) == 1 && Math
.Abs(col
- _pickCol
) == 0 ||
Math
.Abs(row
- _pickRow
) == 0 && Math
.Abs(col
- _pickCol
) == 1))
tempCanDrop
= true
;
}
else if (_pickChess
== Piece
.蓝将
)
{
if (row
<= 3 && col
>= 4 && col
<= 6 && (Math
.Abs(row
- _pickRow
) == 1 && Math
.Abs(col
- _pickCol
) == 0 ||
Math
.Abs(row
- _pickRow
) == 0 && Math
.Abs(col
- _pickCol
) == 1))
tempCanDrop
= true
;
}
else if (_pickChess
== Piece
.红炮
|| _pickChess
== Piece
.蓝炮
)
{
if (_pickCol
== col
)
{
int max
= row
> _pickRow
? row
: _pickRow
;
int min
= row
> _pickRow
? _pickRow
: row
;
int chessNum
= 0;
for (int i
= min
+ 1; i
<= max
- 1; i
++)
if (_chess
[i
, col
] != Piece
.无子
)
chessNum
++;
if (chessNum
== 0 && _chess
[row
, col
] == Piece
.无子
)
tempCanDrop
= true
;
else if(chessNum
== 1 && _chess
[row
, col
] != Piece
.无子
&& _chess
[row
, col
].ToString().IndexOf(_curPlayer
.ToString()) == -1)
tempCanDrop
= true
;
}
else if (_pickRow
== row
)
{
int max
= col
> _pickCol
? col
: _pickCol
;
int min
= col
> _pickCol
? _pickCol
: col
;
int chessNum
= 0;
for (int i
= min
+ 1; i
<= max
- 1; i
++)
if (_chess
[row
, i
] != Piece
.无子
)
chessNum
++;
if (chessNum
== 0 && _chess
[row
, col
] == Piece
.无子
)
tempCanDrop
= true
;
else if (chessNum
== 1 && _chess
[row
, col
] != Piece
.无子
&& _chess
[row
, col
].ToString().IndexOf(_curPlayer
.ToString()) == -1)
tempCanDrop
= true
;
}
}
else if (_pickChess
== Piece
.红卒
)
{
if (_pickRow
<= 5 && row
<= _pickRow
&& (Math
.Abs(row
- _pickRow
) == 1 && Math
.Abs(col
- _pickCol
) == 0 || Math
.Abs(row
- _pickRow
) == 0 && Math
.Abs(col
- _pickCol
) == 1))
tempCanDrop
= true
;
else if(row
< _pickRow
&& (Math
.Abs(row
- _pickRow
) == 1 && Math
.Abs(col
- _pickCol
) == 0))
tempCanDrop
= true
;
}
else if (_pickChess
== Piece
.蓝兵
)
{
if (_pickRow
>= 6 && row
>= _pickRow
&& (Math
.Abs(row
- _pickRow
) == 1 && Math
.Abs(col
- _pickCol
) == 0 || Math
.Abs(row
- _pickRow
) == 0 && Math
.Abs(col
- _pickCol
) == 1))
tempCanDrop
= true
;
else if (row
> _pickRow
&& (Math
.Abs(row
- _pickRow
) == 1 && Math
.Abs(col
- _pickCol
) == 0))
tempCanDrop
= true
;
}
}
return tempCanDrop
;
}
完整文件
中国象棋程序
转载请注明原文地址:https://ipadbbs.8miu.com/read-62784.html