| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1029 人关注过本帖
标题:[求助] 大家能否帮我注释下?
只看楼主 加入收藏
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
结帖率:100%
收藏
 问题点数:0 回复次数:7 
[求助] 大家能否帮我注释下?
贪吃蛇
网上下的源码,可是看不懂,大家能否帮我注释下呢?
Dim s() As Integer
Dim dz(1) As Integer   
Dim fx As Byte   'fx是什么?
Const sb = 0
Const xb = 1
Const zb = 2
Const yb = 3

Const z = 10  
Const d = 10
Const k = 10
Const g = 10
Const hg = 20
Const sg = 20  

Private Sub Form_Load()
ReDim s(1, 0)
hgz   
s(0, 0) = 1
s(1, 0) = 1
fx = xb
bean   
End Sub

Private Sub hgz()
Dim l As Integer
Dim l1 As Integer

For l = 0 To hg
  For l1 = 0 To sg
    Line (l * k + z, l1 * g + d)-((l + 1) * k + z, (l1 + 1) * g + d), 0, B  
 Next
Next
End Sub

Private Sub bean()   
Randomize
dz(0) = Int((hg + 1) * Rnd)
dz(1) = Int((sg + 1) * Rnd)
Line (dz(0) * k + z, dz(1) * g + d)-((dz(0) + 1) * k + z, (dz(1) + 1) * g + d), 65280, BF
End Sub

Private Sub Timer1_Timer()
Dim n As Integer
Cls  
hgz  
Line (dz(0) * k + z, dz(1) * g + d)-((dz(0) + 1) * k + z, (dz(1) + 1) * g + d), 65280, BF
For n = UBound(s, 2) To 1 Step -1    '这个for 循环是什么作用?下标已经越界了,有什么意义?
s(0, n) = s(0, n - 1)
 s(1, n) = s(1, n - 1)
Next

Select Case fx   '这里又是怎么判别的?
Case sb
  s(1, 0) = s(1, 0) - 1
  If s(1, 0) < 0 Then over  
 Case xb
  s(1, 0) = s(1, 0) + 1
  If s(1, 0) > sg Then over
 Case zb
  s(0, 0) = s(0, 0) - 1
  If s(0, 0) < 0 Then over
 Case yb
  s(0, 0) = s(0, 0) + 1
  If s(0, 0) > hg Then over
End Select

If s(0, 0) = dz(0) And s(1, 0) = dz(1) Then   
 ReDim Preserve s(1, UBound(s, 2) + 1)
 Select Case fx
  Case sb
   s(1, UBound(s, 2)) = s(1, 0) + 1
   s(0, UBound(s, 2)) = s(0, 0)
  Case xb
   s(1, UBound(s, 2)) = s(1, 0) - 1
   s(0, UBound(s, 2)) = s(0, 0)
  Case zb
   s(0, UBound(s, 2)) = s(0, 0) + 1
   s(1, UBound(s, 2)) = s(1, 0)
  Case yb
   s(0, UBound(s, 2)) = s(0, 0) - 1
   s(1, UBound(s, 2)) = s(1, 0)
 End Select
 bean
End If

Line (s(0, 0) * k + 2 + z, s(1, 0) * g + 2 + d)-((s(0, 0) + 1) * k - 2 + z, (s(1, 0) + 1) * g - 2 + d), 255, BF
For n = 1 To UBound(s, 2)
 Line (s(0, n) * k + 2 + z, s(1, n) * g + 2 + d)-((s(0, n) + 1) * k - 2 + z, (s(1, n) + 1) * g - 2 + d), 255, BF
 If s(0, 0) = s(0, n) And s(1, 0) = s(1, n) Then over
Next
End Sub


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
 Case 38       ' 38为键盘的上箭头KeyCode值
  If fx <> xb Then   '这是什么意思?有什么作用?
   fx = sb

 End If
 Case 40      '40为键盘的下箭头KeyCode值
  If fx <> sb Then
   fx = xb
  End If
 Case 37    '37为键盘的左箭头KeyCode值
  If fx <> yb Then
   fx = zb
  End If
 Case 39    '39为键盘的右箭头KeyCode值
  If fx <> zb Then
   fx = yb
  End If
End Select
End Sub
 
Private Sub over()
Timer1.Enabled = False
MsgBox "哈哈~~~~,你完了"
End Sub

[[it] 本帖最后由 Sally_SJL 于 2008-3-19 11:13 编辑 [/it]]
搜索更多相关主题的帖子: Const 注释 Integer Dim Sub 
2008-03-18 20:27
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
我把不明白的已经标出来了,如果有人知道的话,可以回复一下吗?

人生没有彩排,每天都是现场直播~~~
2008-03-19 11:17
jxh2003zfr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-12-21
收藏
得分:0 
1.'这个for 循环是什么作用?下标已经越界了,有什么意义?
    没越界,Ubound(s,2)表示s的2维上标;s(0, n - 1)最小下标为0

