⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 常见的小游戏
💻 FRM
📖 第 1 页 / 共 2 页
字号:
Case vbKeyC
  Timermove.Interval = 30
End Select
End Sub

Private Sub project()
Randomize
vecX = Round(6 * Rnd() - 3)
vecY = -Abs(Round(Sqr(step * step - vecX * vecX)))
multiplier = 0: presentscore = 5
king.Visible = True: king.Picture = king1.Picture
Timer2.Enabled = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
MMControl1.Command = "stop": MMControl1.Command = "close"
End Sub

Private Sub king_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeySpace And startword.Visible = True Then '图片在动时将获得焦点,故在此执行游戏重新开始的诸命令
  tostart = True
  startword.Visible = False: score = 0: lblscore.Caption = "0"
  For presentrow = 0 To row - 1 '以循环嵌套绘制砖墙
    For presentline = 0 To liner - 1
      Form1.PaintPicture Image1(Int(Rnd() * 2)).Picture, marginleft + presentrow * brickwidth, margintop + presentline * brickheight
      hit(presentrow, presentline) = False
    Next presentline
  Next presentrow
  counting = 72: prizeused = False
  board.Width = 80: board1.Width = 80
  project
  Timermove.Enabled = True: Timer1.Enabled = False
  remained(0).FillColor = vbWhite: remained(1).FillColor = vbWhite: life = 3
End If
If KeyCode = vbKeyLeft Then
  If board.Left > 40 Then
    board.Left = board.Left - 40: board1.Left = board1.Left - 40
  Else
    board.Left = 0
  End If
Else
  If KeyCode = vbKeyRight Then
    If board.Left + board.Width + 40 < Me.ScaleWidth Then
      board.Left = board.Left + 40: board1.Left = board1.Left + 40
    Else
      board.Left = Me.ScaleWidth - board.Width
    End If
  End If
End If
board1.Left = board.Left
Select Case KeyCode
Case vbKeyZ
  Timermove.Interval = 20
Case vbKeyX
  Timermove.Interval = 25
Case vbKeyC
  Timermove.Interval = 30
End Select
End Sub

Private Sub prize_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyLeft Then
  If board.Left > 40 Then
    board.Left = board.Left - 40: board1.Left = board1.Left - 40
  Else
    board.Left = 0
  End If
Else
  If KeyCode = vbKeyRight Then
    If board.Left + board.Width + 40 < Me.ScaleWidth Then
      board.Left = board.Left + 40: board1.Left = board1.Left + 40
    Else
      board.Left = Me.ScaleWidth - board.Width
    End If
  End If
End If
board1.Left = board.Left
Select Case KeyCode
Case vbKeyZ
  Timermove.Interval = 20
Case vbKeyX
  Timermove.Interval = 25
Case vbKeyC
  Timermove.Interval = 30
End Select
End Sub

Private Sub Timer1_Timer()
prize.Top = prize.Top + 10
If Abs(prize.Top + prize.Height - board.Top) < 5 And (prize.Left > board.Left And prize.Left + prize.Width < board.Left + board.Width) Then
  board.Width = board.Width + 40: board1.Width = board.Width
  MMControl1.Command = "stop": MMControl1.Command = "close": MMControl1.Command = "open"
  MMControl1.FileName = App.Path + "\sound\lengthen.wav": MMControl1.Command = "play"
  prize.Visible = False: Timer1.Enabled = False
End If
If prize.Top > board.Top Then
  prize.Visible = False: Timer1.Enabled = False
End If
End Sub

Private Sub Timer2_Timer()
If king.Picture = king1.Picture Then
  king.Picture = king2.Picture
Else
  If king.Picture = king2.Picture Then king.Picture = king1.Picture
End If
End Sub

