五子棋C語言代碼教學(xué)文案_第1頁
五子棋C語言代碼教學(xué)文案_第2頁
五子棋C語言代碼教學(xué)文案_第3頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論