哟嗬...这不是159行的俄罗斯方块么....

积善成魔 2012-02-29 04:28:19
加精


Public Class Form1
Private ShowBitMap As New Bitmap(20, 20), BackBitMap As New Bitmap(20, 20), BlockType As Integer, BlockState As Integer, NextType As Integer = 3, Blocks(,) As Integer '0 隐藏,1显示,2 静止
Private DrawRectangle As Rectangle = New Rectangle(2, 2, 15, 25), DrawLocation As Point = New Point(5, 0), Score(1) As Long
Private WithEvents MyTimer As New Timer
Private Function GetPreviewPoints(ByVal nType As Integer, ByVal nState As Integer) As Point()
If nType = 1 Then
If nState Mod 4 = 0 Then Return New Point() {New Point(0, 1), New Point(1, 1), New Point(2, 1), New Point(2, 0)}
If nState Mod 4 = 1 Then Return New Point() {New Point(0, 0), New Point(0, 1), New Point(0, 2), New Point(1, 2)}
If nState Mod 4 = 2 Then Return New Point() {New Point(0, 0), New Point(0, 1), New Point(1, 0), New Point(2, 0)}
If nState Mod 4 = 3 Then Return New Point() {New Point(0, 0), New Point(1, 0), New Point(1, 1), New Point(1, 2)}
ElseIf nType = 2 Then
If nState Mod 4 = 0 Then Return New Point() {New Point(0, 0), New Point(1, 0), New Point(2, 0), New Point(2, 1)}
If nState Mod 4 = 1 Then Return New Point() {New Point(0, 0), New Point(0, 1), New Point(0, 2), New Point(1, 0)}
If nState Mod 4 = 2 Then Return New Point() {New Point(0, 0), New Point(0, 1), New Point(1, 1), New Point(2, 1)}
If nState Mod 4 = 3 Then Return New Point() {New Point(1, 0), New Point(1, 1), New Point(1, 2), New Point(0, 2)}
ElseIf nType = 3 Then
If nState Mod 2 = 0 Then Return New Point() {New Point(0, 0), New Point(1, 0), New Point(2, 0), New Point(3, 0)}
If nState Mod 2 = 1 Then Return New Point() {New Point(0, 0), New Point(0, 1), New Point(0, 2), New Point(0, 3)}
ElseIf nType = 4 Then
If nState Mod 2 = 0 Then Return New Point() {New Point(0, 0), New Point(0, 1), New Point(1, 1), New Point(1, 2)}
If nState Mod 2 = 1 Then Return New Point() {New Point(0, 1), New Point(1, 0), New Point(1, 1), New Point(2, 0)}
ElseIf nType = 5 Then
If nState Mod 2 = 0 Then Return New Point() {New Point(0, 1), New Point(0, 2), New Point(1, 0), New Point(1, 1)}
If nState Mod 2 = 1 Then Return New Point() {New Point(0, 0), New Point(1, 0), New Point(1, 1), New Point(2, 1)}
ElseIf nType = 6 Then
If nState Mod 4 = 0 Then Return New Point() {New Point(0, 1), New Point(1, 0), New Point(1, 1), New Point(1, 2)}
If nState Mod 4 = 1 Then Return New Point() {New Point(0, 0), New Point(1, 0), New Point(1, 1), New Point(2, 0)}
If nState Mod 4 = 2 Then Return New Point() {New Point(0, 0), New Point(0, 1), New Point(0, 2), New Point(1, 1)}
If nState Mod 4 = 3 Then Return New Point() {New Point(0, 1), New Point(1, 1), New Point(2, 1), New Point(1, 0)}
Else
Return New Point() {New Point(0, 0), New Point(0, 1), New Point(1, 0), New Point(1, 1)}
End If
End Function
Private Function NewBlock(ByVal nLocation As Point) As Boolean
Dim Left As Integer = 100, Right As Integer = -1, Bottom As Integer = -1, Top As Integer = 100, nPoints As Point() = GetPreviewPoints(BlockType, BlockState)
For Each n As Point In nPoints
If n.X < Left Then Left = n.X
If n.X > Right Then Right = n.X
If n.Y < Top Then Top = n.Y
If n.Y > Bottom Then Bottom = n.Y
Next
If nLocation.X + Left < 0 Then
nLocation.X = -Left
ElseIf nLocation.X + Right - Left > DrawRectangle.Width Then
nLocation.X = DrawRectangle.Width - (Right - Left)
End If
If nLocation.Y + Top < 0 Then
nLocation.Y = -Top
ElseIf nLocation.Y + (Bottom - Top) > DrawRectangle.Height Then
nLocation.Y = DrawRectangle.Height - (Bottom - Top)
Return True
End If
For Each p As Point In nPoints
If Blocks(p.X + nLocation.X, p.Y + nLocation.Y) > 1 Then Return True
Next
For y As Integer = 0 To DrawRectangle.Height
For x As Integer = 0 To DrawRectangle.Width
If Blocks(x, y) = 1 OrElse Blocks(x, y) > 5 Then Blocks(x, y) = 0
Next
Next
For Each p As Point In nPoints
Blocks(p.X + nLocation.X, p.Y + nLocation.Y) = 1
Next
DrawLocation = nLocation
End Function
Private Sub Key_Up(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
If e.KeyCode = Keys.W OrElse e.KeyCode = Keys.Up Then
BlockState += 1
If NewBlock(DrawLocation) = False Then DrawBlock()
ElseIf e.KeyCode = Keys.D OrElse e.KeyCode = Keys.Right Then
If NewBlock(New Point(DrawLocation.X + 1, DrawLocation.Y)) = False Then DrawBlock()
ElseIf e.KeyCode = Keys.A OrElse e.KeyCode = Keys.Left Then
If NewBlock(New Point(DrawLocation.X - 1, DrawLocation.Y)) = False Then DrawBlock()
ElseIf e.KeyCode = Keys.S OrElse e.KeyCode = Keys.Down OrElse e.KeyCode = Keys.Space Then
For y As Integer = 0 To DrawRectangle.Height
If NewBlock(New Point(DrawLocation.X, DrawLocation.Y + 1)) Then Exit For
Next
DrawBlock()
ElseIf e.KeyCode = Keys.Enter OrElse e.KeyCode = Keys.Escape Then
MyTimer.Enabled = Not MyTimer.Enabled
If MyTimer.Enabled Then
ReDim Blocks(DrawRectangle.Width, DrawRectangle.Height)
NewBlock(New Point(5, 0))
Score(1) = 0
Me.Text = "分数:" & Score(1)
End If
End If
End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyTimer.Tick
If NewBlock(New Point(DrawLocation.X, DrawLocation.Y + 1)) = False Then
DrawBlock()
Else
For y As Integer = 0 To DrawRectangle.Height
For x As Integer = 0 To DrawRectangle.Width
If Blocks(x, y) = 1 Then Blocks(x, y) = 2
Next
Next
Score(0) = ClearLine(0)
If Score(0) Then
Score(1) += (Score(0) ^ 2) * 10
Me.Text = "分数:" & Score(1)
Else
BlockType = NextType
NextType = Rnd() * 6
If NewBlock(New Point(5, 0)) Then
MyTimer.Enabled = False
MsgBox("游戏结束,按下 Enter 键重新开始。")
End If
End If
End If
End Sub
Private Function ClearLine(ByVal StartIndex As Integer) As Integer '消行
If StartIndex > DrawRectangle.Height Then Return 0
For x As Integer = 0 To DrawRectangle.Width
If Blocks(x, StartIndex) <> 2 Then Return ClearLine(StartIndex + 1)
Next
For x As Integer = 0 To DrawRectangle.Width
For y = StartIndex To 0 Step -1
If y = 0 Then
Blocks(x, y) = 0
Else
Blocks(x, y) = Blocks(x, y - 1)
End If
Next
Next
Return ClearLine(StartIndex + 1) + 1
End Function
Private Sub DrawBlock()
Dim i(4, 4) As Integer
For Each p As Point In GetPreviewPoints(NextType, 0)
i(p.X + 1, p.Y + 1) = 1
Next
DrawPicture(Blocks, DrawRectangle.Location, Me.CreateGraphics)
DrawPicture(i, New Point(DrawRectangle.Right + 2, DrawRectangle.Y), Me.CreateGraphics)
End Sub
Private Sub DrawPicture(ByVal Picture(,) As Integer, ByVal nDrawPoint As Point, ByVal DrawGraphics As Graphics)
For x As Integer = 0 To Picture.GetUpperBound(0)
For y As Integer = 0 To Picture.GetUpperBound(1)
If Picture(x, y) = 0 Then
DrawGraphics.DrawImage(BackBitMap, New Point(nDrawPoint.X * 20 + x * 20, nDrawPoint.Y * 20 + y * 20))
ElseIf Picture(x, y) = 1 OrElse Picture(x, y) = 2 Then
DrawGraphics.DrawImage(ShowBitMap, New Point(nDrawPoint.X * 20 + x * 20, nDrawPoint.Y * 20 + y * 20))
End If
Next
Next
End Sub
Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Randomize()
Graphics.FromImage(ShowBitMap).FillRectangle(New System.Drawing.Drawing2D.HatchBrush(Rnd() * 52, Color.FromArgb(&HFF000000 Or &HFFFFFF * Rnd()), Color.FromArgb(&HFF000000 Or &HFFFFFF * Rnd())), New Rectangle(0, 0, 20, 20))
Graphics.FromImage(ShowBitMap).DrawRectangle(Pens.Black, New Rectangle(0, 0, 19, 19))
Graphics.FromImage(BackBitMap).FillRectangle(New System.Drawing.Drawing2D.HatchBrush(Rnd() * 52, Color.FromArgb(&HFF000000 Or &HFFFFFF * Rnd()), Color.FromArgb(&HFF000000 Or &HFFFFFF * Rnd())), New Rectangle(0, 0, 20, 20))
Graphics.FromImage(BackBitMap).DrawRectangle(Pens.Black, New Rectangle(0, 0, 19, 19))
MyTimer.Interval = 500
Me.Text = "按下 Enter 开始新游戏"
Me.SetBounds(Screen.PrimaryScreen.Bounds.X + (Screen.PrimaryScreen.Bounds.Width - (DrawRectangle.Right + 10) * 20) / 2, Screen.PrimaryScreen.Bounds.Y + (Screen.PrimaryScreen.Bounds.Height - (DrawRectangle.Bottom + 5) * 20) / 2, (DrawRectangle.Right + 10) * 20, (DrawRectangle.Bottom + 5) * 20)
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedToolWindow
Me.MaximizeBox = False
End Sub
End Class
...全文
6665 141 打赏 收藏 转发到动态 举报
写回复
用AI写文章
141 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码之城 2013-11-16
  • 打赏
  • 举报
回复
vb.net 太牛逼 了, 我复制了,正常运行,研究一下,佩服
阳光照耀未来 2013-08-01
  • 打赏
  • 举报
回复
很好很强大,短小精悍啊。
loriyai52 2013-02-03
  • 打赏
  • 举报
回复
强人啊 膜拜中
y_keven 2012-11-17
  • 打赏
  • 举报
回复
引用 137 楼 ming_311 的回复:
引用 135 楼 tianyazaiheruan 的回复:是不是
很强大。。顶一个
ming_311 2012-11-17
  • 打赏
  • 举报
回复
引用 135 楼 tianyazaiheruan 的回复:
是不是
ming_311 2012-11-17
  • 打赏
  • 举报
回复
唉,前段时间用java写一个,一千多行啊
y_keven 2012-11-17
  • 打赏
  • 举报
回复
是不是
junge008 2012-03-12
  • 打赏
  • 举报
回复
不错,挺有趣的。。
daerter 2012-03-10
  • 打赏
  • 举报
回复
厉害,俄罗斯方块魅力无穷。。。。。
qshzf 2012-03-08
  • 打赏
  • 举报
回复
en嗯嗯,不错,
如果多用些分号,看看能不能整的一行
BG 2012-03-08
  • 打赏
  • 举报
回复
最近发现写这个的人很多么……
hanlu0012 2012-03-08
  • 打赏
  • 举报
回复
最近俄罗斯方块很火啊
dongli19921221 2012-03-08
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120306/17/EEAE1901-B7E1-4E6C-A4B1-0A5CA2842D30.html
不好意思 忘记贴地址了
[Quote=引用 129 楼 dongli19921221 的回复:]

贴个自己的mfc俄罗斯方块,双dc绘图,使用一个数据结构存储所有类型的形状和状态,通过随机数生成索引,oo写法(- -不知道够不够得上oo的标准),果断表示以后再也不用mfc写游戏了,纯粹蛋疼的。我的代码有点多,可能700行,实现了写注册表记录最大分数,预先显示下一个方块等,本想加上音乐播放器功能的,找音乐素材太麻烦直接不想弄了。。感觉蛮难的,不过同时消除多格可以积分翻倍哦
[/Quote]
dongli19921221 2012-03-08
  • 打赏
  • 举报
回复
贴个自己的mfc俄罗斯方块,双dc绘图,使用一个数据结构存储所有类型的形状和状态,通过随机数生成索引,oo写法(- -不知道够不够得上oo的标准),果断表示以后再也不用mfc写游戏了,纯粹蛋疼的。我的代码有点多,可能700行,实现了写注册表记录最大分数,预先显示下一个方块等,本想加上音乐播放器功能的,找音乐素材太麻烦直接不想弄了。。感觉蛮难的,不过同时消除多格可以积分翻倍哦
s1098689986 2012-03-07
  • 打赏
  • 举报
回复
都是牛人啊
流萤 2012-03-07
  • 打赏
  • 举报
回复
119楼说的不错,VB.net的可读性真的很高
乐天wbh 2012-03-07
  • 打赏
  • 举报
回复
不错 学习下
link253 2012-03-06
  • 打赏
  • 举报
回复
达人挺多的啊 跟帖学习
w20011025 2012-03-06
  • 打赏
  • 举报
回复
Public Class Form2
Private Declare Function Beep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Integer, ByVal dwDuration As Integer) As Boolean
Private ShowBitMap As New Bitmap(20, 20), BackBitMap As New Bitmap(20, 20), PreviewBitmap As Bitmap, PreviewGraphics As Graphics
Private BlockType As Integer, BlockState As Integer, DrawRectangle As Rectangle = New Rectangle(2, 2, 15, 26), DrawLocation As Point, Score As Long, NextType As Integer = 3, Blocks(,) As Integer '0 隐藏,1显示,2 静止
Private AllPoints()() As Point = {New Point() {New Point(0, 0), New Point(1, 0), New Point(2, 0), New Point(3, 0)}, New Point() {New Point(0, 0), New Point(0, 1), New Point(1, 0), New Point(1, 1)}, New Point() {New Point(0, 0), New Point(1, 0), New Point(2, 0), New Point(0, 1)}, New Point() {New Point(0, 0), New Point(1, 0), New Point(2, 0), New Point(2, 1)}, New Point() {New Point(0, 0), New Point(1, 0), New Point(1, 1), New Point(2, 1)}, New Point() {New Point(0, 1), New Point(1, 1), New Point(1, 0), New Point(2, 0)}, New Point() {New Point(0, 0), New Point(1, 0), New Point(2, 0), New Point(1, 1)}}
Private WithEvents MyTimer As New Timer
Private Function NewBlock(ByVal nLocation As Point, ByVal nState As Integer, ByVal nBeep As Boolean) As Boolean
Dim nLeft As Integer = 100, nRight As Integer = -1, nBottom As Integer = -1, nPoints() As Point = AllPoints(BlockType).Clone()
For i As Integer = 1 To nState Mod 4 '旋转
nPoints(2) = New Point(nPoints(2).Y - nPoints(1).Y + nPoints(1).X, 2 - nPoints(2).X + nPoints(1).X + nPoints(1).Y - 2)
nPoints(0) = New Point(nPoints(0).Y - nPoints(1).Y + nPoints(1).X, 2 - nPoints(0).X + nPoints(1).X + nPoints(1).Y - 2)
nPoints(3) = New Point(nPoints(3).Y - nPoints(1).Y + nPoints(1).X, 2 - nPoints(3).X + nPoints(1).X + nPoints(1).Y - 2)
Next
For Each n As Point In nPoints
If n.X < nLeft Then nLeft = n.X
If n.X > nRight Then nRight = n.X
If n.Y > nBottom Then nBottom = n.Y
Next
If nLocation.X + nLeft < 0 Then nLocation.X = -nLeft
If nLocation.X + nRight > DrawRectangle.Width Then nLocation.X = DrawRectangle.Width - nRight
If nLocation.Y + nBottom > DrawRectangle.Height Then Return True
For Each p As Point In nPoints
If p.Y + nLocation.Y >= 0 AndAlso Blocks(p.X + nLocation.X, p.Y + nLocation.Y) > 1 Then Return True
Next
For y As Integer = 0 To DrawRectangle.Height
For x As Integer = 0 To DrawRectangle.Width
If Blocks(x, y) = 1 Then Blocks(x, y) = 0
Next
Next
For Each p As Point In nPoints
If p.Y + nLocation.Y >= 0 Then Blocks(p.X + nLocation.X, p.Y + nLocation.Y) = 1
Next
BlockState = nState
DrawLocation = nLocation
If nBeep Then Beep(1800, 50) ' My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)
End Function
Private Sub Key_Up(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
If MyTimer.Enabled AndAlso (e.KeyCode = Keys.W OrElse e.KeyCode = Keys.Up) Then '向上键
If NewBlock(DrawLocation, BlockState + 1, True) = False Then DrawBlock()
ElseIf MyTimer.Enabled AndAlso (e.KeyCode = Keys.D OrElse e.KeyCode = Keys.Right) Then '向右键
If NewBlock(New Point(DrawLocation.X + 1, DrawLocation.Y), BlockState, True) = False Then DrawBlock()
ElseIf MyTimer.Enabled AndAlso (e.KeyCode = Keys.A OrElse e.KeyCode = Keys.Left) Then '向左键
If NewBlock(New Point(DrawLocation.X - 1, DrawLocation.Y), BlockState, True) = False Then DrawBlock()
ElseIf MyTimer.Enabled AndAlso (e.KeyCode = Keys.S OrElse e.KeyCode = Keys.Down OrElse e.KeyCode = Keys.Space) Then '向下键
For y As Integer = 1 To DrawRectangle.Height
If NewBlock(New Point(DrawLocation.X, DrawLocation.Y + 1), BlockState, y = 1) Then Exit For
Next
DrawBlock() '绘制整个矩阵
ElseIf e.KeyCode = Keys.Enter OrElse e.KeyCode = Keys.Escape Then '回车键
MyTimer.Enabled = Not MyTimer.Enabled '计时器开关设置
If MyTimer.Enabled Then
Graphics.FromImage(ShowBitMap).FillRectangle(New System.Drawing.Drawing2D.HatchBrush(Rnd() * 52, Color.FromArgb(&HFF000000 Or &HFFFFFF * Rnd()), Color.FromArgb(&HFF000000 Or &HFFFFFF * Rnd())), New Rectangle(0, 0, 20, 20))
Graphics.FromImage(ShowBitMap).DrawRectangle(New Pen(Color.Black, 1), New Rectangle(1, 1, 17, 17))
Graphics.FromImage(BackBitMap).FillRectangle(New System.Drawing.Drawing2D.HatchBrush(Rnd() * 52, Color.FromArgb(&HFF000000 Or &HFFFFFF * Rnd()), Color.FromArgb(&HFF000000 Or &HFFFFFF * Rnd())), New Rectangle(0, 0, 20, 20))
Graphics.FromImage(BackBitMap).DrawRectangle(New Pen(Color.Black, 2), New Rectangle(0, 0, 19, 19))
MyTimer.Interval = 500
ReDim Blocks(DrawRectangle.Width, DrawRectangle.Height)
Score = 0 '初始化分数
NewBlock(New Point(5, 0), 0, False) '初始化当前块位置
DrawBlock() '绘制整个矩阵
Me.Text = "分数:" & Score '设置窗口标题
End If
End If
End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyTimer.Tick
If NewBlock(New Point(DrawLocation.X, DrawLocation.Y + 1), BlockState, False) Then '如果触碰到底边
For y As Integer = 1 To DrawRectangle.Height
For x As Integer = 0 To DrawRectangle.Width
If Blocks(x, y) = 1 Then Blocks(x, y) = 2
Next
Next
Dim i As Integer = ClearLine(0) '从第0行开始清行
If i Then '如果有行被消除
Score += (i ^ 2) * 10 '计算分数
Me.Text = "分数:" & Score '设置窗口标题
End If
BlockType = NextType '设置当前块类型为预览块类型
NextType = Rnd() * 6 '随机出下一个预览块
If NewBlock(New Point(5, 0), 0, i) Then '如果新的块直接触碰到底。
MyTimer.Enabled = False '停止计时器
If MsgBox("游戏结束,按下 Enter 键重新开始。") = MsgBoxResult.Ok Then Exit Sub
End If
End If
DrawBlock() '绘制整个矩阵
End Sub
Private Function ClearLine(ByVal StartIndex As Integer) As Integer
If StartIndex > DrawRectangle.Height Then Return 0 '如果超出了矩阵范围,直接返回0
For x As Integer = 0 To DrawRectangle.Width
If Blocks(x, StartIndex) <> 2 Then Return ClearLine(StartIndex + 1)
Next
For x As Integer = 0 To DrawRectangle.Width
For y = StartIndex To 1 Step -1
Blocks(x, y) = Blocks(x, y - 1)
Next
Next
If MyTimer.Interval > 100 Then MyTimer.Interval -= 1 '每消一行减少时间1毫秒
Return ClearLine(StartIndex + 1) + 1 '返回递归下一行的值并且加1(成功消了一行)
End Function
Private Sub DrawBlock()
Dim i(5, 5) As Integer '新初始化一个预览矩阵
For Each p As Point In AllPoints(NextType)
i(p.X + 1, p.Y + 3) = 1
Next
DrawPicture(Blocks, DrawRectangle.Location) '将矩阵画到窗体缓存图片上
DrawPicture(i, New Point(DrawRectangle.Right + 2, DrawRectangle.Y)) '将预览矩阵画到窗体缓存图片
Me.CreateGraphics.DrawImage(PreviewBitmap, New Point(0, 0)) '将窗体缓存图片画到窗体上
End Sub
Private Sub DrawPicture(ByVal Picture(,) As Integer, ByVal nDrawPoint As Point)
For x As Integer = 0 To Picture.GetUpperBound(0)
For y As Integer = 1 To Picture.GetUpperBound(1)
PreviewGraphics.DrawImage(BackBitMap, New Point(nDrawPoint.X * 20 + x * 20, nDrawPoint.Y * 20 + (y - 1) * 20)) '画背景块
If Picture(x, y) = 1 OrElse Picture(x, y) = 2 Then '如果状态为1或2则画方块
PreviewGraphics.DrawImage(ShowBitMap, New Point(nDrawPoint.X * 20 + x * 20, nDrawPoint.Y * 20 + (y - 1) * 20))
End If
Next
Next
End Sub
Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Randomize() '初始化随机种子
Me.Text = "按下 Enter 开始新游戏" '设置窗口标题
Me.DoubleBuffered = True
Me.SetBounds(Screen.PrimaryScreen.Bounds.X + (Screen.PrimaryScreen.Bounds.Width - (DrawRectangle.Right + 10) * 20) / 2, Screen.PrimaryScreen.Bounds.Y + (Screen.PrimaryScreen.Bounds.Height - (DrawRectangle.Bottom + 5) * 20) / 2, (DrawRectangle.Right + 10) * 20, (DrawRectangle.Bottom + 5) * 20)
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedToolWindow '设置窗口样式
Me.MaximizeBox = False '取消最大化按钮
PreviewBitmap = New Bitmap((DrawRectangle.Right + 10) * 20, (DrawRectangle.Bottom + 5) * 20)
PreviewGraphics = Graphics.FromImage(PreviewBitmap)
End Sub
End Class

加载更多回复(80)

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