C语言——中国象棋(无图形化界面)

该博客介绍如何使用C语言实现一个无图形界面的中国象棋游戏。通过数组表示棋盘和棋子,详细讲述了设置棋盘、判断棋子移动合法性、保存和读取棋盘状态以及判断输赢的逻辑。博客包含项目的初始棋盘截图和完整的代码实现。
摘要由CSDN通过智能技术生成

中国象棋

项目描述

用数组表示棋盘和棋子
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;

  
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值