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

下載本文檔

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

文檔簡介

案例ー貪吃蛇游戲#defineN200#include<graphics.h>#include<stdlib.h>#include<dos.h>#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011binti,key;intscore=0;/?得分?/intgamespeed=50000;/?游戲速度自己調(diào)整?/structFoodintx;/?食物的橫坐標(biāo)ッinty;/?食物的縱坐標(biāo)ッintyes;/?判斷是否要出現(xiàn)食物的變量?/}food;/?食物的結(jié)構(gòu)體東/structSnakeintx[N];inty[N];intnode;/?蛇的節(jié)數(shù)?/intdirection;/?蛇移動(dòng)方向*/intlife;/*蛇的生命,〇活著,1死亡?/}snake;voidInit(void);/?圖形驅(qū)動(dòng)?/voidClose(void);/來圖形結(jié)束?/voidDrawK(void);/?開始畫面?/voidGameOver(void);/*結(jié)束游戲ワvoidGamePlay(void);/?玩游戲具體過程?/voidPrScore(void);/?輸出成績?/主函數(shù)?/voidmain(void)Init();/?圖形驅(qū)動(dòng)ケDrawK();/*開始畫面?/GamePlayO;/?玩游戲具體過程*/Close。;/ホ圖形結(jié)束*/}/?圖形驅(qū)動(dòng)力voidInit(void)intgd二DETECT,gm;initgraph(&gd,&gm,Hc:\\tc,');cleardevice();/?開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻?/voidDrawK(void)(/*setbkcolor(LIGHTGREEN);*/setcolor(l1);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型?/for(i=50;i<=600;i+=10)/*i!圍墻*/{rectangle(i,40,i+10,49);/?上邊?/rectangle(i,45l,i+10,46〇);/?下邊?/}for(i=40;i<=450;i+=10)(rectangle(50,i,59,i+10);/?左邊サrectangle(601,i,610,i+1〇);/?右邊冰/))/?玩游戲具體過程*/voidGamePlay(void)(randomize();/*隨機(jī)數(shù)發(fā)生器?/food.yes=l;/*l表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物?/snake,life=0;/?活著王/snake.direction=lソ?方向往右?/snake.x[0]=10〇;snake.y[〇]=100;/?蛇頭?/snake.x[l]=110;snake.y[l]=100;snake.node=2;/*Tf"數(shù)*/PrScore。;/?輸出得分?/while(l)/?可以重復(fù)玩游戲,壓ESC鍵結(jié)束*/(whiほ!kbhit。)/?在沒有按鍵的情況下,蛇自己移動(dòng)身體?/{if(food.yes==1)/*需要出現(xiàn)新食物?/(food.x=rand()%400+60;food.y=rand()%3504-60;while(food.x%10!=0)/?食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣オ可以讓蛇吃到*/food.X4-4-;while(food.y%10!=0)food.y++;ft)od.yes=0;/?畫面上有食物了?/}if(food.yes==0)/?畫面上有食物了就要顯示?/{setcolor(GREEN);rectangle(food.x,food.y,fbod.x+10,food.y-10);)for(i=snake.node-l;i>0;i-)/?蛇的每個(gè)環(huán)節(jié)往前移動(dòng),也就是貪吃蛇的關(guān)鍵算法*/(snake.x[i]=snake.x[i-l];snake,y[i]=snake.y[i-1];}4表示右,左,上,下四個(gè)方向,通過這個(gè)判斷來移動(dòng)蛇頭?/switch(snake,direction){casel:snake.x[0]+=10;break;snake.x[0]-=10;break;snake.y[0]-=10;break;snake.y[0J+=10;break;)for(i=3;i<snake.node;i++)/?從蛇的第四節(jié)開始判斷是否撞到自己了,因?yàn)樯哳^為兩節(jié),第三節(jié)不可能拐過來?/(if(snake.x[i]==snake.x[O]&&snake.y[i]==snake.y[O])(GameOver。;/?顯示失敗ッsnake.life=l;break;})if(snake.x[0]<55llsnake.x[0]>595llsnake,y[0]<55llsnake.y⑼>455)/?蛇是否撞到墻壁?/(GameOver。i/?本次游戲結(jié)束?/snake.life=l;/?蛇死?/}if(snake.life=l)/?以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始?/break;if(snake.x[0]==food.x&&snake.y[〇]==food.y)/?吃到食物以后?/(setcolor(0)ソ?把畫面上的食物東西去掉?/rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node]=-20;snake.y[snake.node]=-20;/?新的ー節(jié)先放在看不見的位置,下次循環(huán)就取前ー節(jié)的位置*/snake.node++;/?蛇的身體長ー節(jié)?/food.yes=1;/?畫面上需要出現(xiàn)新的食物?/score+=10;PrScore。;/?輸出新得分?/}setcolor(4);/?畫出蛇?/for(i=0;i<snake.node;i++)rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);delay(gamespeed);setcolor(0);/?用黑色去除蛇的的最后ー節(jié)?/rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);}/*endwhile(!kbhit)*/if(snake.life=l)/?如果蛇死就跳出循環(huán)?/break;key二bioskey(0);/?接收按鍵?/if(key==ESC)/?按ESC鍵退出?/break;elseif(key==UP&&snake.direction!=4)/?判斷是否往相反的方向移動(dòng)ッsnake.direction=3;elseif(key==RIGHT&&snake.direction!=2)snake.direction=l;elseif(key==LEFT&&snake.direction!=1)snake.direction=2;elseif(key==DOWN&&snake.direction!=3)snake.direction=4;}/*endwhile(l)*/)/?游戲結(jié)束?/voidGameOver(void)(cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,“GAMEOVER");getch();/?輸出成績?/voidPrScore(void)charstr[10];setfillstyle(SOLID_HLUYELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,Mscore:%dn,score);outtextxy(55,20,str);}/?圖形結(jié)束*/voidClose(void)(getch();closegraph();案例二計(jì)算器#include<dos,h>/*DOS接口函數(shù)*/#include<math.h> /?數(shù)學(xué)函數(shù)的定義”/#include<conio.h>/?屏幕操作函數(shù)?/#include<stdio.h>/*I/O函數(shù)?/#include<stdlib.h>/*庫函數(shù)?/#include<stdarg.h>/?變量長度參數(shù)表?/#include<graphics.h>/?圖形函數(shù)?/#include<string.h>/?字符串函數(shù)"/#include<ctype.h>/?字符操作函數(shù)*/defineUP0x48 /?光標(biāo)上移鍵ッdefineDOWN0x50/?光標(biāo)下移鍵ッdefineLEFT0x4b/?光標(biāo)左移鍵?/defineRIGHT0x4d 光標(biāo)右移鍵?/defineENTER0x0d 回車鍵ッvoid*rar; 全局變量,保存光標(biāo)圖象*/structpalettetypepalette;/?使用調(diào)色板信息?/intGraphDriver;圖形設(shè)備驅(qū)動(dòng)?/intGraphMode;/?圖形模式值*/intErrorCode; /?錯(cuò)誤代碼?/intMaxColors; /*可用顏色的最大數(shù)值*/intMaxX,MaxY;/東屏幕的最大分辨率?/doubleAspectRatio;/?屏幕的像素比?/voiddrawboder(void);/?畫邊框函數(shù)?/voidinitialize(void);/*初始化函數(shù)*/voidcomputer(void);/?計(jì)算器計(jì)算函數(shù)?/voidchangetextstyle(intfont,intdirection,intcharsize);/?改變文本樣式函數(shù)?/voidmwindow(char*header);/?窗口函數(shù)?/intspecialkey(void); 獲取特殊鍵函數(shù)*/intarTOw();/*設(shè)置箭頭光標(biāo)函數(shù)*//?主函數(shù)?/intmain()(initialize。;/*設(shè)置系統(tǒng)進(jìn)入圖形模式*/computer。; /*運(yùn)行計(jì)算器?/closegr叩h。;/*系統(tǒng)關(guān)閉圖形模式返回文本模式?/retum(O); /*結(jié)束程序?/)/?設(shè)置系統(tǒng)進(jìn)入圖形模式サvoidinitialize(void)(intxasp,yasp;/?用于讀x和y方向縱橫比?/GraphDriver=DETECT;/*自動(dòng)檢測顯示器?/initgraph(&GraphDriver,&GraphMode,"");/?初始化圖形系統(tǒng)?/ErrorCode=graphresult。;/*讀初始化結(jié)果?/if(ErrorCode!=grOk)/東如果初始化時(shí)出現(xiàn)錯(cuò)誤*/(printf("GraphicsSystemError:%s\nu,grapherrormsg(ErrorCode));/?顯示錯(cuò)誤代碼刃exit(1);/?退出?/)getpalette(&palette); /?讀面板信息?/MaxColors=getmaxcolor。+1;/?讀取顏色的最大值?/MaxX=getmaxx。;/?讀屏幕尺寸 木/MaxY=getmaxy。;/?讀屏幕尺寸 ?/getaspectratio(&xasp,&yasp);/?拷貝縱橫比到變量中*/AspectRatio=(double)xasp/(double)yasp;/I{1計(jì)算縱橫比值?/)/?計(jì)算器函數(shù)*/voidcomputer(void)(structviewporttypevp;/?定義視ロ類型變量?/intcolor,height,width;intx,y,xO,yO,i,j,v,m,n,act,flag=l;floatnum1=0,num2=0,result;/?操作數(shù)和計(jì)算結(jié)果變量?/charcnum[5],str2[20]={"M},c,temp[20]={,,u};charstr1[]=H1230.456+-789*/Qc=A%";/*定義字符串在按鈕圖形上顯示的符號(hào)?/mwindow("Calculator'1);/?顯示主窗口?/color=7; /*設(shè)置灰顏色值ワgetviewsettings(&vp); /*讀取當(dāng)前窗口的大小?/width=(vp.right+l)/10;/*設(shè)置按鈕寬度?/height=(vp.bottom-10)/10;/?設(shè)置按鈕高度サx=width/2; /*設(shè)置x的坐標(biāo)值*/y=height/2;/*設(shè)置y的坐標(biāo)值?/setfiilstyle(SOLID_FlLL,color+3);bar(x+width*2,y,x+7*width,y+height);/?畫一個(gè)二維矩形條顯示運(yùn)算數(shù)和結(jié)果*/setcolor(color+3);/*設(shè)置淡綠顏色邊框線ッrectangle(x+width*2,y,x+7*width,y+height);/?畫一個(gè)矩形邊框線?/setcolor(RED);/*設(shè)置顏色為紅色?/outtextxy(x+3*width,y+height/2,"〇.");/*輸出字符串”〇."*/x=2*width-width/2; /*設(shè)置x的坐標(biāo)值?/y=2*height+height/2;/*設(shè)置y的坐標(biāo)值?/for(j=0;j<4;++j)/*畫按鈕キ/(for(i=0;i<5;++i){setfillstyle(SOLID_FILL,color);setcolor(RED);bar(x,y,x+width,y+height);/?畫一個(gè)矩形條*/rectangle(x,y,x+width,y+height);sprintf(str2,“%c”,strl『5+i]);パ將字符保存到str2中*/outtextxy(x+(width/2),y+height/2,str2);x=x+width+(width/2);/*移動(dòng)列坐標(biāo)*/}y+=(height/2)*3; /*移動(dòng)行坐標(biāo)ッx=2*width-width/2;/?復(fù)位列坐標(biāo)?/)x0=2*width;yO=3*height;x=x0;y=yO;gotoxy(x,y);/*移動(dòng)光標(biāo)到x,y位置*/arrow();/*顯示光標(biāo)?/putimage(x,y,rar,XOR_PUT);m=0;n=0;strcpy(str2,MM);/*設(shè)置str2為空串?/while((v=specialkey())!=45)當(dāng)壓下Alt+x鍵結(jié)束程序,否則執(zhí)行下面的循環(huán)?/while((v=specialkey())!=ENTER)/?當(dāng)壓下鍵不是回車時(shí)?/pulimage(x,y,rar,XOR_PUT);/?顯示光標(biāo)圖象?/if(v==RIGHT) /?右移箭頭時(shí)新位置計(jì)算?/if(x>=x0+6*width)/?如果右移,移到尾,則移動(dòng)到最左邊字符位置*/{x=xO;m=0;}else(x=x+width+width/2;m++;レ?否則,右移到下ー個(gè)字符位置?/if(v=LEFT)左移箭頭時(shí)新位置計(jì)算?/if(x<=xO){x=xOi-6*width;m=4;レ?如果移到頭,再左移,則移動(dòng)到最右邊字符位置*/else{x=x-width-width/2;m-;レ?否則,左移到前ー個(gè)字符位置*/if(v==UP)/?上移箭頭時(shí)新位置計(jì)算?/if(y<=yO){y=y0+4*height+height/2;n=3;}/?如果移到頭,再上移,則移動(dòng)到最下邊字符位置?/else(y=y-height-height/2;n--;レ?否則,移到上邊ー個(gè)字符位置?/if(v=DOWN)/?下移箭頭時(shí)新位置計(jì)算?/if(y>=7*height)(y=yO;n=0;}/*如果移到尾,再下移,則移動(dòng)到最上邊字符位置?/elsey=y+height+height/2;n++;}/求否則,移到下邊ー個(gè)字符位置*/putimage(x,y,rar,XOR_PUT);/*在新的位置顯示光標(biāo)箭頭?/)c=strl[n*5+m];/*將字符保存到變量c中?/if(isdigit(c)llc==7)/?判斷是否是數(shù)字或小數(shù)點(diǎn)?/(if(flag==-I)/?如果標(biāo)志為表明為負(fù)數(shù)?/(strcpy(str2,”*;/?將負(fù)號(hào)連接到字符串中?/flag=l;}萍將標(biāo)志值恢復(fù)為1*/sprintf(temp,"%c”,c);/*將字符保存到字符串變量temp中*/strcat(str2,temp);/*將temp中的字符串連接到str2屮*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,str2);/?顯示字符串?/}if(c='+r)(numl=atof(str2);/*將第一個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)?/strcpy(str2,"");/*將str2清空?/act=l;/?做計(jì)算加法標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);bar(2*widthswidth/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"〇,");/?顯示字符串?/)(:心血!^(5注2,””)==0)/?如果$仃2為空,說明是負(fù)號(hào),而不是減號(hào)?/flag=-l;/*設(shè)置負(fù)數(shù)標(biāo)志?/else{numl=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)?/strcpy(str2,"”);/?將str2清空?/act=2;/*做計(jì)算減法標(biāo)志值?/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2/5*widlh/2,3*height/2);/?畫矩形?/outtextxy(5*width,heightJO.");/?顯示字符串?/if(cニニ‘*')num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"”);/?將str2清空?/act=3;/*做計(jì)算乘法標(biāo)志值東/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,heighビ'〇.”);/?顯示字符串?/)if(c==7')(num1二atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2ド);/*將str2清空?/act=4;/*做計(jì)算除法標(biāo)志值字/setfillstyle(SOLlD=FlLL?color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,heigh"'〇.");/?顯示字符串?/}if(cニニ'ベ)(numl二atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"”);/?將str2清空?/act=5;/?做計(jì)算乘方標(biāo)志值?/set「llstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);畫矩形?/outtextxy(5*width,heighビ'〇.”);/?顯示字符串5t7)if(c=='%r)numl=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2;'");/*將str2清空ッact=6;/?做計(jì)算模運(yùn)算乘方標(biāo)志值守/setfnistyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充ウbar(2*widthswidth/2,height/2,15*width/2,3*height/2);一畫矩形?/outtextxy(5*width,heighL"〇.”);/?顯示字符串?/}if(cニニ'=')(num2=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)?/switch(act)/?根據(jù)運(yùn)算符號(hào)計(jì)算*/(casel:result二numl+num2;break;/?做加法?/case2:result二numl-num2;break;做減法?/case3:result=numPnum2;break;/*做乘法?/case4:起01由二11111?1/。111112カ代公;/?做除法?/case5:result=pow(num1,num2);break;/*?x的y次方ッcase6:優(yōu)$1111二£〇1〇<1(11111111中!11112);1)但a1<;/*做模運(yùn)算?/)setfillstyle(SOLID.FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/?覆蓋結(jié)果區(qū)?/sprintf(temp,"%f”,result);/*將結(jié)果保存到temp中?/outtextxy(5*width,height,temp);/*顯示結(jié)果?/)if(c==,c,)(num1=0;/*將兩個(gè)操作數(shù)復(fù)位0,符號(hào)標(biāo)志為1*/num2=0;flag=l;strcpy(str2,””);/*將str2清空?/setfillstyle(SOLID_FILUcolor+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆蓋結(jié)果區(qū)*/outtextxy(5*width,height,“〇.");/?顯示字符串?/)if(c=='Q>xit(O);/*如果選擇了q回車,結(jié)束計(jì)算程序?/)putimage(x,y,rar,XOR_PUT);/*在退出之前消去一光標(biāo)箭頭?/return;/*返回?/)/?窗U函數(shù)?/voidmwindow(char*header)(intheight;cleardeviceO; /*清除圖形屏幕?/setcolor(MaxColors-1); /*設(shè)置當(dāng)前顏色為白色?/setviewport(20,20,MaxX/2,MaxY/2,1);/?設(shè)置視口大小?/height=textheight(MH"); /?讀取基本文本大小*/settextstyle(DEFAULT.FONT,HORIZ_DIR,1);/*設(shè)置文本樣式?/settextjustify(CENTER_TEXT,TOP_TEXT);/*設(shè)置字符排列方式*/outtextxy(MaxX/4,2,header);/*輸出標(biāo)題*/setviewport(20,20+height+4,MaxX/2+4,MaxY/2+20,1);/?設(shè)置視口大小?/drawboder。;/?畫邊框?/)voiddrawboder(void) 畫邊框?/(structviewporttypevp;/?定義視ロ類型變量?/setcolor(MaxColors-1); /*設(shè)置當(dāng)前顏色為白色?/setlinestyle(SOLID?LINE,0,NORM_WIDTH);/*設(shè)置畫線方式*/getviewsettings(&vp);/*將當(dāng)前視ロ信息裝入vp所指的結(jié)構(gòu)中?/rectangle(0,0,vp.right-vp.left,vp.bottom-vp.top);/?畫矩形邊框?/)/?設(shè)計(jì)鼠標(biāo)圖形函數(shù)*/intarrow()(intsize;intrawロ={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4};/?定義多邊形坐標(biāo)ッsetfillstyle(SOLID_FILL⑵;設(shè)置填充模式?/fillpoly(8traw); /?畫出一光標(biāo)箭頭?/size=imagesize(4,4,16,16);/?測試圖象大小?/rar=malloc(size);/*分配內(nèi)存區(qū)域?/getimage(4,4,16,16,rar);/*存放光標(biāo)箭頭圖象來/putimage(4,4,rar,XOR_PUT);/K消去光標(biāo)箭頭圖象*/return0;)/*按鍵函數(shù)*/intspecialkey(void)(intkey;while(bioskey(1)==0);/*等待鍵盤輸入*/key=bioskey(0);/*鍵盤輸入*/key=key&Oxff?key&0xff:key?8;/*只取特殊鍵的掃描值,其余為0?/retum(key); /*返回鍵值*/案例三黑白棋游戲include"graphics.e/?圖形系統(tǒng)頭文件?/defineLEFT0x4b00/?光標(biāo)左鍵值*/defineRIGHT0x4d00/*光標(biāo)右鍵值?/defineDOWN0x5000光標(biāo)下鍵值?/defineUP0x4800/?光標(biāo)上鍵值?/defineESC0x011b/*ESC鍵值*/defineENTEROx1cOd/?回車鍵值?/inta[8][8]={〇},key,scorel,score2;/*具體分?jǐn)?shù)以及按鍵與存放棋子的變量?/charplayone[3],playtwo[3];/?兩個(gè)人的得分轉(zhuǎn)換成字符串輸出?/voidplaytoplay(void)?人人對(duì)戰(zhàn)函數(shù)*/voidDrawQp(void);/?畫棋盤函數(shù)?/voidSetPlayColor(intx);/*設(shè)置棋子第一次的顏色?/voidMoveColor(intx,inty);/*恢復(fù)原來棋盤狀態(tài)?/intQpChange(intx,inty,intz);/?判斷棋盤的變化?/voidDoScore(void);/?處理分?jǐn)?shù)?/voidPrintScore(intn);/*輸出成績?/voidplayWin(void);/*輸出勝利者信息?//******主函數(shù)*********/voidmain(void)(intgd=DETECT,gr;initgraph(&gd,&grjc:\\tc");/?初始化圖形系統(tǒng)サDrawQp。;/?畫棋盤?/playtoplay()ソ?人人對(duì)戰(zhàn)?/getch();closegraph〇;/?關(guān)閉圖形系統(tǒng)?/)voidDrawQp。/?畫棋盤?/(inti,j;score1=score2=0;/?棋手ー1開始得分都為〇?/setbkcolor(BLUE);for(i=100;i<=420;i-b=40){line(100上420,i);/?畫水平線號(hào)line(i,100.i,420);/?畫垂直線?/}setcolor(〇);/?取消圓周圍的一圈東西?/setHnstyle(SOLID_FILL/5);/?白色實(shí)體填充模式?/fillellipse(5OO,2OO,15,15);/*在顯示得分的位置畫棋?/setfnistyle(SOLID_FILL,8);/東黑色實(shí)體填充模式?/fillellipse(500,300,15,15);a[3][3]=a[4][4]=l;/*初始兩個(gè)黑棋?/a[3][4]=a[4][3]=2;/?初始兩個(gè)白棋?/setfillstyle(SOLID_FILL,WHITE);fillellipse(12O+3*40,120+3*40,15,15);fillellipse(l20+4*40,120+4*40,15,15);setfillstyle(SOLlD_HLL,8);fillellipse(l20+3*40,120+4*40,15,15);fillellipse(120+4*40,120+3*40,15,15);scorel=score2=2;/歩有棋后改變分?jǐn)?shù)*/DoScore。;/*輸出開始分?jǐn)?shù)*/)voidplaytoplay〇/?人人對(duì)戰(zhàn)?/(intx,y,t=l,i,j,cc=O;while(l)/?換棋手走棋?/(x=120,y=80;/*每次棋子ー開始出來的坐標(biāo),x為行坐標(biāo),y為列坐標(biāo)?/while(1)/*具體ー?個(gè)棋手走棋的過程?/PrintScore(l);/*輸出棋手1的成績サPrintScore(2);/*輸出棋手2的成績?/SetPlayColo『(t);/*t變量是用來判斷棋手所執(zhí)棋子的顏色?/fillellipse(x,y,15,15);key=bioskey(0);/*接收按鍵?/if(key=ESC)/?跳出游戲?/break;elseif(key=ENTER)/?如果按鍵確定就可以跳出循環(huán)?/(if(y[=80&&a[(x-l20)/40][(y-120)/40]!=1&&a[(x-120)/40][(y-120)/40]!=2)/?如果落子位置沒有棋子?/(if(t%2=l)ド如果是棋手1移動(dòng)ッa[(x-120)/40][(y-120)/40]=l;else/?否則棋手2移動(dòng)?/a[(x-120)/40][(y-120)/40]=2;if(!QpChange(x,y,t))/?落子后判斷棋盤的變化?/(a[(x?l20)/40][(y-120)/40]二〇;/?恢復(fù)空格狀態(tài)?/cc++;/?開始統(tǒng)計(jì)嘗試次數(shù)?/if(cc>=64-score1-score2)/?如果嘗試超過空格數(shù)則停步率/{MoveColor(x,y);fillellipse(x,y,15,15);break;)elsecontinue;/*如果按鍵無效*/}DoScore。;/?分?jǐn)?shù)的改變リbreak;/?棋盤變化了,則輪對(duì)方走棋?/)else/*已經(jīng)有棋子就繼續(xù)按鍵?/continue;)else/?四個(gè)方向按鍵的判斷*/if(key=LEFT&&x>120)/?左方向鍵?/(MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse(x,y,15,15);elseif(key=RlGHT&&xv400&&y>80)/?右方向鍵?/(MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);)elseif(key=UP&&y>120)/?上方向鍵刃(MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);}elseif(key=DOWN&&yv40())/?下方向鍵?/(MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y+=40;fillellipse(x,y,15,15);})if(keyニニESC)/?結(jié)束游戲?/break;if((scorel+score2)==64llscorelニニ0llscore2ニニ〇)/?格子已經(jīng)占滿或一方棋子為〇判斷勝負(fù)?/(playWin();/?輸出最后結(jié)果?/break;}I二t%2+l;/*一方走后,改變棋子顏色即輪對(duì)方走?/cc=O;/?計(jì)數(shù)值恢復(fù)為〇?/}/*endwhile*/)voidSetPlayColor(intt)/?設(shè)置棋子顏色?/setfillstyle(SOLID_FILL,15);/?白色?/elsesetfillstyle(SOLID一FILL,8);/?灰色?/)voidMoveColor(intx,inty)/?走了一步后恢復(fù)原來格子的狀態(tài)?/(if(y<100)/?如果是從起點(diǎn)出發(fā)就恢復(fù)藍(lán)色?/setfillstyle(SOLID_FILL.BLUE);eke/?其他情況如果是1就恢復(fù)白色棋子,2恢復(fù)黑色棋子,或恢復(fù)藍(lán)色棋盤?/switch(a[(x-l20)/40][(y-120)/40]){setfillstyle(SOLID_FILL,15);break;/?白色?/setfillstyle(SOLID_FILL,8);break;/?黑色?/default:861班風(fēng)丫-00し!1>_1711^ロI1;£);/?藍(lán)色?/))intQpChange(intx,inty,intt)/?判斷棋盤的變化?/(inti,j,k,kk,ii,jj,yes;yes=0;i=(x-l20)/40:/?計(jì)算數(shù)組元素的行下標(biāo)?/j=(y-120)/40;/?計(jì)算數(shù)組元素的列下標(biāo)?/SetPlayColor(t);/*設(shè)置棋子變化的顏色?//?開始往8個(gè)方向判斷變化?/if(j<6)/?往右邊?/{for(k=j+l;k<8;k++)if(a[i][k]==a[i][j]間i][k]==0)/?遇到自己的棋子或空格結(jié)束?/break;if(a[i][k]!=0&&k<8)(for(kk=j+l;kk<k&&k<8;kk++)/?判斷右邊?/{a[i][kk]=a[i][j];/*改變棋子顏色?/fillellipse(l20+i*40,l20+kk*40,15,l5);)if(kk!=j+l)/?條件成立則有棋子改變過顏色?/yes=l;)for(k=j-l;k>=O;k)if(a[i][k]=a[i]U]ll!a[i][k])break;if(a[i][k]!=0&&k>=0)(for(kk=j-l;kk>k&&k>=0;kk—)(a[i][kk]=a[i]|j];fillellipse(l20+i*40,l20+kk*40,15,15);)if(kk!=j-l)yes=l;))if(i<6)/?判斷下邊?/{for(k=i+l;k<8;k++)if(a[k]U]=a[i]U]ll!a[k]U])break;if(a[k]|j]!=0&&k<8)(for(kk=i+1;kk<k&&k<8;kk++){a[kk]UJ=a[i]U];fillellipse(120+kk*40,l20+j*40,15,15);)if(kk!=i+l)yes=l;))if(i>l)/?判斷上邊?/{for(k=i-l;k>=0;k-)if(a[k][j]=a[i][j]ll!a[k]U])break;if(a[k]|j]!=0&&k>=0)(for(kk=i-l;kk>k&&k>=O;kk—)(a[kk][j]=a[i]U];fillellipse(l20+kk*40,l20+j*40,l5,15);)yes=l;)}if(i>l&&jv6)/?右上?/(for(k=i-l,kk=j+1;k>=0&&kkv8;k-,kk++)if(a|k|[kk]==a[ilUIH!a[k||kk])break;if(a[k][kk]&&k>=0&&kk<8){for(ii=i-l,jj=j+l;ii>k&&k>=O;ii—,jj++)(a[ii][jj]=a[i]|j];fillellipse(l20+ii*40,l20+jj*40,15,l5);)if(ii!=i-l)yes=l;)}if(i<6&&j>l)/?左下?/{for(k=i+l,kk=j-l;k<8&&kk>=0;k++,kk-)if(a[k][kk]=a[i][j]ll!a[k][kk])break;if(a[k||kk]!=0&&k<8&&kk>=0){for(ii=i+l,jj=j-l;ii<k&&k<8;ii++,jj-){a[ii]Qj]=a[i][j];fillellipse(l20+ii*40,l20+jj*40,l5,15);1if(ii!=i+l)yes=l;)}左上?/(for(k=i-1,kk=j-1;k>=O&&kk>=O;k—,kk—)if(a|k|[kk]==a[i||jlll!a[k||kk])break;if(a[k][kk]!=0&&k>=0&&kk>=0){for(ii=i-l,jj=j-l;ii>k&&k>=O;ii—,jj—)a[ii][jj]=a[i]U];fillellipse(l20+ii*40,l20+jj*40,15,15);yes=l;)}if(i<6&&j<6)/?右下?/(for(k=i+l,kk=j+1;kk<8&&kk<8;k4-4-,kk++)if(a[k][kk]==a[i][j]ll!a[k][kk])break;if(a[k]|kk|!=0&&kk<8&&k<8){for(ii=i+1jj=j+1;ii<k&&k<8;ii++,jj++)(a[ii]|jj]=a[i]U];fiIlellipse(12O+iiMO,12O+jjMO,15,15);}if(ii!=i+l)yes=l;)}「etumyes;/?返回是否改變過棋子顏色的標(biāo)記ッ)voidDoScore。/?處理分?jǐn)?shù)?/(inti,j;scorel=score2=0;/*重新開始計(jì)分?jǐn)?shù)?/forti=0;i<8;i++)for(j=0;j<8;j++)分別統(tǒng)計(jì)兩個(gè)人的分?jǐn)?shù)?/score1++;elseif(a[i][j]==2)score2++;)voidPrintScore(intplaynum)/?輸出成績?/(if(playnum==1)/*清除以前的成績キ/{setfillstyle(SOLID_FILUBLUE);bar(550,100,640,400);setcolor(RED);settextstyle(0,0,4);/*設(shè)置文本輸出樣式*/if(playnum===1)/?判斷輸出哪個(gè)棋手的分,在不同的位置輸出?/(sprintf(playoneJ%d”,score1);outtextxy(550,2(X),playone);}else(sprintf(playtwo,u%dn,score2);〇uttextxy(550,300,playtwo);}setcolor(O);)voidplayWinO/*輸出最后的勝利者結(jié)果*/(settextstyle(0,0,4);setcolor(12);if(score2>score1)/?開始判斷最后的結(jié)果?/outtextxy(100,50,"blackwin!”);elseif(score2<scorel)outtextxy(100,50,"whitewin!");elseouttextxy(60,50,Myouallwin!");案例四迷宮問題#include〈graphics.h>#include<stdlib.h>#inckide<stdio.h>#include<conio.h>#include<dos.h>#deHneN2〇/?迷宮的大小,可改變*/intoldmap[N][N];/?遞歸用的數(shù)組,用全局變量節(jié)約時(shí)間?/intyes=0;/*yes是判斷是否找到路的標(biāo)志」找到,〇沒找到?/intway[100][2],wayn=0;/*way數(shù)組是顯示路線用的,wayn是統(tǒng)計(jì)走了幾個(gè)格子?/voidInit(void);/?圖形初始化?/voidClose(void);/?圖形關(guān)閉voidDrawPeople(int*x,int*yjntn);/?畫人工探索物圖?/voidPeopleFind(int(*x)[N]);/*人工探索?/voidWayCopy(int(*x)[N],int(*y)[N]);/*為了8個(gè)方向的遞歸,把1日迷宮圖拷貝給新數(shù)組ッintFindWay(int(*x)[N],inti,intj);/*自動(dòng)探索函數(shù)?/voidMapRand(int(*x)[N]);//隨機(jī)生成迷宮函數(shù)*/voidPrMap(int(*x)[N]);/*輸出迷宮圖函數(shù)字/voidResult(void);/?輸出結(jié)果處理*/voidFind(void);/?成功處理?/voidNotFind(void);/?失敗處理?/voidmain(void)/東主函數(shù)?/(intmap[N][N];/*迷宮數(shù)組りcharch;clrscr();printf(AnPleaseselecthand(l)elseauto\n");/?選擇探索方式?/scanf("%c",&ch);Init();/*初始化求/MapRand(map);/?生成迷宮?/PrMap(map);/*顯示迷宮圖?/if(ch==T)PeopleFind(map);/?人工探索?/elseFindWay(map』,l);/*系統(tǒng)自動(dòng)從下標(biāo)1,I的地方開始探索*/Result。;/?輸出結(jié)果?/Close。;)voidInit(void)/?圖形初始化?/(intgd二DETECT,gm;initgraph(&gd,&gmjc:\\tc”);IvoidDrawPeople(int*x,int*y,intn)/?畫人工控制圖ッ{/?如果將以下兩句注釋掉,則顯示人工走過的路徑,*/setfillstyle(SOLID_FILL,WHITE);/*設(shè)置白色實(shí)體填充樣式?/bar(100+(*y)*15?6,50+(;tix)*15-6,100+(*y)*15+6,50+(*x)*15+6);/*恢復(fù)原通路?/switch(n)/?判斷x,y的變化,8個(gè)方向的變化?/((*x)—;break;/?上水/(*x)—;(*y)++;breakソ?右上?/(*y)++;break;/?右?/(*x)++;(*y)++;break;/?右下?/(*x)++;break;/?下?/(*x)++;(*y)--;break;/?左下?/(*y)—;break;/?左?/(*x)—;(*y)—;break;/?左上?/setfillstyle(SOLID_FILエ,RED"?新位置顯示探索物?/bar(lOO+(*y)*l5-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);voidPeopleFind(int(*map)[N])/?人工手動(dòng)查找?/(intx,y;charc=0;/*接收按鍵的變量*/x=y=l;/?人工查找的初始位置*/setcolor(l1);line(500,200,550,200);outtextxy(570J97;,dn);line(500,200,450,200);outtextxy(430J97,MaM);line(500,200,500,150);outtextxy(497,130,MwH);line(500,200,500,250);outtextxy(497,270,"xM);line(500,200,450,150);outtextxy(445,l30,"q");line(500,200,550,150);outtextxy(550,130,”e");line(500,200,450,250);outtextxy(445,270,nzu);line(500,200,550,250);outtextxy(550,270,"c");/*以上是畫8個(gè)方向的控制介紹?/setcolor(YELLOW);outtextxy(420,290,"Press^nter'toend");/?壓回車鍵結(jié)束*/setfillstyle(SOLID_FILL,RED);bar(100+y*15-6,5()+x*15-6,100+y*15+6,50+x*15+6);/?入口位置顯示?/while(c!=13)/?如果按下的不是回車鍵ッ(c二getch();/?接收字符后開始各個(gè)方向的探索?/if(c==*wr&&map[x-1][y]!=1)DrawPeople(&x,&y,1);/*_h*/elseif(c==,e,&&map[x-l][y+1]!=1)DrawPeople(&x,&y,2);/?右上?/elseif(c=='d'&&map[x][y+1]!=1)DrawPeople(&x,&y,3);/?右?/elseif(c==,c,&&map[x+1][y+1]!=1)DrawPeople(&x,&y,4);/*右下*/elseif(c==,x,&&map[x+l][y]!=l)DrawPeople(&x,&y,5);/?下?/elseif(c='z'&&map[x+l][y-l]!=l)DrawPeople(&x,&y,6);/?左下?/elseif(c='a'&&mq)[x][y-l]!=1)DrawPeople(&x,&y,7);/?左?/elseif(c=='q'&&map[x-1][y-1]!=1)DrawPeople(&x,&y,8);/?左上?/}setfillstyle(SOLID一FILLWHITE);/?消去紅色探索物,恢復(fù)原迷宮圖?/bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);if(x==N-2&&y==N-2)/?人工控制戰(zhàn)成功的話?/yes=l;/?如果成功標(biāo)志為ド/)voidWayCopy(int(*oldmap)[N],int(*map)[N])/?拷貝迷宮數(shù)組?/{intij;for(i=0;i<N;i++)for(j=0;j<N;j++)oldmap[i][j]=map[i][j];)intFindWay(int(*map)[N],inti,intj)/?遞歸找路?/{if(i=N-2&&j==N-2)/?走到出U?/{yes=l;/?標(biāo)志為1,表示成功?/return;}map[i][j]=l;/*走過的地方變?yōu)楗?WayCopy(oldmap,map);/?拷貝迷宮圖?/if(oldmap[i+1][j+l]==0&&!yes)/?判斷右下方是否可走*/{FindWay(oldmap,i+l,j+l);if(yes)/?如果到達(dá)出口了,再把值賦給顯示路線的way數(shù)組,也正是這個(gè)原因,所以具體路線是從最后開始保存?/{way[wayn][O]=i;way[wayn++][l]=j;return;WayCopy(oldmap,map);if(oldmap[i+1][j]==0&&!yes)/?判斷ド方是否可以走,如果標(biāo)志yes已經(jīng)是1也不用找下去了*/FindWay(oldmap,i+l,j);if(yes){way[wayn][O]=i;way|wayn++|[1]=j;return;1}WayCopy(oldmap,map);if(oldmap[i][j+l]==0&&!yes)/?判斷右方是否可以走*/(FindWay(oldmap,i,j+1);if(yes)(way[wayn][O]=i;way[wayn++][l]=g;return;))WayCopy(oldmap,map);if(oldmap[i?l皿=0&&!yes)/?判斷上方是否可以走*/(FindWay(oldmap,i-1,j);if(yes)(way[wayn][O]=i;way[wayn++][1]=j;return;)}WayCopy(oldmap,map);if(oldmap[i?l][j+l]==0&&!yes)/?判斷右上方是否可以走*/FindWay(oldmap,i-l,j+l);if(yes){way|wayn][O|=i;way[wayn++][1]=j;return;}WayCopy(oldmap,map);if(oldmap|i+l]|j"l==O&&!yes)/?判斷左下方是否可以走*/(FindWay(oldmapJ+l,j-1);if(yes){way[wayn][O]=i;way|wayn++|[1]=j;return;)}WayCopy(oldmap,map);if(oldmap[i][j-l]=0&&!yes)/?判斷左方是否可以走*/(FindWay(oldmap,i,j-1);if(yes)(way[wayn][O]=i;way[wayn++][l]=g;return;))WayCopy(oldmap,map);if(oldmap[i-l][j-l]==0&&!yes)/?判斷左上方是否可以走?/(FindWay(oldmap,i-1,j-1);if(yes)(way[wayn][O]=i;way[wayn++][1]=j;return;)}return;)voidMapRand(int(*m叩)[N])/?開始的隨機(jī)迷宮圖?/(inti,j;cleardevice。;/?清屏?/randomize。;/?隨機(jī)數(shù)發(fā)生器?/for(i=0;i<N;i++){for(j=0;j<N;j++)if(i==0||i=N-1llj==0巾==N-1)/?最タト面一圈為墻壁?/map[i皿=1;elseif(i==l&&j==llli==N-2&&jニニ№2)/?出發(fā)點(diǎn)與終點(diǎn)表示為可走的ウmap[i]|j]=O;else二random(2);/*其它的隨機(jī)生成〇或1*/voidPrMap(iniドmap)[N])/*輸出迷宮圖ワ(intij;for(i=0;i<N;i++)for(j=0;j<N;j++)if(map[i][j]=O)(setfillstyIe(SOLID一FILL,WHITE);/?白色為可走的路?/bar(100+j*15-6,50+i*15-6,100+j*15+6.50+i*15+6);)else(setfillstyle(SOLID_FILL,BLUE);/?藍(lán)色為墻壁?/bar(100+j*15-6,50+i*15?6,lOQ+j*15+6,50+i*15+6);voidFind(void)/?找到通路?/(inti;setfillstyle(SOLID_FILL,RED);/?紅色輸出走的具體路線ッwayn—;for(i二wayn;i>ニ〇;1一)(bar(l(X)+way[i][l]*l5-6,50+way[i][〇]*15-6,100+way[i][1]*15+6,50+way[i][0]*15+6);sleep(l)ソ?控制顯示時(shí)間?/)bar(100+(N-2)*15-6,50+(N-2)*15-6,100+(N-2)*15+6,50+(N-2)*15+6);/?在目標(biāo)點(diǎn)標(biāo)紅色?/setcolor(GREEN);settextstyle(0,0,2);/*設(shè)置字體大小牛/outtextxy(130,400,"Findaway!');)voidNotFind(void)/?沒找到通路?/setcolor(GREEN);settextstyle(0,0,2);/*設(shè)置字體大小?/outtextxy(130,400,f,Notfindaway!”);}voidResult(void)/?結(jié)果處理ッ(if(yes)/?如果找到?/Find();else/?沒找到路?/NotFind();getch();}voidClose(void)/?圖形關(guān)閉?/(closegraph();案例五掃地雷游戲#include<graphics.h>#include<std!ib.h>#include<dos.h>#defineLEFTPRESSOxffOl#defineLEFTCLICKOxfflO#defineLEFTDRAGOxffl9#defineMOUSEMOVEOxffO8struct(intnum;/?格子當(dāng)前處于什么狀態(tài),1有雷,0已經(jīng)顯示過數(shù)字或者空白格子?/introundnum;/*統(tǒng)計(jì)格子周圍有多少雷?/intflag;/*右鍵按下顯示紅旗的標(biāo)志,0沒有紅旗標(biāo)志,1有紅旗標(biāo)志?/}Mine[10][10];intgameAGAIN=0;/*是否重來的變量?/intgamePLAY=0;/*是否是第一次玩游戲的標(biāo)志?/intmineNUM;/*統(tǒng)計(jì)處理過的格子數(shù)?/charrandmineNUM[3];/*顯示數(shù)字的字符串?/intKeystate;intMouseExist;intMouseButton;intMouseX;intMouseY;voidInit(void);/?圖形驅(qū)動(dòng)?/voidMouseOn(void);/*鼠標(biāo)光標(biāo)顯示*/voidMouseOiT(void);/?鼠標(biāo)光標(biāo)隱臧?/voidMouseSetXY(intjnt);/*設(shè)置當(dāng)前位置*/intLeftPress(void);/*左鍵按下?/intRightPress(void);/*鼠標(biāo)右鍵按下?/voidMouseGetXY(void);/?得到當(dāng)前位置*/voidControlvoid);/*游戲開始,重新,關(guān)閉?/voidGameBegain(void);/*游戲開始畫面?/voidDrawSmile(void);/*畫笑臉?/voidDrawRedflag(intjnt);/?顯示紅旗?/voidDrawEmpty(int,int,irn,int);/?兩種空格子的顯示?/voidGameOver(void);/?游戲結(jié)束?/voidGameWin(void);/?顯示勝利?/intMineStatistics(int,int);/*統(tǒng)計(jì)每個(gè)格子周圍的雷數(shù)?/intShowWhite(int,int);/*顯示無雷區(qū)的空白部分?/voidGamePlay(void);/?游戲過程?/voidClose(void);/*圖形關(guān)閉?/voidmain(void)(Init();Control();Close();)voidInit(void)/?圖形開始?/(intgd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");)voidClose(void)/?圖形關(guān)閉?/(closegraph();)voidMouseOn(void)/?鼠標(biāo)光標(biāo)顯示*/(_AX=0x01;geninterrupt(0x33);)voidMouseOflF(void)/?鼠標(biāo)光標(biāo)隱藏*/(_AX=0x02;geninterrupt(0x33);)voidMouseSetXY(intxjnty)/?設(shè)置當(dāng)前位置*/_CX=x;_DX=y;_AX=0x04;geninterrupt(0x33);}intLeftPrcss(void)/?鼠標(biāo)左鍵按下?/(_AX=0x03;geninterrupt(0x33);retum(_BX&1);)intRightPress(void)/?鼠標(biāo)右鍵按下?/(_AX=0x03;geninterrupt(Ox33);retum(_BX&2);)voidMouseGetXY(void)/?得到當(dāng)前位置ッ(_AX=0x03;geninterrupt(0x33);MouseX=_CX;MouseY=_DX;}voidControl(void)/?游戲開始,重新,關(guān)閉ッ(intgameFLAG=l;/*游戲失敗后判斷是否重新開始的標(biāo)志サwhile(l)(if(gameFLAG)/?游戲失敗后沒判斷出重新開始或者退出游戲的話就繼續(xù)判斷?/(GameBegain。;/*游戲初始畫面?/GamePlay。;/*具體游戲?/if(gameAGAIN==l)/*游戲中重新開始?/(gameAGAIN=O;continue;MouseOn();gameFLAG=O;if(LeftPress())/?判斷是否重新開始?/(MouseGetXYO;if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)gameFLAG=1;continue;)}if(kbhit())/?判斷是否按鍵退出?/break;}MouseOff();)voidDrawSmile(void)/?畫笑臉?/(setfillstyle(SOLID_HLL,YELLOW);fillelUpse(290,75,10,10);setcolor(YELLOW);setfillstyle(SOLID_FILL,BLACK);/?眼睛?/fillellipse(285,75,2,2);fillellipse(295,75,2,2);setcolor(BLACK);/?嘴巴?/bar(287,80,293,81);)voidDrawRedflag(intijntj)/?顯示紅旗?/(setcolor(7);setfillsty!e(SOUD_HLL,RED);bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);setcolor(BLACK);line(198+j*20,95+i*20,198+j*20,95+i*20+10);)voidDrawEmpty(inti,intj,intmode,intcolor)/?兩種空格子的顯示?/(setcolor(color);setfillstyle(SOLID_HLL,color);if(mode==0)/*沒有單擊過的大格子?/bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);elseif(mode==1)/?單擊過后顯示空白的小格子?/bar(200+j*20-7,100+i*20-7,200+j*20+7,1004-i*20+7);}voidGameBegain(void)/?游戲開始畫面?/(inti,j;cleardevice();if(gamePLAY!=l)MouseSetXY(290,70);/*鼠標(biāo)ー開始的位置,并作為它的初始坐標(biāo)サMouseX=290;MouseY=70;)gamePLAY=l;/*下次按重新開始的話鼠標(biāo)不重新初始化*/mineNUM=O;setfillstyle(SOLlD_FILL57);bar(190,60,390,290);for(i=0;i<l0;i++)/*畫格子?/for(j=0;j<10;j4-+)DrawEmpty(i,j,0,8);setcolor(7);DrawSmile();/?畫臉?/randomize();for(i=0;i<10;i++)/*100個(gè)格子隨機(jī)賦值有沒有地雷*/for(j=0;j<10;j++)(Mine[i]|]].nurn二random(8);/求如果隨機(jī)數(shù)的結(jié)果是1表示這個(gè)格子有地雷?/if(Mine[i][j].num==l)mineNUM++;/?現(xiàn)有雷數(shù)加1*/elseMine[i][j].num=2;Mine[i][j].flag=O;/?表示沒紅旗標(biāo)志?/)sprintf(randmineNUM,"%d”,mineNUM);/*顯示這次總共有多少雷數(shù)?/setcolor(l);settextstyle(0,0,2);outtextxy(210,70,randmineNUM);mineNUM=100-mineNUM;/?變量取空白格數(shù)量?/MouseOn();}voidGameOver(void)/?游戲結(jié)束畫面?/(inti,j;setcolor(O);for(i=0;i<10;i++)for(j=0;j<10;j++)顯示所有的地雷水/{DrawEmpty(i,j,0,RED);setfillstyle(SOLID_FILL,BLACK);fillellipse(200+j*20,100+i*20,7,7);voidGameWin(void)/?顯示勝利?/(setcolor(lI);settextstyle(0,0,2);outtextxy(230,30,,'YOUWIN!”);)intMineStatistics(inti,intj)/*統(tǒng)計(jì)每個(gè)格子周圍的雷數(shù)?/(intnNUM=0;if(i==O&&j==O)/*左上角格子的統(tǒng)計(jì)到(if(Mine[0][1].num==l)nNUM++;if(Mine[l][0],num==1)nNUM++;if(Mine[1][1].num==l)nNUM++;)elseif(i==O&&j=9)/?右上角格子的統(tǒng)計(jì)ラ{if(Mine[0][8].num==l)nNUM++;if(Mine[l][9].num==l)nNUM++;if(Mine[l][8].num==l)nNUM++;)elseif(i==9&&j==0)/*左下角格子的統(tǒng)計(jì)ッ(if(Mine[8][0],num==1)nNUM++;if(Mine[9][1].num==1)nNUM++;if(Mine[8][l].num==l)nNUM++;)elseif(i==9&&j==9)/*右下角格子的統(tǒng)計(jì)?/(if(Mine[9][8].num==l)nNUM++;if(Mine[8][9].num==l)nNUM++;if(Mine[8][8].num==l)nNUM++;)elseif(j==O)/?左邊第一歹リ格子的統(tǒng)計(jì)ッ{if(Mine[i][j+1].num=1)nNUM++;if(Mine[i+1][j].num=1)nNUM++;if(Mine[i-l]|j].num==l)nNUM++;if(Mine[i-l||j+l].num==l)nNUM++;if(Mine[i+l][j4-l].num==l)nNUM++;)elseif(j==9)/?右邊第一列格子的統(tǒng)計(jì)?/{if(Mine[i][j-l].num==l)nNUM++;if(Mine[i+l][j].num=l)nNUM++;if(Mine[i-l]|j].num==l)nNUM++;if(Mine|i-l||j-l].num==l)nNUM++;if(Mine[i+l][j-l].num==l)nNUM++;)elseif(i==O)/*第一行格子的統(tǒng)計(jì)?/(if(Mine[i+l][j].num=1)nNUM++;if(Mine[i][j-l].num==l)nNUM++;if(Mine[i][j+l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論