当前位置:文档之家› 扫雷程序源代码

扫雷程序源代码

扫雷程序源代码
扫雷程序源代码

frmMain

Option Explicit

Dim picFace(0 To 4) As StdPicture '存放笑脸图片

Dim picNum(0 To 9) As StdPicture '存放雷区数字图片

Dim picArea(0 To 6) As StdPicture '存放雷区非数字图片

Dim picTime(0 To 11) As StdPicture '存放时间数字图片

Dim Bomb() As Integer '存放地雷位置周围雷数Dim Status() As Integer '记录所在位置状态,0为原状,1为红旗,2为问号,3为点开

Dim LeftbombNum As Integer '剩余雷数

Dim iTime As Integer '时间

Private Sub Form_Load()

Dim i As Integer

For i = 0 To 4 '加载表情图片

Set picFace(i) = LoadResPicture(140 + i, 0)

Next

For i = 0 To 8

Set picNum(i) = LoadResPicture(115 - i, 0) '加载雷区数字图片

Next

For i = 0 To 6

Set picArea(i) = LoadResPicture(100 + i, 0) '加载雷区非数字图片

Next

For i = 0 To 11

Set picTime(i) = LoadResPicture(120 + i, 0) '加载时间数字图片

Next

Call mnuBegin_Click

End Sub

Public Sub Start() '开始

LeftbombNum = Num '初始剩余雷数

Text1.Text = Num

picboxArea.Enabled = True

picboxFace.PaintPicture picFace(4), 0, 0 '显示笑脸图片

Dim i As Integer, j As Integer

picboxArea.Width = 260 * X '布置窗体和控件

picboxArea.Height = 260 * Y

picboxArea.ScaleWidth = picboxArea.Width

picboxArea.ScaleHeight = picboxArea.Height

picboxShow.Width = picboxArea.Width

picboxShow.ScaleHeight = picboxShow.Height

picboxShow.ScaleWidth = picboxShow.Width

frmMain.Width = picboxArea.Width + 180

frmMain.Height = picboxArea.Height + picboxShow.Height + 950

picboxShow.Left = 50

picboxArea.Left = 50

picboxShow.Top = 50

picboxArea.Top = picboxShow.Height + 140

picboxFace.Height = 420

picboxFace.Width = 420

picboxFace.Left = picboxShow.Width / 2 - 210

picboxFace.Top = picboxShow.Height / 2 - 210

PicboxNum(5).Left = picboxArea.ScaleWidth - 670

PicboxNum(6).Left = picboxArea.ScaleWidth - 415

PicboxNum(4).Left = picboxArea.ScaleWidth - 925

Call Drawbomb(Val(Text1.Text))

PicboxNum(3).PaintPicture picTime(0), 0, 0, 13, 26 '加载时间图像(初始为0)PicboxNum(2).PaintPicture picTime(0), 0, 0, 13, 26

PicboxNum(1).PaintPicture picTime(0), 0, 0, 13, 26

Timer1.Enabled = False

iTime = 0

Call Arrange

For j = 1 To Y '绘制雷区

For i = 1 To X

picboxArea.PaintPicture picArea(0), (i - 1) * 260, (j - 1) * 260

Next

Next

End Sub

Public Sub Arrange() '程随机放置地雷

Dim i As Integer, j As Integer, k As Integer, l As Integer

ReDim Bomb(0 To X + 1, 0 To Y + 1)

ReDim Status(0 To X + 1, 0 To Y + 1)

Randomize

For i = 1 To Num

xx = Int(Rnd * X + 1): yy = Int(Rnd * Y + 1)

If Bomb(xx, yy) <> 10 Then '值为10表示此格有雷

Bomb(xx, yy) = 10

Else '若此格已有雷,则重新随机选格

i = i - 1

End If

Next

For j = 1 To Y

For i = 1 To X

If Bomb(i, j) <> 10 Then

For k = -1 To 1

For l = -1 To 1

If Bomb(i + k, j + l) = 10 Then Bomb(i, j) = Bomb(i, j) + 1 '数周围雷数

Next

Next

End If

Next

Next

For i = 0 To X + 1 Step X + 1 '设定边界,防止出现无定义

For j = 0 To Y + 1

Bomb(i, j) = 9

Next

Next

For j = 0 To Y + 1 Step Y + 1

For i = 0 To X + 1

Bomb(i, j) = 9

Next

Next

End Sub

Private Sub mnuStart_Click() '开局

Call mnuBegin_Click

End Sub

Private Sub mnuBegin_Click() '初级

mnuBegin.Checked = True

mnuMiddle.Checked = False

mnuExpert.Checked = False

mnuCust.Checked = False

X = 9: Y = 9: Num = 10

Call Start

End Sub

Private Sub mnuMiddle_Click() '中级

X = 16: Y = 16: Num = 40

mnuBegin.Checked = False

mnuMiddle.Checked = True

mnuCust.Checked = False

mnuExpert.Checked = False

Call Start

End Sub

Private Sub mnuExpert_Click() '高级

X = 16: Y = 30: Num = 99

mnuBegin.Checked = False

mnuMiddle.Checked = False

mnuExpert.Checked = True

mnuCust.Checked = False

Call Start

End Sub

Private Sub mnuCust_Click() '自定义

mnuCust.Checked = True

frmCustom.Show 1, Me '显示子顶替对话框,模态窗口,暂停执行位于Show后面的语句End Sub

Private Sub mnuAbout_Click()

frmAbout.Show 1, Me '显示关于扫雷对话框,模态窗口,暂停执行位于Show后面的语句End Sub

Private Sub mnuExit_Click() '退出游戏

Unload Me

End Sub

Private Sub mnuRecord_Click()

frmRecord.Show 1, Me '显示扫雷英雄榜对话框,模态窗口,暂停执行位于Show后面的语句End Sub

Private Sub picboxFace_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

picboxFace.Picture = picFace(0)

End Sub

Private Sub picboxFace_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) picboxFace.Picture = picFace(4)

Call Start

End Sub

Private Sub picboxArea_MouseDown(Button As Integer, Shift As Integer, x1 As Single, y1 As Single)

picboxFace.Picture = picFace(3)

Dim x2 As Integer, y2 As Integer

