C程序课程设计报告扫雷Word文档格式.docx

上传人:b****6 文档编号:16544250 上传时间:2022-11-24 格式:DOCX 页数:21 大小:66.16KB
下载 相关 举报
C程序课程设计报告扫雷Word文档格式.docx_第1页
第1页 / 共21页
C程序课程设计报告扫雷Word文档格式.docx_第2页
第2页 / 共21页
C程序课程设计报告扫雷Word文档格式.docx_第3页
第3页 / 共21页
C程序课程设计报告扫雷Word文档格式.docx_第4页
第4页 / 共21页
C程序课程设计报告扫雷Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C程序课程设计报告扫雷Word文档格式.docx

《C程序课程设计报告扫雷Word文档格式.docx》由会员分享,可在线阅读,更多相关《C程序课程设计报告扫雷Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

C程序课程设计报告扫雷Word文档格式.docx

程序用了一个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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1