版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 單 位 分院(系)</p><p> 專 業(yè) </p><p> 學(xué) 號 </p><p> 學(xué)生姓名 </p><p> 指導(dǎo)教師 </p><p&
2、gt; 完成日期 2011 年 05 月 日</p><p><b> 摘 要</b></p><p> 五子棋的歷史:五子棋是一種兩人對弈的純策略型棋類游戲,是起源于中國古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫生,引人入勝;不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。</p>&l
3、t;p> 五子棋相傳起源于四千多年前的堯帝時(shí)期,比圍棋的歷史還要悠久,可能早在“堯造圍棋”之前,民間就已有五子棋游戲。有關(guān)早期五子棋的文史資料與圍棋有相似之處,因?yàn)楣糯遄悠宓钠寰吲c圍棋是完全相同的。在上古的神話傳說中有“女媧造人,伏羲做棋”一說,《增山海經(jīng)》中記載:“休輿之山有石焉,名曰帝臺之棋,五色而文狀鶉卵?!崩钌谱⒁龂汉惔尽端嚱?jīng)》中曰:“棋局,縱橫各十七道,合二百八十九道,白黑棋子,各一百五十枚”。這段雖沒明講是何
4、種棋類,但至少知道遠(yuǎn)古就以漂亮的石頭為棋子。因而規(guī)則簡單的五子棋也可能出自當(dāng)時(shí),并是用石子作棋子。亦有傳說,五子棋最初流行于少數(shù)民族地區(qū),以后漸漸演變成圍棋并在炎黃子孫后代中遍及開來?!?</p><p> 程序說明:本程序是一款棋類益智游戲程序,是用win-tc編寫在WINDOWS 系統(tǒng)下運(yùn)行的娛樂游戲。本程序可以實(shí)現(xiàn)人人對戰(zhàn),操作采用鍵盤上的上下左右鍵控制棋子的上下左右移動,由空格鍵控制下棋,雙方都可通過E
5、SC鍵終止游戲。游戲開始后,紅、白雙方輪流下棋,程序會根據(jù)雙方下棋的先后順序自動顯示不同顏色的棋子,提示當(dāng)前下棋的棋手,任何一方由五子連成一線時(shí),游戲結(jié)束,結(jié)束時(shí)會顯示對戰(zhàn)雙方勝負(fù)情況。</p><p> 關(guān)鍵詞:五子棋游戲應(yīng)用程序,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è)計(jì) ………………………………………………………………… 6</p><p> 第4章 系統(tǒng)實(shí)現(xiàn) ………………………………………………………………… 7</p>&l
8、t;p> 第5章 總結(jié) ……………………………………………………………………… 8</p><p><b> 第1章 選題的意義</b></p><p><b> 1.1意義</b></p><p> 通過游戲過程增加編程的興趣,提高編程水平。編制該程序我對以下的知識點(diǎn)進(jìn)行的鞏固和掌握:1.數(shù)組元素為結(jié)構(gòu)體的
9、數(shù)組應(yīng)用。2.全局變量應(yīng)用。3.按鍵的處理。4.數(shù)組元素與蛇、食物的對應(yīng)關(guān)系。5.圖形方式等等。加深對所學(xué)知識的理解與掌握,增強(qiáng)自己對所學(xué)知識解決實(shí)際問題的能力,為以后的程序開發(fā)打下基礎(chǔ)。</p><p><b> 1.2 設(shè)計(jì)思路</b></p><p> 棋盤設(shè)計(jì)為18×18格,初始狀態(tài)光標(biāo)在棋盤的中央,玩家1先走,輪流落子,當(dāng)一方連成五子
10、或下滿棋盤時(shí),游戲結(jié)束(連成五子的一方獲勝,下滿棋盤為和棋)。當(dāng)游戲一方勝利后顯示勝利信息。從程序表面看,這是一個(gè)二維平面圖,所以數(shù)據(jù)用二維數(shù)組來表示,數(shù)組兩個(gè)下標(biāo)可以表示棋盤上的位置,數(shù)組元素的值代表棋格上的狀態(tài),共有三種情況,分別是0代表空格,1代表白棋,2代表黑棋。這樣程序的主要工作是接收棋手按鍵操作,棋手用Up、Down、Left、Right控制光標(biāo)移動,空格鍵表示落子。一旦接收到空格鍵,說明棋手落子,先判斷是否是有效位置,也就
11、是說已經(jīng)有棋子的位置不能重疊落子。落子成功后,馬上判斷以該位置為中心的八個(gè)方向:上、下、左、右、左上、左下、右上、右下是否有相同顏色的棋子連成五子,如果連成五子,則游戲結(jié)束,輸出相應(yīng)的信息。如果想退出游戲,可以按Esc鍵。 </p><p> 第2章 系統(tǒng)功能需求分析</p><p> 2.1系統(tǒng)的基本要求</p><p> 操作系統(tǒng)為WindowsXP,設(shè)計(jì)
12、語言為Visual C++或Turbo C++3.0。</p><p><b> 2.2需求分析</b></p><p><b> 1.游戲需求</b></p><p> ?。?)在游戲開始時(shí)出現(xiàn)一個(gè)歡迎的界面同時(shí)介紹了游戲的規(guī)則;</p><p> ?。?)畫出棋盤的大?。?</p>
13、;<p> ?。?)畫棋子并確定棋子的大小; </p><p> ?。?)判斷鍵盤輸入哪個(gè)鍵執(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> 判 斷 勝 負(fù) 模塊</p><p><b> 幫 助 模 塊</b></p><p><b> 3.
15、流程圖</b></p><p><b> 第3章 系統(tǒng)設(shè)計(jì)</b></p><p><b> 1.定義全局變量</b></p><p> int status[N][N]; /*定義的數(shù)組,表示棋盤某點(diǎn)的狀態(tài)(棋手1或棋手2)*/</p><
16、p> int step_x,step_y; /*行走的坐標(biāo),即每一步光標(biāo)移動的距離*/</p><p> int key ; /*獲取按下的鍵盤的鍵*/</p><p> int flag; /*玩家標(biāo)志,當(dāng)flag=
17、0時(shí),表示該點(diǎn)無棋子,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ù)的實(shí)體比較簡單,調(diào)用圖形驅(qū)動、畫棋盤、人人對弈等自定義函數(shù),一旦游戲結(jié)束后,關(guān)閉圖形驅(qū)動,程序結(jié)束。<
18、;/p><p> 3.DrawBoard()畫棋盤函數(shù)</p><p> 背景顏色設(shè)為綠色,從坐標(biāo)(100,100)開始每隔20個(gè)單位用黃色畫一條水平直線,一條垂直線,構(gòu)成棋盤,用循環(huán)語句實(shí)現(xiàn)。畫線函數(shù)line()的參數(shù)為線的起點(diǎn)和終點(diǎn)坐標(biāo),注意要計(jì)算正確。函數(shù)setfillstyle()可以設(shè)置填充模式和填充顏色,circle(x,y,8)以x和y為圓心畫圓(這里半徑為8),用它表示棋子
19、。</p><p> 4.ResultCheck(int x,int y)判斷是否勝出函數(shù)</p><p> 本函數(shù)根據(jù)每次落子的位置,分別向上、下、左、右、左上、左下、右上、右下八個(gè)方向判斷是否有相同顏色的棋子連成五子,如果成立,游戲就結(jié)束,并顯示提示信息(如:紅方獲勝),否則繼續(xù)落子。</p><p> 5.Done()執(zhí)行下棋函數(shù)</p>
20、<p> 這是游戲進(jìn)行的函數(shù),主要是接收棋手的按鍵消息,其處理過程如下:</p><p> (1) 按Esc鍵程序可以隨時(shí)結(jié)束。</p><p> (2) 按上下左右光標(biāo)鍵,則改變棋子移動的坐標(biāo)值。</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) 重復(fù)上述步驟,直到游戲結(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),并裝入相應(yīng)的圖形驅(qū)動器。該函數(shù)把由driver所指向的圖形驅(qū)動器代碼裝入內(nèi)
23、存。如果圖形驅(qū)動器未裝入內(nèi)存,圖形函數(shù)將不能操作。圖形函數(shù)所用的屏顯模式由mode所指向的整數(shù)值確定。最后,圖形驅(qū)動器的路徑是由path所指向的字符串給出。如果沒有指定路徑,就在當(dāng)前工作路徑上尋找。</p><p> (3)rectangle(int left,int top,int right,int bottom):函數(shù)rectangle()用當(dāng)前畫出由坐標(biāo)left,top及right,bottom所定義的
24、矩形。</p><p> (4)setcolor(int color):把當(dāng)前畫線顏色設(shè)置為color所指定的顏色。</p><p> (5)closegraph():該函數(shù)使圖形狀態(tài)失效,并且釋放用于保存圖形驅(qū)動器和字體的系統(tǒng)內(nèi)存。當(dāng)你的程序既用到圖形輸出又用到非圖形輸出時(shí),應(yīng)該用此函數(shù)。該函數(shù)還把系統(tǒng)屏顯模式返回到調(diào)用initgragh()前的狀態(tài)。</p><
25、p><b> 第4章 系統(tǒng)實(shí)現(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ù),定義雜項(xiàng)函數(shù)及內(nèi)存分配函數(shù)*/</p><p> #include<graphics.h> /*圖像函數(shù)*/</p>&l
27、t;p> #include<bios.h> /*存放有接口函數(shù)*/</p><p> #include<conio.h> /*定義了通過控制臺進(jìn)行數(shù)據(jù)輸入和數(shù)據(jù)輸出的函數(shù),主要是一些用戶通過按鍵盤產(chǎn)生的對應(yīng)操作*/</p><p> /*編譯預(yù)處理,定義按鍵碼*
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è)置偏移量,即定義每一步光標(biāo)移動的距離*/</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ù)組,表示棋盤某點(diǎn)的狀態(tài)(棋手1或棋手2)*/&
32、lt;/p><p> int step_x,step_y; /*行走的坐標(biāo),即每一步光標(biāo)移動的距離*/</p><p> int key ; /*獲取按下的鍵盤的鍵*/</p><p> int flag;
33、 /*玩家標(biāo)志,當(dāng)flag=0時(shí),表示該點(diǎn)無棋子,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); /*判斷當(dāng)前行棋方是否獲勝函數(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> /*移動光標(biāo)到指定位置*/</p><p> gotoxy(12,4); /*將當(dāng)前字符屏幕的光標(biāo)位置移動到x,y坐標(biāo)位置*/</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、 /*從標(biāo)準(zhǔn)輸入流讀取一個(gè)字符并回顯,讀到回車符時(shí)退出*/</p><p> /*判斷程序是否要繼續(xù)進(jìn)行,按n表示退出,y表示繼續(xù)玩游戲*/</p><p> if(ch=='n'||ch=='N')</p><p> /*如果不繼續(xù)進(jìn)行,則推出程序*/</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è)置線條風(fēng)格、寬度*/</p><p> setlinestyle(DOTTED_LINE,3,1); /*設(shè)置畫線模式,linestyle 畫線風(fēng)格,取值和含義如下*/</p><p> /* SOLID_LINE= 0實(shí)線 DOTTED_LINE=1點(diǎn)線 */</p><p> /* CEN
48、TER_LINE=2中心線 DASHED_LINE=3虛線 */</p><p> /* USERBIT_LINE=4 用戶自定義模式*/</p><p> /* upattern 在linestyle=USERBIT_LINE時(shí),表示自定義的線型thickness線寬,有2個(gè)取值;*/</p><p> /* NORM_WIDTH=1 1個(gè)象素寬度 THIC
49、K_WIDTH=3 3個(gè)象素寬度*/</p><p> /*按照預(yù)設(shè)的偏移量開始畫棋盤*/</p><p> for(x1=1,y1=1,y2=18;x1<=18;x1++) /*line用于畫直線,x1,y1,x2,y2 直線的起點(diǎn)和終點(diǎn)坐標(biāo)*/</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> /*將各個(gè)點(diǎn)的狀態(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 點(diǎn)陣*/</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坐標(biāo)位置顯示一行字符串*/</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è)置畫圓線條的風(fēng)格
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 ; /*如果此時(shí)為玩家1落棋,則下回?fù)Q為玩家2落棋*/</p><p><b> else </b></p><p> flag=1 ; /*如果此時(shí)為玩家2落棋,則下回?fù)Q為玩家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> /*判斷當(dāng)前行棋方是否獲勝函數(shù),即判斷是否有五個(gè)相同顏色的棋子已連成一條線*/&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> /*對水平方向進(jìn)行判斷是否有5個(gè)同色的圓*/</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> /*對垂直方向進(jìn)行判斷是否有5個(gè)同色的圓*/</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> /*從左上方到右下方進(jìn)行判斷是否有5個(gè)同色的圓*/</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> /*從右上方到左下方進(jìn)行判斷是否有5個(gè)同色的圓*/</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值進(jìn)行不同的操作*/</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> /*每移動一步畫一個(gè)圓,顯示移動的過程*/</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> /*按下確定鍵后,如果棋子當(dāng)前位置的狀態(tài)為0*/</p>&l
106、t;p> if(status[step_x][step_y]==0)</p><p><b> {</b></p><p> /*則更改棋子當(dāng)前位置的狀態(tài)在flag,表示是哪個(gè)行棋者行的棋*/</p><p> status[step_x][step_y]=flag ;</p><p> /*如果判斷當(dāng)前
107、行棋者獲勝*/</p><p> if(ResultCheck(step_x,step_y)==1)</p><p><b> {</b></p><p> /*以指定頻率打開PC揚(yáng)聲器*/</p><p> sound(1000);</p><p> /*揚(yáng)聲器的發(fā)生時(shí)間,為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è)置當(dāng)前視口*/</p><p> setviewport(100,100,540,380,1); /*設(shè)置圖形模式下圖形函數(shù)操作的窗口大小 */</p><p> /*left,top,right,bottom 窗口大小坐標(biāo) clip 是否剪切*/
110、</p><p> /*1表示對超出設(shè)置圖形窗口大小的操作不顯示*/</p><p> /*0表示超出的內(nèi)容也顯示。*/</p><p><b> /*綠色實(shí)填充*/</b></p><p> setfillstyle(1,2); /*設(shè)置填充模式和填充顏色*/</p>
111、<p> /*color 填充顏色 pattern 填充模式,共13種,具體如下:*/</p><p> /* EMPTY_FILL 背景色填充 SOLID_FILL 實(shí)填充 */</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 間隔點(diǎn)線填充 WIDE_DOT_FILL 稀疏點(diǎn)填充*/</p><p> /* CLOSE_DOT_FILL 密集點(diǎn)填充 USER_FILL 用戶自定義填充*/</p><p> setcolor(YELLOW);</p><p> rectangle(0,0,439,279);
114、 /*圖形方式下,在屏幕上畫一個(gè)矩形*/</p><p> floodfill(50,50,14); /*填充一個(gè)有邊界的區(qū)域,x,y 要填充區(qū)域內(nèi)的任意一點(diǎn)坐標(biāo)*/</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(); /*從控制臺讀取一個(gè)字符,但不顯示在屏幕上*/</p><p><b> exit(0);</b></p><p><b> }</b></p><p> /*如果當(dāng)前行棋者沒有獲勝,則交換行棋方,接著下棋*/</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、 /*清除當(dāng)前字符窗口所有字符*/</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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五子棋課程設(shè)計(jì)
- java課程設(shè)計(jì)報(bào)告-五子棋
- 五子棋游戲課程設(shè)計(jì)報(bào)告
- 五子棋畢業(yè)課程設(shè)計(jì)報(bào)告
- java五子棋課程設(shè)計(jì)
- java課程設(shè)計(jì)--五子棋
- 五子棋java課程設(shè)計(jì)
- 五子棋java課程設(shè)計(jì)
- 五子棋java語言課程設(shè)計(jì)報(bào)告
- c++五子棋課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--五子棋游戲
- java課程設(shè)計(jì)--對戰(zhàn)五子棋
- 五子棋c++課程設(shè)計(jì)
- 五子棋c++課程設(shè)計(jì)
- 五子棋小游戲課程設(shè)計(jì)
- c語言五子棋課程設(shè)計(jì)
- c語言圖形五子棋課程設(shè)計(jì)報(bào)告
- c語言圖形五子棋課程設(shè)計(jì)報(bào)告
- 人工智能課程設(shè)計(jì)報(bào)告-五子棋
- java課程設(shè)計(jì)-五子棋游戲
評論
0/150
提交評論