Private Sub Timermove_Timer()
ball.Left = ball.Left + vecX: ball.Top = ball.Top + vecY
If vecX <= 0 And vecY <= 0 Then '计算球往左上方移动时遇障碍的反弹情况
  ballleft = GetPixel(Me.hdc, ball.Left, ball.Top + radius)
  balltop = GetPixel(Me.hdc, ball.Left + radius, ball.Top)
  If ballleft <> vbBlack Or ((ball.Left < marginleft And ball.Top < marginbottom) Or (ball.Left + 2 * radius > marginright And ball.Top < marginbottom)) Then '左遇障碍物
    alwaysreflection
    vecX = -vecX
    '*********确保被击中的砖消失************************
    If (ball.Left < marginleft Or ball.Top < margintop) Or ball.Left + 2 * radius > marginright Then Exit Sub
    presentrow = (ball.Left - marginleft) \ brickwidth
    presentline = (ball.Top + radius - margintop) \ brickheight
    Line (presentrow * brickwidth + marginleft, presentline * brickheight + margintop)-Step(brickwidth, brickheight), vbBlack, BF
    '***************************************************
    recordscore
  End If
  If balltop <> vbBlack Or ((ball.Left < marginleft And ball.Top < marginbottom) Or (ball.Left + 2 * radius > marginright And ball.Top < marginbottom)) Then '上遇障碍物
    alwaysreflection
    vecY = -vecY
    '*********确保被击中的砖消失************************
    If (ball.Left < marginleft Or ball.Top < margintop) Or ball.Left + 2 * radius > marginright Then Exit Sub
    presentrow = (ball.Left + radius - marginleft) \ brickwidth
    presentline = (ball.Top - margintop) \ brickheight
    Line (presentrow * brickwidth + marginleft, presentline * brickheight + margintop)-Step(brickwidth, brickheight), vbBlack, BF
    '***************************************************
    recordscore
  End If
End If
If vecX <= 0 And vecY > 0 Then '计算球往左下方移动时遇障碍的反弹情况
  ballleft = GetPixel(Me.hdc, ball.Left, ball.Top + radius)
  ballbottom = GetPixel(Me.hdc, ball.Left + radius, ball.Top + 2 * radius)
  If ballleft <> vbBlack Then '左遇障碍物
    vecX = -vecX
    '*********确保被击中的砖消失************************
    If (ball.Left < marginleft Or ball.Top < margintop) Or (ball.Left + 2 * radius > marginright Or ball.Top + 2 * radius > marginbottom) Then Exit Sub
    presentrow = (ball.Left - marginleft) \ brickwidth
    presentline = (ball.Top + radius - margintop) \ brickheight
    Line (presentrow * brickwidth + marginleft, presentline * brickheight + margintop)-Step(brickwidth, brickheight), vbBlack, BF
    '***************************************************
    recordscore
  End If
  If ballleft = vbBlack And ballbottom <> vbBlack Then '下遇障碍物
    vecY = -vecY
    '*********确保被击中的砖消失************************
    If (ball.Left < marginleft Or ball.Top < margintop) Or (ball.Left + 2 * radius > marginright Or ball.Top + 2 * radius > marginbottom) Then Exit Sub
    presentrow = (ball.Left + radius - marginleft) \ brickwidth
    presentline = (ball.Top + 2 * radius - margintop) \ brickheight
    Line (presentrow * brickwidth + marginleft, presentline * brickheight + margintop)-Step(brickwidth, brickheight), vbBlack, BF
    '***************************************************
    recordscore
  End If
  '检测是否被挡板挡回
  If ball.Top + 2 * radius > board.Top And (ball.Left + radius > board.Left And ball.Left + radius < board.Left + board.Width) Then
    vecX = vecX + Round(Rnd() * 2 - 1) '变化反弹角度
    If vecX >= 5 Then vecX = 4
    If vecX <= -5 Then vecX = -4
    vecY = -Abs(Round(Sqr(step * step - vecX * vecX)))
    multiplier = 0: presentscore = 5
    MMControl1.Command = "stop": MMControl1.Command = "close": MMControl1.Command = "open"
    MMControl1.FileName = App.Path + "\sound\hit.wav": MMControl1.Command = "play"
  End If
  If ball.Top + 2 * radius > board.Top + step Then
    Timermove.Enabled = False
    life = life - 1
    king.Picture = king4.Picture
    MsgBox "任务失败,还有小球" + Str(life) + "个", vbOKOnly, "回合结束"
    board.Width = 80: board1.Width = 80 '板长恢复原始状态
    If life = 2 Then remained(0).FillColor = vbBlack
    If life = 1 Then remained(1).FillColor = vbBlack
    If life = 0 Then
      startword.Visible = True
      tostart = False
      ball.Left = board.Left + board.Width \ 2: ball.Top = board.Top - 2 * radius
      Exit Sub
    End If
    ball.Left = board.Left + board.Width \ 2: ball.Top = board.Top - 2 * radius
    project
    Timermove.Enabled = True
  End If