Position x1, y1, x2, y2 '定位

If Status(x2, y2) = 0 Then '若鼠标点击的方格为初始状态

If Button = 1 Then '左击

picboxArea.PaintPicture picNum(0), (x2 - 1) * 260, (y2 - 1) * 260

ElseIf Button = 2 Then '右击

picboxArea.PaintPicture picArea(1), (x2 - 1) * 260, (y2 - 1) * 260

End If

ElseIf Status(x2, y2) = 1 Then '若鼠标点击的方格为红旗状态If Button = 2 Then '右击

picboxArea.PaintPicture picArea(2), (x2 - 1) * 260, (y2 - 1) * 260

End If

ElseIf Status(x2, y2) = 2 Then '若鼠标点击的方格为问号状态

If Button = 1 Then '左击

picboxArea.PaintPicture picArea(6), (x2 - 1) * 260, (y2 - 1) * 260

ElseIf Button = 2 Then '右击

picboxArea.PaintPicture picArea(0), (x2 - 1) * 260, (y2 - 1) * 260

End If

End If

Timer1.Enabled = True '计时器开始计时

Text1.Text = LeftbombNum - 1 '剩余雷数减少一个

End Sub

Private Sub picboxArea_MouseMove(Button As Integer, Shift As Integer, x1 As Single, y1 As Single)

If Button = 0 Then Exit Sub

Dim i As Integer, j As Integer

For i = 1 To X

For j = 1 To Y

If Status(i, j) = 0 Then

picboxArea.PaintPicture picArea(0), (i - 1) * 260, (j - 1) * 260 '当鼠标离开后按下去的按键恢复原状

End If

Next

Next

Dim x2 As Integer, y2 As Integer

Position x1, y1, x2, y2

If x2 > 0 And y2 > 0 And x2 < X + 1 And y2 < Y + 1 Then

If Status(x2, y2) = 0 Then picboxArea.PaintPicture picNum(0), (x2 - 1) * 260, (y2 - 1) *

260 '鼠标所在处按键显示按下

End If

End Sub

Private Sub picboxArea_MouseUp(Button As Integer, Shift As Integer, x1 As Single, y1 As Single)

Dim x2 As Integer, y2 As Integer, i As Integer, j As Integer

Position x1, y1, x2, y2 '定位

If x2 > 0 And y2 > 0 And x2 < X + 1 And y2 < Y + 1 Then

If Status(x2, y2) = 0 Then '若鼠标点击的方格为初始状态

If Button = 1 Then '左击

If Bomb(x2, y2) <> 0 And Bomb(x2, y2) <> 10 Then

Status(x2, y2) = 3 '方格被点开

picboxArea.PaintPicture picNum(Bomb(x2, y2)), (x2 - 1) * 260, (y2 - 1) * 260 '显示周围雷的个数

ElseIf Bomb(x2, y2) = 0 Then '若周围没有雷

Status(x2, y2) = 3

picboxArea.PaintPicture picNum(0), (x2 - 1) * 260, (y2 - 1) * 260

For i = -2 To 0

For j = -2 To 0

picboxArea_MouseUp 1, 0, 260 * (x2 + i), 260 * (y2 + j) '检查周围八个格子

Next

Next

ElseIf Bomb(x2, y2) = 10 Then '若有雷

For i = 1 To X

For j = 1 To Y

If Bomb(i, j) = 10 And Status(i, j) = 0 Then

picboxArea.PaintPicture picArea(5), (i - 1) * 260, (j - 1) * 260 '未被标记的雷显示

ElseIf Bomb(i, j) = 10 And Status(i, j) = 1 Then

picboxArea.PaintPicture picArea(4), (i - 1) * 260, (j - 1) * 260 '被标记的雷显示

ElseIf Bomb(i, j) = 10 And Status(i, j) = 2 Then

picboxArea.PaintPicture picArea(5), (i - 1) * 260, (j - 1) * 260 '疑似的雷显示

End If

Next

Next

picboxArea.PaintPicture picArea(3), (x2 - 1) * 260, (y2 - 1) * 260 '被点开的雷显示

picboxArea.Enabled = False '雷区不响应任何事件

End If

ElseIf Button = 2 Then '右击

picboxArea.PaintPicture picArea(1), (x2 - 1) * 260, (y2 - 1) * 260 '方格被标记红旗

Status(x2, y2) = 1

LeftbombNum = LeftbombNum - 1 '剩余雷数减少一个

End If

ElseIf Status(x2, y2) = 1 Then '若鼠标点击的方格为红旗

If Button = 2 Then '右击

picboxArea.PaintPicture picArea(2), (i - 1) * 260, (j - 1) * 260 '方格状态变为问号

Status(x2, y2) = 2

LeftbombNum = LeftbombNum + 1 '剩余雷数增加一

End If

ElseIf Status(x2, y2) = 2 Then '若鼠标点击的方格为问号If Button = 1 Then '左击

If Bomb(x2, y2) <> 0 And Bomb(x2, y2) <> 10 Then

Status(x2, y2) = 3 '方格被点开

picboxArea.PaintPicture picNum(Bomb(x2, y2)), (x2 - 1) * 260, (y2 - 1) * 260

ElseIf Bomb(x2, y2) = 0 Then '若周围无雷

Status(x2, y2) = 3 '方格被点开

picboxArea.PaintPicture picNum(0), (x2 - 1) * 260, (y2 - 1) * 260

For i = -2 To 0 '检查周围八个格子

For j = -2 To 0

picboxArea_MouseUp 1, 0, 260 * (x2 + i), 260 * (y2 + j)

Next

Next

ElseIf Bomb(x2, y2) = 10 Then '若有雷

For i = 1 To X

For j = 1 To Y

If Bomb(i, j) = 10 And Status(i, j) = 0 Then

picboxArea.PaintPicture picArea(5), (i - 1) * 260, (j - 1) * 260 '未被标记的雷显示

ElseIf Bomb(i, j) = 10 And Status(i, j) = 1 Then

picboxArea.PaintPicture picArea(4), (i - 1) * 260, (j - 1) * 260 '被标记的雷显示

ElseIf Bomb(i, j) = 10 And Status(i, j) = 2 Then

