版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、/* 加載頭文件 */#include#include#include#include#include/* 編譯預處理 , 定義按鍵碼 */#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800/* 若想在游戲中途退出 , 可按 Esc 鍵 */#define ESC 0x011b/*SPACE 鍵表示落子 */#define SPACE 0x3920/* 設置偏移量 */#define OFFSET 20#define OFFSET_x 4#define OFFSET_y 3/* 定義數(shù)組大小 *
2、/#define N 19/* 定義全局變量 */int statusNN 。 /* 定義地數(shù)組 , 保存狀態(tài) */ int step_x,step_y。 /* 行走地坐標 */int key 。/*獲取按下地鍵盤地鍵 */int flag 。/*玩家標志 */* 自定義函數(shù)原型 */void DrawBoard() 。void DrawCircle(int x,int y,int color)。void Alternation() 。void JudgePlayer(int x,int y)。void Done() 。int ResultCheck(int x,int y)。void Wel
3、comeInfo() 。void ShowMessage() 。/* 定義函數(shù) */* 顯示歡迎信息函數(shù) */void WelcomeInfo()char ch 。/* 移動光標到指定位置 */gotoxy(12,4) 。/* 顯示歡迎信息 */printf(Welcome you to gobang word!) 。gotoxy(12,6) 。printf(1.You can use the up,down,left and right key to move the chessman,) 。gotoxy(12,8) 。printf( and you can press Space key
4、to enter after you move it !)。gotoxy(12,10) 。printf(2.You can use Esc key to exit the game too !) 。gotoxy(12,12) 。printf(3.Don not move the pieces out of the chessboard !)。gotoxy(12,14) 。printf(DO you want to continue ?(Y/N)。ch=getchar() 。/* 判斷程序是否要繼續(xù)進行 */if(ch=n|ch=N)/* 如果不繼續(xù)進行 , 則推出程序 */exit(0) 。/
5、* 畫棋盤函數(shù) */void DrawBoard()int x1,x2。int y1,y2。/* 設置背景色 */setbkcolor(2) 。/* 設置線條顏色 */setcolor(1) 。/* 設置線條風格、寬度 */ setlinestyle(DOTTED_LINE,1,1) 。/* 按照預設地偏移量開始畫棋盤 */ for(x1=1,y1=1,y2=18。 x1=18。 x1+)line(x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x1+OFFSET_x)*OFFSET,(y2+OFFSET_y )*OFFSET)。for(x1=1,y1=1,
6、x2=18。 y1=18。 y1+)line(x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x2+OFFSET_x)*OFFSET,(y1+OFFSET_y )*OFFSET)。/* 將各個點地狀態(tài)設置為 0*/for(x仁1。x1=18。x1+)for(y1=1 。 y1=1。j-)if(statusjk=flag)n1+ 。elsebreak。/* 水平向右數(shù) */for(j=x,k=y。 j=5)return(1)。/* 對垂直方向進行判斷是否有 5 個同色地圓 */ n1=0 。n2=0 。/* 垂直向上數(shù) */ for(j=x,k=y。 k=1。
7、 k-)if(statusjk=flag) n1+ 。elsebreak 。/* 垂直向下數(shù) */ for(j=x,k=y。 k=5)return(1) 。/* 從左上方到右下方進行判斷是否有 5 個同色地圓 */ n1=0 。n2=0 。/* 向左上方數(shù) */ for(j=x,k=y。 (j=1)&(k=1) 。 j-,k-)if(statusjk=flag) n1+ 。elsebreak 。/* 向右下方數(shù) */ for(j=x,k=y 。 (j=18)&(k=5) return(1) 。/* 從右上方到左下方進行判斷是否有 5 個同色地圓 */ n1=0 。n2=0 。/* 向右上方數(shù)
8、*/for(j=x,k=y 。 (j=1) 。 j+,k-) if(statusjk=flag) n1+ 。else break 。/* 向左下方數(shù) */for(j=x,k=y 。 (j=1)&(k=5) return(1) 。return(0) 。/* 執(zhí)行下棋函數(shù) */void Done()int i。int j。/* 根據(jù)不同地 key 值進行不同地操作 */ switch(key)/* 如果是向左移動地 */case LEFT:/* 如果下一步超出棋盤左邊界則什么也不作 */ if(step_x-1=1。i-)if(statusij=0)DrawCircle(step_x,step_y
9、,2)。break。if(i18)break。elsefor(i=step_x+1,j=step_y。 i18)break。step_x=i。/*根據(jù)不同地行棋者畫不同顏色地圓*/JudgePlayer(step_x,step_y)。/*顯示行棋一方是誰 */break。/* 如果是向下移動地 */case DOWN :/* 如果下一步超出棋盤下邊界則什么也不作 */if(step_y+1)18)break。elsefor(i=step_x,j=step_y+1。 j18)break 。step_y=j 。JudgePlayer(step_x,step_y) 。 break 。/* 如果是向上
10、移動地 */case UP :/* 如果下一步超出棋盤上邊界則什么也不作 */ if(step_y-1)=1。j-)if(statusij=0)DrawCircle(step_x,step_y,2)。break。if(j=1&step_x=1&step_y=18)0*/表示是哪個行棋者行地棋 */* 按下確定鍵后 , 如果棋子當前位置地狀態(tài)為 if(statusstep_xstep_y=0)/*則更改棋子當前位置地狀態(tài)在flag,statusstep_xstep_y=flag。/*如果判斷當前行棋者獲勝 */if(ResultCheck(step_x,step_y)=1)/*以指定頻率打開 P
11、C揚聲器*/sound(1000)。/*揚聲器地發(fā)生時間 ,為 1 秒鐘*/delay(1000)。nosound() 。gotoxy(30,4) 。setbkcolor(BLUE) 。/* 清除圖形屏幕 */cleardevice() 。/*為圖形輸出設置當前視口 */setviewport(100,100,540,380,1) 。/*綠色實填充 */setfillstyle(1,2) 。 setcolor(YELLOW) 。 rectangle(0,0,439,279) 。 floodfill(50,50,14)。setcolor(12) 。settextstyle(1,0,5)。/* 三
12、重筆劃字體 , 水平放大 5 倍 */ outtextxy(20,20,Congratulation !) setcolor(15) 。settextstyle(3,0,4) 。/*如果是 Player1 獲勝, 顯示獲勝信息 */if(flag=1)/* 無襯筆劃字體 , 水平放大 5 倍*/ outtextxy(20,120,Player1 win the game !)/*如果是 Player1 獲勝, 顯示獲勝信息 */if(flag=2)/* 無襯筆劃字體 , 水平放大 5 倍*/ outtextxy(20,120,Player2 win the game !)setcolor(14
13、) 。settextstyle(2,0,8) 。getch() 。exit(0) 。/* 如果當前行棋者沒有獲勝 , 則交換行棋方 */ Alternation() 。/* 提示行棋方是誰 */ShowMessage() 。breakelsebreak 。/* 顯示行棋方函數(shù) */void ShowMessage()/* 輪到 Player1 行棋 */if(flag=1)setcolor(2) 。 settextstyle(1,0,1) 。gotoxy(100,30) 。/* 覆蓋原有地字跡 */ outtextxy(100,30,Its turn to Player2 !) setcolo
14、r(12) 。 settextstyle(1,0,1) 。 outtextxy(100,30,Its turn to Player1 !)/* 輪到 Player2 行棋 */if(flag=2)setcolor(2) 。 settextstyle(1,0,1) 。/* 覆蓋原有地字跡 */ outtextxy(100,30,Its turn to Player1 !) setcolor(12) 。 settextstyle(1,0,1) 。 gotoxy(100,20) 。outtextxy(100,30,Its turn to Player2 !)/* 主函數(shù) */int main()in
15、t gdriver 。int gmode 。int errorcode 。/* 清空文本模式窗口 */clrscr() 。/* 顯示歡迎信息 */WelcomeInfo() 。gdriver=DETECT 。gmode=0 。/* 初始化圖形系統(tǒng) */ initgraph(&gdriver,&gmode,) 。/* 返回最后一次不成功地圖形操作地錯誤代碼 */ errorcode=graphresult() 。if (errorcode!= grOk)/* 根據(jù)錯誤代碼輸出錯誤信息串 */grphicsprintf(nNotice:Erroroccuredwheninitialization: %sn,grapherrormsg(errorcode)。printf(Press any key to quit!)。getch()。exit(1)。/* 設置 flag 初始值 , 默認是 Player1 先行 */flag=1 。/* 畫棋盤 */DrawBoard() 。ShowMessage() 。dost
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度二零二五年度人工智能研發(fā)聘用合同詳盡版2篇
- 2025年度交通樞紐門衛(wèi)安全責任書3篇
- 2024年高端裝備制造業(yè)基地施工分包合同
- 2025年未實繳出資股份交易合同范本及風險提示3篇
- 二零二四年度2024權合作合同范本:信息安全服務合作協(xié)議3篇
- 2025年度綠色屋頂綠化設計與植物養(yǎng)護服務合同4篇
- 2025年度智能工廠安防監(jiān)控系統(tǒng)集成合同范本2篇
- 二零二五版環(huán)保管家技術服務合同樣本:環(huán)保設施投資合作3篇
- 2025年涂裝勞務分包合同范本大全:涂裝工藝創(chuàng)新3篇
- 個人勞務合同書電子版
- 名表買賣合同協(xié)議書
- COCA20000詞匯音標版表格
- 滬教版七年級數(shù)學上冊專題06圖形的運動(原卷版+解析)
- JTG-T-F20-2015公路路面基層施工技術細則
- 光伏發(fā)電站集中監(jiān)控系統(tǒng)通信及數(shù)據(jù)標準
- 建筑垃圾減排及資源化處置措施
- 2024年遼寧石化職業(yè)技術學院單招職業(yè)適應性測試題庫附答案
- 中西方校服文化差異研究
- 2024年一級建造師考試思維導圖-市政
- 高壓架空輸電線路反事故措施培訓課件
- 隱私計算技術與數(shù)據(jù)安全保護
評論
0/150
提交評論