C語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、摘要程序設(shè)計(jì)語(yǔ)言類(lèi)課程的指導(dǎo)思想是:使學(xué)生通過(guò)學(xué)習(xí)即高級(jí)編程語(yǔ)言的知識(shí)、編程技術(shù)和基本算法,又掌握程序設(shè)計(jì)的思想和方法,更具備利用計(jì)算機(jī)求解實(shí)際問(wèn)題的能力,能靈活運(yùn)用高級(jí)語(yǔ)言進(jìn)行程序設(shè)計(jì)6。 其實(shí)認(rèn)真學(xué)習(xí)一門(mén)語(yǔ)言并不困難,關(guān)鍵要所追求的學(xué)習(xí)的方法和途徑。一條好的途徑便于快速掌握,熟悉運(yùn)用語(yǔ)言。學(xué)習(xí)的目的在于應(yīng)用,理論來(lái)源于實(shí)踐,如果在學(xué)習(xí)中能夠通過(guò)有效的途徑如自己動(dòng)手設(shè)計(jì)一個(gè)功能比較前大的開(kāi)發(fā)系統(tǒng),借鑒于各種工具書(shū),善于總結(jié)。定可以很好的效果。正是如此,使我們?cè)谶@幾年中對(duì)語(yǔ)言學(xué)習(xí)有了很大提高。通過(guò)實(shí)踐的學(xué)習(xí),我認(rèn)到學(xué)好計(jì)算機(jī)要重視實(shí)踐操作,不僅僅是學(xué)習(xí)C語(yǔ)言,還是其它的語(yǔ)言,以及其它的計(jì)算機(jī)方

2、面的知識(shí)都要重在實(shí)踐,所以后在學(xué)習(xí)過(guò)程中,我會(huì)更加注視實(shí)踐操作,使自己便好地學(xué)好計(jì)算機(jī)。關(guān)鍵詞: 掌握 編程語(yǔ)言的知識(shí) ;編程技術(shù);基本算法思想和方法目錄u設(shè)計(jì)目的和意義41.1設(shè)計(jì)目的:41.2.意義:4黑白棋52.1.用到的函數(shù):52.1.1main()主函數(shù):52.1.2DrawQp()畫(huà)棋盤(pán)函數(shù):52.1.3MoveColor()恢復(fù)原來(lái)格子的狀態(tài)52.1.4playtoplay()人人對(duì)戰(zhàn)函數(shù)52.1.5QpChange()判斷棋盤(pán)變化62.1.6PrintScore()輸出成績(jī)62.2.子函數(shù)功能一覽表62.3. 主函數(shù)流程圖72.3.1棋盤(pán)繪制流程圖82.4.函數(shù)解析82.4.1

3、圖形庫(kù)文件82.4.2圖形初始化函數(shù)82.4.3設(shè)置背景顏色82.4.4畫(huà)線92.4.5設(shè)置填充模式和顏色92.4.6方向操作102.4.7落棋位置判斷112.4.8判斷棋盤(pán)的變化和改變棋子的顏色122.4.9 成績(jī)輸出142.4.10輸出成績(jī)142.4.11輸出最后的勝利者結(jié)果15u2.5.源代碼15u2.6運(yùn)行結(jié)果24u2.7心得體會(huì)24參考文獻(xiàn)26致謝26u設(shè)計(jì)目的和意義1.1設(shè)計(jì)目的:1掌握和利用C語(yǔ)言進(jìn)行程設(shè)計(jì)的能力;2進(jìn)一步理解和運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)的思想和方法;3初步掌握開(kāi)發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法;4學(xué)會(huì)調(diào)試一個(gè)較長(zhǎng)程序的基本方法;5學(xué)會(huì)利用流程圖或N-S圖表示算法;1.2.意

