版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 單 位 分院(系)</p><p> 專 業(yè) </p><p> 學 號 </p><p> 學生姓名 </p><p> 指導教師 </p><p&
2、gt; 完成日期 2011 年 05 月 日</p><p><b> 摘 要</b></p><p> 五子棋的歷史:五子棋是一種兩人對弈的純策略型棋類游戲,是起源于中國古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫生,引人入勝;不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。</p>&l
3、t;p> 五子棋相傳起源于四千多年前的堯帝時期,比圍棋的歷史還要悠久,可能早在“堯造圍棋”之前,民間就已有五子棋游戲。有關(guān)早期五子棋的文史資料與圍棋有相似之處,因為古代五子棋的棋具與圍棋是完全相同的。在上古的神話傳說中有“女媧造人,伏羲做棋”一說,《增山海經(jīng)》中記載:“休輿之山有石焉,名曰帝臺之棋,五色而文狀鶉卵?!崩钌谱⒁龂汉惔尽端嚱?jīng)》中曰:“棋局,縱橫各十七道,合二百八十九道,白黑棋子,各一百五十枚”。這段雖沒明講是何
4、種棋類,但至少知道遠古就以漂亮的石頭為棋子。因而規(guī)則簡單的五子棋也可能出自當時,并是用石子作棋子。亦有傳說,五子棋最初流行于少數(shù)民族地區(qū),以后漸漸演變成圍棋并在炎黃子孫后代中遍及開來。 </p><p> 程序說明:本程序是一款棋類益智游戲程序,是用win-tc編寫在WINDOWS 系統(tǒng)下運行的娛樂游戲。本程序可以實現(xiàn)人人對戰(zhàn),操作采用鍵盤上的上下左右鍵控制棋子的上下左右移動,由空格鍵控制下棋,雙方都可通過E
5、SC鍵終止游戲。游戲開始后,紅、白雙方輪流下棋,程序會根據(jù)雙方下棋的先后順序自動顯示不同顏色的棋子,提示當前下棋的棋手,任何一方由五子連成一線時,游戲結(jié)束,結(jié)束時會顯示對戰(zhàn)雙方勝負情況。</p><p> 關(guān)鍵詞:五子棋游戲應用程序,C語言,圖形函數(shù)</p><p><b> 目錄</b></p><p> 第1章 選題的意義………………
6、……………………………………………… 4</p><p> 1.1 ………………………………………………………………………… 4</p><p> 1.2 ………………………………………………………………………… 4</p><p> 第2章 系統(tǒng)功能需求分析 ……………………………………………………… 5</p><p> 2.1
7、系統(tǒng)的基本要求 ……………………………………………………… 5</p><p> 2.2 ………………………………………………………………………… 5</p><p> 第3章 系統(tǒng)設(shè)計 ………………………………………………………………… 6</p><p> 第4章 系統(tǒng)實現(xiàn) ………………………………………………………………… 7</p>&l
8、t;p> 第5章 總結(jié) ……………………………………………………………………… 8</p><p><b> 第1章 選題的意義</b></p><p><b> 1.1意義</b></p><p> 通過游戲過程增加編程的興趣,提高編程水平。編制該程序我對以下的知識點進行的鞏固和掌握:1.數(shù)組元素為結(jié)構(gòu)體的
9、數(shù)組應用。2.全局變量應用。3.按鍵的處理。4.數(shù)組元素與蛇、食物的對應關(guān)系。5.圖形方式等等。加深對所學知識的理解與掌握,增強自己對所學知識解決實際問題的能力,為以后的程序開發(fā)打下基礎(chǔ)。</p><p><b> 1.2 設(shè)計思路</b></p><p> 棋盤設(shè)計為18×18格,初始狀態(tài)光標在棋盤的中央,玩家1先走,輪流落子,當一方連成五子
10、或下滿棋盤時,游戲結(jié)束(連成五子的一方獲勝,下滿棋盤為和棋)。當游戲一方勝利后顯示勝利信息。從程序表面看,這是一個二維平面圖,所以數(shù)據(jù)用二維數(shù)組來表示,數(shù)組兩個下標可以表示棋盤上的位置,數(shù)組元素的值代表棋格上的狀態(tài),共有三種情況,分別是0代表空格,1代表白棋,2代表黑棋。這樣程序的主要工作是接收棋手按鍵操作,棋手用Up、Down、Left、Right控制光標移動,空格鍵表示落子。一旦接收到空格鍵,說明棋手落子,先判斷是否是有效位置,也就
11、是說已經(jīng)有棋子的位置不能重疊落子。落子成功后,馬上判斷以該位置為中心的八個方向:上、下、左、右、左上、左下、右上、右下是否有相同顏色的棋子連成五子,如果連成五子,則游戲結(jié)束,輸出相應的信息。如果想退出游戲,可以按Esc鍵。 </p><p> 第2章 系統(tǒng)功能需求分析</p><p> 2.1系統(tǒng)的基本要求</p><p> 操作系統(tǒng)為WindowsXP,設(shè)計
12、語言為Visual C++或Turbo C++3.0。</p><p><b> 2.2需求分析</b></p><p><b> 1.游戲需求</b></p><p> (1)在游戲開始時出現(xiàn)一個歡迎的界面同時介紹了游戲的規(guī)則;</p><p> (2)畫出棋盤的大?。?</p>
13、;<p> ?。?)畫棋子并確定棋子的大小; </p><p> ?。?)判斷鍵盤輸入哪個鍵執(zhí)行操作; </p><p> ?。?)玩家 P1 先落棋; </p><p> ?。?)玩家輪流下棋; </p><p><b> ?。?)判斷贏家。</b></p><p><b&g
14、t; 2.功能模塊</b></p><p> 初 始 化 模 塊 </p><p><b> 下棋 操 作 模塊</b></p><p> 判 斷 勝 負 模塊</p><p><b> 幫 助 模 塊</b></p><p><b> 3.
15、流程圖</b></p><p><b> 第3章 系統(tǒng)設(shè)計</b></p><p><b> 1.定義全局變量</b></p><p> int status[N][N]; /*定義的數(shù)組,表示棋盤某點的狀態(tài)(棋手1或棋手2)*/</p><
16、p> int step_x,step_y; /*行走的坐標,即每一步光標移動的距離*/</p><p> int key ; /*獲取按下的鍵盤的鍵*/</p><p> int flag; /*玩家標志,當flag=
17、0時,表示該點無棋子,flag=1表示玩家1的棋子,flag=2表示玩家2的棋子*/</p><p> 2.Main()主函數(shù)</p><p> 按照語法規(guī)則,首先定義使用到的常數(shù)、全局變量、函數(shù)原型說明。棋盤狀態(tài)用數(shù)組int status[19][19],初值為0,表示空格。函數(shù)的實體比較簡單,調(diào)用圖形驅(qū)動、畫棋盤、人人對弈等自定義函數(shù),一旦游戲結(jié)束后,關(guān)閉圖形驅(qū)動,程序結(jié)束。<
18、;/p><p> 3.DrawBoard()畫棋盤函數(shù)</p><p> 背景顏色設(shè)為綠色,從坐標(100,100)開始每隔20個單位用黃色畫一條水平直線,一條垂直線,構(gòu)成棋盤,用循環(huán)語句實現(xiàn)。畫線函數(shù)line()的參數(shù)為線的起點和終點坐標,注意要計算正確。函數(shù)setfillstyle()可以設(shè)置填充模式和填充顏色,circle(x,y,8)以x和y為圓心畫圓(這里半徑為8),用它表示棋子
19、。</p><p> 4.ResultCheck(int x,int y)判斷是否勝出函數(shù)</p><p> 本函數(shù)根據(jù)每次落子的位置,分別向上、下、左、右、左上、左下、右上、右下八個方向判斷是否有相同顏色的棋子連成五子,如果成立,游戲就結(jié)束,并顯示提示信息(如:紅方獲勝),否則繼續(xù)落子。</p><p> 5.Done()執(zhí)行下棋函數(shù)</p>
20、<p> 這是游戲進行的函數(shù),主要是接收棋手的按鍵消息,其處理過程如下:</p><p> (1) 按Esc鍵程序可以隨時結(jié)束。</p><p> (2) 按上下左右光標鍵,則改變棋子移動的坐標值。</p><p> (3) 按空格鍵后判斷:</p><p> 1) 如落子的位置已經(jīng)有棋則無效
21、,繼續(xù)按鍵。</p><p> 2) 如落子位置是空格,可以將棋子落入格內(nèi),調(diào)用ResultCheck(int x,int y)函數(shù)。</p><p> 3) 如果棋子變化后,棋盤已下滿了棋子,則游戲結(jié)束。顯示平局信息。</p><p> (4) 重復上述步驟,直到游戲結(jié)束。</p><p><b> 6.圖形功能
22、函數(shù)</b></p><p> 以下函數(shù)原形都在graphics.h中。</p><p> (1)registerbgidriver():</p><p> (2)initgraph(int *driver, int *mode, char *path):用于初始化圖形系統(tǒng),并裝入相應的圖形驅(qū)動器。該函數(shù)把由driver所指向的圖形驅(qū)動器代碼裝入內(nèi)
23、存。如果圖形驅(qū)動器未裝入內(nèi)存,圖形函數(shù)將不能操作。圖形函數(shù)所用的屏顯模式由mode所指向的整數(shù)值確定。最后,圖形驅(qū)動器的路徑是由path所指向的字符串給出。如果沒有指定路徑,就在當前工作路徑上尋找。</p><p> (3)rectangle(int left,int top,int right,int bottom):函數(shù)rectangle()用當前畫出由坐標left,top及right,bottom所定義的
24、矩形。</p><p> (4)setcolor(int color):把當前畫線顏色設(shè)置為color所指定的顏色。</p><p> (5)closegraph():該函數(shù)使圖形狀態(tài)失效,并且釋放用于保存圖形驅(qū)動器和字體的系統(tǒng)內(nèi)存。當你的程序既用到圖形輸出又用到非圖形輸出時,應該用此函數(shù)。該函數(shù)還把系統(tǒng)屏顯模式返回到調(diào)用initgragh()前的狀態(tài)。</p><
25、p><b> 第4章 系統(tǒng)實現(xiàn)</b></p><p><b> 1.程序代碼</b></p><p> /*win-tc下的五子棋源代碼*/</p><p><b> /*加載頭文件*/</b></p><p> #include<stdio.h>
26、 /*輸入輸出函數(shù)*/</p><p> #include<stdlib.h> /*包含系統(tǒng)函數(shù),定義雜項函數(shù)及內(nèi)存分配函數(shù)*/</p><p> #include<graphics.h> /*圖像函數(shù)*/</p>&l
27、t;p> #include<bios.h> /*存放有接口函數(shù)*/</p><p> #include<conio.h> /*定義了通過控制臺進行數(shù)據(jù)輸入和數(shù)據(jù)輸出的函數(shù),主要是一些用戶通過按鍵盤產(chǎn)生的對應操作*/</p><p> /*編譯預處理,定義按鍵碼*
28、/</p><p> #define LEFT 0x4b00 /*向左*/</p><p> #define RIGHT 0x4d00 /*向右*/</p><p> #define DOWN 0x5000 /*向下*/</p>
29、<p> #define UP 0x4800 /*向上*/</p><p> /*若想在游戲中途退出, 可按 Esc 鍵*/</p><p> #define ESC 0x011b /*退出鍵*/</p><p> /*SPACE鍵表示落子*/</p>
30、<p> #define SPACE 0x3920 /*落子鍵*/</p><p> /*設(shè)置偏移量,即定義每一步光標移動的距離*/</p><p> #define OFFSET 20</p><p> #define OFFSET_x 4</p><p> #define OF
31、FSET_y 3</p><p> /*定義棋盤數(shù)組大小,即棋盤的大小,這里為18x18格*/</p><p> #define N 19</p><p> /*定義全局變量*/</p><p> int status[N][N]; /*定義的數(shù)組,表示棋盤某點的狀態(tài)(棋手1或棋手2)*/&
32、lt;/p><p> int step_x,step_y; /*行走的坐標,即每一步光標移動的距離*/</p><p> int key ; /*獲取按下的鍵盤的鍵*/</p><p> int flag;
33、 /*玩家標志,當flag=0時,表示該點無棋子,flag=1表示玩家1的棋子,flag=2表示玩家2的棋子*/</p><p> /*自定義函數(shù)原型*/</p><p> void DrawBoard(); /*畫棋盤函數(shù)*/</p><p> void DrawCircle(int x,int y,int co
34、lor); /*畫圓函數(shù)*/</p><p> void Alternation(); /*交換行棋方函數(shù)*/</p><p> void JudgePlayer(int x,int y); /*對不同的行棋方畫不同顏色的圓函數(shù)*/</p><p> void Done();
35、 /*執(zhí)行下棋函數(shù)*/</p><p> int ResultCheck(int x,int y); /*判斷當前行棋方是否獲勝函數(shù)*/</p><p> void WelcomeInfo(); /*顯示歡迎信息函數(shù)*/</p><p> void ShowMessage()
36、; /*顯示行棋方函數(shù)*/</p><p><b> /*定義函數(shù)*/</b></p><p> /*顯示歡迎信息函數(shù)*/</p><p> void WelcomeInfo()</p><p><b> {</b></p><p&
37、gt; char ch ; /*定義顯示歡迎函數(shù)數(shù)組*/</p><p> /*移動光標到指定位置*/</p><p> gotoxy(12,4); /*將當前字符屏幕的光標位置移動到x,y坐標位置*/</p><p> /*顯示歡迎信息*/</p>
38、<p> printf("Welcome you to wuziqi word!");</p><p> gotoxy(12,6);</p><p> printf("1. up,down,left and right key to move ,");</p><p> gotoxy(12,8);</
39、p><p> printf(" Space key to move!");</p><p> gotoxy(12,10);</p><p> printf("2. Esc key to exit !");</p><p> gotoxy(12,12);</p><p>
40、printf("3.Don not move the pieces out of the chessboard !");</p><p> gotoxy(12,14);</p><p> printf(" continue ?(Y/N)");</p><p> ch=getchar();
41、 /*從標準輸入流讀取一個字符并回顯,讀到回車符時退出*/</p><p> /*判斷程序是否要繼續(xù)進行,按n表示退出,y表示繼續(xù)玩游戲*/</p><p> if(ch=='n'||ch=='N')</p><p> /*如果不繼續(xù)進行,則推出程序*/</p><p> exit(0);
42、 /*程序中止執(zhí)行,返回調(diào)用過程*/</p><p><b> }</b></p><p> /*畫棋盤函數(shù),用來畫棋盤的格子和棋子,這里棋子用帶某一顏色的圓圈表示*/</p><p> void DrawBoard()</p><p><b> {&l
43、t;/b></p><p> int x1,x2;</p><p> int y1,y2;</p><p><b> /*設(shè)置背景色*/</b></p><p> setbkcolor(2);</p><p> /*設(shè)置線條顏色*/</p><p> se
44、tcolor(14); /*設(shè)置前景顏色, 顏色值含義如下: */</p><p> /* 0 - BLACK 黑 深色0 - 7 */</p><p> /* 1 - BLUE 蘭 2 - GREEN 綠 */</p><p> /* 3 - CYAN
45、 青 4 - RED 紅 */</p><p> /* 5 - MAGENTA 洋紅 6 - BROWN 棕 */</p><p> /* 7 - LIGHTGRAY 淡灰 8 - DARKGRAY 深灰 淡色8 - 15 */</p><p> /* 9 - LIGHTBL
46、UE 淡蘭 10 - LIGHTGREEN 淡綠 */</p><p> /* 11 - LIGHTCYAN 淡青 12 - LIGHTRED 淡紅*/</p><p> /* 13 - LIGHTMAGENTA 淡洋紅 14 - YELLOW 黃*/</p><p> /* 15 - WHITE
47、 白*/</p><p> /*設(shè)置線條風格、寬度*/</p><p> setlinestyle(DOTTED_LINE,3,1); /*設(shè)置畫線模式,linestyle 畫線風格,取值和含義如下*/</p><p> /* SOLID_LINE= 0實線 DOTTED_LINE=1點線 */</p><p> /* CEN
48、TER_LINE=2中心線 DASHED_LINE=3虛線 */</p><p> /* USERBIT_LINE=4 用戶自定義模式*/</p><p> /* upattern 在linestyle=USERBIT_LINE時,表示自定義的線型thickness線寬,有2個取值;*/</p><p> /* NORM_WIDTH=1 1個象素寬度 THIC
49、K_WIDTH=3 3個象素寬度*/</p><p> /*按照預設(shè)的偏移量開始畫棋盤*/</p><p> for(x1=1,y1=1,y2=18;x1<=18;x1++) /*line用于畫直線,x1,y1,x2,y2 直線的起點和終點坐標*/</p><p> line((x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*O
50、FFSET,(x1+OFFSET_x)*OFFSET,(y2+OFFSET_y)*OFFSET);</p><p> for(x1=1,y1=1,x2=18;y1<=18;y1++)</p><p> line((x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x2+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET);
51、</p><p> /*將各個點的狀態(tài)設(shè)置為0*/</p><p> for(x1=1;x1<=18;x1++)</p><p> for(y1=1;y1<=18;y1++)</p><p> status[x1][y1]=0;</p><p> /*顯示幫助信息*/</p><
52、;p> setcolor(150);</p><p> /*設(shè)置字體、大小*/</p><p> settextstyle(1,0,4); /*設(shè)置圖形模式下字符顯示底字體、方向和大小*/</p><p> /*font 顯示字體,取值如下:*/</p><p> /*DEFAULT_FONT
53、 = 0 8x8 點陣*/</p><p> /*TRIPLEX_FONT = 1 三倍筆劃 */</p><p> /*SMALL_FONT = 2 小號字體 */</p><p> /*SANS_SERIF_FONT = 3 無襯線字體*/</p><p> /*GOTHI
54、C_FONT = 4 哥特字體*/</p><p> /*directiom 顯示方向,取值如下: */</p><p> /*HORIZ_DIR = 0 水平顯示*/</p><p> /*VERT_DIR = 1 垂直顯示*/</p><p> /*charsize
55、 字體放大倍數(shù),取值為0-10*/</p><p> outtextxy((19+OFFSET_x)*OFFSET,(2+OFFSET_y)*OFFSET,"Player key:"); /*圖形模式下在x,y坐標位置顯示一行字符串*/</p><p> setcolor(9);</p><p> settextstyle(3,0,1
56、);</p><p> outtextxy((19+OFFSET_x)*OFFSET,(4+OFFSET_y)*OFFSET,"UP--up ");</p><p> outtextxy((19+OFFSET_x)*OFFSET,(6+OFFSET_y)*OFFSET,"DOWN--down ");</p><p> o
57、uttextxy((19+OFFSET_x)*OFFSET,(8+OFFSET_y)*OFFSET,"LEFT--left");</p><p> outtextxy((19+OFFSET_x)*OFFSET,(10+OFFSET_y)*OFFSET,"RIGHT--right");</p><p> outtextxy((19+OFFSET_x
58、)*OFFSET,(12+OFFSET_y)*OFFSET,"ENTER--space");</p><p> setcolor(14);</p><p> settextstyle(1,0,1);</p><p> outtextxy((19+OFFSET_x)*OFFSET,(14+OFFSET_y)*OFFSET,"Exit
59、:");</p><p> setcolor(9);</p><p> settextstyle(3,0,1);</p><p> outtextxy((19+OFFSET_x)*OFFSET,(16+OFFSET_y)*OFFSET,"ESC");</p><p><b> }</b&g
60、t;</p><p> /*畫圓函數(shù),用來表示玩家的棋子*/</p><p> void DrawCircle(int x,int y,int color)</p><p><b> {</b></p><p> setcolor(color);</p><p> /*設(shè)置畫圓線條的風格
61、,寬度,這里設(shè)置為虛線*/</p><p> setlinestyle(SOLID_LINE,0,5);</p><p> x=(x+OFFSET_x)*OFFSET;</p><p> y=(y+OFFSET_y)*OFFSET;</p><p> /*以(x,y)為圓心,8為半徑畫圓*/</p><p>
62、 circle(x,y,8);</p><p><b> }</b></p><p> /*交換行棋方函數(shù),即讓玩家輪流下棋*/</p><p> void Alternation()</p><p><b> {</b></p><p> if(flag==1)&
63、lt;/p><p> flag=2 ; /*如果此時為玩家1落棋,則下回換為玩家2落棋*/</p><p><b> else </b></p><p> flag=1 ; /*如果此時為玩家2落棋,則下回換為玩家1落棋*/</p>&l
64、t;p><b> } </b></p><p> /*對不同的行棋方畫不同顏色的圓函數(shù),用于區(qū)分不同玩家的棋子*/</p><p> void JudgePlayer(int x,int y)</p><p><b> {</b></p><p> if(flag==1)<
65、/p><p> DrawCircle(x,y,15);</p><p> if(flag==2)</p><p> DrawCircle(x,y,4);</p><p><b> }</b></p><p> /*判斷當前行棋方是否獲勝函數(shù),即判斷是否有五個相同顏色的棋子已連成一條線*/&l
66、t;/p><p> int ResultCheck(int x,int y)</p><p><b> {</b></p><p><b> int j,k;</b></p><p> int n1,n2 ;</p><p><b> while(1)<
67、/b></p><p><b> {</b></p><p> /*對水平方向進行判斷是否有5個同色的圓*/</p><p><b> n1=0;</b></p><p><b> n2=0;</b></p><p><b>
68、/*水平向左數(shù)*/</b></p><p> for(j=x,k=y;j>=1;j--)</p><p><b> {</b></p><p> if(status[j][k]==flag)</p><p><b> n1++;</b></p><p&g
69、t;<b> else</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> /*水平向右數(shù)*/</b></p><p> for(j=x,k=y;j<=18;j++)<
70、;/p><p><b> {</b></p><p> if(status[j][k]==flag)</p><p><b> n2++;</b></p><p><b> else</b></p><p><b> break;<
71、/b></p><p><b> }</b></p><p> if(n1+n2-1>=5)</p><p><b> {</b></p><p> return(1);</p><p><b> }</b></p>
72、<p> /*對垂直方向進行判斷是否有5個同色的圓*/</p><p><b> n1=0;</b></p><p><b> n2=0;</b></p><p><b> /*垂直向上數(shù)*/</b></p><p> for(j=x,k=y;k>=1
73、;k--)</p><p><b> {</b></p><p> if(status[j][k]==flag)</p><p><b> n1++;</b></p><p><b> else</b></p><p><b> br
74、eak ;</b></p><p><b> }</b></p><p><b> /*垂直向下數(shù)*/</b></p><p> for(j=x,k=y;k<=18;k++)</p><p><b> {</b></p><p>
75、; if(status[j][k]==flag)</p><p><b> n2++;</b></p><p><b> else</b></p><p><b> break ;</b></p><p><b> }</b></p>
76、<p> if(n1+n2-1>=5)</p><p><b> {</b></p><p> return(1);</p><p><b> }</b></p><p> /*從左上方到右下方進行判斷是否有5個同色的圓*/</p><p>&l
77、t;b> n1=0;</b></p><p><b> n2=0;</b></p><p><b> /*向左上方數(shù)*/</b></p><p> for(j=x,k=y;(j>=1)&&(k>=1);j--,k--)</p><p><b
78、> {</b></p><p> if(status[j][k]==flag)</p><p><b> n1++;</b></p><p><b> else</b></p><p><b> break;</b></p><p
79、><b> }</b></p><p><b> /*向右下方數(shù)*/</b></p><p> for(j=x,k=y;(j<=18)&&(k<=18);j++,k++)</p><p><b> {</b></p><p> if(
80、status[j][k]==flag)</p><p><b> n2++;</b></p><p><b> else</b></p><p><b> break;</b></p><p><b> }</b></p><p
81、> if(n1+n2-1>=5)</p><p><b> {</b></p><p> return(1);</p><p><b> }</b></p><p> /*從右上方到左下方進行判斷是否有5個同色的圓*/</p><p><b>
82、 n1=0;</b></p><p><b> n2=0;</b></p><p><b> /*向右上方數(shù)*/</b></p><p> for(j=x,k=y;(j<=18)&&(k>=1);j++,k--)</p><p><b>
83、{</b></p><p> if(status[j][k]==flag)</p><p><b> n1++;</b></p><p><b> else</b></p><p><b> break;</b></p><p>&l
84、t;b> }</b></p><p><b> /*向左下方數(shù)*/</b></p><p> for(j=x,k=y;(j>=1)&&(k<=18);j--,k++)</p><p><b> {</b></p><p> if(status[
85、j][k]==flag)</p><p><b> n2++;</b></p><p><b> else</b></p><p><b> break;</b></p><p><b> }</b></p><p> i
86、f(n1+n2-1>=5)</p><p><b> {</b></p><p> return(1);</p><p><b> }</b></p><p> return(0);</p><p><b> }</b></p>
87、;<p><b> }</b></p><p> /*執(zhí)行下棋函數(shù)*/</p><p> void Done()</p><p><b> {</b></p><p><b> int i ;</b></p><p><b&
88、gt; int j ;</b></p><p> /*根據(jù)不同的key值進行不同的操作*/</p><p> switch(key)</p><p><b> {</b></p><p> /*如果是向左移動的*/</p><p> case LEFT:</p>
89、<p> /*如果下一步超出棋盤左邊界則什么也不作*/</p><p> if(step_x-1<0)</p><p><b> break ;</b></p><p><b> else </b></p><p><b> {</b></p
90、><p> for(i=step_x-1,j=step_y;i>=1;i--)</p><p> if(status[i][j]==0)</p><p><b> {</b></p><p> DrawCircle(step_x,step_y,2);</p><p><b>
91、 break ;</b></p><p><b> }</b></p><p><b> if(i<1)</b></p><p><b> break ;</b></p><p> step_x=i ;</p><p> Ju
92、dgePlayer(step_x,step_y);</p><p><b> break ;</b></p><p><b> }</b></p><p> /*如果是向右移動的*/</p><p> case RIGHT :</p><p> /*如果下一步超出棋
93、盤右邊界則什么也不作*/</p><p> if(step_x+1>18)</p><p><b> break ;</b></p><p><b> else</b></p><p><b> {</b></p><p> for(i=
94、step_x+1,j=step_y;i<=18;i++)</p><p> if(status[i][j]==0)</p><p><b> {</b></p><p> /*每移動一步畫一個圓,顯示移動的過程*/</p><p> DrawCircle(step_x,step_y,2);</p>
95、;<p><b> break ;</b></p><p><b> }</b></p><p> if(i>18)break ;</p><p> step_x=i ;</p><p> /*根據(jù)不同的行棋者畫不同顏色的圓*/</p><p>
96、 JudgePlayer(step_x,step_y);</p><p> /*顯示行棋一方是誰*/</p><p><b> break ;</b></p><p><b> }</b></p><p> /*如果是向下移動的*/</p><p> case D
97、OWN :</p><p> /*如果下一步超出棋盤下邊界則什么也不作*/</p><p> if((step_y+1)>18)</p><p><b> break ;</b></p><p><b> else </b></p><p><b>
98、 {</b></p><p> for(i=step_x,j=step_y+1;j<=18;j++)</p><p> if(status[i][j]==0)</p><p><b> {</b></p><p> DrawCircle(step_x,step_y,2);</p>
99、<p><b> break ;</b></p><p><b> }</b></p><p> if(j>18)break ;</p><p> step_y=j ;</p><p> JudgePlayer(step_x,step_y);</p><
100、p><b> break ;</b></p><p><b> }</b></p><p> /*如果是向上移動的*/</p><p><b> case UP :</b></p><p> /*如果下一步超出棋盤上邊界則什么也不作*/</p>&
101、lt;p> if((step_y-1)<0)</p><p><b> break ;</b></p><p><b> else </b></p><p><b> {</b></p><p> for(i=step_x,j=step_y-1;j>
102、=1;j--)</p><p> if(status[i][j]==0)</p><p><b> {</b></p><p> DrawCircle(step_x,step_y,2);</p><p><b> break ;</b></p><p><b&g
103、t; }</b></p><p> if(j<1)break ;</p><p> step_y=j ;</p><p> JudgePlayer(step_x,step_y);</p><p><b> break ;</b></p><p><b> }
104、</b></p><p> /*如果是退出鍵*/</p><p> case ESC :</p><p><b> break ;</b></p><p> /*如果是確定鍵*/</p><p> case SPACE:</p><p> /*如果操
105、作是在棋盤之內(nèi)*/</p><p> if(step_x>=1&&step_x<=18&&step_y>=1&&step_y<=18)</p><p><b> {</b></p><p> /*按下確定鍵后,如果棋子當前位置的狀態(tài)為0*/</p>&l
106、t;p> if(status[step_x][step_y]==0)</p><p><b> {</b></p><p> /*則更改棋子當前位置的狀態(tài)在flag,表示是哪個行棋者行的棋*/</p><p> status[step_x][step_y]=flag ;</p><p> /*如果判斷當前
107、行棋者獲勝*/</p><p> if(ResultCheck(step_x,step_y)==1)</p><p><b> {</b></p><p> /*以指定頻率打開PC揚聲器*/</p><p> sound(1000);</p><p> /*揚聲器的發(fā)生時間,為1秒鐘*/
108、</p><p> delay(1000);</p><p> nosound();</p><p> gotoxy(30,4);</p><p> setbkcolor(BLUE);</p><p> /*清除圖形屏幕*/</p><p> cleardevice();
109、 /*清除屏幕顯示,僅用于圖形工作方式*/</p><p> /*為圖形輸出設(shè)置當前視口*/</p><p> setviewport(100,100,540,380,1); /*設(shè)置圖形模式下圖形函數(shù)操作的窗口大小 */</p><p> /*left,top,right,bottom 窗口大小坐標 clip 是否剪切*/
110、</p><p> /*1表示對超出設(shè)置圖形窗口大小的操作不顯示*/</p><p> /*0表示超出的內(nèi)容也顯示。*/</p><p><b> /*綠色實填充*/</b></p><p> setfillstyle(1,2); /*設(shè)置填充模式和填充顏色*/</p>
111、<p> /*color 填充顏色 pattern 填充模式,共13種,具體如下:*/</p><p> /* EMPTY_FILL 背景色填充 SOLID_FILL 實填充 */</p><p> /* LINE_FILL --- 線填充 LTSLASH_FILL 斜線填充 */</p>
112、<p> /* SLASH_FILL 粗斜線填充 */</p><p> /* BKSLASH_FILL 反粗斜線填充 LTBKSLASH_FILL 反斜線填充 */</p><p> /* HATCH_FILL 網(wǎng)格填充 XHATCH_FILL 斜網(wǎng)格填充 */</p><p> /*
113、INTERLEAVE_FILL 間隔點線填充 WIDE_DOT_FILL 稀疏點填充*/</p><p> /* CLOSE_DOT_FILL 密集點填充 USER_FILL 用戶自定義填充*/</p><p> setcolor(YELLOW);</p><p> rectangle(0,0,439,279);
114、 /*圖形方式下,在屏幕上畫一個矩形*/</p><p> floodfill(50,50,14); /*填充一個有邊界的區(qū)域,x,y 要填充區(qū)域內(nèi)的任意一點坐標*/</p><p> /*border 填充區(qū)域邊界的顏色*/</p><p> setcolor(12);</p><p> s
115、ettextstyle(1,0,5);</p><p> /*三重筆劃字體, 水平放大5倍*/</p><p> outtextxy(20,20,"Congratulation !");</p><p> setcolor(15);</p><p> settextstyle(3,0,4);</p>
116、<p> /*如果是Player1獲勝,顯示獲勝信息*/</p><p> if(flag==1)</p><p><b> {</b></p><p> /*無襯筆劃字體, 水平放大5倍*/</p><p> outtextxy(20,120,"Player1 win the game !
117、");</p><p><b> }</b></p><p> /*如果是Player1獲勝,顯示獲勝信息*/</p><p> if(flag==2)</p><p><b> {</b></p><p> /*無襯筆劃字體, 水平放大5倍*/</
118、p><p> outtextxy(20,120,"Player2 win the game !");</p><p><b> }</b></p><p> setcolor(14);</p><p> settextstyle(2,0,8);</p><p> getc
119、h(); /*從控制臺讀取一個字符,但不顯示在屏幕上*/</p><p><b> exit(0);</b></p><p><b> }</b></p><p> /*如果當前行棋者沒有獲勝,則交換行棋方,接著下棋*/</p><p>
120、 Alternation();</p><p> /*提示行棋方是誰,即顯示正在落子的玩家*/</p><p> ShowMessage();</p><p><b> break;</b></p><p><b> }</b></p><p><b>
121、}</b></p><p><b> else</b></p><p><b> break ;</b></p><p><b> }</b></p><p><b> }</b></p><p> /*顯示行
122、棋方函數(shù),用來顯示正在落子的玩家*/</p><p> void ShowMessage()</p><p><b> {</b></p><p> /*輪到Player1行棋*/</p><p> if(flag==1)</p><p><b> {</b><
123、;/p><p> setcolor(2);</p><p> settextstyle(1,0,1);</p><p> gotoxy(100,30);</p><p> /*覆蓋原有的字跡*/</p><p> outtextxy(100,30,"It's turn to Player2 !&
124、quot;);</p><p> setcolor(12);</p><p> settextstyle(1,0,1);</p><p> outtextxy(100,30,"It's turn to Player1 !");</p><p><b> }</b></p>
125、<p> /*輪到Player2行棋*/</p><p> if(flag==2)</p><p><b> {</b></p><p> setcolor(2);</p><p> settextstyle(1,0,1);</p><p> /*覆蓋原有的字跡*/<
126、/p><p> outtextxy(100,30,"It's turn to Player1 !");</p><p> setcolor(12);</p><p> settextstyle(1,0,1);</p><p> gotoxy(100,20);</p><p> outt
127、extxy(100,30,"It's turn to Player2 !");</p><p><b> }</b></p><p><b> }</b></p><p><b> /*主函數(shù)*/</b></p><p> int main(
128、)</p><p><b> {</b></p><p> int gdriver;</p><p> int gmode;</p><p> int errorcode;</p><p> /*清空文本模式窗口*/</p><p> clrscr();
129、 /*清除當前字符窗口所有字符*/</p><p> /*顯示歡迎信息*/</p><p> WelcomeInfo();</p><p> gdriver=DETECT;</p><p><b> gmode=0;</b></p><p> /
130、*初始化圖形系統(tǒng)*/</p><p> initgraph(&gdriver,&gmode,""); /*初始化圖形系統(tǒng) */</p><p> /*graphdriver 圖形驅(qū)動器代號,具體如下: */</p><p> /*DETECT 0 CGA 1 MCGA 2 EGA 3 */&l
131、t;/p><p> /*EGA64 4 EGAMONO 5 IBM8514 6 */</p><p> /*HERCMONO 7 ATT400 8 VGA 9 */</p><p> /*PC3270 10 graphmode 選定圖形驅(qū)動器的工作模式,具體如下: */</p>&
132、lt;p> /*CGAC0= 0 320x200 palette 0 1 page */</p><p> /*CGAC1= 1 320x200 palette 1 1 page */</p><p> /*CGAC2= 2 320x200 palette 2 1 page */</p><p>
133、/*CGAC3= 3 320x200 palette 3 1 page */</p><p> /*CGAHI= 4 640x200 1 page */</p><p> /*MCGAC0= 0 320x200 palette 0 1 page */</p><p> /*MCGAC1=
134、1 320x200 palette 1 1 page */</p><p> /*MCGAC2= 2 320x200 palette 2 1 page */</p><p> /*MCGAC3= 3 320x200 palette 3 1 page */</p><p> /*MCGAMED= 4 640x2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五子棋課程設(shè)計
- java課程設(shè)計報告-五子棋
- 五子棋游戲課程設(shè)計報告
- 五子棋畢業(yè)課程設(shè)計報告
- java五子棋課程設(shè)計
- java課程設(shè)計--五子棋
- 五子棋java課程設(shè)計
- 五子棋java課程設(shè)計
- 五子棋java語言課程設(shè)計報告
- c++五子棋課程設(shè)計報告
- java課程設(shè)計--五子棋游戲
- java課程設(shè)計--對戰(zhàn)五子棋
- 五子棋c++課程設(shè)計
- 五子棋c++課程設(shè)計
- 五子棋小游戲課程設(shè)計
- c語言五子棋課程設(shè)計
- c語言圖形五子棋課程設(shè)計報告
- c語言圖形五子棋課程設(shè)計報告
- 人工智能課程設(shè)計報告-五子棋
- java課程設(shè)計-五子棋游戲
評論
0/150
提交評論