c語言圖形五子棋課程設(shè)計報告_第1頁
已閱讀1頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論