4、義:通過(guò)編寫(xiě)一個(gè)相對(duì)完整的黑白棋游戲程序,加強(qiáng)對(duì)C語(yǔ)言的認(rèn)識(shí),也是對(duì)這一學(xué)期C語(yǔ)言課程中學(xué)習(xí)到的各種C語(yǔ)言語(yǔ)法結(jié)構(gòu)、編程方法和編程技巧進(jìn)行綜合復(fù)習(xí)以達(dá)到鞏固和提高。實(shí)現(xiàn)黑白棋游戲游戲功能,首先是輸出游戲模式,然后是通過(guò)按鍵的方式實(shí)現(xiàn)棋子的移動(dòng),所以程序主要由三大部分實(shí)現(xiàn),一部分功能是顯示棋盤(pán),一部分是實(shí)現(xiàn)游戲功能.一部分是游戲計(jì)分. 黑白棋2.1.用到的函數(shù):2.1.1main()主函數(shù):在主函數(shù)中,棋盤(pán)狀態(tài)用數(shù)組a88,初值為0,表示空格。用圖形系統(tǒng)畫(huà)出棋盤(pán),調(diào)用playtoplay()人人對(duì)弈函數(shù)開(kāi)始游戲,一旦游戲結(jié)束后,關(guān)閉圖形系統(tǒng),程序結(jié)束。2.1.2DrawQp()畫(huà)棋盤(pán)函數(shù):背景顏

5、色設(shè)為藍(lán)色,從坐標(biāo)(100,100)開(kāi)始每隔40個(gè)單位用白色畫(huà)一條水平直線,一條垂直線,構(gòu)成棋盤(pán),用循環(huán)語(yǔ)句實(shí)現(xiàn)。函數(shù)setfillstyle()可以設(shè)置填充模式和填充顏色,fillellipse(int x,int y,xradius,int yradius)以x和y為圓心,xradius和yradius為水平和垂直軸畫(huà)一填充橢圓,當(dāng)xradius和yradius相等時(shí),則畫(huà)出的是圓,用它表示棋子。1. SetPlayColor()設(shè)置棋子的顏色:函數(shù)的參數(shù)為整型變量t,根據(jù)t的值來(lái)設(shè)計(jì)填充棋子的當(dāng)前顏色,值為1代表白棋,值為2代表黑棋。2.1.3MoveColor()恢復(fù)原來(lái)格子的狀態(tài)由于

6、棋手在走棋的時(shí)候,他的棋子總是首先出現(xiàn)在棋盤(pán)的左上角,棋手要通過(guò)移動(dòng)光標(biāo)走到要落子的位置,在經(jīng)過(guò)的路程上顯示當(dāng)前棋子,就會(huì)覆蓋原來(lái)的棋盤(pán)狀態(tài),所以一旦棋子走過(guò)后,就應(yīng)恢復(fù)原來(lái)的狀態(tài),是空格的依然顯示空格,是棋子的就顯示原來(lái)棋子的顏色。因?yàn)槠遄右苿?dòng)過(guò)程并沒(méi)有改變數(shù)組元素的值,所以可以根據(jù)數(shù)組元素的值判定原來(lái)的狀態(tài),如果值是1,就恢復(fù)白色棋子,值是2則恢復(fù)黑色棋子,否則恢復(fù)藍(lán)色空格。2.1.4playtoplay()人人對(duì)戰(zhàn)函數(shù)這是游戲進(jìn)行的函數(shù),主要是接收棋手的按鍵消息,其處理過(guò)程如下:按Esc鍵程序可以隨時(shí)結(jié)束。按上下左右光標(biāo)鍵,則改變棋子移動(dòng)的坐標(biāo)值。 按回車(chē)鍵后判斷。2.1.5QpChan

