




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、【精品文檔】如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流C語言編寫中國象棋.精品文檔./ main.c/ 象棋/ 車馬相仕帥仕相馬車/ 十十十十十十十十十/ 十炮十十十十十炮十/ 兵十兵十兵十兵十兵/ 十十十十十十十十十/ 楚河漢界/ 十十十十十十十十十/ 卒十卒十卒十卒十卒/ 十炮十十十十十炮十/ 十十十十十十十十十/ 車馬象士將士象馬車/ Created by tarena121 on 15/8/12./ Copyright (c) 2015年 Tarena. All rights reserved.#include <stdio.h>#include <stdbool.h&
2、gt;#include <math.h>#include <stdlib.h>#define R(piece) "03331m"#piece"0330m"/紅色棋子#define B(piece) "03330m"#piece"0330m"/黑色棋子#define CROSS "03333m十0330m"/定義外部變量,棋盤坐標(biāo)char* array119;int xi,yi;/要移動(dòng)的棋子int xj,yj;/移動(dòng)的目標(biāo)位置bool isStandard = 1;/是否
3、符合規(guī)則,初始值1,符合bool gameOverSign = 1;/游戲是否結(jié)束,0結(jié)束bool restart = 0;/生成棋盤void chessboardBuilding();/打印棋盤void printChessboard();/判斷是紅棋還是黑棋,紅旗返回1,黑棋返回-1,否則返回0int redOrBlack(int x,int y);/紅棋移動(dòng)void redMove();/黑棋移動(dòng)void blackMove();/每種棋子的規(guī)則void rulesOfAllKindsOfChessPieces();/判斷游戲結(jié)束void isGameOver();/*主函數(shù)*int m
4、ain() /生成棋盤 chessboardBuilding(); /打印棋盤 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(); print
5、f("游戲結(jié)束!n");/主函數(shù)結(jié)束/*自定義函數(shù)*/生成棋盤void chessboardBuilding() for (int i = 0; i < 11; i +) for (int j = 0; j < 9 ; j +) arrayij = CROSS; printf("n"); array50 = array51 = array54 = array57 = array58 = "" array52 = B(楚); array53 = B(河); array55 = B(漢); array56 = B(界); /布
6、置紅棋 array00 = array08 = R(車); array01 = array07 = R(馬); array02 = array06 = R(相); array03 = array05 = R(仕); array04 = R(帥); array21 = array27 = R(炮); array30 = array32 = array34 = array36 = array38 = R(兵); /布置黑棋 array100 = array108 = B(車); array101 = array107 = B(馬); array102 = array106 = B(相); arra
7、y103 = array105 = B(仕); array104 = B(將); array81 = array87 = B(炮); array70 = array72 = array74 = array76 = array78 = B(卒);/打印棋盤void printChessboard() /顯示 printf(" 03343;30m中國象棋歡迎您0330mnn"); for (int i = 0; i < 11; i +) for (int j = 0; j < 9; j +) printf("%s",arrayij); print
8、f("n");/判斷是紅棋還是黑棋,紅旗返回1,黑棋返回-1,否則返回0int redOrBlack(int x,int y) if (arrayxy = R(車) | arrayxy = R(馬) | arrayxy = R(相) | arrayxy = R(仕) | arrayxy = R(帥) | arrayxy = R(炮) | arrayxy = R(兵) return 1; else if (arrayxy = B(車) | arrayxy = B(馬) | arrayxy = B(象) | arrayxy = B(仕) | arrayxy = B(將) | a
9、rrayxy = B(炮) | arrayxy = B(卒) return -1; else return 0;/紅棋移動(dòng)void redMove() if (restart) printf("違反游戲規(guī)則,請(qǐng)重新輸入n"); restart = 0; printf("紅棋請(qǐng)輸入你要移動(dòng)的棋子:n"); scanf("%d %d",&xi,&yi); printf("紅棋請(qǐng)輸入你要放置的位置:n"); scanf("%d %d",&xj,&yj); rulesOf
10、AllKindsOfChessPieces(); printChessboard();/黑棋移動(dòng)void blackMove() if (restart) printf("違反游戲規(guī)則,請(qǐng)重新輸入n"); restart = 0; printf("黑棋請(qǐng)輸入你要移動(dòng)的棋子:n"); scanf("%d %d",&xi,&yi); printf("黑棋請(qǐng)輸入你要放置的位置:n"); scanf("%d %d",&xj,&yj); rulesOfAllKindsOfC
11、hessPieces(); printChessboard();/判斷游戲結(jié)束void isGameOver() bool sign_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 (arrayij = B(將) sign_b = 1; if (sign_r = 0)|(sign_b = 0) gameOverSign = 0;/每種棋子的規(guī)則void rulesOfAllKindsOfChe
12、ssPieces()/R(車)- if (arrayxiyi = R(車) if (yi = yj)/列坐標(biāo)不變,同列移動(dòng) for (int i = xi+1; i < xj; i +) if (i = 5) continue;/如果行等于5,跳過 if (arrayiyi != CROSS) isStandard = 0;/如果初始位置和目標(biāo)位置之間有棋子,則不符合規(guī)則 for (int i = xi-1; i > xj; i -) if (i = 5) continue;/如果行等于5,跳過 if (arrayxiyi != CROSS) isStandard = 0; els
13、e if (xi = xj)/行坐標(biāo)不變,同行移動(dòng) for (int i = yi+1; i < yj; i +) if (arrayxii != CROSS) isStandard = 0; for (int i = yi-1; i > yj; i -) if (arrayxii != CROSS) isStandard = 0; if (xi = xj | yi = yj)&& isStandard && (redOrBlack(xj, yj) != 1)/如果棋子直行、沒有犯規(guī)且落點(diǎn)不是紅棋,可以移動(dòng) arrayxiyi = CROSS; ar
14、rayxjyj = R(車); else restart = 1;/B(車)- else if (arrayxiyi = B(車) if (yi = yj)/列坐標(biāo)不變,同列移動(dòng) for (int i = xi+1; i < xj; i +) if (i = 5) continue;/如果行等于5,跳過 if (arrayiyi != CROSS) isStandard = 0;/如果初始位置和目標(biāo)位置之間有棋子,則不符合規(guī)則 for (int i = xi-1; i > xj; i -) if (i = 5) continue;/如果行等于5,跳過 if (arrayiyi !=
15、 CROSS) isStandard = 0; else if (xi = xj)/行坐標(biāo)不變,同行移動(dòng) for (int i = yi+1; i < yj; i +) if (arrayxii != CROSS) isStandard = 0; for (int i = yi-1; i > yj; i -) if (arrayxii != CROSS) isStandard = 0; if (xi = xj | yi = yj)&& isStandard && redOrBlack(xj, yj) != -1)/如果棋子直行、沒有犯規(guī)且落點(diǎn)不是紅棋
16、,可以移動(dòng) arrayxiyi = CROSS; arrayxjyj = B(車); else restart = 1;/R(馬)- else if (arrayxiyi = R(馬) if (redOrBlack(xj, yj) != 1) && (xj = xi-2 && yj = yi-1 &&redOrBlack(xi-1, yi) = 0) | (xj = xi-2 && yj = yi+1 &&redOrBlack(xi-1, yi) = 0) | (xj = xi-1 && yj =
17、yi-2 &&redOrBlack(xi, yi-1) = 0) | (xj = xi-1 && yj = yi+2 &&redOrBlack(xi, yi+1) = 0) | (xj = xi+1 && yj = yi-2 &&redOrBlack(xi, yi-1) = 0) | (xj = xi+1 && yj = yi+2 &&redOrBlack(xi, yi+1) = 0) | (xj = xi+2 && yj = yi-1 &&redOr
18、Black(xi+1, yi) = 0) | (xj = xi+2 && yj = yi+1 &&redOrBlack(xi+1, yi) = 0) arrayxiyi = CROSS; arrayxjyj = R(馬); else restart = 1;/B(馬)- else if (arrayxiyi = B(馬) if (redOrBlack(xj, yj) != -1) && (xj = xi-2 && yj = yi-1 &&redOrBlack(xi-1, yi) = 0) | (xj = xi-2
19、&& yj = yi+1 &&redOrBlack(xi-1, yi) = 0) | (xj = xi-1 && yj = yi-2 &&redOrBlack(xi, yi-1) = 0) | (xj = xi-1 && yj = yi+2 &&redOrBlack(xi, yi+1) = 0) | (xj = xi+1 && yj = yi-2 &&redOrBlack(xi, yi-1) = 0) | (xj = xi+1 && yj = yi+2
20、 &&redOrBlack(xi, yi+1) = 0) | (xj = xi+2 && yj = yi-1 &&redOrBlack(xi+1, yi) = 0) | (xj = xi+2 && yj = yi+1 &&redOrBlack(xi+1, yi) = 0) arrayxiyi = CROSS; arrayxjyj = B(馬); else restart = 1;/R(炮)- else if (arrayxiyi = R(炮) int count = 0;/起始位置間棋子的個(gè)數(shù) if (yi = y
21、j)/列坐標(biāo)不變,同列移動(dòng) for (int i = xi+1; i < xj; i +) if (i = 5) continue;/如果行等于5,跳過 if (redOrBlack(i, yi) != 0) count+; for (int i = xi-1; i > xj; i -) if (i = 5) continue;/如果行等于5,跳過 if (redOrBlack(i, yi) != 0) count+; else if (xi = xj)/行坐標(biāo)不變,同行移動(dòng) for (int i = yi+1; i < yj; i +) if (redOrBlack(xi,
22、 i) != 0) count+; for (int i = yi-1; i > yj; i -) if (redOrBlack(xi, i) != 0) count+; if (xi = xj | yi = yj)&& (count <= 1) && redOrBlack(xj, yj) != 1)/如果棋子直行、沒有犯規(guī)且落點(diǎn)不是紅棋,可以移動(dòng) arrayxiyi = CROSS; arrayxjyj = R(炮); else restart = 1;/B(炮)- else if (arrayxiyi = B(炮) int count = 0;/
23、起始位置間棋子的個(gè)數(shù) if (yi = yj)/列坐標(biāo)不變,同列移動(dòng) for (int i = xi+1; i < xj; i +) if (i = 5) continue;/如果行等于5,跳過 if (redOrBlack(i, yi) != 0) count+; for (int i = xi-1; i > xj; i -) if (i = 5) continue;/如果行等于5,跳過 if (redOrBlack(i, yi) != 0) count+; else if (xi = xj)/行坐標(biāo)不變,同行移動(dòng) for (int i = yi+1; i < yj; i
24、+) if (redOrBlack(xi, i) != 0) count+; for (int i = yi-1; i > yj; i -) if (redOrBlack(xi, i) != 0) count+; if (xi = xj | yi = yj)&& (count <= 1) && redOrBlack(xj, yj) != -1)/如果棋子直行、沒有犯規(guī)且落點(diǎn)不是紅棋,可以移動(dòng) arrayxiyi = CROSS; arrayxjyj = B(炮); else restart = 1;/R(兵)- else if (arrayxiyi
25、= R(兵) if (xi > xj) isStandard = 0;/如果倒退,則不符合規(guī)范 if (xi = 3) if (xj != xi+1) | (yi != yj) isStandard = 0;/第3行時(shí)只能前進(jìn)一步 if (xi = 4) if (xj != xi+2) | (yi != yj) isStandard = 0;/第4行時(shí)只能前進(jìn)兩步 if (xi > 4) if (xj = xi+1 && yi =yj)| (xj = xi && yi =yj+1)|(xj = xi && yi =yj-1) else
26、 isStandard = 0; if (xi = xj | yi = yj)&& isStandard && redOrBlack(xj, yj) != 1)/ arrayxiyi = CROSS; arrayxjyj = R (兵); else restart = 1;/B(卒)- else if (arrayxiyi = B(卒) if (xi < xj) isStandard = 0;/如果倒退,則不符合規(guī)范 if (xi = 7) if (xj != xi-1) | (yi != yj) isStandard = 0;/第3行時(shí)只能前進(jìn)一步 if
27、 (xi = 6) if (xj != xi-2) | (yi != yj) isStandard = 0;/第4行時(shí)只能前進(jìn)兩步 if (xi < 4) if (xj = xi-1 && yi =yj)| (xj = xi && yi =yj+1)|(xj = xi && yi =yj-1) else isStandard = 0; if (isStandard && redOrBlack(xj, yj) != -1)/ arrayxiyi = CROSS; arrayxjyj = R (卒); else restart
28、= 1;/R(相)- else if (arrayxiyi = R(相) if (xj <= 4)&&(redOrBlack(xj, yj) != 1) && (xj = xi-2 && yj = yi-2 &&redOrBlack(xi-1, yi-1) = 0) | (xj = xi-2 && yj = yi+2 &&redOrBlack(xi-1, yi+1) = 0) | (xj = xi+2 && yj = yi-2 &&redOrBlack(xi+1
29、, yi-1) = 0) | (xj = xi+2 && yj = yi+2 &&redOrBlack(xi+1, yi+1) = 0) arrayxiyi = CROSS; arrayxjyj = R(相); else restart = 1;/B(象)- else if (arrayxiyi = B(象) if (xj >= 6)&&(redOrBlack(xj, yj) != -1) && (xj = xi-2 && yj = yi-2 &&redOrBlack(xi-1, yi-1)
30、= 0) | (xj = xi-2 && yj = yi+2 &&redOrBlack(xi-1, yi+1) = 0) | (xj = xi+2 && yj = yi-2 &&redOrBlack(xi+1, yi-1) = 0) | (xj = xi+2 && yj = yi+2 &&redOrBlack(xi+1, yi+1) = 0) arrayxiyi = CROSS; arrayxjyj = B(象); else restart = 1;/R(仕)- else if (arrayxiyi = R(仕) if (xj <= 2)&&(redOrBlack(xj, yj) != 1) && (xj = xi-1 && yj = yi-1 ) | (xj = xi-1 && yj = y
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 樁核冠修復(fù)病例分析與應(yīng)用
- e簽寶java面試題及答案
- 生物高考試題及答案
- 美團(tuán)java面試題及答案2025年
- 采礦學(xué)考試題及答案
- 各大公司java面試題及答案
- 電商知識(shí)產(chǎn)權(quán)保護(hù)與電子商務(wù)平臺(tái)知識(shí)產(chǎn)權(quán)保護(hù)與知識(shí)產(chǎn)權(quán)保護(hù)戰(zhàn)略研究與應(yīng)用報(bào)告
- 工業(yè)園區(qū)污水處理站2025年設(shè)計(jì)水質(zhì)安全與風(fēng)險(xiǎn)防控評(píng)估報(bào)告
- 收銀員的職業(yè)道德培訓(xùn)
- 腫瘤護(hù)理個(gè)案護(hù)理
- 四川省成都市成華區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題(含答案)
- 慢性硬膜下血腫護(hù)理要點(diǎn)大揭秘
- “微”力量微博營銷
- 2022-2023學(xué)年山東省菏澤市成武縣人教版四年級(jí)下冊(cè)期末考試數(shù)學(xué)試卷(解析版)
- 2023建筑業(yè)10項(xiàng)新技術(shù)
- 預(yù)防醫(yī)學(xué)英文版課件:Occupational hazards injury
- 無人船自主航行設(shè)計(jì)方案
- NBT10497-2021 水電工程水庫塌岸與滑坡治理技術(shù)規(guī)程
- 陜西省銅川市初中語文八年級(jí)期末高分試卷詳細(xì)答案和解析
- 《非物質(zhì)文化遺產(chǎn)數(shù)字化保護(hù) 數(shù)字資源采集和著錄 第9部分:傳統(tǒng)技藝》
- 小企業(yè)會(huì)計(jì)準(zhǔn)則轉(zhuǎn)為企業(yè)會(huì)計(jì)準(zhǔn)則實(shí)務(wù)操
評(píng)論
0/150
提交評(píng)論