2.'这里又是怎么判别的?
   用来判别是按的什么键,上下左右?

3.'这是什么意思?有什么作用?
   限定不能往回走,比如,你之前按了向下,此时再按向上走时则忽略此此按键,即不可往回走。
2008-03-19 12:28
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
Form_Load()事件中已经定义了数组s(1,0)
ReDim s(1, 0)

For n = UBound(s, 2) To 1 Step -1   
s(0, n) = s(0, n - 1)
s(1, n) = s(1, n - 1)
Next

所以n=UBound(s,2)=0
即 For n = 0 To 1 Step -1   
s(0, 0) = s(0,  - 1)
s(1, 0) = s(1, - 1)
这样不是越界了吗?

人生没有彩排,每天都是现场直播~~~
2008-03-19 13:04
jxh2003zfr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-12-21
收藏
得分:0 
请注意:timer下有以下代码,s有重定义过大小,即吃了一个豆子后S二维下标就加一了。
If s(0, 0) = dz(0) And s(1, 0) = dz(1) Then   
ReDim Preserve s(1, UBound(s, 2) + 1)
Select Case fx
  Case sb
   s(1, UBound(s, 2)) = s(1, 0) + 1
   s(0, UBound(s, 2)) = s(0, 0)
  Case xb
   s(1, UBound(s, 2)) = s(1, 0) - 1
   s(0, UBound(s, 2)) = s(0, 0)
  Case zb
   s(0, UBound(s, 2)) = s(0, 0) + 1
   s(1, UBound(s, 2)) = s(1, 0)
  Case yb
   s(0, UBound(s, 2)) = s(0, 0) - 1
   s(1, UBound(s, 2)) = s(1, 0)
End Select
2008-03-19 13:53
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
[bo]以下是引用 [un]jxh2003zfr[/un] 在 2008-3-19 13:53 的发言:[/bo]

请注意:timer下有以下代码,s有重定义过大小,即吃了一个豆子后S二维下标就加一了。
If s(0, 0) = dz(0) And s(1, 0) = dz(1) Then   
ReDim Preserve s(1, UBound(s, 2) + 1)
Select Case fx
  Case sb
   s(1, UBound(s ...


哦,知道了,谢谢你!
再问个问题  ^_^

If s(0, 0) = dz(0) And s(1, 0) = dz(1) Then   '吃掉一个食物
 ReDim Preserve s(1, UBound(s, 2) + 1)  '身体加长
 Select Case fx          '身体移动
  Case sb                身体是怎么移的呀?不太明白  
s(1, UBound(s, 2)) = s(1, 0) + 1
   s(0, UBound(s, 2)) = s(0, 0)

  Case xb   
   s(1, UBound(s, 2)) = s(1, 0) - 1
   s(0, UBound(s, 2)) = s(0, 0)
  Case zb     
   s(0, UBound(s, 2)) = s(0, 0) + 1
   s(1, UBound(s, 2)) = s(1, 0)
  Case yb  
   s(0, UBound(s, 2)) = s(0, 0) - 1
   s(1, UBound(s, 2)) = s(1, 0)
 End Select
 bean
End If

人生没有彩排,每天都是现场直播~~~
2008-03-19 14:09
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
已经明白了,非常感谢 jxh2003zfr !

人生没有彩排,每天都是现场直播~~~
2008-03-19 14:42
jxh2003zfr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-12-21
收藏
得分:0 
举例说明:
1.首先你要知道S(0,0)表示第1段身体的X坐标,S(1,0)表示第1段身体的Y坐标依此类推,S(0,2)表示第3段身体的X坐标...,以上坐标概念也可理解为水平第几格,垂直第几格
2.身体坐标会变(移动)

Select Case fx          '身体移动
  Case sb                身体是怎么移的呀?不太明白  
s(1, UBound(s, 2)) = s(1, 0) + 1
   s(0, UBound(s, 2)) = s(0, 0)

如果当前小蛇是往sb即往下走并吃到一个食物时,为向上长长,长长部分坐标即s(1,UBound(S,2))=第1段身体的Y坐标+1段身体,然后再通过以下重绘所有身体。
Line (s(0, 0) * k + 2 + z, s(1, 0) * g + 2 + d)-((s(0, 0) + 1) * k - 2 + z, (s(1, 0) + 1) * g - 2 + d), 255, BF'这是第1段身体
For n = 1 To UBound(s, 2)'这是除第1段外的所有身体
    Line (s(0, n) * k + 2 + z, s(1, n) * g + 2 + d)-((s(0, n) + 1) * k - 2 + z, (s(1, n) + 1) * g - 2 + d), 255, BF
    If s(0, 0) = s(0, n) And s(1, 0) = s(1, n) Then over'如果第1段身体与最后1段身体相撞就game over 了。
Next


'现在应该明白了吧
2008-03-19 14:59
快速回复:[求助] 大家能否帮我注释下?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037250 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved