


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、五 子 棋 C 語 言 代 碼#include "graphics.h" /* 圖形系統(tǒng)頭文件 */ #define LEFT 0x4b00 /* 光標(biāo)左鍵值 */ #define RIGHT 0x4d00 /* 光標(biāo)右鍵值 */ #define DOWN 0x5000 /* 光標(biāo)下鍵值 */ #define UP 0x4800 /*光標(biāo)上鍵值 */#defi ne ESC 0x011b /* ESC 鍵值 */ #define ENTER 0x1c0d /* 回車鍵值 */int a88=0,key,score1,score2;/* 具體分?jǐn)?shù)以及按鍵與存放棋子的變量 */
2、 char playone3,playtwo3;/* 兩個(gè)人的得分轉(zhuǎn)換成字符串輸出 */ void playtoplay(void);/* 人人對(duì)戰(zhàn)函數(shù) */void DrawQp(void);/* 畫棋盤函數(shù) */void SetPlayColor(int x);/* 設(shè)置棋子第一次的顏色 */ void MoveColor(int x,int y);/* 恢復(fù)原來棋盤狀態(tài) */ int QpChange(int x,int y,int z);/* 判斷棋盤的變化 */ void DoScore(void);/* 處理分?jǐn)?shù) */void PrintScore(int n);/* 輸出成績 *
3、/ void playWin(void);/* 輸出勝利者信息 */*主函數(shù) */void main(void)int gd=DETECT,gr;initgraph(&gd,&gr,"c:tc"); /* 初始化圖形系統(tǒng) */ DrawQp();/* 畫棋盤 */playtoplay();/* 人人對(duì)戰(zhàn) */getch();closegraph();/*關(guān)閉圖形系統(tǒng)*/void DrawQp()/* 畫棋盤 */int i,j;score仁score2=0;/棋手一開始得分都為0*/ setbkcolor(BLUE);for(i=100;i<=420;
4、i+=40)line(100,i,420,i);/* 畫水平線 */ line(i,100,i,420); /*畫垂直線 */setcolor(0);/*取消圓周圍的一圈東西*/ setfillstyle(SOLID_FILL,15);/* 白色實(shí)體填充模式 */ fillellipse(500,200,15,15); /*在顯示得分的位置畫棋 */ setfillstyle(SOLID_FILL,8); /* 黑色實(shí)體填充模式 */ fillellipse(500,300,15,15);a33=a44=1;/* 初始兩個(gè)黑棋 */ a34=a43=2;/* 初始兩個(gè)白棋 */setfills
5、tyle(SOLID_FILL,WHITE);fillellipse(120+3*40,120+3*40,15,15);fillellipse(120+4*40,120+4*40,15,15);setfillstyle(SOLID_FILL,8);fillellipse(120+3*40,120+4*40,15,15);fillellipse(120+4*40,120+3*40,15,15);score1=score2=2; /*有棋后改變分?jǐn)?shù) */DoScore();/* 輸出開始分?jǐn)?shù) */void playtoplay()/* 人人對(duì)戰(zhàn) */int x,y,t=1,i,j,cc=0;whi
6、le(1)/* 換棋手走棋 */ x=120,y=80;/*每次棋子一開始出來的坐標(biāo),x為行坐標(biāo),y為列坐標(biāo)*/ while(1) /* 具體一個(gè)棋手走棋的過程 */Prin tScore(1);/*輸出棋手1的成績*/PrintScore(2);/*輸出棋手2的成績*/SetPlayColor(t);/*t 變量是用來判斷棋手所執(zhí)棋子的顏色 */fillellipse(x,y,15,15);key=bioskey(0);/* 接收按鍵 */if(key=ESC)/* 跳出游戲 */break;elseif(key=ENTER)/* 如果按鍵確定就可以跳出循環(huán) */if(y!=80&&
7、amp;a(x-120)/40(y-120)/40!=1 &&a(x-120)/40(y-120)/40!=2)/* 如果落子位置沒有棋子 */if(t%2=1)/* 如果是棋手 1 移動(dòng)*/a(x-120)/40(y-120)/40=1;else/*否則棋手2移動(dòng)*/a(x-120)/40(y-120)/40=2;if(!QpChange(x,y,t)/*落子后判斷棋盤的變化*/a(x-120)/40(y-120)/40=0;/* 恢復(fù)空格狀態(tài) */cc+;/*開始統(tǒng)計(jì)嘗試次數(shù)*/if(cc>=64-score1-score2) /*如果嘗試超過空格數(shù)則停步 */Mov
8、eColor(x,y);fillellipse(x,y,15,15);break;else continue;/* 如果按鍵無效 */ DoScore();/* 分?jǐn)?shù)的改變 */ break;/* 棋盤變化了,則輪對(duì)方走棋 */ else/*已經(jīng)有棋子就繼續(xù)按鍵*/ continue;else /*四個(gè)方向按鍵的判斷 */ if(key=LEFT&&x>120)/* 左方向鍵 */ MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); x-=40; fillellipse(x,y,15,15);elseif(ke
9、y=RIGHT&&x<400&&y>80)/* 右方向鍵 */ MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); x+=40; fillellipse(x,y,15,15);elseif(key=UP&&y>120)/* 上方向鍵 */ MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); y-=40; fillellipse(x,y,15,15);elseif(key=DOWN&&y<
10、;400)/* 下方向鍵 */ MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); y+=40; fillellipse(x,y,15,15);if(key=ESC)/* 結(jié)束游戲 */ break;if(score1+score2)=64|score 仁=0|score2=0)格子已經(jīng)占滿或一方棋子為0判斷勝負(fù) */playWin();/*輸出最后結(jié)果*/ break;t=t%2+1; /*一方走后,改變棋子顏色即輪對(duì)方走 */cc=0; / *計(jì)數(shù)值恢復(fù)為 0*/ /*endwhile*/void SetPlayColor(in
11、t t)/ *設(shè)置棋子顏色 */if(t%2=1)setfillstyle(SOLID_FILL,15);/* 白色*/elsesetfillstyle(SOLID_FILL,8);/* 灰色 */void MoveColor(int x,int y)/* 走了一步后恢復(fù)原來格子的狀態(tài) */if(y<100)/*如果是從起點(diǎn)出發(fā)就恢復(fù)藍(lán)色*/ setfillstyle(SOLID_FILL,BLUE);else/*其他情況如果是1就恢復(fù)白色棋子,2恢復(fù)黑色棋子,或恢復(fù)藍(lán)色棋盤*/switch(a(x-120)/40(y-120)/40)case 1:setfillstyle(SOLID_
12、FILL,15);break; /*白色*/case 2:setfillstyle(SOLID_FILL,8);break; /* 黑色*/default:setfillstyle(SOLID_FILL,BLUE); /* 藍(lán)色*/int QpChange(int x,int y,int t)/* 判斷棋盤的變化 */int i,j,k,kk,ii,jj,yes;yes=0;i=(x-120)/40; / *計(jì)算數(shù)組元素的行下標(biāo) */j=(y-120)/40; / *計(jì)算數(shù)組元素的列下標(biāo) */SetPlayColor(t);/ *設(shè)置棋子變化的顏色 */*開始往 8個(gè)方向判斷變化 */if(j
13、<6)/* 往右邊 */ for(k=j+1;k<8;k+)if(aik=aij|aik=0)/* 遇到自己的棋子或空格結(jié)束 */ break;if(aik!=0&&k<8)for(kk=j+1;kk<k&&k<8;kk+)/* 判斷右邊 */aikk=aij; /* 改變棋子顏色 */ fillellipse(120+i*40,120+kk*40,15,15);if(kk!=j+1) /* 條件成立則有棋子改變過顏色 */yes=1;if(j>1)/* 判斷左邊 */for(k=j-1;k>=0;k-)if(aik=a
14、ij|!aik)break;if(aik!=0&&k>=0)for(kk=j-1;kk>k&&k>=0;kk-)aikk=aij;fillellipse(120+i*40,120+kk*40,15,15);if(kk!=j-1)yes=1;if(i<6)/* 判斷下邊 */for(k=i+1;k<8;k+)if(akj=aij|!akj)break;if(akj!=0&&k<8)for(kk=i+1;kk<k&&k<8;kk+)akkj=aij;fillellipse(120+kk*
15、40,120+j*40,15,15);if(kk!=i+1)yes=1;if(i>1)/* 判斷上邊 */for(k=i-1;k>=0;k-) if(akj=aij|!akj)break;if(akj!=0&&k>=0) for(kk=i-1;kk>k&&k>=0;kk-) akkj=aij;fillellipse(120+kk*40,120+j*40,15,15); if(kk!=i-1)yes=1;if(i>1&&j<6)/* 右上 */for(k=i-1,kk=j+1;k>=0&&am
16、p;kk<8;k-,kk+) if(akkk=aij|!akkk)break;if(akkk&&k>=0&&kk<8) for(ii=i-1,jj=j+1;ii>k&&k>=0;ii-,jj+) aiijj=aij;fillellipse(120+ii*40,120+jj*40,15,15); if(ii!=i-1) yes=1;if(i<6&&j>1)/* 左下 */for(k=i+1,kk=j-1;k<8&&kk>=0;k+,kk-) if(akkk=aij
17、|!akkk)break;if(akkk!=0&&k<8&&kk>=0) for(ii=i+1,jj=j-1;ii<k&&k<8;ii+,jj-)aiijj=aij;fillellipse(120+ii*40,120+jj*40,15,15);if(ii!=i+1)yes=1;if(i>1&&j>1)/* 左上 */for(k=i-1,kk=j-1;k>=0&&kk>=0;k-,kk-)if(akkk=aij|!akkk)break;if(akkk!=0&&a
18、mp;k>=0&&kk>=0)for(ii=i-1,jj=j-1;ii>k&&k>=0;ii-,jj-)aiijj=aij;fillellipse(120+ii*40,120+jj*40,15,15);if(ii!=i-1)yes=1;if(i<6&&j<6)/* 右下 */for(k=i+1,kk=j+1;kk<8&&kk<8;k+,kk+)if(akkk=aij|!akkk)break;if(akkk!=0&&kk<8&&k<8)for(ii=i+1,jj=j+1;ii<k&&k<8;ii+,jj+)aiijj=aij;fillellipse(120+ii*40,120+jj*40,15,15);if(ii!=i+1)yes=1;return yes;/*返回是否改變過棋子顏色的標(biāo)記*/void DoScore()/* 處理分?jǐn)?shù) */int i,j;score仁score2=0;/重新開始計(jì)分?jǐn)?shù)*/for(i=0;i<8;i+)for(j=0;j<8;j+)if(aij=1)/* 分別統(tǒng)計(jì)兩個(gè)人的分?jǐn)?shù) */sc
溫馨提示
- 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é)《中國西部文學(xué)研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 廈門理工學(xué)院《教育經(jīng)典名著與影片賞析》2023-2024學(xué)年第二學(xué)期期末試卷
- 《乘法的初步認(rèn)識(shí)》 (教學(xué)設(shè)計(jì))-2024-2025學(xué)年二年級(jí)上冊(cè)數(shù)學(xué)人教版
- 大連裝備制造職業(yè)技術(shù)學(xué)院《數(shù)據(jù)庫原理與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 沈陽工程學(xué)院《人體解剖生理學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 展覽布置合同范本
- 太陽能空調(diào)系統(tǒng)項(xiàng)目效益評(píng)估報(bào)告
- 河南工業(yè)貿(mào)易職業(yè)學(xué)院《投資項(xiàng)目評(píng)估》2023-2024學(xué)年第二學(xué)期期末試卷
- 桂林生命與健康職業(yè)技術(shù)學(xué)院《機(jī)械原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海濟(jì)光職業(yè)技術(shù)學(xué)院《小學(xué)音樂課程與教學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年大連長興開發(fā)建設(shè)限公司工作人員公開招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 教科版三年級(jí)下冊(cè)科學(xué)全冊(cè)單元教材分析
- 《物理學(xué)的發(fā)展史》課件
- 2025年廣東廣州市海珠區(qū)官洲街道辦事處政府雇員招聘5人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《道路交通安全法》課件完整版
- 《小腸梗阻的診斷與治療中國專家共識(shí)(2023版)》解讀
- 2024屆廣東省廣州市高三一??荚囉⒄Z試題講評(píng)課件
- 切削加工中的刀具路徑規(guī)劃算法考核試卷
- 《推拿學(xué)》期末考試復(fù)習(xí)題庫(含答案)
- 2024年經(jīng)濟(jì)師考試工商管理(中級(jí))專業(yè)知識(shí)和實(shí)務(wù)試卷及解答參考
- 10kV配電室工程施工方案設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論