基本信息
源码名称:vb 拼图游戏 源码
源码大小:0.85M
文件格式:.rar
开发语言:C#
更新时间:2018-05-16
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
Imports PicClip
Public Class Form1
Dim Pic(15) As PictureBox '定义16个图片
Dim a(15) As Point '定义16个图片的初始位置
Dim b(15) As Integer '定义16个位置的flag信息
Dim CP As Point
Dim TimeTotal As Double '定义总共用时
Dim ResTotal As Boolean '定义是否完成图片排列的结果变量
Dim StepTotal As Double '定义总共移动的步骤数
Dim IsPic As Boolean ' 定义是否为图片
Public Sub SplitPic()
'下面初始化16个图片的位置、大小、背景等
For i = 0 To 15
Pic(i) = New PictureBox
Pic(i).Parent = Panel1
Pic(i).Location = New Point(5 (i Mod 4) * (HAH 15), 5 (i \ 4) * (HAW - 10))
Pic(i).Height = HAH
Pic(i).Width = HAW
Pic(i).BackColor = Color.Red
Pic(i).Tag = i
Me.Panel1.Controls.Add(Pic(i))
AddHandler Pic(i).Click, AddressOf Pict_Click '注册事件
Next
Panel1.Width = 20 4 * HAW
Panel1.Height = 20 4 * HAH
End Sub
'下面是计算16个位置信息的flag,空白位置的flag=3,可以移动的图片位置flag=1,不能移动的位置flag=0
Public Sub Calu()
For i = 0 To 15
If b(i) = 3 Then
If i = 0 Then
b(1) = 1
b(4) = 1
End If
If i = 1 Then
b(0) = 1
b(2) = 1
b(5) = 1
End If
If i = 2 Then
b(1) = 1
b(3) = 1
b(6) = 1
End If
If i = 3 Then
b(2) = 1
b(7) = 1
End If
If i = 4 Then
b(0) = 1
b(5) = 1
b(8) = 1
End If
If i = 5 Then
b(1) = 1
b(4) = 1
b(6) = 1
b(9) = 1
End If
If i = 6 Then
b(2) = 1
b(5) = 1
b(7) = 1
b(10) = 1
End If
If i = 7 Then
b(3) = 1
b(6) = 1
b(11) = 1
End If
If i = 8 Then
b(4) = 1
b(12) = 1
b(9) = 1
End If
If i = 9 Then
b(5) = 1
b(8) = 1
b(10) = 1
b(13) = 1
End If
If i = 10 Then
b(6) = 1
b(11) = 1
b(9) = 1
b(14) = 1
End If
If i = 11 Then
b(7) = 1
b(10) = 1
b(15) = 1
End If
If i = 12 Then
b(8) = 1
b(13) = 1
End If
If i = 13 Then
b(9) = 1
b(12) = 1
b(14) = 1
End If
If i = 14 Then
b(10) = 1
b(13) = 1
b(15) = 1
End If
If i = 15 Then
b(11) = 1
b(14) = 1
End If
Exit For
End If
Next
End Sub
Private Sub 打开图片OToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
'无用代码 可以删除
'Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' 'Dim a As PictureClip = New PictureClip
' 'a.Picture = Image.FromFile("c:/0.jpg")
' 'a.Rows = 4
' 'a.Cols = 4
' 'PictureBox1.Image = a.GraphicCell(1)
' Dim img As New Bitmap("c:\015.bmp")
' Dim rc As Rectangle = New Rectangle(120, 120, 360, 360)
' Dim newImg As Bitmap = img.Clone(rc, Imaging.PixelFormat.DontCare)
' 'PictureBox1.Image = Nothing
' PictureBox1.Image = newImg
' 'Me.CreateGraphics.DrawImage(newImg, 0, 0)
'End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim mySkin As Sunisoft.IrisSkin.SkinEngine = New Sunisoft.IrisSkin.SkinEngine
mySkin.SkinFile = Application.StartupPath & "/skin/1.ssk"
'窗体载入时,设置容器Panel的背景颜色、位置信息,大小信息等
Panel1.BackColor = Color.Green '设置图片容器背景为白色
Panel1.Location = New Point(10, 30) '设置图片容器的位置及大小
Panel1.Width = 400
Panel1.Height = 400
'初始化耗时、步骤数,是否已经载入图片等信息
TimeTotal = 0
StepTotal = 0
Button2.Enabled = False
Button4.Enabled = False
IsPic = False
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'先将正确排列后的结果赋值给a(i),以便后续判断是否完成排列
For i = 0 To 15
a(i) = Pic(i).Location
'给每个pic的tag赋值,便于判断不同的图片
Pic(i).Tag = i
Next
'定义一个16个字符
Dim s As String = "0123456789ABCDEF"
Dim ts As String
Dim indexN As Integer = 0
Dim n As Integer = 0
'下面循环完成随机图片的生成
Do While Len(s) > 0
Randomize()
'随机取其中的一个字符,转化为数字
ts = Mid(s, Int(Rnd() * (Len(s))) 1, 1)
indexN = CInt("&H" & ts)
'将取出的字符从字符串中去掉
s = Replace(s, ts, "")
n = n 1
'将一个随机的位置信息赋值给图片
Pic(n - 1).Location = a(indexN)
'如果是最后一个图片,则将该图片对应的b(i)=3,为空白图片
If n - 1 = 15 Then
For i = 0 To 15
b(i) = 0
Next
b(indexN) = 3
End If
Loop
Pic(15).Visible = False
'初始化位置标志flag
Call Calu()
'计时开始
Timer1.Start()
'初始化步骤数和耗时为0
StepTotal = 0
TimeTotal = 0
End Sub
'调试用代码 可以删除
'Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
' Dim img As New Bitmap("c:\015.bmp")
' PictureBox1.Image = img
' Dim a(,) As Bitmap
' a = ClipImg(img)
' PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
' PictureBox1.Image = a(0, 0)
'End Sub
Private Sub Pict_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim pla As Point
If Not TypeOf sender Is PictureBox Then Return '如果sender对象不是按钮则退出过程
Dim c As PictureBox = DirectCast(sender, PictureBox) '强类型转换 等效方法有:CType、TryCast、DirectCast
'遍历图片
For i = 0 To 15
'如果点击的是图片i
If Pic(c.Tag).Location = a(i) Then
'且该图片可以移动
If b(i) = 1 Then
'交换空白图片和要移动的图片
StepTotal = StepTotal 1
pla = Pic(15).Location
Pic(15).Location = Pic(c.Tag).Location
Pic(c.Tag).Location = pla
'Call ChangeL(Pic(c.Tag).Location, Pic(15).Location)
'Debug.Print("交换成功")
Exit For
End If
End If
Next
'初始化位置标志
For i = 0 To 15
b(i) = 0
Next
For i = 0 To 15
'重新置空白图片的位置flag=3
If Pic(15).Location = a(i) Then
b(i) = 3
Exit For
End If
Next
'初始化位置标志flag
Call Calu()
'判断是否完成排列图片
ResTotal = True
For i = 0 To 15
If Pic(i).Location <> a(i) Then
ResTotal = False
End If
Next
If ResTotal = True Then
Timer1.Enabled = False
MsgBox("完成游戏啦!")
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'计算耗时
TimeTotal = TimeTotal 1
'显示耗时
Label2.Text = TimeTotal
'显示步骤数
Label6.Text = StepTotal
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'打开和关闭参考图的代码
If Button4.Text = "显示参考图" Then
Form2.Show()
Button4.Text = "关闭参考图"
Else
Button4.Text = "显示参考图"
Form2.Close()
End If
End Sub
Private Sub 文件FToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 文件FToolStripMenuItem.Click
'如果已经载入过图片,则释放掉该pic
If IsPic = True Then
For i = 0 To UBound(Pic)
Me.Controls.Remove(Pic(i))
Pic(i).Dispose()
Next
End If
'以下是打开图片的动作,使用的是OpenFileDialog控件
Dim fn As String
fn = ""
OpenFileDialog1.Title = "请选择图片"
OpenFileDialog1.InitialDirectory = Application.StartupPath
OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*|Pictures (*.jpg;*.bmp)|*.jpg;*bmp"
OpenFileDialog1.FilterIndex = 3
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
'Microsoft.VisualBasic.FileCopy(OpenFileDialog1.FileName, Application.StartupPath & "/Photos/" & TextBox1.Text & ".jpg")
fn = OpenFileDialog1.FileName
PicPath = fn
PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
End If
'根据新载入的大图,计算每个小图片的宽度和高度
Dim img As New Bitmap(fn)
HAW = img.Width / 4
HAH = img.Height / 4
PictureBox1.Image = img
'分解图片
Dim a(,) As Bitmap
a = ClipImg(img)
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
Call SplitPic()
'分解后的图片对应到每个Pic数组中
For i = 0 To 15
Pic(i).Image = a(i Mod 4, i \ 4)
Next
Button2.Enabled = True
Button4.Enabled = True
IsPic = True
End Sub
Private Sub 背景颜色ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub 背景颜色SToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 背景颜色SToolStripMenuItem.Click
If ColorDialog1.ShowDialog() = DialogResult.OK Then
Panel1.BackColor = ColorDialog1.Color
End If
End Sub
End Class