| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
自己做的简易象棋框架,使用的都是c语言的基础,比较简单,应该都看得懂。使用控制台,不能显示颜色,每下一步都打印一幅新的棋盘。虽然简陋,但只要把输出界面改一下就可以变成windows应用。麻雀虽小,但我觉得这些是基础,再牛逼的象棋都得有类似的地基。 
棋子使用结构体,棋盘使用指针指向棋子。打印棋盘用printf(); 
我发的代码有三个函数,init()//给棋盘棋子赋值,show(qiz* board[11][10])//打印棋盘,move(int x[4])//将board[x[0]][x[1]]处的棋子移动到board[x[2]][x[3]] 
可以输入如1 2 3 3的数字移动棋子,注意先行再列。 
还有一些函数我会在以后发出来,完整代码已经有AI了,智商有点低,但不会粗心,我都经常被坑;使用《数据结构与算法分析》中的回溯算法,只是输出界面还是一样简陋。 
以下是手机c4droid运行效果图: 
 
 
代码: 
 
- #define _CRT_SECURE_NO_WARNINGS//使用visual stdio想要使用scanf()必须定义这句话
 
 - #include <stdio.h>
 
 - #include <string.h>
 
 - int init();//给棋盘棋子赋值,返回值没有意义!
 
 - int move(int x[4]);//将board[x[0]][x[1]]处的棋子移动到board[x[2]][x[3]],返回值没有意义!
 
 - typedef struct//棋子结构
 
 - {
 
 -     int alive , x //行 ,棋子在棋盘上的坐标
 
 -         , y //列 ,棋子在棋盘上的坐标
 
 -         , country ;//红为1,黑为2
 
 -     char const* sort ;//棋子种类,车马将士象兵炮
 
 - }qiz;
 
 - int show(qiz* board[11][10]);//打印棋盘,返回值没有意义!
 
 - qiz* board[11][10] = { 0 };//棋盘,使用指针指向棋子
 
 - qiz red[16], black[16];//用来存放红、黑棋子,方便管理
 
 - int main()
 
 - {
 
 -     int x[4];
 
 -     init();//初始化
 
 -     show(board);
 
 -     while (1)
 
 -     {
 
 -         for(int i=0;i<4;i++)
 
 -         {
 
 -             scanf("%d", &x[i]);
 
 -         }
 
 -         move(x);
 
 -         show(board);
 
 -     }
 
 -     return 0;
 
 - }
 
 - int show(qiz* board[11][10])//打印棋盘,返回值没有意义!
 
 - {
 
 -     for (int i = 10; i >= 1; i--)
 
 -     {
 
 -         for (int j = 1; j <= 9; j++)
 
 -         {
 
 -             if (board[i][j] == 0)printf("  ");//打印两个空格。
 
 -             else printf("%s", board[i][j]->sort);
 
 -         }
 
 -         printf("%d\n", i);
 
 -     }
 
 -     for (int j = 1; j <= 9; j++)
 
 -         printf("%d ", j);
 
 -     printf("\n");
 
 -     return 0;
 
 - }
 
 - int init()//给棋盘棋子赋值,返回值没有意义!
 
 - {
 
 -     for (int i = 0; i <= 15; i++)//country
 
 -     {
 
 -         red[i].country = 1;
 
 -         black[i].country = 2;
 
 -     }
 
 -     for (int i = 1; i <= 9; i++)
 
 -     {
 
 -         board[1][i] = &red[i - 1];
 
 -         board[10][i] = &black[i - 1];
 
 -         red[i - 1].y = i; red[i - 1].x = 1;
 
 -         black[i - 1].y = i; black[i - 1].x = 10;
 
  
-     }
 
 -     for (int i = 1, j = 9; i <= 10; j++, i += 2)
 
 -     {
 
 -         board[4][i] = &red[j];
 
 -         red[j].y = i;
 
 -         red[j].x = 4;
 
 -         board[7][i] = &black[j];
 
 -         black[j].y = i;
 
 -         black[j].x = 7;
 
  
-     }
 
  
-     board[3][2] = &red[14]; board[3][8] = &red[15]; red[14].x = 3; red[14].y = 2; red[15].x = 3; red[15].y = 8;
 
 -     board[8][2] = &black[14]; board[8][8] = &black[15]; black[14].x = 8; black[14].y = 2; black[15].x = 8; black[15].y = 8;
 
  
-     red[0].sort = "车";
 
 -     red[1].sort = "马";
 
 -     red[2].sort = "象";
 
 -     red[3].sort = "士";
 
 -     red[4].sort = "将";
 
 -     red[5].sort = "士";
 
 -     red[6].sort = "象";
 
 -     red[7].sort = "马";
 
 -     red[8].sort = "车";
 
 -     red[9].sort = "兵";
 
 -     red[10].sort = "兵";
 
 -     red[11].sort = "兵";
 
 -     red[12].sort = "兵";
 
 -     red[13].sort = "兵";
 
 -     red[14].sort = "炮";
 
 -     red[15].sort = "炮";
 
  
-     black[0].sort = "车";
 
 -     black[1].sort = "马";
 
 -     black[2].sort = "象";
 
 -     black[3].sort = "士";
 
 -     black[4].sort = "将";
 
 -     black[5].sort = "士";
 
 -     black[6].sort = "象";
 
 -     black[7].sort = "马";
 
 -     black[8].sort = "车";
 
 -     black[9].sort = "兵";
 
 -     black[10].sort = "兵";
 
 -     black[11].sort = "兵";
 
 -     black[12].sort = "兵";
 
 -     black[13].sort = "兵";
 
 -     black[14].sort = "炮";
 
 -     black[15].sort = "炮";
 
  
 
-     return 0;
 
  
- }
 
 - int move(int x[4])//将board[x[0]][x[1]]处的棋子移动到board[x[2]][x[3]],返回值没有意义!
 
 - {
 
 -     if (x[0]>10|| x[0]< 1|| x[1]>9 || x[2] < 1 || board[x[0]][x[1]] == 0)
 
 -     {
 
 -         printf("输入错误\n");
 
 -         return 0;
 
 -     }
 
 -     if (x[2] > 10 || x[2] < 1||x[3] > 9 || x[3] < 1)
 
 -     {
 
 -         printf("输入错误\n");
 
 -         return 0;
 
 -     }
 
 -     if (board[x[2]][x[3]] != 0)board[x[2]][x[3]]->alive = 0;
 
 -     board[x[2]][x[3]] = board[x[0]][x[1]]; board[x[0]][x[1]] = 0;
 
 -     if (board[x[2]][x[3]] != 0)
 
 -     {
 
 -         board[x[2]][x[3]]->x = x[2]; board[x[2]][x[3]]->y = x[3];
 
 -     }
 
  
-     return 0;
 
 - }
 
  复制代码 |   
 
 
 
 |