picboxArea.PaintPicture picArea(5), (i - 1) * 260, (j - 1) * 260 '疑似的雷显示

End If

Next

Next

picboxArea.PaintPicture picArea(3), (x2 - 1) * 260, (y2 - 1) * 260 '被点开的雷显示

picboxArea.Enabled = False '雷区不响应任何事件

End If

ElseIf Button = 2 Then '右击

picboxArea.PaintPicture picArea(0), (i - 1) * 260, (j - 1) * 260

Status(x2, y2) = 0

End If

End If

ElseIf Status(x2, y2) = 3 Then '若方格被点开

Dim n As Integer

For i = -1 To 1

For j = -1 To 1

If Status(x2 + i, y2 + j) = 1 Then n = n + 1

Next

Next

If n = Bomb(x2, y2) Then

For i = -2 To 0 '检查周围八个格子

For j = -2 To 0

picboxArea_MouseUp 1, 0, (x2) * 260, (y2) * 260

Next

Next

End If

End If

If picboxArea.Enabled Then

picboxFace.Picture = picFace(4)

Else

picboxFace.Picture = picFace(2)

Timer1.Enabled = False '计时器停止

iTime = 0 '时间清零

frmCheer.Show 1, Me '显示加油窗体

End If

Text1.Text = LeftbombNum '文本框中显示剩余雷数

Dim time1 As Integer, time2 As Integer, time3 As Integer '把含有时间信息的字符串转换为数值

time1 = Val(frmRecord.lblTime1.Caption)

time2 = Val(frmRecord.lblTime2.Caption)

time3 = Val(frmRecord.lblTime3.Caption)

If Text1.Text = 0 Then

If Bomb(xx, yy) = 10 Then

If Status(xx, yy) = 1 Then '若所有地雷全部标记出来了

Timer1.Enabled = False '计时器停止计时

If Y = 9 And iTime >= time1 Then '若为初级,未破纪录

frmWin.Show 1, Me '显示胜利对话框

picboxFace.PaintPicture picFace(1), 0, 0

ElseIf Y = 9 And iTime < time1 Then '若为初级,破了纪录

frmMessage1.Show 1, Me '显示扫雷英雄榜信息提示对话框

End If

If Y = 16 And iTime >= time2 Then '若为中级,未破纪录

frmWin.Show 1, Me '显示胜利对话框

picboxFace.PaintPicture picFace(1), 0, 0

ElseIf Y = 16 And iTime < time2 Then '若为中级,破了纪录

frmMessage2.Show 1, Me '显示扫雷英雄榜信息提示对话框

End If

If Y = 40 And iTime >= time3 Then '若为高级,未破纪录

frmWin.Show 1, Me '显示胜利对话框

picboxFace.PaintPicture picFace(1), 0, 0

ElseIf Y = 30 And iTime < time3 Then '若为高级,破了纪录

frmMessage3.Show 1, Me '显示扫雷英雄榜信息提示对话框

End If

End If

End If

End If

End Sub

Private Sub Position(x1 As Single, y1 As Single, x2 As Integer, y2 As Integer)

x2 = x1 \ 260 + 1: y2 = y1 \ 260 + 1 '显示鼠标所在格子坐标

End Sub

Sub DrawNum(inum As Integer)

If iTime >= "0" And iTime <= "9" Then '绘制数字0-9

PicboxNum(3).PaintPicture picTime(Val(iTime)), 0, 0, 13, 26

PicboxNum(2).PaintPicture picTime(Val(0)), 0, 0, 13, 26

PicboxNum(1).PaintPicture picTime(Val(0)), 0, 0, 13, 26

ElseIf iTime >= "10" And iTime <= "99" Then

PicboxNum(3).PaintPicture picTime(Val(iTime Mod 10)), 0, 0, 13, 26

PicboxNum(2).PaintPicture picTime(Val(iTime \ 10)), 0, 0, 13, 26

PicboxNum(1).PaintPicture picTime(Val(0)), 0, 0, 13, 26

ElseIf iTime >= "100" And iTime <= "999" Then

PicboxNum(1).PaintPicture picTime(Val(iTime \ 100)), 0, 0, 13, 26

PicboxNum(2).PaintPicture picTime(Val(iTime \ 10 - 10 * (iTime \ 100))), 0, 0, 13, 26

PicboxNum(3).PaintPicture picTime(Val(iTime Mod 10)), 0, 0, 13, 26 '绘制时间显示图像

End If

Call Drawbomb(Val(LeftbombNum))

End Sub

Private Sub Timer1_Timer() '显示游戏时间

If iTime < 999 Then

iTime = iTime + 1

DrawNum iTime

Timer1.Interval = 1000

End If

Call DrawNum(Val(Text1.Text))

End Sub

Sub Drawbomb(LeftbombNum As Integer) '绘制剩余雷数图像LeftbombNum = Val(Text1.Text)

If LeftbombNum >= "0" Then

If LeftbombNum >= "0" And LeftbombNum <= "9" Then

PicboxNum(6).PaintPicture picTime(Val(LeftbombNum)), 0, 0, 13, 26

PicboxNum(5).PaintPicture picTime(Val(0)), 0, 0, 13, 26

PicboxNum(4).PaintPicture picTime(Val(0)), 0, 0, 13, 26

Else

PicboxNum(6).PaintPicture picTime(Val(LeftbombNum Mod 10)), 0, 0, 13, 26

PicboxNum(5).PaintPicture picTime(Val(LeftbombNum \ 10)), 0, 0, 13, 26

PicboxNum(4).PaintPicture picTime(Val(0)), 0, 0, 13, 26

End If

ElseIf LeftbombNum >= "-9" And LeftbombNum <= "-1" Then

PicboxNum(6).PaintPicture picTime(-Val(Text1.Text)), 0, 0, 13, 26

PicboxNum(5).PaintPicture picTime(Val(0)), 0, 0, 13, 26

PicboxNum(4).PaintPicture picTime(Val(11)), 0, 0, 13, 26

ElseIf LeftbombNum >= "-99" And LeftbombNum <= "-10" Then

PicboxNum(6).PaintPicture picTime(-Val(Text1.Text) Mod 10), 0, 0, 13, 26