7、ge()判斷棋盤(pán)變化當(dāng)棋手按回車(chē)鍵落子后,就要分別往8個(gè)方向判斷是否包圍住對(duì)方棋子,如果是,則改變棋盤(pán),也就是棋盤(pán)上黑白棋子的個(gè)數(shù)要發(fā)生變化。如果所有方向都判斷過(guò),并且沒(méi)有引起棋盤(pán)的變化,則棋盤(pán)變化標(biāo)志值yes為0,返回yes,結(jié)束本函數(shù)。ftp:/2.1.6PrintScore()輸出成績(jī)利用設(shè)置實(shí)體填充模式填充矩形條清除掉前次的成績(jī),再利用sprintf()函數(shù)將整數(shù)轉(zhuǎn)換為字符串的形式,再利用outtextxy()函數(shù)將成績(jī)輸出。2. playWin()輸出勝利者結(jié)果 根據(jù)分?jǐn)?shù)值score1和score2的大小得出下棋的結(jié)果,輸出贏者信2.2.子函數(shù)功能一覽表序號(hào)123456名稱DrawQ

8、pSetPlayPlaytoplayMoveColorQpChangeDoScore功能繪制棋盤(pán)和初始棋子設(shè)置棋子第一次的顏色人人對(duì)戰(zhàn)函數(shù)恢復(fù)原來(lái)棋盤(pán)狀態(tài)判斷棋盤(pán)的變化改變棋子的顏色處理分?jǐn)?shù)備注在界面上繪制320*320的棋盤(pán),并在棋盤(pán)中繪制8*8的格子,初始棋子先走棋者持白子,后走棋黑子,每次交替?zhèn)z棋手交替走棋,定義鍵盤(pán)操作等棋子由初始位置到落子位置的路徑不改變顏色走棋后判斷棋盤(pán)的變化情況,根據(jù)變化情況判斷是否可以輸出分?jǐn)?shù)根據(jù)棋盤(pán)上旗子的多少進(jìn)行分?jǐn)?shù)的處理2.3. 主函數(shù)流程圖開(kāi)始Draw Qp棋手對(duì)戰(zhàn)QpChangeDoScore輸出勝利者信息結(jié)束Y繪制棋盤(pán)和初始棋子判斷棋盤(pán)變化計(jì)算棋手成

9、績(jī)恢復(fù)原來(lái)棋盤(pán)狀態(tài)MoveColor2.3.1棋盤(pán)繪制流程圖繪制棋盤(pán)盤(pán)面棋位置定義大小定義底色定義繪制棋子棋子大小顏色定義棋子位置2.4.函數(shù)解析2.4.1圖形庫(kù)文件詳細(xì)介紹:#include graphics.hTURBO C提供了70多個(gè)圖形函數(shù),這些函數(shù)包括在圖形庫(kù)文件graphics.LIB中,他們被定義在graphics.h中。編寫(xiě)圖形程序的時(shí)候,一定高包口頭文件graphics.h。2.4.2圖形初始化函數(shù)int gd=DETECT,gr圖形初始化函數(shù)initgraph(&driver,&mode,“路徑”)功能:裝入圖形驅(qū)動(dòng)程序參數(shù)DRIVER指圖形適配器驅(qū)動(dòng)軟件,用宏名或數(shù)字來(lái)

10、表示,它實(shí)際上是一個(gè)枚舉變量。當(dāng)不知道所用的顯示器是什么名稱的時(shí)候,可將driver設(shè)置成DETECT,它將自動(dòng)的檢測(cè)所用的適培器的型號(hào),并獎(jiǎng)相應(yīng)的驅(qū)動(dòng)程序裝入,調(diào)節(jié)到最高分辨顯示模式。參數(shù)MODE是每一種圖形適配器的代碼,可以是宏名或是數(shù)字,參數(shù)MODE不用指具體的值,系統(tǒng)將采用最高的分辨率。2.4.3設(shè)置背景顏色Setbkcolor(color)設(shè)置背景顏色。若不設(shè)置,則背景的顏色為黑色Setcolor(color)設(shè)置畫(huà)線的顏色或者是調(diào)色板的顏色。如果不設(shè)置,則系統(tǒng)指定為白色,其中COLOR為顏色的控制號(hào)或是顏色的宏名,為整形,設(shè)置的顏色保存到程序中遇到下一個(gè)設(shè)置顏色是為止。在本程序中,

