2022年C语言编写中国象棋上课讲义.pdf





《2022年C语言编写中国象棋上课讲义.pdf》由会员分享,可在线阅读,更多相关《2022年C语言编写中国象棋上课讲义.pdf(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语 言 编 写 中 国 象 棋精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 19 页 - - - - - - - - - - /精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 19 页 - - - - - - - - - - / main.c/ 象棋/ 車马相仕帅仕相马車/ 十十十十十十十十十/ 十炮十十十十十炮十/ 兵十兵十兵十兵十兵/ 十十十十十十十十十/ 楚河汉界/ 十十十十十十十
2、十十/ 卒十卒十卒十卒十卒/ 十炮十十十十十炮十/ 十十十十十十十十十/ 車马象士将士象马車/ Created by tarena121 on 15/8/12./ Copyright (c) 2015年 Tarena. All rights reserved.精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 19 页 - - - - - - - - - - /#include #include #include #include #define R(piece) 03331m #piece 03
3、30m /红色棋子#define B(piece) 03330m #piece 0330m /黑色棋子#define CROSS 03333m 十0330m/定义外部变量 ,棋盘坐标char * array 119; int xi,yi; /要移动的棋子int xj,yj; /移动的目标位置bool isStandard = 1;/是否符合规则,初始值1,符合bool gameOverSign = 1;/游戏是否结束,0结束bool restart = 0; /生成棋盘void chessboardBuilding(); /打印棋盘void printChessboard(); /判断是红棋还
4、是黑棋,红旗返回 1,黑棋返回 -1,否则返回 0int redOrBlack( int x,int y); /红棋移动void redMove(); /黑棋移动void blackMove(); /每种棋子的规则void rulesOfAllKindsOfChessPieces(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 19 页 - - - - - - - - - - /判断游戏结束void isGameOver(); /*主函数 *int main() /生成棋盘chessbo
5、ardBuilding(); /打印棋盘printChessboard(); /开始下棋int turn = - 1; while (gameOverSign ) isStandard = 1; turn *= (- 1);/双方交替下棋switch (turn) case 1: redMove (); turn = (restart ) ? (turn*- 1) : turn; break; case -1: blackMove (); turn = (restart ) ? (turn*- 1) : turn; break; isGameOver (); printf (游戏结束 !n )
6、; /主函数结束/*自定义函数 *精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 19 页 - - - - - - - - - - /生成棋盘void chessboardBuilding() for (int i = 0; i 11; i +) for (int j = 0; j 9 ; j +) arrayij = CROSS ; printf (n ); array 50 = array 51 = array 54 = array 57 = array 58 = ; array 52 =
7、 B(楚); array 53 = B(河); array 55 = B(汉); array 56 = B(界); /布置红棋array 00 = array 08 = R(車); array 01 = array 07 = R(马); array 02 = array 06 = R(相); array 03 = array 05 = R(仕); array 04 = R(帅); array 21 = array 27 = R(炮); array 30 = array 32 = array 34 = array 36 = array 38 = R(兵); /布置黑棋array 100 = ar
8、ray 108 = B(車); array 101 = array 107 = B(马); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 19 页 - - - - - - - - - - array 102 = array 106 = B(相); array 103 = array 105 = B(仕); array 104 = B(将); array 81 = array 87 = B(炮); array 70 = array 72 = array 74 = array 76 = arra
9、y 78 = B(卒); /打印棋盘void printChessboard() /显示printf ( 03343;30m 中国象棋欢迎您 0330mnn ); for (int i = 0; i 11; i +) for (int j = 0; j 9; j +) printf (%s ,array ij); printf (n ); /判断是红棋还是黑棋,红旗返回 1,黑棋返回 -1,否则返回 0int redOrBlack( int x,int y) if (arrayxy = R(車) | arrayxy = R(马) | array xy = R(相) | arrayxy = R(
10、仕) | array xy = R(帅) | array xy = R(炮) | array xy = R(兵) return1; else if (array xy = B(車) | arrayxy = B(马) | array xy = B(象) | array xy = B(仕) | array xy = B(将) | array xy = B(炮) | array xy = B(卒) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 19 页 - - - - - - - - - - re
11、turn -1; elsereturn 0; /红棋移动void redMove() if (restart ) printf (违反游戏规则,请重新输入n); restart = 0; printf (红棋 请输入你要移动的棋子:n); scanf (%d %d ,&xi,&yi); printf (红棋 请输入你要放置的位置:n); scanf (%d %d ,&xj,&yj); rulesOfAllKindsOfChessPieces(); printChessboard(); /黑棋移动void blackMove() if (restart ) printf (违反游戏规则,请重新输
12、入n); restart = 0; printf (黑棋 请输入你要移动的棋子:n); scanf (%d %d ,&xi,&yi); printf (黑棋 请输入你要放置的位置:n); scanf (%d %d ,&xj,&yj); rulesOfAllKindsOfChessPieces(); printChessboard(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 19 页 - - - - - - - - - - /判断游戏结束void isGameOver() bool s
13、ign_r = 0; bool sign_b = 0; for (int i = 0; i 11; i +) for (int j = 0; j 9; j +) if (arrayij = R(帅) sign_r = 1; else if (array ij = B(将) sign_b = 1; if (sign_r = 0)|(sign_b = 0) gameOverSign = 0; /每种棋子的规则void rulesOfAllKindsOfChessPieces() /R(車) -if (arrayxiyi = R(車) if (yi = yj) /列坐标不变,同列移动 for (in
14、t i = xi+ 1; i xj; i -) if (i = 5) continue ;/如果行等于 5,跳过if (arrayxiyi != CROSS) isStandard = 0; else if (xi = xj) /行坐标不变,同行移动 for (int i = yi+ 1; i yj; i -) if (arrayxii != CROSS) isStandard = 0; if (xi = xj | yi = yj)& isStandard & (redOrBlack(xj, yj) != 1)/如果棋子直行、没有犯规且落点不是红棋,可以移动 arrayxiyi = CROSS
15、; arrayxjyj = R(車); else restart = 1; /B(車) -else if (arrayxiyi = B(車) if (yi = yj) /列坐标不变,同列移动精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 19 页 - - - - - - - - - - for (int i = xi+ 1; i xj; i -) if (i = 5) continue ;/如果行等于 5,跳过if (arrayiyi != CROSS) isStandard = 0; el
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 语言 编写 中国象棋 上课 讲义

限制150内