中国象棋
项目描述
用数组表示棋盘和棋子
0表示无棋子
定义规则,判断棋子是否能移动
保存棋盘功能
读取已保存棋盘功能
判断输赢
初始棋盘截图
获取欲移动棋子信息
对棋盘数组保存
判断输赢
某一方取胜后游戏结束
完整代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <stdlib.h>
int regulate();
void printboard();
void int_put();
void move_piece();
void save_board();
void read_board();
void judged();
int board[10][9]={
{1,2,3,4,5,6,7,8,9},
{0,0,0,0,0,0,0,0,0},
{0,10,0,0,0,0,0,11,0},
{12,0,13,0,14,0,15,0,16},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{17,0,18,0,19,0,20,0,21},
{0,22,0,0,0,0,0,23,0},
{0,0,0,0,0,0,0,0,0},
{24,25,26,27,28,29,30,31,32}};
char piece[66]="00车马相士帅士相马车炮炮兵兵兵兵兵卒卒卒卒卒軳軳車馬象仕將仕象馬車";
int i=0,j=0,k=0;
int p=0,q=0,s=0;
int a=0;
int shuai=0,mov=2;//shuai为1将走,为0帅走,mov为1判断能走
int main()
{
printf("1,开始游戏\n2,读取棋盘\n");
scanf("%d",&a);
if(a==2)
read_board();
system("cls");
while(mov!=3)
{
printboard();//打印棋盘
int_put();//获取输入
mov=regulate();//规则判断
move_piece();//棋子移动
system("cls");
save_board();//自动保存棋盘
judged();//判断输赢
}
printboard();
return 0;
}
int regulate()
{
int oldp=20,oldq=20,a=0;
for(i=0;i<10;i++)//获取选中棋子的下标
{
for(j=0;j<9;j++)
{
if(board[i][j]==s)
{
oldp=i;
oldq=j;
break;
}
}
if(oldp!=20||oldq!=20)
break;
}
if(
(oldq==q&&oldp==p)
||(board[oldp][oldq]<=16&&board[p][q]<=16&&board[p][q]>0)
||(board[oldp][oldq]>16&&board[p][q]>16)
)
return 0;
if((shuai==0&&s>16)||(shuai==1&&s<=16))
return 0;
if(s>=12&&s<=16)//兵
{
if(oldp<5)
{
if(p-oldp==1&&q==oldq)
return 1;
}
else
{
if(p-oldp==1&&q==oldq)
return 1;
else if(abs(oldq-q)==1&&p==oldp)
return 1;
else
return 0;
}
}
else if(s>=17&&s<=21)//卒
{
if(oldp>=5)
{
if(oldp-p==1&&q==oldq)
return 1;