End If
If vecX > 0 And vecY <= 0 Then '计算球往右上方移动时遇障碍的反弹情况
  ballright = GetPixel(Me.hdc, ball.Left + 2 * radius, ball.Top + radius)
  balltop = GetPixel(Me.hdc, ball.Left + radius, ball.Top)
  If ballright <> vbBlack Or ((ball.Left < marginleft And ball.Top < marginbottom) Or (ball.Left + 2 * radius > marginright And ball.Top < marginbottom)) Then '右遇障碍物
    alwaysreflection
    vecX = -vecX
    '*********确保被击中的砖消失************************
    If (ball.Left < marginleft Or ball.Top < margintop) Or ball.Left + 2 * radius > marginright Then Exit Sub
    presentrow = (2 * radius + ball.Left - marginleft) \ brickwidth
    presentline = (ball.Top + radius - margintop) \ brickheight
    Line (presentrow * brickwidth + marginleft, presentline * brickheight + margintop)-Step(brickwidth, brickheight), vbBlack, BF
    '***************************************************
    recordscore
  End If
  If balltop <> vbBlack Or ((ball.Left < marginleft And ball.Top < marginbottom) Or (ball.Left + 2 * radius > marginright And ball.Top < marginbottom)) Then
    alwaysreflection
    vecY = -vecY
    '*********确保被击中的砖消失************************
    If (ball.Left < marginleft Or ball.Top < margintop) Or ball.Left + 2 * radius > marginright Then Exit Sub
    presentrow = (ball.Left + radius - marginleft) \ brickwidth
    presentline = (ball.Top - margintop) \ brickheight
    Line (presentrow * brickwidth + marginleft, presentline * brickheight + margintop)-Step(brickwidth, brickheight), vbBlack, BF
    '***************************************************
    recordscore
  End If
