




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、/*這是我們c+課程設計五子棋,我用了許多循環語句,可能比較繁碎,不過仔細分析的話,還是挺簡單的。如果有什么不懂的地方可以加我q 1570169994 */#include#include#include / 這些是一些必要的頭文件#include#includeusing namespace std;#define M 15 /此處定義棋盤大小為15*15,自己視情況而定typedef struct Nodeint a; /這里定義的結點在悔棋時要用到int b;struct Node *next;node;class Qipan /定義一個棋盤類,這個類里有實現不同功能的函數public:
2、int a,b,t; /棋子的坐標我們用a,b表示,t表示接收的輸入信息int player; /player為1時,代表綠方下棋,2代表紅方int nameMM; /棋盤用一個15*15的二維數組表示void reset(); /此函數實現重置功能,即將棋盤上的棋子清零void chess(); /此函數實現下棋功能,是非常重要的void win(); /此函數實現判斷功能,即每當一方落子后,都要調用此函數void explain(); /此函數是解釋說明的函數void output(int count); /此函數輸出贏的一方void gotoxy(int x,int y) HANDLE
3、hout; /這是實現光標移動的函數,具體可以百度一下 COORD coord; /x,y即為棋子的坐標,和a,b一樣 coord.X = x; /此函數是將當前光標移動到x,y坐標處 coord.Y = y; hout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hout,coord);/ main 函數int main()Qipan qipan; /定義一個棋盤對象dosystem(cls); /清屏函數 cout1.開始游戲 endl; cout2.游戲說明 endl; fflush(stdin); /清空輸入緩
4、沖區,準備接收用戶的輸入qipan.t = getch(); /接受用戶的輸入,把值賦給 tif(qipan.t = 27) /Esc鍵的ASCII為27,即用戶如果按下Esc鍵,則退出循環break;switch(qipan.t) /選擇語句case 1: /如果用戶輸入1,即要開始游戲while(1) system(cls); cout1.綠棋先走 endl; cout2.紅棋先走 endl;fflush(stdin); qipan.t = getch(); if(qipan.t=48) break; if(qipan.t = 27) break; if(qipan.t = 49) /用戶
5、輸入1,則綠棋先走, qipan.player = 1; if(qipan.t = 50) /輸入2,紅棋先走 qipan.player = 2;do qipan.reset(); /重置棋盤,即繪制棋盤 qipan.chess(); /下棋函數while(qipan.t = 49); if(qipan.t=48) break;break;case 2:qipan.explain(); /用戶輸入2,調用說明函數qipan.t = getch();break;while(qipan.t!=48);qipan.gotoxy(40,8);return 0;/reset函數,繪制棋盤void Qip
6、an:reset()int i,j;a = 14; /定義光標初始位置為中間,即(14,7)b = 7;for(i=0;iM;i+)for(j=0;jM;j+)nameij = 0; /初始化二維數組為0,當有棋子落下時,根據紅綠變為1或2system(cls);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);/ 此函數為設置背景顏色為白色函數,可以自行百度for(i=0;iM;i+)for(j=0;jM;j+)if(nam
7、eij = 0)cout; /輸出棋盤,即15*15 個 + 號coutendl;gotoxy(42,2);cout按Eas返回上級菜單;gotoxy(42,3); / 在右邊輸出一些提示cout按 2 悔棋 ;gotoxy(42,4);cout按 1 重新開始endl;gotoxy(42,5);cout按 0 結束游戲a = 0; /頭結點初始化為0h-b = 0;h-next = NULL;while(t = getch() != 27) /接收用戶的輸入,并且判斷不為0,因為0是結束游戲switch(t)case w: / w s a d 和 上下左右鍵是移動光標的if(b0)b = b
8、-1;gotoxy(a,b);break;case s:if(b0)a = a-2;gotoxy(a,b);break;case d:if(a0)b = b-1;gotoxy(a,b);break;case 80:if(b0)a = a-2;gotoxy(a,b);break;case 77:if(aa = a;q-b = b;q-next = NULL; /將當前光標的坐標即a,b賦給結點,即用結點記錄棋子的坐標p-next = q;p = q;if(player = 1)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FORE
9、GROUND_INTENSITY|FOREGROUND_GREEN);cout; /設置顏色gotoxy(a,b);name(a/2)b = 1; /落子后,二維數組的值相應的變為1或2win(); / 每下一次棋,就要調用此函數判斷是否有五子連線elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);couta = a;q-b = b;q-next = NULL;p-next = q;p = q;if(player = 1)SetConsoleTextAt
10、tribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);cout;gotoxy(a,b);name(a/2)b = 1;win();elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);coutnext = p) p = r; else for(int i=0;i+) r = r-next; if(r-next = p) p = r; break; a =
11、 q-a; / 此為悔棋步驟,先找到最后一個結點,即最后一棋子的位置,因為坐標保存在了結點里 b = q-b; gotoxy(a,b);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); cout; gotoxy(a,b); / 悔棋后,player也需要變name(a/2)b = 0;player=(player=1)?2:1; free(q); q = p;SetConsoleTextAttribute(GetStdHand
12、le(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);/ 設置背景顏色/win函數,判斷是否有五子void Qipan:win() / 此函數判斷是否有五子相連,需要從橫豎些捺四個方向判斷int i,j,count8=0,k;for(j=0;jM;j+) / 從第一個位置開始,判斷橫向是否有五子for(i=0;iM;i+)for(k=0;k5;k+)if(nameij+k=1)count0+;if(nameij+k=2)count1+;output(co
13、unt);/for(j=0;jM;j+) / 從第一個位置開始,判斷豎向是否有五子 for(i=0;iM;i+) for(k=0;k5;k+) if(namei+kj=1) count2+; if(namei+kj=2) count3+; output(count); / for(j=0;jM;j+) for(i=0;iM;i+) for(k=0;k5;k+) if(namei+kj+k=1) count4+; if(namei+kj+k=2) count5+; output(count); / for(j=0;jM;j+) for(i=0;iM;i+) for(k=0;k5;k+) if(n
14、amei+kj-k=1) count6+; if(namei+kj-k=2) count7+; output(count); /output函數,輸出贏的一方void Qipan:output(int count8) / 如果有五子相連,則有一方勝利,此函數輸出勝利者if(count0=5 | count2=5 | count4=5 | count6=5)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);gotoxy(42,8);cout綠棋贏了endl;gotoxy(a,b);fflush(stdin);if(count1=5 | count3=5 | count5=5 | count7=5)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南2025年滇西應用技術大學普洱茶學院高層次人才招聘筆試歷年參考題庫附帶答案詳解
- 云南2024年云南大學招聘校醫院工作人員筆試歷年參考題庫附帶答案詳解
- 樂山2024下半年四川樂山市市中區赴高校招聘事業單位工作人員51人筆試歷年參考題庫附帶答案詳解
- 人教版八年級上冊11.2.1 三角形的內角教學設計及反思
- 臨沂2024年山東青島理工大學(臨沂校區)招聘4人筆試歷年參考題庫附帶答案詳解
- 小學信息技術第二冊下 編寫我的演講稿2教學設計 泰山版
- 全新餐飲店鋪租賃合同書范例
- 三方監理合同書范例模板二零二五年
- 二零二五版債權轉讓合同書協議書
- 人教部編版二年級下冊3“貝”的故事教案設計
- 記者證考試問題解析試題及答案
- 天津市河西區2025屆高三一模試卷語文試題(含答案)
- 易制毒危險化學品管理制度
- 重癥血液凈化血管通路的建立與應用中國專家共識解讀2025
- GB/T 26713-2025鞋類 化學試驗方法富馬酸二甲酯(DMFu)的測定
- 輸電線路鐵塔基礎強度加固方案
- 足浴店管理制度
- 北師大版七年級數學下冊《第三章概率初步》單元測試卷-附答案
- 《圖像識別技術及其應用》課件
- GA/T 701-2024安全防范指紋識別應用出入口控制指紋識別模塊通用規范
- 2025年小學生三年級語文家長會標準課件
評論
0/150
提交評論