11、設(shè)置的的北京顏色為藍(lán)色,setbkcolor(BLUE),根據(jù)上述可知,此時(shí),游戲界面的底色為藍(lán)色。setcolor(0)將線的顏色設(shè)置為黑色,由此是為了取消圓形周?chē)臇|西。2.4.4畫(huà)線Line(x1,y1,x2,y2)從點(diǎn)(X1,Y1)到點(diǎn)(X2,Y2)畫(huà)一條直線,顏色為當(dāng)前的顏色,當(dāng)前的位置是畫(huà)線前的位置。for(i=100;i=420;i+=40) line(100,i,420,i);/*畫(huà)水平線*/ line(i,100,i,420); /*畫(huà)垂直線*/ 在本程序中,使用上述源代碼實(shí)現(xiàn)繪制棋盤(pán)的功能,也就是以40為一個(gè)步增,以(100,100)為起點(diǎn),以(100,420)、(420,

12、100)(420,420)為頂點(diǎn)畫(huà)出棋盤(pán),棋盤(pán)大下為320*320,由于步增是40,所以,棋盤(pán)上自然出現(xiàn)8*8的格子,由于畫(huà)線的時(shí)候,沒(méi)有定義線的顏色,所以線的顏色是默認(rèn)的白色,所以最終出現(xiàn)了蘭色的底面上以白色畫(huà)格子的棋盤(pán)。2.4.5設(shè)置填充模式和顏色Setfillstyle(pattern,color)設(shè)置填充模式和顏色其中:pattern=SOLID_FILL為填充實(shí)心充色Color為顏色號(hào)碼。Ellipse為畫(huà)橢圓Ellipse用當(dāng)前顏色以(X,Y)為中心,X、Y為兩半徑FILLELLIPSE(X,Y ,RX,RY)以(X,Y)為中心,以RX、RY為半徑畫(huà)橢圓,并以設(shè)置或者是默認(rèn)的顏色來(lái)

13、涂色setfillstyle(SOLID_FILL,15);/*白色實(shí)體填充模式*/fillellipse(500,200,15,15); /*在顯示得分的位置畫(huà)棋*/setfillstyle(SOLID_FILL,8); /*黑色實(shí)體填充模式*/setfillstyle(SOLID_FILL,WHITE); 在本程序中,使用的上述的代碼來(lái)繪制棋子,棋子為半徑為15的圓,顏色分別為代碼為15和8的深灰色和白色兩種棋子,分別由兩位旗手來(lái)使用。a33=a44=1;/*初始兩個(gè)黑棋*/a34=a43=2;/*初始兩個(gè)白棋*/setfillstyle(SOLID_FILL,WHITE); fillel

14、lipse(120+3*40,120+3*40,15,15); fillellipse(120+4*40,120+4*40,15,15); setfillstyle(SOLID_FILL,8); fillellipse(120+3*40,120+4*40,15,15); fillellipse(120+4*40,120+3*40,15,15); 開(kāi)局是在8*8的棋盤(pán)的四個(gè)位置上分別設(shè)置四個(gè)棋子,位置分別為(3,3)|(4,4)兩個(gè)白子,(3,4)、(4,3)兩個(gè)個(gè)黑子,也就是要在棋盤(pán)的(120+3*40,120+3*40)和(120+4*40,120+4*40)位置繪制半徑為15的倆個(gè)白球,在