End If
If vecX > 0 And vecY > 0 Then '计算球往右下方移动时遇障碍的反弹情况
  ballright = GetPixel(Me.hdc, ball.Left + 2 * radius, ball.Top + radius)
  ballbottom = GetPixel(Me.hdc, ball.Left + radius, ball.Top + 2 * radius)
  If ballright <> vbBlack Then '右遇障碍物
    vecX = -vecX
    '*********确保被击中的砖消失************************
    If (ball.Left < marginleft Or ball.Top < margintop) Or (ball.Left + 2 * radius > marginright Or ball.Top + 2 * radius > marginbottom) Then Exit Sub
    presentrow = (2 * radius + ball.Left - marginleft) \ brickwidth
    presentline = (ball.Top + radius - margintop) \ brickheight
    Line (presentrow * brickwidth + marginleft, presentline * brickheight + margintop)-Step(brickwidth, brickheight), vbBlack, BF
    '***************************************************
    recordscore
  End If
  If ballright = vbBlack And ballbottom <> vbBlack Then '下遇障碍物
    vecY = -vecY
    '*********确保被击中的砖消失************************
    If (ball.Left < marginleft Or ball.Top < margintop) Or (ball.Left + 2 * radius > marginright Or ball.Top + 2 * radius > marginbottom) Then Exit Sub
    presentrow = (ball.Left + radius - marginleft) \ brickwidth
    presentline = (ball.Top + 2 * radius - margintop) \ brickheight
    Line (presentrow * brickwidth + marginleft, presentline * brickheight + margintop)-Step(brickwidth, brickheight), vbBlack, BF
    '***************************************************
    recordscore
  End If
  If ball.Top + 2 * radius > board.Top And (ball.Left + radius > board.Left And ball.Left + radius < board.Left + board.Width) Then
    vecX = vecX + Round(Rnd() * 2 - 1) '变化反弹角度
    If vecX >= 5 Then vecX = 4
    If vecX <= -5 Then vecX = -4
    vecY = -Abs(Round(Sqr(step * step - vecX * vecX)))
    multiplier = 0: presentscore = 5
    MMControl1.Command = "stop": MMControl1.Command = "close": MMControl1.Command = "open"
    MMControl1.FileName = App.Path + "\sound\hit.wav": MMControl1.Command = "play"
  End If
  If ball.Top + 2 * radius > board.Top + step Then '处理回合失败的情形
    Timermove.Enabled = False
    life = life - 1
    Timer2.Enabled = False
    king.Picture = king4.Picture
    MsgBox "任务失败,还有小球" + Str(life) + "个", vbOKOnly, "回合结束"
    board.Width = 80: board1.Width = 80 '板长恢复原始状态
    If life = 2 Then remained(0).FillColor = vbBlack
    If life = 1 Then remained(1).FillColor = vbBlack
    If life = 0 Then
      startword.Visible = True
      tostart = False
      ball.Left = board.Left + board.Width \ 2: ball.Top = board.Top - 2 * radius
      Exit Sub
    End If
    ball.Left = board.Left + board.Width \ 2: ball.Top = board.Top - 2 * radius
    project
    Timermove.Enabled = True
  End If
End If
If ball.Top < 96 Then '96即margintop,要求小球不超过最上面的城墙
    vecY = Abs(vecY)
    ball.Top = 97
End If
End Sub

Private Sub recordscore()
'若小球弹起一次撞掉多个砖头,每撞一次得分应翻倍
MMControl1.Command = "stop": MMControl1.Command = "close": MMControl1.Command = "open"
MMControl1.FileName = App.Path + "\sound\hit.wav": MMControl1.Command = "play"
If prizeused = False Then
    Randomize
    If Rnd() * 60 > 59 Then
      prizeused = True
      prize.Visible = True: prize.Left = marginleft + presentrow * brickwidth: prize.Top = margintop + presentline * brickheight
      Timer1.Enabled = True
    End If
End If
If hit(presentrow, presentline) = False Then
    hit(presentrow, presentline) = True
    multiplier = multiplier + 1
    caculation = multiplier
    Do While caculation > 0
      presentscore = presentscore * 2
      caculation = caculation - 1
    Loop
    score = score + presentscore
    If score = 5 Then score = 0
    lblscore.Caption = Str(score)
    counting = counting - 1
    If counting = 0 Then
      king.Picture = king3.Picture
      MsgBox "你完成任务了!", vbOKOnly, "游戏结束"
      startword.Visible = True
      tostart = False: Timermove.Enabled = False
      ball.Left = board.Left + board.Width \ 2: ball.Top = board.Top - 2 * radius
      MMControl1.Command = "stop": MMControl1.Command = "close": MMControl1.Command = "open"
      MMControl1.FileName = App.Path + "\sound\win.wav": MMControl1.Command = "play"
    Else
      MMControl1.Command = "stop": MMControl1.Command = "close": MMControl1.Command = "open"
      MMControl1.FileName = App.Path + "\sound\hit.wav": MMControl1.Command = "play"
    End If
'******************************************************
End If
End Sub

Private Sub alwaysreflection()
If (ball.Left < marginleft Or ball.Left + 2 * radius > marginright) And (ball.Top + 2 * radius < marginbottom And ball.Top + 2 * radius > marginbottom - 5) Then
  vecY = -vecY
End If
If (ball.Left < marginleft And ball.Left > marginleft + 5) Or (ball.Left + 2 * radius > marginright And ball.Left + 2 * radius < marginright + 5) And ball.Top + 2 * radius < marginbottom Then
  vecX = -vecX
End If
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -