




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子科技大學(xué)《安全監(jiān)測(cè)與監(jiān)控技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘭州現(xiàn)代職業(yè)學(xué)院《基礎(chǔ)樂理》2023-2024學(xué)年第二學(xué)期期末試卷
- 今日打折活動(dòng)方案
- 過錯(cuò)方離婚協(xié)議書
- 2025年K2教育中人工智能個(gè)性化學(xué)習(xí)系統(tǒng)應(yīng)用效果實(shí)證研究綜述與啟示報(bào)告
- 酒店會(huì)議中心資源管理協(xié)議
- 唐代詩歌的魅力:八年級(jí)語文古詩鑒賞教學(xué)教案
- 2024年度河北省二級(jí)注冊(cè)建筑師之建筑結(jié)構(gòu)與設(shè)備題庫附答案(典型題)
- 國際教育交流項(xiàng)目2025年學(xué)生跨文化適應(yīng)能力培養(yǎng)模式創(chuàng)新與實(shí)踐報(bào)告
- 《牛頓運(yùn)動(dòng)定律在高二物理實(shí)驗(yàn)教學(xué)中的運(yùn)用》
- 河南省土地整治項(xiàng)目工程施工監(jiān)理規(guī)程2014.7.31
- 從偏差行為到卓越一生3.0版
- 2024年廣州天河區(qū)六年級(jí)語文小升初摸底考試含答案
- 人工智能中的因果驅(qū)動(dòng)智慧樹知到期末考試答案2024年
- 因公臨時(shí)出國經(jīng)費(fèi)決算表
- 2022年病區(qū)分層考核試題N2
- 自動(dòng)化設(shè)備的故障診斷與維護(hù)
- 《無菌技術(shù)培訓(xùn)課程》課件
- JJF 1521-2023燃油加油機(jī)型式評(píng)價(jià)大綱(試行)
- 接觸網(wǎng)設(shè)備結(jié)構(gòu)-接觸網(wǎng)吊弦
- 十個(gè)一活動(dòng)內(nèi)容記錄表
評(píng)論
0/150
提交評(píng)論