15、(120+3*40,120+4*40),(120+4*40,120+3*40)倆個(gè)位置繪制倆個(gè)黑色棋子。附表:顏色代號(hào)顏色號(hào)0115顏色黑色藍(lán)色白色符號(hào)常量BLACKBLUEWHITE2.4.6方向操作在主程序前,使用宏定義將 UP、DOWN 、LEFT 、RIGHT,做了相應(yīng)的定義,因此,在對(duì)戰(zhàn)函數(shù)當(dāng)中可以使用已經(jīng)進(jìn)行過(guò)定義的以上四個(gè)進(jìn)行操作,在操作的時(shí)候,由于所畫(huà)的棋盤(pán)的沒(méi)一個(gè)格子的大小是40*40,所以,每次鍵盤(pán)操作后,棋子移動(dòng)的距離是向相應(yīng)的方向移動(dòng)40,這樣才能保證每次落子的位置都在棋盤(pán)沒(méi)個(gè)格子的中心處,保證了操作的有效性,也使得在棋子在棋盤(pán)上移動(dòng)的過(guò)程中,如故和已經(jīng)落子的棋子有重疊

16、,當(dāng)上訪旗子移走后不會(huì)在下方棋子的周?chē)粝缕渌念伾?。每次移?dòng)后,在屏幕上顯示的都是一個(gè)以15為半徑的圓形。同時(shí),為了滿足這一點(diǎn)就要在棋子每次走棋的初始位置上有所考慮:x=120,y=80每次棋子一開(kāi)始出來(lái)的坐標(biāo),x為行坐標(biāo),y為列坐標(biāo),設(shè)定每次走棋的初始位置為(120,80),每次步增為40,以向下移動(dòng)一次為例子:向下移動(dòng)一次以后,中心位置變?yōu)椋?20,120),格子的邊際的Y坐標(biāo)為100,一個(gè)格子的大小為40*40,所以,此時(shí)格子的中心坐標(biāo)也是(120,120),倆個(gè)坐標(biāo)吻合,保證了棋子落在棋盤(pán)位置的中央。由于走棋時(shí),每個(gè)格子不能重復(fù)落子,所以,需要判斷棋手要落子的地方是不是已經(jīng)有了棋子,

17、if(y!=80&a(x-120)/40(y-120)/40!=1&a(x-120)/40(y-120)/40!=2),當(dāng)要落子的地方已經(jīng)有棋子的時(shí)候,也就是此時(shí)的棋子將要放置的位置的X和是Y坐標(biāo)已經(jīng)和以前棋手1或者是2的棋子有重復(fù),重復(fù)的時(shí)候則不能放置棋子。2.4.7落棋位置判斷對(duì)戰(zhàn)函數(shù)的主體部分,也就是倆棋手的輪換走棋。其中,T是已經(jīng)落下的棋子數(shù),當(dāng)?shù)谝粋€(gè)人走時(shí),T的值為1、3、5、7等,當(dāng)?shù)诙€(gè)人走棋時(shí)T的值為2、4、6、8等,所以,當(dāng)T%2=0的時(shí)候,也就是T的值為2、4、6、8的時(shí)候,判定是棋手2在走棋,同時(shí),將棋子設(shè)定為黑色,反之則為棋手1在走棋,棋的顏色也相應(yīng)的變?yōu)榘咨?。走棋后?/p>

18、判斷棋盤(pán)的變化情況,將棋子途徑的地方恢復(fù)為空格狀態(tài),并且開(kāi)始統(tǒng)計(jì)棋手的嘗試次數(shù),當(dāng)一個(gè)棋手在一次走棋的過(guò)程中嘗試的次數(shù)超過(guò)空格的個(gè)數(shù)的時(shí)候,取消該棋手的本次走棋,改為下個(gè)旗手走棋,也就是跳出本次循環(huán),進(jìn)行下一次的循環(huán)。如果常識(shí)的次數(shù)沒(méi)有超過(guò)空格的個(gè)數(shù),而是落棋的位置無(wú)效,則旗手可以繼續(xù)嘗試,知道到達(dá)嘗試次數(shù)。if(key=ESC)/*結(jié)束游戲*/break; if(score1+score2)=64|score1=0|score2=0)/*格子已經(jīng)占滿或一方棋子為0判斷勝負(fù)*/ playWin();/*輸出最后結(jié)果*/當(dāng)某次走棋后,接受的按鍵的值為ESC的時(shí)候,則退出游戲,當(dāng)落子后在判定棋盤(pán)的