PicboxNum(5).PaintPicture picTime(-Val(Text1.Text \ 10)), 0, 0, 13, 26

PicboxNum(4).PaintPicture picTime(Val(11)), 0, 0, 13, 26

End If

End Sub

frmCustom

Option Explicit

Private Sub cmdCancle_Click()

Unload Me

End Sub

Private Sub cmdOK_Click()

frmMain.mnuBegin.Checked = False '属性为True时,菜单标题前显示复选标记,False则不显示

frmMain.mnuMiddle.Checked = False

frmMain.mnuExpert.Checked = False

frmMain.mnuCust.Checked = True

X = Val(txtCol.Text) '把含有数值信息的字符串转换为数值

Y = Val(txtRow.Text)

Num = Val(txtNum.Text)

Call frmMain.Start ‘开始游戏

Unload Me

End Sub

Private Sub Form_Load()

txtRow.Text = 20 ‘自动加载初始值

txtCol.Text = 20

txtNum.Text = 20

End Sub

frmAbout

Private Sub cmdOK_Click()

Unload Me

End Sub

frmRecord

Private Sub cmdClose_Click()

Unload Me

End Sub

frmCheer

Private Sub Command1_Click()

Unload Me

End Sub

frmWin

Private Sub cmdOK_Click()

Unload Me

Call frmMain.Start

End Sub

frmMessage1

Private Sub cmdCancle_Click()

Unload Me

End Sub

Private Sub cmdOK_Click()

frmRecord.lblName1.Caption = Text1.Text ‘保存英雄榜信息frmRecord.lblTime1.Caption = iTime

Unload Me

End Sub

frmMessage2

Private Sub cmdCancle_Click()

Unload Me

End Sub

Private Sub cmdOK_Click()

frmRecord.lblName2.Caption = Text1.Text ‘保存英雄榜信息

frmRecord.lblTime2.Caption = iTime

Unload Me

End Sub

frmMessage3

Private Sub cmdCancle_Click()

Unload Me

End Sub

Private Sub cmdOK_Click()

frmRecord.lblName3.Caption = Text1.Text ‘保存英雄榜信息

frmRecord.lblTime3.Caption = iTime

Unload Me

End Sub

标准模块

Public X As Integer, Y As Integer, Num As Integer 'x为横宽,y为竖长,num为雷数Public xx As Integer, yy As Integer 'x1,y1为布雷的位置坐标

c语言课程设计——扫雷

扫雷设计 网101 陈超张艳 1.游戏规则 设计1010格区域,单击鼠标后,该格显示数字,则表示它周围8个空格内含有的地雷数,周围没有地雷的显示空白,则不能再单击了.如果是地雷,则游戏结束.如果判断是地雷,可以单击鼠标右键标出,显示红旗,要取消红旗标志则单击鼠标右键,当所有地雷都标出时,每个空格都处理过了,则胜利结束。 2.设计思路 扫雷程序主要用了一个10行10列的二维数组,数组的每个元素都是结构体类型,结构体中的num代表格内当前处于什么状态,值1表示有雷,值0表示已经变成空白格或者显示过数字,roundnum 统计每个格子周围有多少地雷,flag是鼠标右键的标志,如果flag为1表示格子显示红旗,这样鼠标左键点击在这个格子上无效。 在程序一开始统计好每个格子周围有多少地雷,然后当鼠标左键点击在没有地雷的格子上时进行两种判断,如果格子周围没有地雷,就在原来的格子位置显示空白格,然后用递归的方法同样判断周围的8个格子;如果格子周围有地雷,就在该空格显示具体的雷数。 在递归判断8个格子时,如果格子上有雷或者格子已经显示过雷数或者空白,以及格子上有红旗标志的话,就不再对格子进行任何判断。 具体函数流程图如下:

(1)main()主函数 定义使用到的常数,全局变量,函数原型说明。然后初始化图形系统,调用游戏控制函数,按任意键结束游戏,关闭图形系统,游戏结束。 (2)Control()游戏控制函数 调用函数GameBegain()显示游戏初始化界面,调用

GamePlay()函数具体实现游戏操作,该函数的返回值有可能有两种:一是正在玩中,提前结束游戏;一是玩完,要么失败,要么胜利。如果是前者,则重新开始游戏。如果是后者,则判断是否单击了笑脸,是则重新开始,否则结束程序。 (3)GameBegin()画初始界面 这个函数完成初始界面的设计以及随机生成地雷。初始界面的主要工作是确定图的位置和方格显示的位置。外边框的左上角为(190,60),右上角坐标为(390,290),显示笑脸和地雷数的区域为(190,60)~(390,90),每个方格的宽度和高度均为16. (4)DrawSmile()画笑脸 利用画椭圆的函数fillellipse()和bar()画笑脸,设置好填充模式。 (5)DrawEmpty()两种格子的显示 函数的参数为四个,确定格子的坐标i和j模式,颜色。格子有两种:一是可以单击的格子;一是已经显示空白的格子,比前一种格子小,通过参数模式和颜色来控制。 (6)DrawFlag()显示红旗 用单击鼠标右键表示起地雷,起雷后显示一个小红旗 (7)GamePlay()游戏控制 游戏过程主要是对鼠标按键的处理,集体算法实现如下: a.如果单击了鼠标左键则判断 如果单击了笑脸,则游戏重新开始‘

Java编写的扫雷小程序

整个程序使用了4个类: Game 用于启动程序, 界面的布置,各种行列的算法。 ExtendButton 继承了Jbutton 用于新建button的各种属性 ShowNum 监听到某个button后,计算出此button周围有几个雷,不同的雷对应不通的图片,类得到button上应加载的图片地址 ViewReSet 此类用于新建一个窗口,用户输入自己想要的行、列、雷数,然后用新的行列雷数new 一个新的Game biaose dise1 dise2 dise3 dise4 dise5 dise6 dise7 dise8 dise lei biaoji

