C程序课程设计报告扫雷Word文档格式.docx
《C程序课程设计报告扫雷Word文档格式.docx》由会员分享,可在线阅读,更多相关《C程序课程设计报告扫雷Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
程序用了一个10行10列的二维数组表示扫雷界面。
在游戏中要随机步雷,游戏开始前要统计好每个格子周围的雷数,游戏开始后可以点击鼠标玩游戏,游戏结束后,按任意键结束跳出游戏界面。
整体框图
三详细设计
程序流程
以下是主函数中的一些主要的。
1.主函数
2.主要定义常用到的常量,全局变量,有关的函数原形说明。
然后随机布雷,统计好每个格子周围的雷数,画扫雷游戏界面,游戏接受鼠标操作,按任意键结束游戏,关闭图形系统,程序结束。
BYTEMouseState()/*等待接受鼠标命令函数*/
{
unionREGSregs;
regs.x.ax=3;
int86(MOUSE,&
regs,&
regs);
/*鼠标端口*/
return(regs.x.bx);
}
voidMouseShow()/*鼠标显示函数*/
regs.x.ax=1;
voidMouseHide()/*鼠标隐藏函数*/
regs.x.ax=2;
BOOLInitMouse()/*取鼠标端口函数*/
regs.x.ax=0;
return(regs.x.ax);
voidWaitMouse()
intxx,yy;
while(MouseState())
{
GetXY(&
xx,&
yy);
if(xx!
=x||yy!
=y)
SetXY(x,y);
}
voidPrt(intx,inty,BYTEch,BYTEcolor)/*定义雷区地址入口*/
{
pokeb(0xb800,y*160+x*2,ch);
pokeb(0xb800,y*160+x*2+1,color);
BYTEScr(intx,inty)/*返回雷区地址入口*/
returnpeekb(0xb800,y*160+x*2);
voidCursorHide()/*光标隐藏*/
_AH=3;
geninterrupt(0x10);
CursorMode=_CX;
_AH=1;
_CH=32;
voidCursorShow()/*光标显示*/
_CX=CursorMode;
四、源程序如下:
#include<
dos.h>
time.h>
conio.h>
stdio.h>
stdlib.h>
graphics.h>
#defineBYTEunsignedchar
#defineBOOLBYTE
#defineWORDunsignedint
#defineDWORDunsignedlong
#defineTRUE1
#defineFALSE!
TRUE
#defineMOUSE0x33
#defineLBUTTON1
#defineRBUTTON2
#defineSX35
#defineSY7
#defineMINE9/*在有雷的地方定义为MINE*/
BOOLInitMouse();
/*初始化鼠标*/
BYTEScr(int,int);
/*屏幕显示坐标函数*/
BYTEMouseState();
/*等待接受鼠标命令*/
voidEdge(int,int);
voidTurnBack(int,int);
voidMouseShow();
/*鼠标显示函数*/
voidMouseHide();
/*鼠标隐藏函数*/
voidCursorShow();
/*光标显示函数*/
voidCursorHide();
/*光标隐藏函数*/
voidSetRange(int,int,int,int);
voidGetXY(int*,int*);
voidSetXY(int,int);
voidWaitMouse();
voidWaitKey();
voidPrt(int,int,BYTE,BYTE);
/*雷区的图形和颜色*/
voidLocate(BYTE,BYTE);
voidFailExitGame();
/*游戏失败*/
voidExitGame();
/*游戏胜利*/
structSnow
intx;
inty;
intspeed;
}snow[100];
intsnownum=0;
intsize;
intchange=10;
void*save1,*save2;
voidCopy();
voidDrawSnow();
voidPr();
voidload();
voidwelcome1();
voidwelcome2();
voidwelcome3();
voidcontrol();
voidstar();
BOOLTurn[10][10];
BYTEMine[10][10];
BYTEMark[10][2];
WORDCursorMode;
intx,y;
voidmain()
{inti;
intTotal=0;
BYTEButton;
BOOLQUIT=FALSE;
time_tlt;
/*定义时间变量*/
star();
/*调用游戏前景动画函数*/
if(!
InitMouse())
printf("
Mousenotinstalled!
"
);
/*对鼠标端口进行判断*/
getch();
clrscr();
/*清屏*/
CursorHide();
randomize();
/*定义取随机数*/
Locate(36,20);
/*定义屏幕坐标*/
printf("
Mines:
%d"
0);
/*Mines表示做标记的次数*/
lt=time(NULL);
Locate(15,4);
TheCalendarTimenowis%s\n"
ctime(&
lt));
for(y=0;
y<
10;
y++)
for(x=0;
x<
x++)
Mine[y][x]=NULL;
Turn[y][x]=FALSE;
for(i=0;
i<
i++)/*随机产生地雷坐标*/
x=random(10);
y=random(10);
while(Mine[y][x])
Mine[y][x]=MINE;
/*定义在有了雷的地方坐标值为MINE*/
i=0;
/*判断每个格子周围的雷数*/
if(Mine[y][x]!
=MINE)
if((Mine[y][x-1]==MINE)&
&
((x-1)>
=0))i++;
if((Mine[y][x+1]==MINE)&
((x+1)<
10))i++;
if((Mine[y-1][x]==MINE)&
((y-1)>
if((Mine[y+1][x]==MINE)&
((y+1)<
if((Mine[y-1][x-1]==MINE)&
=0)&
if((Mine[y-1][x+1]==MINE)&
10)&
if((Mine[y+1][x+1]==MINE)&
if((Mine[y+1][x-1]==MINE)&
Mine[y][x]=i;
Prt(x+SX,y+SY,1,15);
/*雷区的图形和颜色*/
MouseShow();
while(!
QUIT)
if(kbhit())if(getch()==27)QUIT=TRUE;
Button=MouseState()&
3;
if(Button)
x,&
y);
WaitMouse();
x>
>
=3;
y>
x-=SX;
y-=SY;
if(x>
=0&
10&
y>
10)
if(Button&
LBUTTON)
if(Mine[y][x]==MINE)
FailExitGame();
if(Mine[y][x]==NULL)
Edge(x,y);
else
TurnBack(x,y);
RBUTTON)
(Turn[y][x]&
1))
switch(Turn[y][x])
case0:
Turn[y][x]=2;
MouseHide();
Prt(x+SX,y+SY,'
*'
15);
++Total);
Mark[Total][0]=x;
Mark[Total][1]=y;
if(Total==10)ExitGame();
break;
case2:
Turn[y][x]=0;
Prt(x+SX,y+SY,5,8);
--Total);
WaitKey();
CursorShow();
BYTEMouseState()/*等待接受鼠标命令*/
voidMouseShow()/*鼠标显示*/
voidMouseHide()/*鼠标隐藏*/
BOOLInitMouse()/*取鼠标端口*/
voidSetRange(intstart_x,intstart_y,intend_x,intend_y)
unionREGSr;
r.x.ax=7;
r.x.cx=start_x;
r.x.dx=end_x;
int86(0x33,&
r,&
r);
r.x.ax=8;
r.x.cx=start_y;
r.x.dx=end_y;
int86(MOUSE,&
voidGetXY(int*x,int*y)
unionREGSireg,oreg;
ireg.x.ax=3;
ireg,&
oreg);
*x=oreg.x.cx;
*y=oreg.x.dx;
voidSetXY(intx,inty)
unionREGSireg;
ireg.x.ax=4;
ireg.x.cx=x;
ireg.x.dx=y;
ireg);
voidWaitKey()
_AH=0;
geninterrupt(0x16);
voidEdge(intxx,intyy)
if(xx<
0||xx>
9||yy<
0||yy>
9||Turn[yy][xx])return;
TurnBack(xx,yy);
if(Mine[yy][xx]==NULL)
Edge(xx+1,yy);
Edge(xx-1,yy);
Edge(xx,yy+1);
Edge(xx,yy-1);
voidTurnBack(intxx,intyy)
Turn[yy][xx])
Prt(xx+SX,yy+SY,Mine[yy][xx]+48,12);
Turn[yy][xx]=Turn[yy][xx]||1;
voidLocate(BYTECol,BYTELine)
pokeb(0x0,0x450,Col);
pokeb(0x0,0x451,Line);
voidFailExitGame()
{/*显示游戏失败*/
sound(1000);
delay(500);
nosound();
if(Mine[y][x]==MINE)Prt(x+SX,y+SY,'
14+128);
\nFail!
\n"
exit(0);
voidExitGame()/*显示游戏胜利*/
inti,m=0;
i++)
if(Mine[Mark[i][1]][Mark[i][0]])m++;
if(m<
9)FailExitGame();
\nOK,Good!
/*///////开机//////*/
voidstar()
{intgd=DETECT,gm;
initgraph(&
gd,&
gm,"
c:
\\turboc2"
Copy();
DrawSnow();
welcome1();
welcome2();
welcome3();
control();
closegraph();
/*关闭图形函数*/
voidCopy()
setcolor(0);
/*涂色*/
setfillstyle(SOLID_FILL,15);
fillellipse(200,200,1,1);
/*画椭圆*/
size=imagesize(196,196,204,204);
save1=malloc(size);
save2=malloc(size);
getimage(196,196,204,204,save1);
getimage(96,96,104,104,save2);
voidPr()
ints[]={392,262,262,262,330,392,392,392,392,392,330,330,294,294,330,294,262,440,392,
392,262,262,262,330,392,392,392,392,392,330,330,294,294,330,294,262,440,392};
/*定义声音函数数组*/
setcolor(change);
/*字体颜色变换*/
settextstyle(0,0,4);
/*字体大小*/
outtextxy(150,200,"
Welcometo"
/*在屏幕上打印字符*/
outtextxy(200,240,"
CGame!
sound(s[change/10]);
/*释放声音*/
voidDrawSnow()
{inti;
intsx[62];
randomize();
for(i=0;
62;
sx[i]=(i+2)*10;
cleardevice();
while(!
kbhit())
Pr();
if(snownum!
=100)
snow[snownum].speed=2+random(5);
i=random(62);
snow[snownum].x=sx[i];
snow[snownum].y=10-random(100);
snownum;
putimage(snow[i].x,snow[i].y,save2,COPY_PUT);
if(snownum!
snownum++;
elseif(snownum>
15)break;
delay(300);
snow[i].y+=snow[i].speed;
putimage(snow[i].x,snow[i].y,save1,COPY_PUT);
if(snow[i].y>
500)
snow[i].y=10-random(200);
change++;
if(change==140)
change=10;
nosound();
voidwelcome1()
{inta;
for(a=0;
a<
450;
a++)
{textbackground(16);
setcolor(15);
circle(315,240,a);
delay(100);
setcolor(16);
circle(315,240,a-10);
voidwelcome2()
{floatb;
intc;
for(b=0;
b<
320;
b=b+0.5)
{setcolor(11);
rectangle(0,240,b,240);
rectangle(630,240,640-b,240);
for(c=0;
c<
240;
c++)
{rectangle(0,240,640,240-c);
rectangle(0,240,640,240+c);
voidwelcome3()
{intx,y=100,i,j;
for(x=60;