19、變化時(shí),一方的棋子為0,或者是雙方已經(jīng)下滿60手,則執(zhí)行 playWin 函數(shù),輸出游戲的結(jié)果 。2.4.8判斷棋盤(pán)的變化和改變棋子的顏色 棋子顏色變化: aij=12?白色黑色蘭色(背景)顏色=1不為1或2=2 通過(guò)判斷數(shù)aij的值來(lái)判斷棋子的顏色,已經(jīng)定義當(dāng)aij=1的時(shí)候,棋子為白色,當(dāng)aij=2的時(shí)候棋子為黑色,當(dāng)aij的值不為1和2的時(shí)候,則此時(shí)恢復(fù)為背景。以下為走棋后改變棋子顏色的函數(shù)流程圖,根據(jù)游戲的游戲方法,在走棋后如果倆個(gè)己方棋子中間有對(duì)放棋子的話,那么對(duì)方棋子要改變?yōu)楹图悍较嗤念伾?,由于判斷相臨棋子要向上、下、左、右、左上、左下、右上、右下八個(gè)方向判斷,所以在落子后需要判

20、斷八次。計(jì)算i j 值向8個(gè)方向逐一判斷 int i,j,k,kk,ii,jj,yes; yes=0; i=(x-120)/40; /*計(jì)算數(shù)組元素的行下標(biāo)*/ j=(y-120)/40; /*計(jì)算數(shù)組元素的列下標(biāo)*/ 根據(jù)以上的式子計(jì)算數(shù)組的下標(biāo)的值,由于第一次的落子走棋位置是在(120,120),所以在判斷位置是否在棋盤(pán)的范圍內(nèi)的時(shí)候要在X、Y的值的基礎(chǔ)上分別減去120,每個(gè)格子的大小是40*40,所以,做減法后所得的值的大小除120后得到當(dāng)前格子的信息。根據(jù)黑白奇的游戲規(guī)則,在上,下,左,右,左上,左下,右上,右下的八個(gè)方向上,只要有己方的倆個(gè)棋子將對(duì)手的棋子圍住的話,則對(duì)方的棋子就要改

21、變顏色,變?yōu)楹图悍筋伾恢隆K栽谂袛嗥灞P(pán)的變化的時(shí)候,需要以新落子的位置為中心向八個(gè)方向進(jìn)行判斷,現(xiàn)在以向右判斷為例,具體解釋?zhuān)篿f(j6)/*往右邊*/ for(k=j+1;k8;k+) if(aik=aij|aik=0)/*遇到自己的棋子或空格結(jié)束*/break; if(aik!=0&k8) for(kk=j+1;kkk&kScore1+?黑色勝利,全部勝利=?白色勝利2.4.10輸出成績(jī) void PrintScore(int playnum)/*輸出成績(jī)*/ if(playnum=1)/*清除以前的成績(jī)*/ setfillstyle(SOLID_FILL,BLUE); bar(550

22、,100,640,400); setcolor(RED); settextstyle(0,0,4);/*設(shè)置文本輸出樣式*/ if(playnum=1)/*判斷輸出哪個(gè)棋手的分,在不同的位置輸出*/ sprintf(playone,%d,score1); outtextxy(550,200,playone); else sprintf(playtwo,%d,score2); outtextxy(550,300,playtwo); setcolor(0);上述程序段的功能是在判定游戲接受后,將倆人的分?jǐn)?shù)分別輸出。bar(x1,y1,x2,y2)畫(huà)一個(gè)方塊,無(wú)邊框,用當(dāng)前顏色填充。Outtextx