/****************************************************************运行类创建游戏主窗体 */ package com.dhl.saolei; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JToolBar; import javax.swing.KeyStroke; import javax.swing.Timer; public class Game extends JFrame implements ActionListener{ private Container myContainer; private GridLayout myLayout; private JPanel myPanelMain; private JPanel myPanel; private JToolBar myTool; private JLabel time; private JLabel labelTime; private JLabel bombNum; private JLabel labelBombNum; private JMenuBar menuBar; private JMenu menuE, menuH; private JMenuItem menuItemCZ, menuItemSZ; private int numBomb, countTime, leaveBomb, numEnd; private int myRows, myColumns; private int xis, yis; private Timer timer;

扫雷教程

大家好。许多人现在都在玩一些刺激的网游,但许多人忽视了许多别的游戏。 现在,我开始教大家玩扫雷。
扫雷软件可以在 Windows 的“开始”—“程序”—“附件”—“游戏”中找到。 推荐大家使用 Minesweeper Clone 0.97,好处多多哦
可以从这里下载:https://www.doczj.com/doc/d516250721.html,/Download/Minesweeper_Clone_0.97.exe
进入扫雷界面,会出现一大片方格:
先介绍一下操作吧: 鼠标左键可以打开方格 鼠标右键可以把方格标记为地雷 打开的方格里的数字表示本方格周围有几颗地雷。 如果一个方格周围已经标出的地雷数量和方格内数字相同,在方格上同时按左键和右键可以打开其余方格。
如果不幸踩雷,可以按
按钮重新来过,不想用鼠标的话可以按键盘上的 F2 键。
操作介绍完了,现在我们实际演练一盘,就先初级的开始吧:
咱先从这个阵学习先从简单学起

请看左下角的
如果会玩的一看当然就知道左下角的那个不是雷 为什么会知道呢? 这里有一个规律 当方格子里有 1 时就表示它周围的 8 个格子里肯定有一个是雷 从这个分析
看中间的 1 它周围有 5 个空 就表示有 5 个格子不是雷 看它左面的和下面的 1 也表示这两个不是雷 那么现在咱可以知道中间的 1 周围 8 个格子里有 7 个不是雷 下面咱就可以知道左下角的肯定是雷
你猜对了 咱知道这个了
在看最左面中间的那个 1 再看周围 8 个格子里 可是他周围不是 8 个 所以就考虑剩下的 6 个 还继续看那个 1 它周围有一个小红旗 表示已经有一个雷了 就表示它的周围已经有一个雷了所以剩下的几个格子都不是雷 咱就可以得到
你已经学会了最简单的部分了 下面咱再分析左上的那部分

Java语言 扫雷游戏完整源代码

import javax.swing.ImageIcon; public class Block { String name; //名字,比如"雷"或数字int aroundMineNumber; //周围雷的数目 ImageIcon mineIcon; //雷的图标 boolean isMine=false; //是否是雷 boolean isMark=false; //是否被标记 boolean isOpen=false; //是否被挖开 public void setName(String name) { https://www.doczj.com/doc/d516250721.html,=name; } public void setAroundMineNumber(int n) { aroundMineNumber=n; } public int getAroundMineNumber() { return aroundMineNumber; } public String getName() { return name; } public boolean isMine() { return isMine; } public void setIsMine(boolean b) { isMine=b; } public void setMineIcon(ImageIcon icon){ mineIcon=icon; } public ImageIcon getMineicon(){ return mineIcon; }

public boolean getIsOpen() { return isOpen; } public void setIsOpen(boolean p) { isOpen=p; } public boolean getIsMark() { return isMark; } public void setIsMark(boolean m) { isMark=m; } } import java.util.*; import javax.swing.*; public class LayMines{ ImageIcon mineIcon; LayMines() { mineIcon=new ImageIcon("mine.gif"); } public void layMinesForBlock(Block block[][],int mineCount){ int row=block.length; int column=block[0].length; LinkedList list=new LinkedList(); for(int i=0;i0){ int size=list.size(); // list返回节点的个数 int randomIndex=(int)(Math.random()*size);

C程序课程设计报告(扫雷游戏)

C程序设计 扫雷游戏 一、设计题目:扫雷游戏 二、设计目的 1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养学生综合运用所学知识独立完成课题的能力。 3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基

本素质。 5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。 三、设计要求 1.汪洋和孔维亮组成设计小组。小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。 2.查阅相关资料,自学具体课题中涉及到的新知识。 3.采用结构化、模块化程序设计方法,功能要完善,界面要美观。 4.按要求写出课程设计报告,并于设计结束后1周内提交。 一概述 1)掌握数组指针的概念及其应用 2)培养团结合作精神 2. 课程设计的要求 要求我们有扎实的C语言知识,以及良好的编程习惯,能够熟练的应用循环,有毅力,还要求我们有较强的合作精神,善于总结。同时还要求我们自学C语言作图部分知识。在必要时还要上网查相关资料。 3.课程设计的主要设计思想 扫雷游戏主要用了一个10行10列的二维数组,刚开始利用random随机布雷。 每一个程序最主要的是算法。扫雷游戏算法的重点是一开始统计好每个格子周围有多少雷,当鼠标左键点在格子上时做出判断,如果周围8个格子有雷则显示出雷数,如果没有雷则显示空白格(在四个角的格子显示周围3个格子,其它边缘的格子显示周围5个的状态),我们在主函数中用两个for语句来判断周围雷数。我们还加了鼠标处理函数。 如果格子上有雷则调用函FailExitGame(),显示“Fail!”,游戏结束。若所有的雷都标出,且所有的格子都处理过,则调用函数ExitGame(),显示“OK,Good!”,游戏结束。游戏结束后,按任意键出去。

Java编写的扫雷小程序

J a v a编写的扫雷小程序Prepared on 21 November 2021

整个程序使用了4个类: Game 用于启动程序, 界面的布置,各种行列的算法。 ExtendButton 继承了Jbutton 用于新建button的各种属性 ShowNum 监听到某个button后,计算出此button周围有几个雷,不同的雷对应不通的图片,类得到button上应加载的图片地址 ViewReSet 此类用于新建一个窗口,用户输入自己想要的行、列、雷数,然后用新的行列雷数new 一个新的Game biaose dise1 dise2 dise3 dise4 dise5 dise6 dise7 dise8 dise lei biaoji

/**************************************************************** 运行类创建游戏主窗体 */ package class Game extends JFrame implements ActionListener{ private Container myContainer; private GridLayout myLayout; private JPanel myPanelMain; private JPanel myPanel; private JToolBar myTool; private JLabel time; private JLabel labelTime; private JLabel bombNum; private JLabel labelBombNum; private JMenuBar menuBar; private JMenu menuE, menuH; private JMenuItem menuItemCZ, menuItemSZ; private int numBomb, countTime, leaveBomb, numEnd; private int myRows, myColumns; private int xis, yis; private Timer timer; private ExtendButton[] myButton = null; etPostion(i); [i].setIcon((new ShowNum(10)).getImageIcon()); [i].setButton_num(0); [i].SetVisited(false); [i].SetStatus(false); ddMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { if (() == ) {

windows程序设计之扫雷游戏经典之作

WIN32模拟WINDOWS XP扫雷 程序 课程设计目的与要求: 本课程设计是计算机科学与技术专业重要的实践性环节之一,是对本程学习后进行的一次全面而综合的练习。本次课程设计的目的与任务主要有: 1.巩固和加深学生对C和C++语言的基本知识的理解与掌握。 2.掌握C和C++语言编程和调试的基本技能 3.运用C和C++语言对程序的简单设计 4.掌握程序设计说明文档的能力与技巧 5.提高与运用C和C++语言解决能实际问题的能力 一、题目描述: 自行分析Windows XP系统自带扫雷游戏,查找规则并对主要功能进行模仿程序实现,对于实现过程中出现的bug进 行调试解决。 二、使用语言: C和C++ 语言 选用C++语言的原因,简而言之主要是因为C++的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具 有的可适应性和高效性,又能在其程序组织结构方面具有像其 他的语言所支持的程序优势。这即是说,C++所提供的抽象机 制能够被应用于那些对效率和可适应性具有极高要求的程序设 计任务之中。

三、编译以及运行环境: 编译环境:Microsoft Visual C++ 6.0 运行环境:Windows XP或其他兼容兼容系统 四、题目分析: 经过对游戏的初步分析,扫雷游戏含有如下规则: 根据输入的信息,执行相应的挖雷,插旗,疑问标记,自动蔓延开挖等。挖雷过程由计时器计时,由一个计数器统计插旗后雷的剩余个数。如果选择了标记功能,那么单机右键会依次对未知点进行插旗,标记,取消插旗与标记。如果点滴到插旗的如果点击到了未插旗子的雷区,如果是雷,则判定游戏失败,之后对雷区的点击进行屏蔽,不予响应。如果是疑问标记则像正常区域对待。如何判断胜利,如果所有的雷都被插旗或者点击后剩余的雷区, 五、程序运行流程简介以及流程图: 点击程序按默认参数进行初始化,输入,表情对鼠标左右键点击进行变化响应,对于雷区内点击进行规律响应,对雷区点击后果进行统计,判断失败与成功,失败或者成功之后,对于雷区内的输入也就是点击进行屏蔽,对菜单游戏级别、重新开始游戏按钮响应。级别选择,重新游戏时时间归零、雷数显示刷新。如此重复规则,直到点击退出。 程序简要流程图:

原创C语言扫雷程序大作业代码

#include #include #include #define random(x) (rand()%x) int n=0;//-------------------------------------------完成度判断 int bomb[12][12]={{},{},{},{},{},{},{},{},{},{},{},{},};//地雷分布(地雷1、无雷0) int tru[10][10]={{},{},{},{},{},{},{},{},{},{}};//真相数组[truth](地雷数、地雷*、误判/、空白O)int tbl[12][12]={{' ','X',1,2,3,4,5,6,7,8,9,10}, {'Y','+','-','-','-','-','-','-','-','-','-','-'}, {1,'|','_','_','_','_','_','_','_','_','_','_'}, {2,'|','_','_','_','_','_','_','_','_','_','_'}, {3,'|','_','_','_','_','_','_','_','_','_','_'}, {4,'|','_','_','_','_','_','_','_','_','_','_'}, {5,'|','_','_','_','_','_','_','_','_','_','_'}, {6,'|','_','_','_','_','_','_','_','_','_','_'}, {7,'|','_','_','_','_','_','_','_','_','_','_'}, {8,'|','_','_','_','_','_','_','_','_','_','_'}, {9,'|','_','_','_','_','_','_','_','_','_','_'}, {10,'|','_','_','_','_','_','_','_','_','_','_'}}; //棋盘数组[table](坐标系|-12、地雷数、红旗P、地雷*、爆炸X、误判/) int main()//---------------------主函数 { welcome(); do { game(); } while (n<=9);//未胜利,继续进行游戏 if(n==10) printf("Mission succeed!\n");//全部地雷标记完成,胜利 else printf("Mission failed!\n");//n=11,引爆地雷,失败 return 0; } int welcome() { int i,j,m,a,num; printf("Hello,welcome to Bomb Hunter!\nFirst of all,please input the number of bombs(eg:30):\n"); scanf("%d",&num); printf("Now let's begin,good luck!\n"); srand((int)time(0)); for (m=0;m

扫雷游戏设计代码(VB完善版)

扫雷游戏VB设计实现最终界面如下:

显然只需完成三个窗体的设计即可,具体设计界面和代码如下: 一、主窗体(form10)设计界面:

主窗体(form10)的代码: Dim d(11, 11) As Integer Dim k As Integer Dim v(100) As Integer '定义全局变量' Private Sub Command1_Click(Index As Integer) Timer1.Enabled = True '当点击任意一个命令按钮时(即开始游戏),则启动计时器' i = Index \ 10 + 1 j = Index Mod 10 + 1 '将二维数组的元素与命令按钮一一对应' If d(i, j) = 1 Then '判断是否点到地雷' Timer1.Enabled = False '关闭计时器,游戏结束' For i = 1 To 10 For j = 1 To 10 n = 10 * (i - 1) m = j - 1 If d(i, j) = 1 Then

Command1.Item(m + n).Picture = LoadPicture(App.Path & "\2.jpg") '在按钮上显示地雷图片' End If Form1.Show '弹出子窗体1(判断输赢)' Next j Next i Else If v(Index) = Index + 1 Then '判断是否插上红旗或是问号图片' Command1.Item(Index).Picture = LoadPicture() '清除图片' Command1.Item(Index).Caption = f(i, j) '调用函数,显示周围地雷数' Command1.Item(Index).Enabled = False '将按钮设为不可用' Label7.Caption = Val(Label7.Caption) + 1 v(Index) = 0 End If h = s(i, j) '调用函数,显示周围的情况(边界)' For Y = 0 To 99 If v(Y) = Y + 1 Then Command1.Item(Y).Enabled = True '如果是按钮插上了红旗则将按钮设置为可用' End If Next Y End If

JAVA课程设计扫雷小游戏

Java游戏设计报告 院系计算机科学学院 班级计科11002 姓名张林峰 设计日期2012.12.18—2012.12.29

1·设计内容及要求 1.1·扫雷小游戏的基本要求 扫雷小游戏主要采用Java语言编写,适合windows XP以下的系统,以eclipse 为平台。具体要求如下: <1>扫雷小游戏分为初级、中级和高级三个级别,扫雷排行榜保存着每个级别的最好成绩,即挖出全部的地雷并且用时最少。单机游戏菜单选择“初级”、“中级”和“高级”。 <2>游戏默认的是初级级别,用户可以选择不同级别将出现对应级别的扫雷区域,单击扫雷区域任一方格以便启动计时器。 <3>用户选择某个方格,单击它就行。若所选择的放阁下有雷,这一局就结束了,若所选择方格下无雷,则会显示一个数字,该数字代表方格周围8个方格中共有几颗雷。 <4>如果用户认为某个方格下有雷,单击右键可以在方格上标记一个用户认为是雷的图标(一个小旗子)。 <5>用户可以选择标记为疑问的方格,可以选择游戏菜单下的标记,或者双击右键所选方格显示(?)图标。 <6>扫雷完成后,程序弹出保存成绩的对话框,用户可以根据自身选择是否保存。 <7>如果用户喜欢有提示音,可以选择游戏菜单中的声音选项,单击扫雷区域任一方格,就会听到吧嗒声。当点中地雷时,将会有爆炸声音响起,胜利后,将播放凯旋的旋律。 1.2需求实现的主要功能 (1)该游戏具有计时功能,即扫完全部地雷所花费的时间。 (2)用户可以选择是否有音效。 (3)用户可以自定义级别,还可以输入任意地雷数。 (4)自动保存扫雷排行榜。 2·需求分析 2.1扫雷区域的布局设计 系统的整体布局为:CardLayout布局,采用菜单、按钮、面板……等组件,菜单项主要有开始,选择级别,自定义,标记,声音,扫雷排行榜,退出,按钮的功能是重新开始游戏(可以选择游戏菜单里的开局,也可以点击企鹅图标重新开始游戏)。 2.2雷区的设计 MineArea类是javax.swing包中Jpanel容器的子类,实现了ActionListener 和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。 2.3音效的设计

扫雷游戏程序设计课程设计报告

课 程 设 计 扫雷游戏程序设计 2013 年 11 月 5 日 设计题目 学 号专业班级 学生姓名 指导教师

合肥工业大学课程设计任务书

一. 设计任务 (1)鼠标左击排雷,右击插小旗,打问号; (2)方格里面的数字表示方格周围的雷数; (3)能够显示未标记雷数和游戏用时; (4)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; (5)可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数),和自行定义雷区行数,列数和雷数的功能; (6)排行榜功能,扫雷成功时候,根据游戏用时更新排行榜。 二. 具体设计 (一)、设计思路 扫雷游戏是很经典也很有趣的一款游戏,这次的游戏程序设计要求设计出功能与原游戏相近的一款游戏,首先定义变量和类要画出游戏方格以及位图,设计游戏等级,等级越高方格越多雷数也越多;然后设置随机布雷以保证每次重新开始游戏都有不同的雷区地图;另外定义鼠标左击扫雷,左击标记周围埋雷情况,右击奇数次排雷偶数次取消上次排雷,以及扫雷第一次左击不能扫到雷。

(二)、设计表示: 1、鼠标左击排雷,右击插小旗,打问号; 2、方格里面的数字表示方格周围的雷数; 3、能够显示未标记雷数和游戏用时; 4、雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; 5、可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数); 6、任何时候开始游戏第一次点击不会扫到雷。 由于时间等原因未完成功能: 排行榜和自行定义雷区行数,列数和雷数功能。 (四)、详细设计 1、添加位图 前十二幅是在雷区的,后四幅是按钮。为了便于加载,必须各自保证其连续性。 分别表示游戏进行的状态、结果胜利或触雷。

Java扫雷游戏源代码

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.Timer; public class ScanLei1 extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton[] btns; private JLabel b1; private JLabel b2; private JLabel b3; private Timer timer; private int row=9; private int col=9; private int bon=10; private int[][] a; private int b; private int[] a1; private JPanel p,p1,p2,p3; public ScanLei1(String title){ super(title); contentPane=getContentPane(); setSize(297,377); this.setBounds(400, 100, 400, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); timer =new Timer(1000,(ActionListener) this); a = new int[row+2][col+2]; initGUI(); } public void initGUI(){ p3=new JPanel();

扫雷小游戏课程设计

西安科技大学 软件工程课程设计报告 题目:扫雷游戏开发 班级:计科0901班 学号: xxxxxxxxxxxx 姓名: xxxxxxx 电话:xxxxxxxxxxxxx

2012年7月 目录 1 绪论 (3) 1.1 选题目的及意义 (3) 1.2 系统概述 (3) 2 可行性研究报告 (4) 3 需求规格说明书 (5) 4 总体设计说明书 (6) 5详细设计说明书 (7) 6 系统实现 (16) 6.1 开发环境 (16) 6.2 关键技术 (16) 6.3 运行结果 (16) 7测试分析报告 (17) 8心得体会 (19) 参考文献

1.绪论 1.1选题目的及意义 随着现在生活节奏的加快,人们在工作学习之余需要一个轻松娱乐的放松环境。因此我编写此软件的目的,一方面作为初学者来了解java环境下的小程序开发,另一方面使用户能在娱乐休闲的同时拓展思维能力。扫雷是单人计算机游戏。游戏的用户界面由小方格组成的战场构成。当游戏开始时,计算机将固定的地雷数随机的放到战场的方格。此游戏还允许玩家指定战场中的地雷数。 参考Windows 操作系统提供的扫雷游戏,改进扫雷游戏程序,增加以下功能:在主界面中添加一个菜单栏,菜单栏中包括游戏和帮助两个菜单,其中游戏菜单中设置初级、中级、高级、自定义、声音、扫雷英雄榜这几个菜单项,帮助菜单中设置游戏规则和制作人员两个菜单项。 背景说明: a.软件名称:扫雷 b.用户:所有扫雷游戏爱好者 1.2 系统概述 1.2.1扫雷游戏的基本要求 Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下: (1) 扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。 (2) 选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击‘“开始”便启动计时器。 (3) 用户要揭开某个方块,可左键单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。 (4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。 (5)当用户点中雷时,将有“你输了”的提示出现,胜利时,将有“你赢了”的提示出现。 1.2.2 需实现的主要功能 用户可以自定义级别并且可以任意输入雷数; 具有计时功能,即显示用户完成移动盘子所花费的时间。

c语言实现扫雷程序模拟

本人写的扫雷程序,由于时间紧迫,写的比较粗糙,但经过c编译可运行,下面是源代码: /*name:kaituozhe001saolei1125.cpp*/ #include #include #include #define N 9 int mine[N][N],game[N][N]; int row=0,col=0,a,b; void main() { void putmine(int n1); int expand(int row,int col); int Remain(); void myprintf1(); void myprintf2(); int aroundmine(int row,int col); /* 提示说明 */ printf(" -------------------------------------------------------------------\n* 您接下来要玩一个%d*%d的扫雷游戏。 *\n* 请按提示操作(否则会出意外的), *\n* 在这个游戏中“*”代表地雷,“#”代表未打开的盒子。 *\n* 当您将全部非雷盒子打开后,您就赢了! *\n* 谢谢参与游 戏!》》开拓者制作bo《《 *\n -------------------------------------------------------------------",N,N); int n1,i=0,j=0;

/*初始化雷区*/ for(i=0;i> ",N,N,N*N); scanf("%d",&n1); printf("\n下面是所布雷阵>> \n"); putmine(n1); myprintf1(); for(i=0;i> \n"); myprintf1(); while(Remain()!=n1) { printf("\n请输入扫雷坐标,以“,”分开>> "); scanf("%d,%d",&row,&col); for(i=0;i

扫雷游戏Java源代码详解

扫雷游戏Java源代码 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.Timer; public class ScanLei1 extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton[] btns; private JLabel b1; private JLabel b2; private JLabel b3; private Timer timer; private int row=9; private int col=9; private int bon=10; private int[][] a; private int b; private int[] a1; private JPanel p,p1,p2,p3; public ScanLei1(String title){ super(title); contentPane=getContentPane();

计算机图形学课程设计——扫雷游戏程序设计

计算机图形学课程设计——扫雷游戏程序设计

《计算机图形学》课程设计报告 VC++扫雷游戏的程序设计 专业班级: 小组成员:

指导老师: 日期:2012年12月24日 1、需求分析 本课程设计实现类似于Windows XP操作系统自带的扫雷游戏。该设计以V isual C++ 6.0为开发环境, Windows 7/XP为程序运行平台。在程序设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二维数组的行和列、当前状态、方块属性、历史状态的结构体,采用了MFC机制解决问题的方法。整个游戏程序包括了布雷、扫雷过程和结果三个阶段,在处理鼠标响应事件中伴随着GDI绘图。程序通过调试运行,实现简单的设计目标,满足扫雷游戏初学者的需要。 通过本课程设计,以便更好的巩固计算机图形学相关知识,掌握课程设计基本的方法和技巧,同时增加同学之间的团队合作精神以及培养分析问题、解决问题的能力。 2.总体设计 2.1 功能概述 扫雷游戏的游戏界面如图1所示。在这个界面中,由众多面积均等的小方块所组成的区域称之为雷区,雷区的大小由用户设置的游戏等级决定。

图1 游戏开始时,系统会在雷区中随机布下若干个地雷。安放地雷的小方块称之为雷方块,其他的称之为非雷方块。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块 中有多少雷方块。玩家可以根据这些信息去判断是否可以鼠标点击方块, 并把认为是地雷的方块打上标识。当玩家将所有地雷找出后,其余的非雷方块区域都已打开,此时游戏结束。在游戏过程中,一旦错误地打开了雷方块则立即失败,游戏结束。 游戏规则总结: ●开始:按左键开始游戏,按按钮或菜单重新开始。 ●左键:按下时,是雷则结束,非雷则显示数字。 ●数字:代表此数字周围一圈八格中雷的个数。 ●右键:奇次按下表示雷,偶数按下表示对上次的否定。 ●结束:左键按到雷结束,找出全部雷结束。 在游戏开始后,雷区上方有两个计数器。右边的计数器显示用户扫

c语言扫雷程序代码

#include #include #include #include #define Map_list 6 #define Map_line 6 void map_printf(int x,int y,int b[][Map_list]) { int i,j; for(i=0;i0&&b[i][j]<9) printf(" %d",b[i][j]); } printf("\n"); } } void Move(int x,int y) { HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos= {x, y}; SetConsoleCursorPosition(hOut, pos); } int kb_cursor() { int a=getch(); char input[2]; if(a<0) { input[0]=a; input[1]=getch(); } else {

input[1]=a; } return input[1]; } void HideCursor() { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } void printf_0(int b[][Map_list],int x,int y) { int i,j,n; if(x==0&&y==0) { n=0; for(i=0;i<2;i++) for(j=0;j<2;j++) if(b[x+i][y+j]==11) n++; if(n==0) { for(i=0;i<2;i++) for(j=0;j<2;j++) { if(b[x+i][x+j]==10) { b[x+i][y+j]=0; printf_0(b,x+i,y+j); } } } else b[x][y]=n; } else if(x==0&&y0) { n=0; for(i=0;i<2;i++) for(j=-1;j<2;j++) if(b[x+i][y+j]==11) n++; if(n!=0) b[x][y]=n; else for(i=0;i<2;i++)

相关主题
文本预览
相关文档 最新文档