




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C語言課程設(shè)計報告五子棋院系:軟件學(xué)院專業(yè):軟件工程班級:學(xué)號:指導(dǎo)老師:王星摘 要五子棋是一種兩人對弈的純策略型棋類游戲,應(yīng)用C語言編寫程序可以在計算機上實現(xiàn)二人對弈五子棋功能。二人對弈五子棋程序由圖像生成、光標(biāo)移動與落子、判斷勝負和系統(tǒng)幫助等子程序構(gòu)成;程序中應(yīng)用了結(jié)構(gòu)體、數(shù)組、全局變量、按鍵處理和圖形編程等元素和語句。程序通過棋盤和棋子圖像生成、二人移子與落子和判斷勝負等功能的實現(xiàn),在計算機上實現(xiàn)了二人五子棋對弈。Abstract Gobang is a traditional checker-type game in which the lining up of five pieces
2、 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 selection, victory judgment and helping system. Several elements and sentences of C programming language such as s
3、tructural element, array, global variables, press processing and Graphics Programming are also applied in the program. With the accomplishment of the three main subprograms, namely, checker board and pieces construction, players step-selection and victory judgment, a whole program of gobang is estab
4、lished and gobang is available on computers.目 錄一、需求分析4二、概要設(shè)計6三、詳細設(shè)計9四、調(diào)試分析23五、用戶手冊24六、測試數(shù)據(jù)25七、附錄26第1章:需求分析1.1五子棋背景傳統(tǒng)五子棋的棋具與圍棋相同,棋子分為黑白兩色,棋盤為1515,棋子放置于棋盤線交叉點上。兩人對局,各執(zhí)一色,輪流下一子,先將橫、豎或斜線的5個或5個以上同色棋子連成不間斷的一排者為勝。 因為傳統(tǒng)五子棋在落子后不能移動或拿掉,所以也可以用紙和筆來進行游戲。1.2 程序設(shè)計本程序設(shè)計為人與人對弈,一方執(zhí)黑棋,一方執(zhí)白棋,輪流走棋,每方都試圖在游戲結(jié)束前讓自己的棋子五子相連,
5、首先實現(xiàn)五子相連的一方獲勝。程序執(zhí)行過程中,要求棋盤、棋子時時可見,并且人可以通過按鍵盤按鍵移動光標(biāo),擺放棋子。1.2.1 程序需求分析根據(jù)功能需求,將程序分為圖形顯示、玩家控制、勝負判斷和玩家計分四個模塊,以下分析各模塊的需求。圖形顯示模塊:程序開始運行時,給出歡迎及幫助界面;游戲開始后要求生成1919的棋盤圖像,并在棋盤上方提示當(dāng)前落子方棋子顏色,游戲進行過程中,要求實時顯示棋盤上已落下的棋子;分出勝負后,要求給出游戲結(jié)束畫面。玩家控制模塊:程序開始時,需玩家確定而后開始游戲;游戲過程中,兩個玩家通過不同的按鍵移動光標(biāo),選擇落子;游戲結(jié)束時,有玩家選擇是否開始新棋局。勝負判斷模塊:實時監(jiān)測
6、棋盤上棋子,一旦某一色棋子出現(xiàn)五子連線,終止游戲程序,并著色連成一線的五子,彈出該色玩家勝出界面。玩家計分模塊:一方玩家再勝利后通過對文件的操作進行計分,并輸出于計分板上。1.2.2程序流程設(shè)計根據(jù)程序需求分析結(jié)果,可以得出程序的總體結(jié)構(gòu)圖如圖1,程序總體流程圖如圖2。圖1第2章:概要設(shè)計2.1.1 各類頭文件,變量及宏定義#includestdio.h#include Conio.h#include graphics.h#include #include#define closegr closegraph/*定義1號玩家的操作鍵鍵碼*/#define W 0x1177/*上移-W*/#def
7、ine S 0x1f73/*下移-S*/#define A 0x1e61/*左移-A*/#define D 0x2064/*右移-D*/#define SP 0x3920/*落子-空格鍵*/*定義2號玩家的操作鍵鍵碼*/ #define UP 0x4800/*上移-方向鍵up*/#define DOWN 0x5000/*下移-方向鍵down*/#define LEFT 0x4b00/*左移-方向鍵left*/#define RIGHT 0x4d00/*右移-方向鍵right*/#define ENTER 0x1c0d/*落子-回車鍵Enter*/#define ESC 0x011b/*退出*/
8、#define Y 0x1579/*YES*/#define N 0x316e/*NO*/#define BACK 0xe08 /*悔棋*/#define DEL 0x5300 /*刪除比分*/2.1.2 全局變量int ch,dh,del;/*文件操作計分變量*/int k,i,j,n,t;/*控制變量*/int a2020;/*棋盤數(shù)組*/2.2 圖形模塊棋盤的顯示由游戲開始與結(jié)束部分控制,棋子以及棋子定位框的顯示與保留由玩家操控部分決定,本章只列寫棋盤與棋子的顯示程序。圖形模塊主要由以下函數(shù)組成:initgr();/*圖形界面初始化函數(shù)*/Welcome();/*歡迎界面*/Help()
9、;/*幫助界面*/board();/*畫棋盤*/white();/*畫白棋子*/black();/*畫黑棋子*/bye();/*結(jié)束界面*/green();/*連珠時著色相應(yīng)棋子*/show();drawmat();/*顯示中文的點陣圖函數(shù),以及產(chǎn)生動態(tài)變色效果*/border();/*棋子定位框函數(shù)*/delborder();/*刪除當(dāng)前位置棋子定位框函數(shù)*/p1turn();/*輪到1p時在左邊邊框畫出白棋以及輸出white turn以提示1p進行操作*/p2turn();/*輪到2p時在右邊邊框畫出黑棋以及輸出black turn以提示2p進行操作*/p1del();/*輪到2p時去除p
10、1turn();函數(shù)的效果*/p2del();/*輪到1p時去除p2turn();函數(shù)的效果*/2.3 玩家操作模塊棋子的移動與落子有鍵盤上按鍵控制,本程序選取1P按鍵為W、S、A、D和空格鍵,2P按鍵為、和回車鍵,分別代表上移、下移、左移、右移光標(biāo)和落子。在光標(biāo)移動的過程中,光標(biāo)按照玩家按鍵移動;在玩家按下落子按鍵后,程序自動調(diào)用棋子顯示子程序和判斷勝負子程序。1P、2P的落子后,程序會為落子處的數(shù)組元素賦一個特定值,用于判定勝負。玩家操作模塊主要由以下函數(shù)構(gòu)成:P1move();/*玩家1移動函數(shù)*/P2move();/*玩家2移動函數(shù)*/Back();/*悔棋函數(shù)*/2.4 勝負判斷模塊
11、勝負判斷模塊是程序的關(guān)鍵,該模塊的設(shè)計直接關(guān)系到程序的運行速率和運行結(jié)果的正確與否。本函數(shù)根據(jù)每次落子的位置,分別向上、下、左、右、左上、左下、右上、右下八個方向判斷是否有相同顏色的棋子連成五子,如果成立,游戲就結(jié)束,并顯示提示信息,否則繼續(xù)落子。以下簡析本程序流程:,由獲勝條件可以知,通過判斷上、下、左、右、斜上、斜下八個方向上是否有連續(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ù)組,如果 上、下、左、右、斜上、
12、斜下八個方向某5個連續(xù)的子所對應(yīng)的數(shù)組中元素之和等于5時,1P獲勝;當(dāng)上、下、左、右、斜上、斜下八個方向某5個連續(xù)的子所對應(yīng)的數(shù)組中元素之和等于0時,2P獲勝。勝負判斷模塊主要由以下幾個函數(shù)構(gòu)成:Win();/*主要函數(shù),判斷勝負*/P1win();/*p1勝利時調(diào)用,用于告知p1玩家勝利及詢問是否繼續(xù)*/P1win();/*p2勝利時調(diào)用,用于告知p2玩家勝利及詢問是否繼續(xù)*/restart();/*詢問是否重新開始新的一局比賽的函數(shù)*/initialization();/*初始化棋盤對應(yīng)數(shù)組所有值為6*/2.5玩家計分模塊為了能使1p和2p更直觀更便捷地看到雙方對戰(zhàn)的比分,所以做了此計分模
13、塊,因為分數(shù)不能因為重新調(diào)用main()函數(shù)就丟失了,所以采用對文件的操作,通過文件來記錄雙方的比分,這里對score1.txt和score2.txt文件進行操作,用來計1p和2p的分數(shù)。玩家計分模塊主要由以下幾個函數(shù)構(gòu)成:Point();/*整合所有文件操作的模塊*/ p1_point_input();/*1p計分文件讀取*/ p1_point_input2();/*1p計分文件寫入*/ p1_point_output();/*1p計分文件輸出*/ p2_point_input();/*2p計分文件讀取*/ p2_point_input2();/*2p計分文件寫入*/ p2_point_ou
14、tput();/*2p計分文件輸出*/delscore1() ; /*刪除當(dāng)前1p分數(shù)*/delscore2(); /*刪除當(dāng)前2p分數(shù)*/2.6 各模塊之間調(diào)用關(guān)系如下第3章:詳細設(shè)計3.1 圖形模塊initgr() /* BGI初始化 */ int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同樣效果 */ registerbgidriver(EGAVGA_driver);/* 注冊BGI驅(qū)動后可以不需要.BGI文件的支持運行 */ initgraph(&gd, &gm, ); welcome() /*歡迎界面*/ initgr() ;/*初始
15、化*/clearviewport();/*清屏*/ setcolor(2); /*設(shè)置顏色*/ settextstyle(0,0,6); /*樣式*/ outtextxy(180,180,Welcome);/*位置以及內(nèi)容*/ settextstyle(0,0,2); /*文本樣式*/ outtextxy(240,420,press any key to continue);/*位置以及內(nèi)容*/ getch();/*press any key to continue*/ help() /*幫助界面,基本操作同welcome();函數(shù)*/ initgr(); clearviewport(); s
16、etcolor(2); settextstyle(0,0,2); outtextxy(60,100,P1 move; W S A D ); outtextxy(60,120, set : space ); outtextxy(60,180,P2 move: up down left right ); outtextxy(60,200, set: Enter); outtextxy(60,240,You can press Backspace to pull back!) ; outtextxy(60,280,When you want to quit the game,); outtextxy
17、(60,300,press Esc.); outtextxy(220,440,press any key to continue); getch(); bye() /*say bye!,實現(xiàn)功能同上*/ initgr(); clearviewport(); setcolor(4) ; settextstyle(0,0,6); outtextxy(130,180,Thank you!); settextstyle(0,0,2); outtextxy(240,420,press any key to quit); getch(); board()/*畫棋盤*/ setcolor(14); /*線色
18、*/ setfillstyle(1,6); /*樣式*/ bar(120,50,520,450); /*棋盤底*/ for(k=0;k21 ;k+) line(120+20*k,50,120+20*k,450) ; /*豎線*/ line(120,50+20*k,520,50+20*k) ; /*橫線*/ setfillstyle(1,9) ; bar(540,200,620,300); /*1p2p兩邊框*/ bar(20,200,100,300); setcolor(2); settextstyle(3,0,4); outtextxy(50,210,1p); outtextxy(570,2
19、10,2p); delay(50000); show(); /*顯示動態(tài)變色效果的標(biāo)題*/ moveto(320,250); /*初始化中心位置*/ border();/*畫定位框*/ p1turn();/*p1開始落子,游戲開始*/ white() /*畫白棋*/setcolor(15);setfillstyle(1,15);circle(getx(),gety(),9);floodfill(getx(),gety(),15);black() /*畫黑棋*/setcolor(0);setfillstyle(1,0);circle(getx(),gety(),9);floodfill(getx
20、(),gety(),0);green() /*用粉色著色連珠時的棋子*/setcolor(13);setfillstyle(1,13);circle(getx(),gety(),9);floodfill(getx(),gety(),13);p1turn()/*畫左邊邊框內(nèi)白棋子*/setcolor(15);setfillstyle(1,15);circle(60,250,9);floodfill(60,250,15); settextstyle(3,0,4);outtextxy(20,280,white turn); p2turn() /*右邊邊框內(nèi)黑色棋子*/setcolor(0);setf
21、illstyle(1,0);circle(580,250,9);floodfill(580,250,0);settextstyle(3,0,4);outtextxy(540,280,black turn); p1del()/*不是1turn時候抹去左邊邊框內(nèi)棋子*/ setfillstyle(1,9) ;floodfill(60,250,9);setcolor(9);settextstyle(3,0,4);outtextxy(20,280,white turn);p2del()/*不是2turn時候抹去右邊邊框內(nèi)棋子*/setfillstyle(1,9);floodfill(580,250,9
22、) ;setcolor(9);settextstyle(3,0,4);outtextxy(540,280,black turn);border() /*畫定位框*/ setcolor(14); line(getx()-8,gety()-9,getx()-3,gety()-9); /*通過畫線函數(shù)畫出定位框*/ line(getx()+8,gety()-9,getx()+3,gety()-9); line(getx()-8,gety()-9,getx()-8,gety()-4); line(getx()+8,gety()-9,getx()+8,gety()-4); line(getx()-8,g
23、ety()+9,getx()-3,gety()+9); line(getx()+8,gety()+9,getx()+3,gety()+9); line(getx()-8,gety()+9,getx()-8,gety()+4); line(getx()+8,gety()+9,getx()+8,gety()+4);delborder() /*除去定位框*/ setcolor(6); /*本質(zhì)在于顏色覆蓋*/ line(getx()-8,gety()-9,getx()-3,gety()-9); line(getx()+8,gety()-9,getx()+3,gety()-9); line(getx(
24、)-8,gety()-9,getx()-8,gety()-4); line(getx()+8,gety()-9,getx()+8,gety()-4); line(getx()-8,gety()+9,getx()-3,gety()+9); line(getx()+8,gety()+9,getx()+3,gety()+9); line(getx()-8,gety()+9,getx()-8,gety()+4); line(getx()+8,gety()+9,getx()+8,gety()+4);drawmat(char *mat,int matsize,int x,int y,int color)/
25、*點陣圖所用標(biāo)準輸出方式*/ int i,j,k,m; m=(matsize-1)/8+1; for(j=0;jmatsize;j+) for(i=0;im;i+) for(k=0;kk) putpixel(x+i*8+k,y+j,color);show() /*動態(tài)點陣圖中文閃爍效果*/ for(n=0;n3;n+) delay(10000); drawmat(wu32K,32,240,0,3);/*輸出點陣圖的“五”字*/ delay(10000); drawmat(zi32K,32,290,0,3); delay(10000); drawmat(qi32K,32,340,0,3); de
26、lay(10000); drawmat(wu32K,32,240,0,2); delay(10000); drawmat(zi32K,32,290,0,2); delay(10000); drawmat(qi32K,32,340,0,2); 3.2 玩家操作模塊p1move() /*玩家1操作*/switch(bioskey(0) /*bioskey函數(shù)對鍵盤操作*/ case W: /*上移*/ if(gety()90)所有if語句作用在于如果落子即將溢出邊框,讓其改變位置到另一端,例如移動棋盤最上端,若繼續(xù)向上移動,則移動至棋盤最下端對應(yīng)位置 delborder();moveto(getx
27、(),430); delborder();moverel(0,-20);border();p1move(); case A: /*左移*/ if(getx()410) delborder();moveto(getx(),70); delborder();moverel(0,20);border();p1move(); case D: /*右移*/ if(getx()480) delborder();moveto(140,gety(); delborder();moverel(20,0);border();p1move(); case SP: /*落子*/ if(agetx()gety()!=6
28、)/*判定如果棋盤此處無子才能下,否則重新調(diào)用p1move函數(shù)*/ p1move();delborder(); /*去除定位框*/white();/*畫棋子*/agetx()gety()=1;/*將所在位置對應(yīng)的數(shù)組點賦值為1*/win(); /*判斷勝負*/border(); /*在新的位置畫出定位框*/對左右兩邊提示框操作,提示輪到2p進行操作,并調(diào)用p2move()函數(shù)p1del();p2turn();p2move(); case ESC: / *結(jié)束游戲*/ bye();closegraph(); exit(0); case BACK : /*悔棋操作*/ back();p1del()
29、;p2turn();p2move(); default: p1move(); P2move(); 函數(shù)與p1move();函數(shù)基本作用相同p2move() /*玩家2操作*/switch(bioskey(0) case UP: if(gety()90) delborder();moveto(getx(),430); delborder();moverel(0,-20);border();p2move(); case LEFT: if(getx()410) delborder();moveto(getx(),70);delborder();moverel(0,20);border();p2mov
30、e(); case RIGHT: if(getx()480) delborder();moveto(140,gety();delborder();moverel(20,0);border();p2move(); case ENTER: if(agetx()gety()!=6) p2move();delborder();black();agetx()gety()=0;win();border();p2del();p1turn();p1move(); default: p2move(); case ESC: bye();closegraph(); exit(0); case BACK : back
31、();p2del();p1turn();p1move(); back()/*悔棋功能*/setcolor(6);setfillstyle(1,6);circle(getx(),gety(),9);floodfill(getx(),gety(),6); /*通過將現(xiàn)有棋子覆蓋與棋盤底色相同的顏色來實現(xiàn)*/setcolor(14) ;line(getx()-9,gety(),getx()+9,gety() ;因為覆蓋棋盤顏色后對應(yīng)的棋譜線條顏色被覆蓋,所以通過畫線函數(shù)補回被覆蓋負分的線色line(getx(),gety()-9,getx(),gety()+9) ; 3.3勝負判斷模塊win()/*
32、勝負判斷主程序*/ for(i=120;i540;i=i+20) for(j=50;j470;j=j+20)/*通過循環(huán)掃描整個棋盤判定勝負*/ if(aij+ai+20j+ai+40j+ai+60j+ai+80j=5)|(aij+aij+20+aij+40+aij+60+aij+80=5)| (aij+ai+20j+20+ai+40j+40+ai+60j+60+ai+80j+80=5)|(aij+80+ai+20j+60+ai+40j+40+ai+60j+20+ai+80j=5)/*如果棋盤上任何位置數(shù)組對應(yīng)的值之和為5,則白方5子連珠*/ if(aij+ai+20j+ai+40j+ai+6
33、0j+ai+80j=5)如果五子連珠,掃描是哪一個方向有連珠,并將連珠的5個字進行動態(tài)著色,以便玩家雙方識別。 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); else if(aij+aij+20+aij+40+aij+60+aij+80=5) moveto(i,j); green();
34、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); else if(aij+ai+20j+20+ai+40j+40+ai+60j+60+ai+80j+80=5) moveto(i,j); green();delay(10000);moveto(i+20,j+20);green(); delay(10000);moveto(i+40,
35、j+40);green();delay(10000);moveto(i+60,j+60);green();delay(10000);moveto(i+80,j+80);green();delay(10000); else if(aij+80+ai+20j+60+ai+40j+40+ai+60j+20+ai+80j=5) 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
36、();delay(10000);moveto(i+80,j);green();delay(10000); delscore1();p1_point_input2();p1_point_output() ; p1win(); 此處判定如果棋盤上任何位置數(shù)組對應(yīng)的值之和為0,則黑方5子連珠 if(aij+ai+20j+ai+40j+ai+60j+ai+80j=0)|(aij+aij+20+aij+40+aij+60+aij+80=0)| (aij+ai+20j+20+ai+40j+40+ai+60j+60+ai+80j+80=0)|(aij+80+ai+20j+60+ai+40j+40+ai+60
37、j+20+ai+80j=0) if(aij+ai+20j+ai+40j+ai+60j+ai+80j=0) 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); else if(aij+aij+20+aij+40+aij+60+aij+80=0) moveto(i,j); green();del
38、ay(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); else if(aij+ai+20j+20+ai+40j+40+ai+60j+60+ai+80j+80=0) moveto(i,j); green();delay(10000);moveto(i+20,j+20);green(); delay(10000);moveto(i+40,j+4
39、0);green();delay(10000);moveto(i+60,j+60);green();delay(10000);moveto(i+80,j+80);green();delay(10000); 此處依舊是五子連珠后的著色模塊。 else if(aij+80+ai+20j+60+ai+40j+40+ai+60j+20+ai+80j=0) 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+
40、60,j+20);green();delay(10000);moveto(i+80,j);green();delay(10000); delscore2(); p2_point_input2();p2_point_output() ;p2win(); p1win()setcolor(15) ;settextstyle(0,0,2);outtextxy(10,110,1p win);此處2個函數(shù)用于1p或2p獲勝后的告知以及詢問是否開始新的一局,調(diào)用restart();函數(shù)以繼續(xù)或退出。outtextxy(240,460,Restart?(Y/N);restart();p2win()setcol
41、or(15) ;settextstyle(0,0,2); outtextxy(535,110,2p win); outtextxy(240,460,Restart?(Y/N); restart();restart()通過對鍵盤的操作,提取Y或N以確定是否開始新的一局。switch(bioskey(0)case Y: main();case N: bye();closegraph(); exit(0); default:restart(); initialization() for(i=120;i540;i+) for(j=50;j470;j+) /*循環(huán)初始化棋盤對應(yīng)的數(shù)組所在位置值為6*/
42、aij=6; 3.4 文件操作模塊point() /*用于整合所有計分的函數(shù),方便操作*/之所以做這么多函數(shù)來實現(xiàn)文件操作的計分,是因為我發(fā)現(xiàn)C語言中對文件操作似乎存在bug,如果放在一個函數(shù)中經(jīng)常出現(xiàn)文件無法正常讀取,無法正常寫入等現(xiàn)象,即使拆分成如此多函數(shù),也依舊偶爾會出現(xiàn)以上提到的一些小bug。p1_point_input();p1_point_output() ;p2_point_input();p2_point_output() ;p1_point_input() /*1p計分文件讀取*/ FILE *fp; fp=fopen(score1.txt,r);首先打開文件,然后取出里面的
43、數(shù)字賦值于ch變量,再用另一個函數(shù)打開文件并對ch進行自增操作,最后將ch寫入文件。 ch=getw(fp); fclose(fp);p1_point_input2() /*1p計分文件輸入*/ FILE *fp; fp=fopen(score1.txt,r+); ch=ch+1; putw(ch,fp); fclose(fp); p1_point_output() /*1p計分輸出*/ int i=0; char sh,score10;通過再次打開文件,循環(huán)掃描,輸出文件中的數(shù)值并設(shè)置其樣式。 FILE *fp; fp=fopen(score1.txt, r); for(; (sh=fget
44、c(fp)!=EOF; ) scorei+=sh; scorei=0; setcolor(12); settextstyle(3,0,4); outtextxy(40,320,score); outtextxy(55,340,score); fclose(fp); p2_point_input() 玩家2的計分模塊,和玩家1的相同,就不再重復(fù)介紹了。 FILE *fp; fp=fopen(score2.txt,r); dh=getw(fp); fclose(fp);p2_point_input2() FILE *fp; fp=fopen(score2.txt,r+); dh=dh+1; put
45、w(dh,fp); fclose(fp); p2_point_output() int i=0; char fh,score10; FILE *fp; fp=fopen(score2.txt, r); for(; (fh=fgetc(fp)!=EOF; ) scorei+=fh; scorei=0; setcolor(12); settextstyle(3,0,4); outtextxy(560,320,score); outtextxy(575,340,score); fclose(fp);delscore1() /*刪除當(dāng)前1p分數(shù)*/ int i=0; char sh,score10;
46、FILE *fp; fp=fopen(score1.txt, r); for(; (sh=fgetc(fp)!=EOF; ) scorei+=sh; scorei=0; setcolor(0); settextstyle(3,0,4); outtextxy(40,320,score); outtextxy(55,340,score);依舊通過循環(huán)讀取文件內(nèi)比分,然后通過顏色覆蓋從而達到分數(shù)改變功能,這么操作十分復(fù)雜,體現(xiàn)了C語言圖形編程下的不完善性。 fclose(fp);delscore2() /*刪除當(dāng)前2p分數(shù)*/ int i=0; char fh,score10; FILE *fp;
47、fp=fopen(score2.txt, r); for(; (fh=fgetc(fp)!=EOF; ) scorei+=fh; scorei=0; setcolor(0); settextstyle(3,0,4); outtextxy(560,320,score); outtextxy(575,340,score);3.5函數(shù)大致調(diào)用關(guān)系圖注:因為函數(shù)過多且調(diào)用關(guān)系過于復(fù)雜,沒辦法把所有函數(shù)的調(diào)用關(guān)系用圖表達,所以只能將大致的關(guān)系圖表示出來。第4章:調(diào)試分析主要遇到的問題已經(jīng)在詳細分析里說道,這里主要列舉一些遇到的一些小問題。4.1 圖形模塊1在圖形模塊中,因為是第一次使用,所以剛開始時對于棋盤創(chuàng)建的位置把握有些欠缺。解決方案:參考書本以及其他資料,找出最合適的位置坐標(biāo)。2. 在構(gòu)建棋子時候,發(fā)現(xiàn)C語言中似乎對顏色的處理有些錯誤,當(dāng)棋譜線的顏色為白色時,無法構(gòu)建黑色棋子,只能畫出白色棋子。解決方案:經(jīng)過不斷嘗試,確認bug存在后,改變棋譜線顏色為淡黃色,之后能夠成功畫出黑色與白色棋子。3. 在著色連珠五子的時候,依舊是顏色問題,發(fā)現(xiàn)有些顏色無法著色。解決方
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版E管材國際品牌保護合作合同
- 2025版智慧辦公大樓能源管理與節(jié)能服務(wù)合同
- 2025版特種車輛裝卸搬運與救援服務(wù)合同
- 二零二五年度環(huán)保板材銷售與供應(yīng)合同
- 二零二五年度膩子產(chǎn)品行業(yè)綠色制造與低碳發(fā)展合同
- 2025年安全生產(chǎn)監(jiān)管信息系統(tǒng)建設(shè)與運維合同
- 元旦主題活動方案范本
- 中考沖刺15天班會課件
- 臨床常見癥狀試題答案2025新版
- 搞笑爸媽借款協(xié)議圖片
- 醫(yī)療糾紛-醫(yī)療投訴登記表
- 人民醫(yī)院診斷證明書
- 燃氣有限公司特種設(shè)備安全管理制度
- 2023年株洲農(nóng)村商業(yè)銀行股份有限公司招聘員工歷年試題(??键c甄選)含答案帶詳解-1
- 嘉峪關(guān)市招聘公辦幼兒園編制外聘用制教師考試真題2022
- 塔吊基礎(chǔ)沉降觀測記錄
- 綜合日語說課講課公開課一等獎市優(yōu)質(zhì)課賽課獲獎?wù)n件
- 茶樓服務(wù)員的禮儀培訓(xùn)資料
- GB/T 5976-2006鋼絲繩夾
- GB/T 4169.3-2006塑料注射模零件第3部分:帶頭導(dǎo)套
- GB/T 12325-2008電能質(zhì)量供電電壓偏差
評論
0/150
提交評論