23、y在(X,Y)位置上輸出文本文件Settextstyle設(shè)置輸出的字型、大小和方向在統(tǒng)計(jì)完得分后,分別在(550,200)和(550,300)倆個(gè)地方輸出參與游戲的倆個(gè)人的分?jǐn)?shù)信息。2.4.11輸出最后的勝利者結(jié)果void playWin()/*輸出最后的勝利者結(jié)果*/ settextstyle(0,0,4); setcolor(12); if(score2score1)/*開(kāi)始判斷最后的結(jié)果*/ outtextxy(100,50,black win!); else if(score2score1)outtextxy(100,50,white win!); elseouttextxy(60,5

24、0,you all win!);上述代碼是根據(jù)前述的統(tǒng)計(jì)得分的信息比較以后,得出勝利者,如果第二個(gè)人的得分高,則說(shuō)明是黑子勝利,在(100,50)的位置上輸出black win,如果是得分一高,則說(shuō)明是白子獲得勝利,在(100,50)的位置上輸出“white win”,當(dāng)出現(xiàn)得分相同的情況時(shí),在(60,50)的位置上輸出“you all win!”。u2.5.源代碼#include graphics.h #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011

25、b #define ENTER 0x1c0d int a88=0,key,score1,score2; char playone3,playtwo3;void playtoplay(void);void DrawQp(void);/*畫(huà)棋盤(pán)函數(shù)*/void SetPlayColor(int x);void MoveColor(int x,int y);int QpChange(int x,int y,int z); /void DoScore(void);void PrintScore(int n); /void playWin(void);/void main(void) int gd=DE

26、TECT,gr; initgraph(&gd,&gr,c:tc); DrawQp(); playtoplay();/*人人對(duì)戰(zhàn)*/ getch(); closegraph();void DrawQp() int i,j; score1=score2=0; setbkcolor(BLUE); for(i=20;i=64-score1-score2) MoveColor(x,y); fillellipse(x,y,15,15); break; else continue; DoScore(); break; else continue; else if(key=LEFT&x120) MoveCol

27、or(x,y); fillellipse(x,y,15,15); SetPlayColor(t); x-=40; fillellipse(x,y,15,15); else if(key=RIGHT&x80) MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); x+=40; fillellipse(x,y,15,15); else if(key=UP&y120) MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); y-=40; fillellipse(x,y,15,15);

28、 else if(key=DOWN&y400) MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); y+=40; fillellipse(x,y,15,15); if(key=ESC) break; if(score1+score2)=64|score1=0|score2=0) playWin(); break; t=t%2+1; cc=0; /*endwhile*/void SetPlayColor(int t) if(t%2=1) setfillstyle(SOLID_FILL,15); else setfillstyle(SO

29、LID_FILL,8);void MoveColor(int x,int y) if(y100) setfillstyle(SOLID_FILL,BLUE); else switch(a(x-120)/40(y-120)/40) case 1: setfillstyle(SOLID_FILL,15);break; case 2: setfillstyle(SOLID_FILL,8);break; default: setfillstyle(SOLID_FILL,BLUE); int QpChange(int x,int y,int t) int i,j,k,kk,ii,jj,yes; yes=

30、0; i=(x-120)/40; j=(y-120)/40; SetPlayColor(t); if(j6)/*往右邊*/ for(k=j+1;k8;k+) if(aik=aij|aik=0) break; if(aik!=0&k8) for(kk=j+1;kkk&k1) for(k=j-1;k=0;k-) if(aik=aij|!aik) break; if(aik!=0&k=0) for(kk=j-1;kkk&k=0;kk-) aikk=aij; fillellipse(120+i*40,120+kk*40,15,15); if(kk!=j-1) yes=1; if(i6) for(k=i

31、+1;k8;k+) if(akj=aij|!akj) break; if(akj!=0&k8) for(kk=i+1;kkk&k1) for(k=i-1;k=0;k-) if(akj=aij|!akj) break; if(akj!=0&k=0) for(kk=i-1;kkk&k=0;kk-) akkj=aij; fillellipse(120+kk*40,120+j*40,15,15); if(kk!=i-1) yes=1; if(i1&j=0&kk=0&kkk&k=0;ii-,jj+) aiijj=aij; fillellipse(120+ii*40,120+jj*40,15,15); i

