版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> C語言課程設(shè)計報告</b></p><p><b> 五子棋</b></p><p><b> 摘 要</b></p><p> 五子棋是一種兩人對弈的純策略型棋類游戲,應(yīng)用C語言編寫程序可以在計算機(jī)上實現(xiàn)二人對弈五子棋功能。二人對弈五子棋程序由圖像生成、光標(biāo)移動與
2、落子、判斷勝負(fù)和系統(tǒng)幫助等子程序構(gòu)成;程序中應(yīng)用了結(jié)構(gòu)體、數(shù)組、全局變量、按鍵處理和圖形編程等元素和語句。程序通過棋盤和棋子圖像生成、二人移子與落子和判斷勝負(fù)等功能的實現(xiàn),在計算機(jī)上實現(xiàn)了二人五子棋對弈。</p><p><b> Abstract</b></p><p> Gobang is a traditional checker-type game in
3、which the lining up of five pieces in a straight line scores victory. And C language can accomplish a 2-player gobang on computers. This 2-player gobang program contains 4 main sections, they are, graphics, movement and
4、selection, victory judgment and helping system. Several elements and sentences of C programming language such as structural element, array, global variables, press processing and Graphics Programming are also applied in
5、the program. Wi</p><p><b> 目 錄</b></p><p><b> 一、需求分析4</b></p><p><b> 二、概要設(shè)計6</b></p><p><b> 三、詳細(xì)設(shè)計9</b></p>
6、<p><b> 四、調(diào)試分析23</b></p><p><b> 五、用戶手冊24</b></p><p><b> 六、測試數(shù)據(jù)25</b></p><p><b> 七、附錄26</b></p><p><b&g
7、t; 第1章:需求分析</b></p><p><b> 1.1五子棋背景</b></p><p> 傳統(tǒng)五子棋的棋具與圍棋相同,棋子分為黑白兩色,棋盤為15×15,棋子放置于棋盤線交叉點上。兩人對局,各執(zhí)一色,輪流下一子,先將橫、豎或斜線的5個或5個以上同色棋子連成不間斷的一排者為勝。 </p><p> 因為傳
8、統(tǒng)五子棋在落子后不能移動或拿掉,所以也可以用紙和筆來進(jìn)行游戲。</p><p><b> 1.2 程序設(shè)計</b></p><p> 本程序設(shè)計為人與人對弈,一方執(zhí)黑棋,一方執(zhí)白棋,輪流走棋,每方都試圖在游戲結(jié)束前讓自己的棋子五子相連,首先實現(xiàn)五子相連的一方獲勝。程序執(zhí)行過程中,要求棋盤、棋子時時可見,并且人可以通過按鍵盤按鍵移動光標(biāo),擺放棋子。</p>
9、;<p> 1.2.1 程序需求分析</p><p> 根據(jù)功能需求,將程序分為圖形顯示、玩家控制、勝負(fù)判斷和玩家計分四個模塊,以下分析各模塊的需求。</p><p> 圖形顯示模塊:程序開始運行時,給出歡迎及幫助界面;游戲開始后要求生成19×19的棋盤圖像,并在棋盤上方提示當(dāng)前落子方棋子顏色,游戲進(jìn)行過程中,要求實時顯示棋盤上已落下的棋子;分出勝負(fù)后,要求給
10、出游戲結(jié)束畫面。</p><p> 玩家控制模塊:程序開始時,需玩家確定而后開始游戲;游戲過程中,兩個玩家通過不同的按鍵移動光標(biāo),選擇落子;游戲結(jié)束時,有玩家選擇是否開始新棋局。</p><p> 勝負(fù)判斷模塊:實時監(jiān)測棋盤上棋子,一旦某一色棋子出現(xiàn)五子連線,終止游戲程序,并著色連成一線的五子,彈出該色玩家勝出界面。</p><p> 玩家計分模塊:一方玩家再
11、勝利后通過對文件的操作進(jìn)行計分,并輸出于計分板上。</p><p> 1.2.2程序流程設(shè)計</p><p> 根據(jù)程序需求分析結(jié)果,可以得出程序的總體結(jié)構(gòu)圖如圖1,程序總體流程圖如圖2。</p><p><b> 圖1</b></p><p><b> 第2章:概要設(shè)計</b></p
12、><p> 2.1.1 各類頭文件,變量及宏定義</p><p> #include"stdio.h"</p><p> #include "Conio.h"</p><p> #include "graphics.h"</p><p> #includ
13、e <bios.h></p><p> #include<dos.h></p><p> #define closegr closegraph</p><p> /*定義1號玩家的操作鍵鍵碼*/</p><p> #define W 0x1177/*上移--'W'*/</p>&l
14、t;p> #define S 0x1f73/*下移--'S'*/</p><p> #define A 0x1e61/*左移--'A'*/</p><p> #define D 0x2064/*右移--'D'*/</p><p> #define SP 0x3920/*落子--空格鍵*/</p>
15、;<p> /*定義2號玩家的操作鍵鍵碼*/ </p><p> #define UP 0x4800/*上移--方向鍵up*/</p><p> #define DOWN 0x5000/*下移--方向鍵down*/</p><p> #define LEFT 0x4b00/*左移--方向鍵left*/</p><p>
16、 #define RIGHT 0x4d00/*右移--方向鍵right*/</p><p> #define ENTER 0x1c0d/*落子--回車鍵Enter*/</p><p> #define ESC 0x011b/*退出*/</p><p> #define Y 0x1579/*YES*/</p><p> #define
17、N 0x316e/*NO*/</p><p> #define BACK 0xe08 /*悔棋*/</p><p> #define DEL 0x5300 /*刪除比分*/</p><p> 2.1.2 全局變量</p><p> int ch,dh,del;/*文件操作計分變量*/</p><p> in
18、t k,i,j,n,t;/*控制變量*/</p><p> int a[20][20];/*棋盤數(shù)組*/</p><p><b> 2.2 圖形模塊</b></p><p> 棋盤的顯示由游戲開始與結(jié)束部分控制,棋子以及棋子定位框的顯示與保留由玩家操控部分決定,本章只列寫棋盤與棋子的顯示程序。</p><p>
19、圖形模塊主要由以下函數(shù)組成:</p><p> initgr();/*圖形界面初始化函數(shù)*/</p><p> Welcome();/*歡迎界面*/</p><p> Help();/*幫助界面*/</p><p> board();/*畫棋盤*/</p><p> white();/*畫白棋子*/</
20、p><p> black();/*畫黑棋子*/</p><p> bye();/*結(jié)束界面*/</p><p> green();/*連珠時著色相應(yīng)棋子*/</p><p> show();drawmat();/*顯示中文的點陣圖函數(shù),以及產(chǎn)生動態(tài)變色效果*/</p><p> border();/*棋子定位框函
21、數(shù)*/</p><p> delborder();/*刪除當(dāng)前位置棋子定位框函數(shù)*/</p><p> p1turn();/*輪到1p時在左邊邊框畫出白棋以及輸出white turn以提示1p進(jìn)行操作*/</p><p> p2turn();/*輪到2p時在右邊邊框畫出黑棋以及輸出black turn以提示2p進(jìn)行操作*/</p><p&g
22、t; p1del();/*輪到2p時去除p1turn();函數(shù)的效果*/</p><p> p2del();/*輪到1p時去除p2turn();函數(shù)的效果*/</p><p> 2.3 玩家操作模塊</p><p> 棋子的移動與落子有鍵盤上按鍵控制,本程序選取1P按鍵為W、S、A、D和空格鍵,2P按鍵為↑、↓、←、→和回車鍵,分別代表上移、下移、左移、右移
23、光標(biāo)和落子。在光標(biāo)移動的過程中,光標(biāo)按照玩家按鍵移動;在玩家按下落子按鍵后,程序自動調(diào)用棋子顯示子程序和判斷勝負(fù)子程序。1P、2P的落子后,程序會為落子處的數(shù)組元素賦一個特定值,用于判定勝負(fù)。</p><p> 玩家操作模塊主要由以下函數(shù)構(gòu)成:</p><p> P1move();/*玩家1移動函數(shù)*/</p><p> P2move();/*玩家2移動函數(shù)*
24、/</p><p> Back();/*悔棋函數(shù)*/</p><p> 2.4 勝負(fù)判斷模塊</p><p> 勝負(fù)判斷模塊是程序的關(guān)鍵,該模塊的設(shè)計直接關(guān)系到程序的運行速率和運行結(jié)果的正確與否。本函數(shù)根據(jù)每次落子的位置,分別向上、下、左、右、左上、左下、右上、右下八個方向判斷是否有相同顏色的棋子連成五子,如果成立,游戲就結(jié)束,并顯示提示信息,否則繼續(xù)落子。&
25、lt;/p><p> 以下簡析本程序流程:,由獲勝條件可以知,通過判斷上、下、左、右、斜上、斜下八個方向上是否有連續(xù)的5個子即可得出是否獲勝結(jié)果。在游戲開始時,將棋盤初始化,即將棋盤抽象為一個19*19的數(shù)組,數(shù)組中每個元素數(shù)值設(shè)為6。1P落子時,將數(shù)組內(nèi)相應(yīng)坐標(biāo)處元素賦值為0;2P落子時,將數(shù)組內(nèi)相應(yīng)坐標(biāo)處元素賦值為1。通過循環(huán)掃描棋盤數(shù)組,如果 上、下、左、右、斜上、斜下八個方向某5個連續(xù)的子所對應(yīng)的數(shù)組中元素
26、之和等于5時,1P獲勝;當(dāng)上、下、左、右、斜上、斜下八個方向某5個連續(xù)的子所對應(yīng)的數(shù)組中元素之和等于0時,2P獲勝。</p><p> 勝負(fù)判斷模塊主要由以下幾個函數(shù)構(gòu)成:</p><p> Win();/*主要函數(shù),判斷勝負(fù)*/</p><p> P1win();/*p1勝利時調(diào)用,用于告知p1玩家勝利及詢問是否繼續(xù)*/</p><p&g
27、t; P1win();/*p2勝利時調(diào)用,用于告知p2玩家勝利及詢問是否繼續(xù)*/</p><p> restart();/*詢問是否重新開始新的一局比賽的函數(shù)*/</p><p> initialization();/*初始化棋盤對應(yīng)數(shù)組所有值為6*/</p><p><b> 2.5玩家計分模塊</b></p><
28、p> 為了能使1p和2p更直觀更便捷地看到雙方對戰(zhàn)的比分,所以做了此計分模塊,因為分?jǐn)?shù)不能因為重新調(diào)用main()函數(shù)就丟失了,所以采用對文件的操作,通過文件來記錄雙方的比分,這里對score1.txt和score2.txt文件進(jìn)行操作,用來計1p和2p的分?jǐn)?shù)。</p><p> 玩家計分模塊主要由以下幾個函數(shù)構(gòu)成:</p><p> Point();/*整合所有文件操作的模塊
29、*/</p><p> p1_point_input();/*1p計分文件讀取*/</p><p> p1_point_input2();/*1p計分文件寫入*/</p><p> p1_point_output();/*1p計分文件輸出*/</p><p> p2_point_input();/*2p計分文件讀取*/</p&g
30、t;<p> p2_point_input2();/*2p計分文件寫入*/</p><p> p2_point_output();/*2p計分文件輸出*/</p><p> delscore1() ; /*刪除當(dāng)前1p分?jǐn)?shù)*/</p><p> delscore2(); /*刪除當(dāng)前2p分?jǐn)?shù)*/</p><p>
31、2.6 各模塊之間調(diào)用關(guān)系如下</p><p><b> 第3章:詳細(xì)設(shè)計</b></p><p><b> 3.1 圖形模塊</b></p><p> ?、賗nitgr() /* BGI初始化 */</p><p><b> {</b></p><p
32、> int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同樣效果 */</p><p> registerbgidriver(EGAVGA_driver);/* 注冊BGI驅(qū)動后可以不需要.BGI文件的支持運行 */</p><p> initgraph(&gd, &gm, "");</p&
33、gt;<p><b> }</b></p><p> ?、?welcome() /*歡迎界面*/</p><p> { initgr() ;/*初始化*/</p><p> clearviewport();/*清屏*/</p><p> setcolor(2);
34、/*設(shè)置顏色*/</p><p> settextstyle(0,0,6); /*樣式*/</p><p> outtextxy(180,180,"Welcome");/*位置以及內(nèi)容*/</p><p> settextstyle(0,0,2); /*文本樣式*/</p><p> outtextx
35、y(240,420,"press any key to continue");/*位置以及內(nèi)容*/</p><p> getch();/*press any key to continue*/</p><p><b> }</b></p><p> ?、?help() /*幫助界面,基本操作同welc
36、ome();函數(shù)*/</p><p><b> {</b></p><p><b> initgr();</b></p><p> clearviewport();</p><p> setcolor(2);</p><p> settextstyle(0,0,2)
37、;</p><p> outtextxy(60,100,"P1 move; W S A D ");</p><p> outtextxy(60,120," set : space ");</p><p> outtextxy(60,180,"P2 move: up down left r
38、ight ");</p><p> outtextxy(60,200," set: Enter");</p><p> outtextxy(60,240,"You can press Backspace to pull back!") ;</p><p> outtextxy(60,280,&quo
39、t;When you want to quit the game,");</p><p> outtextxy(60,300,"press Esc.");</p><p> outtextxy(220,440,"press any key to continue");</p><p><b> get
40、ch();</b></p><p><b> }</b></p><p> ④ bye() /*say bye~@!,實現(xiàn)功能同上*/</p><p><b> {</b></p><p><b> initgr();</b></p><
41、p> clearviewport();</p><p> setcolor(4) ;</p><p> settextstyle(0,0,6);</p><p> outtextxy(130,180,"Thank you!");</p><p> settextstyle(0,0,2);</p
42、><p> outtextxy(240,420,"press any key to quit");</p><p><b> getch();</b></p><p><b> }</b></p><p> ?、?board()/*畫棋盤*/</p><p&
43、gt;<b> {</b></p><p> setcolor(14); /*線色*/</p><p> setfillstyle(1,6); /*樣式*/</p><p> bar(120,50,520,450);
44、/*棋盤底*/</p><p> for(k=0;k<21 ;k++)</p><p><b> {</b></p><p> line(120+20*k,50,120+20*k,450) ; /*豎線*/</p><p> line(120,50+20*k,520,50+20*k) ; /*橫線*
45、/</p><p><b> }</b></p><p> setfillstyle(1,9) ;</p><p> bar(540,200,620,300); /*1p2p兩邊框*/</p><p> bar(20,200,100,300);</p><p> setcolor
46、(2);</p><p> settextstyle(3,0,4);</p><p> outtextxy(50,210,"1p");</p><p> outtextxy(570,210,"2p");</p><p> delay(50000);</p><p> s
47、how(); /*顯示動態(tài)變色效果的標(biāo)題*/</p><p> moveto(320,250); /*初始化中心位置*/</p><p> border();/*畫定位框*/</p><p> p1turn();/*p1開始落子,游戲開始*/</p><p><b> }<
48、;/b></p><p> ?、辸hite() /*畫白棋*/</p><p><b> {</b></p><p> setcolor(15);</p><p> setfillstyle(1,15);</p><p> circle(getx(),gety(),9);</p
49、><p> floodfill(getx(),gety(),15);</p><p><b> }</b></p><p> black() /*畫黑棋*/</p><p><b> {</b></p><p> setcolor(0);</p><
50、p> setfillstyle(1,0);</p><p> circle(getx(),gety(),9);</p><p> floodfill(getx(),gety(),0);</p><p><b> }</b></p><p> green() /*用粉色著色連珠時的棋子*/</p>
51、;<p><b> {</b></p><p> setcolor(13);</p><p> setfillstyle(1,13);</p><p> circle(getx(),gety(),9);</p><p> floodfill(getx(),gety(),13);</p>
52、<p><b> }</b></p><p><b> ?、?lt;/b></p><p> p1turn()/*畫左邊邊框內(nèi)白棋子*/</p><p><b> {</b></p><p> setcolor(15);</p><p>
53、 setfillstyle(1,15);</p><p> circle(60,250,9);</p><p> floodfill(60,250,15);</p><p> settextstyle(3,0,4);</p><p> outtextxy(20,280,"white turn");</p&g
54、t;<p><b> } </b></p><p> p2turn() /*右邊邊框內(nèi)黑色棋子*/</p><p><b> {</b></p><p> setcolor(0);</p><p> setfillstyle(1,0);</p><p>
55、; circle(580,250,9);</p><p> floodfill(580,250,0);</p><p> settextstyle(3,0,4);</p><p> outtextxy(540,280,"black turn");</p><p><b> } </b><
56、;/p><p> p1del()/*不是1turn時候抹去左邊邊框內(nèi)棋子*/</p><p> { setfillstyle(1,9) ;</p><p> floodfill(60,250,9);</p><p> setcolor(9);</p><p> settextstyle(3,0,4);</
57、p><p> outtextxy(20,280,"white turn");</p><p><b> }</b></p><p> p2del()/*不是2turn時候抹去右邊邊框內(nèi)棋子*/</p><p><b> {</b></p><p>
58、setfillstyle(1,9);</p><p> floodfill(580,250,9) ;</p><p> setcolor(9);</p><p> settextstyle(3,0,4);</p><p> outtextxy(540,280,"black turn");</p>&
59、lt;p><b> }</b></p><p><b> ?、?lt;/b></p><p> border() /*畫定位框*/</p><p><b> {</b></p><p> setcolor(14);</p><p>
60、 line(getx()-8,gety()-9,getx()-3,gety()-9); /*通過畫線函數(shù)畫出定位框*/</p><p> line(getx()+8,gety()-9,getx()+3,gety()-9);</p><p> line(getx()-8,gety()-9,getx()-8,gety()-4);</p><p> line(get
61、x()+8,gety()-9,getx()+8,gety()-4);</p><p> line(getx()-8,gety()+9,getx()-3,gety()+9);</p><p> line(getx()+8,gety()+9,getx()+3,gety()+9);</p><p> line(getx()-8,gety()+9,getx()-8,g
62、ety()+4);</p><p> line(getx()+8,gety()+9,getx()+8,gety()+4);</p><p><b> }</b></p><p> delborder() /*除去定位框*/</p><p><b> {</b></p><
63、;p> setcolor(6); /*本質(zhì)在于顏色覆蓋*/</p><p> line(getx()-8,gety()-9,getx()-3,gety()-9); line(getx()+8,gety()-9,getx()+3,gety()-9);</p><p> line(getx()-8,gety()-9,getx()-8,gety()-4);</p&
64、gt;<p> line(getx()+8,gety()-9,getx()+8,gety()-4);</p><p> line(getx()-8,gety()+9,getx()-3,gety()+9);</p><p> line(getx()+8,gety()+9,getx()+3,gety()+9);</p><p> line(getx
65、()-8,gety()+9,getx()-8,gety()+4);</p><p> line(getx()+8,gety()+9,getx()+8,gety()+4);</p><p><b> }</b></p><p> ?、醖rawmat(char *mat,int matsize,int x,int y,int color)/*
66、點陣圖所用標(biāo)準(zhǔn)輸出方式*/</p><p><b> {</b></p><p> int i,j,k,m;</p><p> m=(matsize-1)/8+1;</p><p> for(j=0;j<matsize;j++)</p><p> for(i=0;i<m;i+
67、+)</p><p> for(k=0;k<8;k++)</p><p> if(mat[j*m+i]&(0x80>>k))</p><p> putpixel(x+i*8+k,y+j,color);</p><p><b> }</b></p><p> sh
68、ow() /*動態(tài)點陣圖中文閃爍效果*/</p><p><b> {</b></p><p> for(n=0;n<3;n++)</p><p> { delay(10000);</p><p> drawmat(wu32K,32,240,0,3);/*輸出點陣圖的“五”字*/</p&g
69、t;<p> delay(10000);</p><p> drawmat(zi32K,32,290,0,3);</p><p> delay(10000);</p><p> drawmat(qi32K,32,340,0,3);</p><p> delay(10000);</p><p>
70、 drawmat(wu32K,32,240,0,2);</p><p> delay(10000);</p><p> drawmat(zi32K,32,290,0,2);</p><p> delay(10000);</p><p> drawmat(qi32K,32,340,0,2);</p><p>&l
71、t;b> }</b></p><p> 3.2 玩家操作模塊</p><p><b> ①</b></p><p> p1move() /*玩家1操作*/</p><p><b> {</b></p><p> s
72、witch(bioskey(0)) /*bioskey函數(shù)對鍵盤操作*/</p><p><b> {</b></p><p> case W: /*上移*/</p><p> {if(gety()<90)</p><p> {delborder();moveto(getx(
73、),430);}</p><p> delborder();moverel(0,-20);border();p1move();}</p><p> case A: /*左移*/</p><p> { if(getx()<160)</p><p> {delborder();moveto(500,gety());}
74、</p><p> delborder();moverel(-20,0);border();p1move();}</p><p> case S: /*下移*/</p><p> {if(gety()>410)</p><p> {delborder();moveto(getx(),70);}</p><
75、;p> delborder();moverel(0,20);border();p1move();}</p><p> case D: /*右移*/</p><p> { if(getx()>480)</p><p> {delborder();moveto(140,gety());}</p><p> delbor
76、der();moverel(20,0);border();p1move();}</p><p> case SP: /*落子*/</p><p> {if(a[getx()][gety()]!=6)</p><p> /*判定如果棋盤此處無子才能下,否則重新調(diào)用p1move函數(shù)*/</p><p> {p1move();}<
77、/p><p> delborder(); /*去除定位框*/</p><p> white();/*畫棋子*/</p><p> a[getx()][gety()]=1;/*將所在位置對應(yīng)的數(shù)組點賦值為1*/</p><p> win(); /*判斷勝負(fù)*/</p><p> border(
78、); /*在新的位置畫出定位框*/</p><p><b> p1del();</b></p><p><b> p2turn();</b></p><p> p2move();}</p><p> case ESC: / *結(jié)束游戲*/</p><p>
79、{bye();closegraph(); exit(0);}</p><p> case BACK : /*悔棋操作*/</p><p> {back();p1del();p2turn();p2move();}</p><p> default: p1move();</p><p><b> }</b>&l
80、t;/p><p><b> }</b></p><p><b> ?、?lt;/b></p><p> p2move() /*玩家2操作*/</p><p><b> {</b></p><p> swi
81、tch(bioskey(0))</p><p><b> {</b></p><p><b> case UP:</b></p><p> {if(gety()<90)</p><p> {delborder();moveto(getx(),430);}</p><
82、p> delborder();moverel(0,-20);border();p2move();}</p><p> case LEFT:</p><p> {if(getx()<160)</p><p> {delborder();moveto(500,gety());}delborder();moverel(-20,0);border();p
83、2move();}</p><p> case DOWN:</p><p> {if(gety()>410)</p><p> {delborder();moveto(getx(),70);}delborder();moverel(0,20);border();p2move();}</p><p> case RIGHT:<
84、;/p><p> { if(getx()>480)</p><p> {delborder();moveto(140,gety());}delborder();moverel(20,0);border();p2move();}</p><p> case ENTER:</p><p> {if(a[getx()][gety()]!=
85、6)</p><p> {p2move();}delborder();black();a[getx()][gety()]=0;win();border();p2del();p1turn();p1move();}</p><p> default: p2move();</p><p><b> case ESC:</b></p>
86、<p> {bye();closegraph(); exit(0);}</p><p> case BACK :</p><p> {back();p2del();p1turn();p1move();}</p><p><b> }</b></p><p><b> }</b&g
87、t;</p><p><b> ?、?lt;/b></p><p> back()/*悔棋功能*/</p><p><b> {</b></p><p> setcolor(6);</p><p> setfillstyle(1,6);</p><
88、;p> circle(getx(),gety(),9);</p><p> floodfill(getx(),gety(),6); /*通過將現(xiàn)有棋子覆蓋與棋盤底色相同的顏色來實現(xiàn)*/</p><p> setcolor(14) ;</p><p> line(getx()-9,gety(),getx()+9,gety()) ;</p>
89、<p> line(getx(),gety()-9,getx(),gety()+9) ;</p><p><b> }</b></p><p><b> 3.3勝負(fù)判斷模塊</b></p><p><b> ①</b></p><p> win()
90、/*勝負(fù)判斷主程序*/</p><p><b> {</b></p><p> for(i=120;i<540;i=i+20)</p><p> for(j=50;j<470;j=j+20)/*通過循環(huán)掃描整個棋盤判定勝負(fù)*/</p><p><b> {</b></
91、p><p> if((a[i][j]+a[i+20][j]+a[i+40][j]+a[i+60][j]+a[i+80][j]==5)||(a[i][j]+a[i][j+20]+a[i][j+40]+a[i][j+60]+a[i][j+80]==5)|| (a[i][j]+a[i+20][j+20]+a[i+40][j+40]+a[i+60][j+60]+a[i+80][j+80]==5)||(a[i][j+80]+
92、a[i+20][j+60]+a[i+40][j+40]+a[i+60][j+20]+a[i+80][j]==5))</p><p> /*如果棋盤上任何位置數(shù)組對應(yīng)的值之和為5,則白方5子連珠*/</p><p> { if(a[i][j]+a[i+20][j]+a[i+40][j]+a[i+60][j]+a[i+80][j]==5)</p><p> {
93、 moveto(i,j); green();delay(10000);moveto(i+20,j);green(); delay(10000);moveto(i+40,j);green();delay(10000);moveto(i+60,j);green();delay(10000);moveto(i+80,j);green();delay(10000);</p><p><b> }</b&
94、gt;</p><p> else if(a[i][j]+a[i][j+20]+a[i][j+40]+a[i][j+60]+a[i][j+80]==5)</p><p><b> {</b></p><p> moveto(i,j); green();delay(10000);moveto(i,j+20);green(); delay(1
95、0000);moveto(i,j+40);green();delay(10000);moveto(i,j+60);green();delay(10000);moveto(i,j+80);green();delay(10000);</p><p><b> }</b></p><p> else if(a[i][j]+a[i+20][j+20]+a[i+40][j+
96、40]+a[i+60][j+60]+a[i+80][j+80]==5)</p><p> {moveto(i,j); green();delay(10000);moveto(i+20,j+20);green(); delay(10000);moveto(i+40,j+40);green();delay(10000);moveto(i+60,j+60);green();delay(10000);moveto(i+
97、80,j+80);green();delay(10000);</p><p><b> }</b></p><p> else if(a[i][j+80]+a[i+20][j+60]+a[i+40][j+40]+a[i+60][j+20]+a[i+80][j]==5)</p><p> {moveto(i,j+80); green();d
98、elay(10000);moveto(i+20,j+60);green(); delay(10000);moveto(i+40,j+40);green();delay(10000);moveto(i+60,j+20);green();delay(10000);moveto(i+80,j);green();delay(10000);</p><p><b> }</b></p>
99、<p> delscore1();p1_point_input2();p1_point_output() ; </p><p> p1win(); }</p><p> if((a[i][j]+a[i+20][j]+a[i+40][j]+a[i+60][j]+a[i+80][j]==0)||(a[i][j]+a[i][j+20]+a[i][j+40]+a[i][j+6
100、0]+a[i][j+80]==0)|| (a[i][j]+a[i+20][j+20]+a[i+40][j+40]+a[i+60][j+60]+a[i+80][j+80]==0)||(a[i][j+80]+a[i+20][j+60]+a[i+40][j+40]+a[i+60][j+20]+a[i+80][j]==0))</p><p> { if(a[i][j]+a[i+20][j]+a[i+40][j]+a[i
101、+60][j]+a[i+80][j]==0)</p><p> { moveto(i,j); green();delay(10000);moveto(i+20,j);green(); delay(10000);moveto(i+40,j);green();delay(10000);moveto(i+60,j);green();delay(10000);moveto(i+80,j);green();delay
102、(10000);</p><p><b> }</b></p><p> else if(a[i][j]+a[i][j+20]+a[i][j+40]+a[i][j+60]+a[i][j+80]==0)</p><p><b> {</b></p><p> moveto(i,j); gree
103、n();delay(10000);moveto(i,j+20);green(); delay(10000);moveto(i,j+40);green();delay(10000);moveto(i,j+60);green();delay(10000);moveto(i,j+80);green();delay(10000);</p><p><b> }</b></p><
104、;p> else if(a[i][j]+a[i+20][j+20]+a[i+40][j+40]+a[i+60][j+60]+a[i+80][j+80]==0)</p><p> {moveto(i,j); green();delay(10000);moveto(i+20,j+20);green(); delay(10000);moveto(i+40,j+40);green();delay(10000);
105、moveto(i+60,j+60);green();delay(10000);moveto(i+80,j+80);green();delay(10000);</p><p><b> }</b></p><p> else if(a[i][j+80]+a[i+20][j+60]+a[i+40][j+40]+a[i+60][j+20]+a[i+80][j]==0)&
106、lt;/p><p> {moveto(i,j+80); green();delay(10000);moveto(i+20,j+60);green(); delay(10000);moveto(i+40,j+40);green();delay(10000);moveto(i+60,j+20);green();delay(10000);moveto(i+80,j);green();delay(10000);</p
107、><p><b> }</b></p><p> delscore2(); p2_point_input2();p2_point_output() ;p2win(); }</p><p><b> }</b></p><p><b> }</b></p>&l
108、t;p><b> ?、?lt;/b></p><p><b> p1win()</b></p><p><b> {</b></p><p> setcolor(15) ;</p><p> settextstyle(0,0,2);</p><p&g
109、t; outtextxy(10,110,"1p win");</p><p> outtextxy(240,460,"Restart?(Y/N)");</p><p> restart();</p><p><b> }</b></p><p><b> p2w
110、in()</b></p><p><b> {</b></p><p> setcolor(15) ;</p><p> settextstyle(0,0,2);</p><p> outtextxy(535,110,"2p win");</p><p>
111、 outtextxy(240,460,"Restart?(Y/N)");</p><p> restart();</p><p><b> }</b></p><p><b> ?、?lt;/b></p><p><b> restart()</b><
112、/p><p><b> {</b></p><p> switch(bioskey(0))</p><p><b> {case Y:</b></p><p><b> {main();}</b></p><p><b> case N:
113、</b></p><p> {bye();closegraph(); exit(0);}</p><p> default:restart();</p><p><b> }</b></p><p><b> }</b></p><p><b>
114、 ?、?lt;/b></p><p> initialization()</p><p> { for(i=120;i<540;i++)</p><p> for(j=50;j<470;j++) /*循環(huán)初始化棋盤對應(yīng)的數(shù)組所在位置值為6*/</p><p><b> {</b></
115、p><p> a[i][j]=6;</p><p><b> }</b></p><p><b> }</b></p><p> 3.4 文件操作模塊</p><p> point() /*用于整合所有計分的函數(shù),
116、方便操作*/</p><p><b> {</b></p><p> p1_point_input();</p><p> p1_point_output() ;</p><p> p2_point_input();</p><p> p2_point_output() ;</p
117、><p><b> }</b></p><p> p1_point_input() /*1p計分文件讀取*/</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> fp=fopen(&quo
118、t;score1.txt","r");</p><p> ch=getw(fp);</p><p> fclose(fp);</p><p><b> }</b></p><p> p1_point_input2() /*1p計分文件輸入*/</p>
119、<p><b> {</b></p><p><b> FILE *fp;</b></p><p> fp=fopen("score1.txt","r+");</p><p><b> ch=ch+1;</b></p><p
120、> putw(ch,fp);</p><p> fclose(fp);</p><p><b> }</b></p><p> p1_point_output() /*1p計分輸出*/</p><p><b> {</b></p>&
121、lt;p> int i=0; char sh,score[10];</p><p><b> FILE *fp;</b></p><p> fp=fopen("score1.txt", "r");</p><p> for(; (sh=fgetc(fp))!=EOF; )</p>
122、<p><b> {</b></p><p> score[i++]=sh;</p><p><b> }</b></p><p> score[i]='\0';</p><p> setcolor(12);</p><p> set
123、textstyle(3,0,4);</p><p> outtextxy(40,320,"score");</p><p> outtextxy(55,340,score);</p><p> fclose(fp);</p><p><b> }</b></p><p>
124、; p2_point_input()</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> fp=fopen("score2.txt","r");</p><p> dh=getw(fp);&l
125、t;/p><p> fclose(fp);</p><p><b> }</b></p><p> p2_point_input2()</p><p><b> {</b></p><p><b> FILE *fp;</b></p>
126、<p> fp=fopen("score2.txt","r+");</p><p><b> dh=dh+1;</b></p><p> putw(dh,fp);</p><p> fclose(fp);</p><p><b> }</b&g
127、t;</p><p> p2_point_output()</p><p><b> {</b></p><p> int i=0; char fh,score[10];</p><p><b> FILE *fp;</b></p><p> fp=fopen(&q
128、uot;score2.txt", "r");</p><p> for(; (fh=fgetc(fp))!=EOF; )</p><p><b> {</b></p><p> score[i++]=fh;</p><p><b> }</b></p>
129、;<p> score[i]='\0';</p><p> setcolor(12);</p><p> settextstyle(3,0,4);</p><p> outtextxy(560,320,"score");</p><p> outtextxy(575,340,scor
130、e);</p><p> fclose(fp);</p><p> delscore1() /*刪除當(dāng)前1p分?jǐn)?shù)*/</p><p><b> {</b></p><p> int i=0; char sh,score[10];</p><p><b> FILE *fp;
131、</b></p><p> fp=fopen("score1.txt", "r");</p><p> for(; (sh=fgetc(fp))!=EOF; )</p><p><b> {</b></p><p> score[i++]=sh;</p&g
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言圖形五子棋課程設(shè)計報告
- c語言五子棋課程設(shè)計
- c語言課程設(shè)計報告五子棋游戲課程設(shè)計
- c語言課程設(shè)計--五子棋游戲設(shè)計
- 五子棋java語言課程設(shè)計報告
- c語言課程設(shè)計---五子棋(雙人對戰(zhàn))
- c++五子棋課程設(shè)計報告
- 五子棋-課程設(shè)計報告
- 五子棋c++課程設(shè)計
- 五子棋c++課程設(shè)計
- 《c++語言程序設(shè)計》課程設(shè)計報告--五子棋
- c++課程設(shè)計——五子棋
- 五子棋課程設(shè)計
- 匯編語言五子棋課程設(shè)計
- 匯編語言五子棋課程設(shè)計
- java課程設(shè)計報告-五子棋
- 五子棋游戲課程設(shè)計報告
- 五子棋畢業(yè)課程設(shè)計報告
- c++課程設(shè)計--五子棋游戲
- java五子棋課程設(shè)計
評論
0/150
提交評論