32、f(ii!=i-1) yes=1; if(i1) for(k=i+1,kk=j-1;k=0;k+,kk-) if(akkk=aij|!akkk) break; if(akkk!=0&k=0) for(ii=i+1,jj=j-1;iik&k1&j1) for(k=i-1,kk=j-1;k=0&kk=0;k-,kk-) if(akkk=aij|!akkk) break; if(akkk!=0&k=0&kk=0) for(ii=i-1,jj=j-1;iik&k=0;ii-,jj-) aiijj=aij; fillellipse(120+ii*40,120+jj*40,15,15); if(ii!=i

33、-1) yes=1; if(i6&j6) for(k=i+1,kk=j+1;kk8&kk8;k+,kk+) if(akkk=aij|!akkk) break; if(akkk!=0&kk8&k8) for(ii=i+1,jj=j+1;iik&k8;ii+,jj+) aiijj=aij; fillellipse(120+ii*40,120+jj*40,15,15); if(ii!=i+1) yes=1; return yes;void DoScore() int i,j; score1=score2=0; for(i=0;i8;i+) for(j=0;jscore1) outtextxy(100

34、,50,black win!); else if(score28; return(key); u2.6運(yùn)行結(jié)果u2.7心得體會(huì)經(jīng)過(guò)幾天的努力,終于快完成這次C程序課程設(shè)計(jì),雖然這幾天太累了,但感覺(jué)卻真的很好,通過(guò)這次課程設(shè)計(jì),自己對(duì)C語(yǔ)言有了新的認(rèn)識(shí),對(duì)整體的程序設(shè)計(jì)方法也有了全新的認(rèn)識(shí)。在這次課程設(shè)計(jì)中,我深深地感受到了C語(yǔ)言的博大精深,從中知道了好多之前不知的知識(shí)。比如,用C語(yǔ)言還可以制作出有圖形化,有色彩的界面,之前都只是以為C語(yǔ)言制作出來(lái)的程序的運(yùn)行界面是一片黑屏,沒(méi)有什么有趣的東西,老想著那個(gè)黑屏下能做出什么方便用戶操作的界面呢?但通過(guò)這次課程設(shè)計(jì),我清楚地得到了答案,用C語(yǔ)言做出的程序是很實(shí)用的,運(yùn)行效率是很高的。在這次課程設(shè)計(jì)過(guò)程中,遇到了很多麻煩。首先,還是由于粗心大意造成的錯(cuò)誤,比如寫(xiě)少或?qū)懚嗔艘恍┳址钩绦蚓幾g出現(xiàn)了錯(cuò)誤,這些問(wèn)題相信隨著以后實(shí)踐的加深會(huì)慢慢克服,還有一些致命的錯(cuò)誤,就是出現(xiàn)邏輯上的問(wèn)題,那些小小的錯(cuò)誤都使得程序運(yùn)行時(shí)各個(gè)功能之間調(diào)用出現(xiàn)了問(wèn)題,使程序運(yùn)行得不到預(yù)期的結(jié)果,這些錯(cuò)誤需要我們花費(fèi)較長(zhǎng)的時(shí)間去檢測(cè),查看思路存在哪些錯(cuò)誤。要克服這些困難就要求我們?cè)谠O(shè)計(jì)程序過(guò)程中要保持邏輯的思維,多做一些實(shí)踐。通過(guò)這次課程設(shè)計(jì),我學(xué)到了很多新的知識(shí)。例如,A.學(xué)會(huì)了如何利用設(shè)置繼點(diǎn)對(duì)程序進(jìn)行檢測(cè)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論