| 
						
						
						
					 | 
					@ -1,35 +1,100 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					VERSION 5.00 | 
					 | 
					 | 
					VERSION 5.00 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Begin VB.Form Form_Game  | 
					 | 
					 | 
					Begin VB.Form Form_Game  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					   AutoRedraw      =   -1  'True | 
					 | 
					 | 
					   AutoRedraw      =   -1  'True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					   BorderStyle     =   4  'Fixed ToolWindow | 
					 | 
					 | 
					   BorderStyle     =   1  'Fixed Single | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					   Caption         =   "HRD Game v0.0 by Dnomd343" | 
					 | 
					 | 
					   Caption         =   "HRD Game v0.1 by Dnomd343" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					   ClientHeight    =   6990 | 
					 | 
					 | 
					   ClientHeight    =   7305 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					   ClientLeft      =   150 | 
					 | 
					 | 
					   ClientLeft      =   45 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					   ClientTop       =   495 | 
					 | 
					 | 
					   ClientTop       =   690 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					   ClientWidth     =   9660 | 
					 | 
					 | 
					   ClientWidth     =   7290 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					   Icon            =   "Form_Game.frx":0000 | 
					 | 
					 | 
					   Icon            =   "Form_Game.frx":0000 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					   LinkTopic       =   "Form1" | 
					 | 
					 | 
					   LinkTopic       =   "Form1" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					   MaxButton       =   0   'False | 
					 | 
					 | 
					   MaxButton       =   0   'False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					   MinButton       =   0   'False | 
					 | 
					 | 
					   MinButton       =   0   'False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					   ScaleHeight     =   6990 | 
					 | 
					 | 
					   ScaleHeight     =   7305 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					   ScaleWidth      =   9660 | 
					 | 
					 | 
					   ScaleWidth      =   7290 | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					   ShowInTaskbar   =   0   'False | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					   StartUpPosition =   2  'ÆÁÄ»ÖÐÐÄ | 
					 | 
					 | 
					   StartUpPosition =   2  'ÆÁÄ»ÖÐÐÄ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					   Begin VB.Timer Timer1  | 
					 | 
					 | 
					   Begin VB.CommandButton Command_Create_Case  | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Caption         =   "自定义布局" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Height          =   495 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Left            =   5760 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      TabIndex        =   6 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Top             =   600 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Width           =   1335 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   Begin VB.Timer Timer_Layout  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Interval        =   300 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Left            =   0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Top             =   0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   Begin VB.CommandButton Command_Reset  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Caption         =   "重新开始" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Height          =   495 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Left            =   5760 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      TabIndex        =   1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Top             =   1200 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Width           =   1335 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   Begin VB.Timer Timer_Get_Time  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Enabled         =   0   'False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Interval        =   50 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Left            =   0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Top             =   0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   Begin VB.Timer Timer_Debug  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      Interval        =   200 | 
					 | 
					 | 
					      Interval        =   200 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Left            =   9840 | 
					 | 
					 | 
					      Left            =   0 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Top             =   240 | 
					 | 
					 | 
					      Top             =   0 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					   End | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					   Begin VB.TextBox Text_Debug  | 
					 | 
					 | 
					   Begin VB.TextBox Text_Debug  | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Height          =   6735 | 
					 | 
					 | 
					      Height          =   6855 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Left            =   5760 | 
					 | 
					 | 
					      Left            =   7320 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					      MultiLine       =   -1  'True | 
					 | 
					 | 
					      MultiLine       =   -1  'True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      TabIndex        =   0 | 
					 | 
					 | 
					      TabIndex        =   0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Top             =   120 | 
					 | 
					 | 
					      Top             =   240 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					      Width           =   3735 | 
					 | 
					 | 
					      Width           =   3735 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					   End | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					   Begin VB.Menu test  | 
					 | 
					 | 
					   Begin VB.Label Label_Code  | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Caption         =   "test" | 
					 | 
					 | 
					      AutoSize        =   -1  'True | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Height          =   180 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Left            =   0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      TabIndex        =   5 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Top             =   7000 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Width           =   90 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   Begin VB.Label Label_Step  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      AutoSize        =   -1  'True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Height          =   180 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Left            =   0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      TabIndex        =   4 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Top             =   7000 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Width           =   90 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   Begin VB.Label Label_Title  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Alignment       =   2  'Center | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      AutoSize        =   -1  'True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Height          =   180 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Left            =   0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      TabIndex        =   3 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Top             =   45 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Width           =   105 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   Begin VB.Label Label_Time  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      AutoSize        =   -1  'True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Height          =   180 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Left            =   0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      TabIndex        =   2 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Top             =   7000 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Width           =   90 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   Begin VB.Menu Menu_Setting  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Caption         =   "设置" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Begin VB.Menu Menu_On_Top  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					         Caption         =   "窗口保持最前" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Begin VB.Menu Menu_Debug_Mode  | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					         Caption         =   "Debug模式" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					   End | 
					 | 
					 | 
					   End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End | 
					 | 
					 | 
					End | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Attribute VB_Name = "Form_Game" | 
					 | 
					 | 
					Attribute VB_Name = "Form_Game" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -43,56 +108,99 @@ Private Type Case_Block | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  style As Integer | 
					 | 
					 | 
					  style As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Type | 
					 | 
					 | 
					End Type | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Type Block_Address | 
					 | 
					 | 
					Private Type Block_Address | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  x As Integer | 
					 | 
					 | 
					  X As Integer | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  y As Integer | 
					 | 
					 | 
					  Y As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					End Type | 
					 | 
					 | 
					End Type | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim Block(0 To 9) As Case_Block | 
					 | 
					 | 
					Dim Block(0 To 9) As Case_Block | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim Exist(1 To 4, 1 To 5) As Boolean | 
					 | 
					 | 
					Dim Exist(1 To 4, 1 To 5) As Boolean | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim Block_index(1 To 4, 1 To 5) As Integer | 
					 | 
					 | 
					Dim Block_index(1 To 4, 1 To 5) As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim start_x As Integer, start_y As Integer, square_width As Integer, gap As Integer | 
					 | 
					 | 
					Dim start_x As Integer, start_y As Integer, square_width As Integer, gap As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim block_line_width As Integer, case_line_width As Integer | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim block_color, block_line_color, case_color, case_line_color | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim x_split(0 To 4) As Integer, y_split(0 To 5) As Integer | 
					 | 
					 | 
					Dim x_split(0 To 4) As Integer, y_split(0 To 5) As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim dir_x1 As Integer, dir_y1 As Integer, dir_x2 As Integer, dir_y2 As Integer | 
					 | 
					 | 
					Dim dir_x1 As Integer, dir_y1 As Integer, dir_x2 As Integer, dir_y2 As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Dim block_addr(0 To 2) As Block_Address, move_max_step As Integer | 
					 | 
					 | 
					Dim block_addr(0 To 2) As Block_Address, move_max_step As Integer | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					Dim mouse_x As Long, mouse_y As Long | 
					 | 
					 | 
					Dim mouse_x As Long, mouse_y As Long, mouse_button As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					Dim last_move As Integer, move_times As Integer | 
					 | 
					 | 
					Dim last_move As Integer, move_times As Integer | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					Dim total_steps As Long | 
					 | 
					 | 
					Dim total_steps As Long, total_time As Long | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					Dim debug_mode As Boolean | 
					 | 
					 | 
					Dim Start_Code As String | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					Private Sub Command_Create_Case_Click() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  change_case_title = InputBox("请输入布局名称", "提示", "横刀立马") | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  change_case_code = InputBox("请输入布局编码(7bits)", "提示", "1A9BF0C") | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  change_case = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					Private Sub Command_Reset_Click() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  total_steps = 0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  total_time = 0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Timer_Get_Time.Enabled = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Call init | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Step = "步数: 0" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Code = Start_Code | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Time = "用时: 0:00:00" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Call Analyse(Start_Code) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Call Output_Graph | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub Form_Click() | 
					 | 
					 | 
					Private Sub Form_Click() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Dim m As Integer | 
					 | 
					 | 
					  Dim m As Integer, X As Integer, Y As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  If mouse_x < start_x Or mouse_x > start_x + square_width * 4 + gap * 5 Then Exit Sub | 
					 | 
					 | 
					  If mouse_x < start_x Or mouse_x > start_x + square_width * 4 + gap * 5 Then Exit Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If mouse_y < start_y Or mouse_y > start_y + square_width * 5 + gap * 6 Then Exit Sub | 
					 | 
					 | 
					  If mouse_y < start_y Or mouse_y > start_y + square_width * 5 + gap * 6 Then Exit Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If solve_compete = True Then Exit Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  m = Block_index(Get_block_x(mouse_x), Get_block_y(mouse_y)) | 
					 | 
					 | 
					  m = Block_index(Get_block_x(mouse_x), Get_block_y(mouse_y)) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If m = 10 Then Exit Sub | 
					 | 
					 | 
					  If m = 10 Then Exit Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If playing = False Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    playing = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    total_time = 0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    total_steps = 0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Timer_Get_Time.Enabled = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Y = Int(Block(m).address / 4) + 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  X = Block(m).address - (Y - 1) * 4 + 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If m = last_move Then | 
					 | 
					 | 
					  If m = last_move Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    If move_max_step = 1 Then | 
					 | 
					 | 
					    If move_max_step = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      If dir_x2 = 0 And dir_y2 = 0 Then | 
					 | 
					 | 
					      If dir_x2 = 0 And dir_y2 = 0 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_times Mod 2 = 1 Then | 
					 | 
					 | 
					        If move_times Mod 2 = 1 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          Call Move_Block(m, -dir_x1, -dir_y1) | 
					 | 
					 | 
					          Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        Else | 
					 | 
					 | 
					        Else | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          Call Move_Block(m, dir_x1, dir_y1) | 
					 | 
					 | 
					          Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      Else | 
					 | 
					 | 
					      Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        If mouse_button = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          If move_times Mod 4 = 0 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          ElseIf move_times Mod 4 = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          ElseIf move_times Mod 4 = 2 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        ElseIf mouse_button = 2 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          If move_times Mod 2 = 0 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          ElseIf move_times Mod 2 = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    ElseIf move_max_step = 2 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      If mouse_button = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_times Mod 4 = 0 Then | 
					 | 
					 | 
					        If move_times Mod 4 = 0 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          Call Move_Block(m, dir_x1, dir_y1) | 
					 | 
					 | 
					          Call Move_Block(m, dir_x1, dir_y1) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        ElseIf move_times Mod 4 = 1 Then | 
					 | 
					 | 
					        ElseIf move_times Mod 4 = 1 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          Call Move_Block(m, block_addr(0).x - block_addr(1).x, block_addr(0).y - block_addr(1).y) | 
					 | 
					 | 
					          Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        ElseIf move_times Mod 4 = 2 Then | 
					 | 
					 | 
					        ElseIf move_times Mod 4 = 2 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          Call Move_Block(m, block_addr(2).x - block_addr(0).x, block_addr(2).y - block_addr(0).y) | 
					 | 
					 | 
					          Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        Else | 
					 | 
					 | 
					        Else | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          Call Move_Block(m, block_addr(0).x - block_addr(2).x, block_addr(0).y - block_addr(2).y) | 
					 | 
					 | 
					          Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      ElseIf mouse_button = 2 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        If move_times Mod 2 = 0 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        ElseIf move_times Mod 2 = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    ElseIf move_max_step = 2 Then | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      If move_times Mod 4 = 0 Then | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        Call Move_Block(m, dir_x1, dir_y1) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      ElseIf move_times Mod 4 = 1 Then | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        Call Move_Block(m, block_addr(2).x - block_addr(1).x, block_addr(2).y - block_addr(1).y) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      ElseIf move_times Mod 4 = 2 Then | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        Call Move_Block(m, block_addr(1).x - block_addr(2).x, block_addr(1).y - block_addr(2).y) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      Else | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        Call Move_Block(m, block_addr(0).x - block_addr(1).x, block_addr(0).y - block_addr(1).y) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    move_times = move_times + 1 | 
					 | 
					 | 
					    move_times = move_times + 1 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -102,9 +210,27 @@ Private Sub Form_Click() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    last_move = m | 
					 | 
					 | 
					    last_move = m | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    If move_max_step = 0 Then Exit Sub | 
					 | 
					 | 
					    If move_max_step = 0 Then Exit Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    total_steps = total_steps + 1 | 
					 | 
					 | 
					    total_steps = total_steps + 1 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Call Move_Block(m, dir_x1, dir_y1) | 
					 | 
					 | 
					    If mouse_button = 1 Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    If mouse_button = 2 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      If move_max_step = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      ElseIf move_max_step = 2 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					   | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Step = "步数: " & total_steps | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Code = Get_Code() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Call Output_Graph | 
					 | 
					 | 
					  Call Output_Graph | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If Block(0).address = 13 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Timer_Get_Time = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    playing = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    solve_compete = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    MsgBox "恭喜你成功完成!" & vbCrLf & "编码: " & Start_Code & vbCrLf & "步数: " & total_steps & vbCrLf & "用时: " & Right(Label_Time, Len(Label_Time) - 4), , "(>__<)" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub Form_DblClick() | 
					 | 
					 | 
					Private Sub Form_DblClick() | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -112,226 +238,225 @@ Private Sub Form_DblClick() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub Form_Load() | 
					 | 
					 | 
					Private Sub Form_Load() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Me.Icon = LoadPicture("") | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Call init | 
					 | 
					 | 
					  Call init | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  debug_mode = True | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Call Analyse("1A9BF0C") | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Call Output_Graph | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) | 
					 | 
					 | 
					Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  mouse_x = x | 
					 | 
					 | 
					  mouse_button = Button | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  mouse_y = y | 
					 | 
					 | 
					  mouse_x = X | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  mouse_y = Y | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub Move_Block(m As Integer, dir_x As Integer, dir_y As Integer) | 
					 | 
					 | 
					Private Sub Move_Block(m As Integer, dir_x As Integer, dir_y As Integer) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Dim addr As Integer, style As Integer, x As Integer, y As Integer | 
					 | 
					 | 
					  Dim addr As Integer, style As Integer, X As Integer, Y As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  addr = Block(m).address | 
					 | 
					 | 
					  addr = Block(m).address | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  style = Block(m).style | 
					 | 
					 | 
					  style = Block(m).style | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  y = Int(addr / 4) + 1 | 
					 | 
					 | 
					  Y = Int(addr / 4) + 1 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  x = addr - (y - 1) * 4 + 1 | 
					 | 
					 | 
					  X = addr - (Y - 1) * 4 + 1 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  x = x + dir_x | 
					 | 
					 | 
					  X = X + dir_x | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  y = y + dir_y | 
					 | 
					 | 
					  Y = Y + dir_y | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  addr = (y - 1) * 4 + x - 1 | 
					 | 
					 | 
					  addr = (Y - 1) * 4 + X - 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  Call Clear_Block(m) | 
					 | 
					 | 
					  Call Clear_Block(m) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Block(m).address = addr | 
					 | 
					 | 
					  Block(m).address = addr | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Block(m).style = style | 
					 | 
					 | 
					  Block(m).style = style | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 0 Then | 
					 | 
					 | 
					  If Block(m).style = 0 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y) = m | 
					 | 
					 | 
					    Block_index(X, Y) = m | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y + 1) = m | 
					 | 
					 | 
					    Block_index(X, Y + 1) = m | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x + 1, y) = m | 
					 | 
					 | 
					    Block_index(X + 1, Y) = m | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x + 1, y + 1) = m | 
					 | 
					 | 
					    Block_index(X + 1, Y + 1) = m | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 1 Then | 
					 | 
					 | 
					  If Block(m).style = 1 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y) = m | 
					 | 
					 | 
					    Block_index(X, Y) = m | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x + 1, y) = m | 
					 | 
					 | 
					    Block_index(X + 1, Y) = m | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 2 Then | 
					 | 
					 | 
					  If Block(m).style = 2 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y) = m | 
					 | 
					 | 
					    Block_index(X, Y) = m | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y + 1) = m | 
					 | 
					 | 
					    Block_index(X, Y + 1) = m | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 3 Then | 
					 | 
					 | 
					  If Block(m).style = 3 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y) = m | 
					 | 
					 | 
					    Block_index(X, Y) = m | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  For x = 1 To 4 | 
					 | 
					 | 
					  For X = 1 To 4 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    For y = 1 To 5 | 
					 | 
					 | 
					    For Y = 1 To 5 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Block_index(x, y) <> 10 Then Exist(x, y) = True | 
					 | 
					 | 
					      If Block_index(X, Y) <> 10 Then Exist(X, Y) = True | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Next y | 
					 | 
					 | 
					    Next Y | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Next x | 
					 | 
					 | 
					  Next X | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub Check_Move(m As Integer) | 
					 | 
					 | 
					Private Sub Check_Move(m As Integer) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Dim addr As Integer, x As Integer, y As Integer | 
					 | 
					 | 
					  Dim addr As Integer, X As Integer, Y As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  Dim move_once As Boolean | 
					 | 
					 | 
					  Dim move_once As Boolean | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  move_once = False | 
					 | 
					 | 
					  move_once = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  dir_x1 = 0: dir_x2 = 0: dir_y1 = 0: dir_y2 = 0 | 
					 | 
					 | 
					  dir_x1 = 0: dir_x2 = 0: dir_y1 = 0: dir_y2 = 0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  move_max_step = 0 | 
					 | 
					 | 
					  move_max_step = 0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  addr = Block(m).address | 
					 | 
					 | 
					  addr = Block(m).address | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  y = Int(addr / 4) + 1 | 
					 | 
					 | 
					  Y = Int(addr / 4) + 1 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  x = addr - (y - 1) * 4 + 1 | 
					 | 
					 | 
					  X = addr - (Y - 1) * 4 + 1 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  block_addr(0).x = x: block_addr(0).y = y | 
					 | 
					 | 
					  block_addr(0).X = X: block_addr(0).Y = Y | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  block_addr(1).x = x: block_addr(1).y = y | 
					 | 
					 | 
					  block_addr(1).X = X: block_addr(1).Y = Y | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  block_addr(2).x = x: block_addr(2).y = y | 
					 | 
					 | 
					  block_addr(2).X = X: block_addr(2).Y = Y | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 0 Then | 
					 | 
					 | 
					  If Block(m).style = 0 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y > 1 Then | 
					 | 
					 | 
					    If Y > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x, y - 1) = False And Exist(x + 1, y - 1) = False Then move_max_step = 1: dir_y1 = -1 | 
					 | 
					 | 
					      If Exist(X, Y - 1) = False And Exist(X + 1, Y - 1) = False Then move_max_step = 1: dir_y1 = -1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y < 4 Then | 
					 | 
					 | 
					    If Y < 4 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x, y + 2) = False And Exist(x + 1, y + 2) = False Then move_max_step = 1: dir_y1 = 1 | 
					 | 
					 | 
					      If Exist(X, Y + 2) = False And Exist(X + 1, Y + 2) = False Then move_max_step = 1: dir_y1 = 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x > 1 Then | 
					 | 
					 | 
					    If X > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x - 1, y) = False And Exist(x - 1, y + 1) = False Then move_max_step = 1: dir_x1 = -1 | 
					 | 
					 | 
					      If Exist(X - 1, Y) = False And Exist(X - 1, Y + 1) = False Then move_max_step = 1: dir_x1 = -1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x < 3 Then | 
					 | 
					 | 
					    If X < 3 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x + 2, y) = False And Exist(x + 2, y + 1) = False Then move_max_step = 1: dir_x1 = 1 | 
					 | 
					 | 
					      If Exist(X + 2, Y) = False And Exist(X + 2, Y + 1) = False Then move_max_step = 1: dir_x1 = 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  ElseIf Block(m).style = 1 Then | 
					 | 
					 | 
					  ElseIf Block(m).style = 1 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y > 1 Then | 
					 | 
					 | 
					    If Y > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x, y - 1) = False And Exist(x + 1, y - 1) = False Then move_max_step = 1: dir_y1 = -1 | 
					 | 
					 | 
					      If Exist(X, Y - 1) = False And Exist(X + 1, Y - 1) = False Then move_max_step = 1: dir_y1 = -1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y < 5 Then | 
					 | 
					 | 
					    If Y < 5 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x, y + 1) = False And Exist(x + 1, y + 1) = False Then move_max_step = 1: dir_y1 = 1 | 
					 | 
					 | 
					      If Exist(X, Y + 1) = False And Exist(X + 1, Y + 1) = False Then move_max_step = 1: dir_y1 = 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x > 1 Then | 
					 | 
					 | 
					    If X > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x - 1, y) = False Then | 
					 | 
					 | 
					      If Exist(X - 1, Y) = False Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        move_max_step = 1 | 
					 | 
					 | 
					        move_max_step = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_once = False Then dir_x1 = -1 Else dir_x2 = -1 | 
					 | 
					 | 
					        If move_once = False Then dir_x1 = -1 Else dir_x2 = -1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        move_once = True | 
					 | 
					 | 
					        move_once = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If x > 2 Then | 
					 | 
					 | 
					        If X > 2 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x - 2, y) = False Then move_max_step = 2: dir_x2 = -2 | 
					 | 
					 | 
					          If Exist(X - 2, Y) = False Then move_max_step = 2: dir_x2 = -2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x < 3 Then | 
					 | 
					 | 
					    If X < 3 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x + 2, y) = False Then | 
					 | 
					 | 
					      If Exist(X + 2, Y) = False Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        move_max_step = 1 | 
					 | 
					 | 
					        move_max_step = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_once = False Then dir_x1 = 1 Else dir_x2 = 1 | 
					 | 
					 | 
					        If move_once = False Then dir_x1 = 1 Else dir_x2 = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        move_once = True | 
					 | 
					 | 
					        move_once = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If x < 2 Then | 
					 | 
					 | 
					        If X < 2 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x + 3, y) = False Then move_max_step = 2: dir_x2 = 2 | 
					 | 
					 | 
					          If Exist(X + 3, Y) = False Then move_max_step = 2: dir_x2 = 2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  ElseIf Block(m).style = 2 Then | 
					 | 
					 | 
					  ElseIf Block(m).style = 2 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y > 1 Then | 
					 | 
					 | 
					    If Y > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x, y - 1) = False Then | 
					 | 
					 | 
					      If Exist(X, Y - 1) = False Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        move_max_step = 1 | 
					 | 
					 | 
					        move_max_step = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_once = False Then dir_y1 = -1 Else dir_y2 = -1 | 
					 | 
					 | 
					        If move_once = False Then dir_y1 = -1 Else dir_y2 = -1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        move_once = True | 
					 | 
					 | 
					        move_once = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If y > 2 Then | 
					 | 
					 | 
					        If Y > 2 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x, y - 2) = False Then move_max_step = 2: dir_y2 = -2 | 
					 | 
					 | 
					          If Exist(X, Y - 2) = False Then move_max_step = 2: dir_y2 = -2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y < 4 Then | 
					 | 
					 | 
					    If Y < 4 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x, y + 2) = False Then | 
					 | 
					 | 
					      If Exist(X, Y + 2) = False Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        move_max_step = 1 | 
					 | 
					 | 
					        move_max_step = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_once = False Then dir_y1 = 1 Else dir_y2 = 1 | 
					 | 
					 | 
					        If move_once = False Then dir_y1 = 1 Else dir_y2 = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        move_once = True | 
					 | 
					 | 
					        move_once = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If y < 3 Then | 
					 | 
					 | 
					        If Y < 3 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x, y + 3) = False Then move_max_step = 2: dir_y2 = 2 | 
					 | 
					 | 
					          If Exist(X, Y + 3) = False Then move_max_step = 2: dir_y2 = 2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x > 1 Then | 
					 | 
					 | 
					    If X > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x - 1, y) = False And Exist(x - 1, y + 1) = False Then move_max_step = 1: dir_x1 = -1 | 
					 | 
					 | 
					      If Exist(X - 1, Y) = False And Exist(X - 1, Y + 1) = False Then move_max_step = 1: dir_x1 = -1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x < 4 Then | 
					 | 
					 | 
					    If X < 4 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x + 1, y) = False And Exist(x + 1, y + 1) = False Then move_max_step = 1: dir_x1 = 1 | 
					 | 
					 | 
					      If Exist(X + 1, Y) = False And Exist(X + 1, Y + 1) = False Then move_max_step = 1: dir_x1 = 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  ElseIf Block(m).style = 3 Then | 
					 | 
					 | 
					  ElseIf Block(m).style = 3 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y > 1 Then | 
					 | 
					 | 
					    If Y > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x, y - 1) = False Then | 
					 | 
					 | 
					      If Exist(X, Y - 1) = False Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        move_max_step = 1 | 
					 | 
					 | 
					        move_max_step = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_once = False Then dir_y1 = -1 Else dir_y2 = -1 | 
					 | 
					 | 
					        If move_once = False Then dir_y1 = -1 Else dir_y2 = -1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        move_once = True | 
					 | 
					 | 
					        move_once = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If y > 2 Then | 
					 | 
					 | 
					        If Y > 2 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x, y - 2) = False Then move_max_step = 2: dir_y2 = -2 | 
					 | 
					 | 
					          If Exist(X, Y - 2) = False Then move_max_step = 2: dir_y2 = -2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If x > 1 Then | 
					 | 
					 | 
					        If X > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x - 1, y - 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = -1 | 
					 | 
					 | 
					          If Exist(X - 1, Y - 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = -1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If x < 4 Then | 
					 | 
					 | 
					        If X < 4 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x + 1, y - 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = -1 | 
					 | 
					 | 
					          If Exist(X + 1, Y - 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = -1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y < 5 Then | 
					 | 
					 | 
					    If Y < 5 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x, y + 1) = False Then | 
					 | 
					 | 
					      If Exist(X, Y + 1) = False Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        move_max_step = 1 | 
					 | 
					 | 
					        move_max_step = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_once = False Then dir_y1 = 1 Else dir_y2 = 1 | 
					 | 
					 | 
					        If move_once = False Then dir_y1 = 1 Else dir_y2 = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        move_once = True | 
					 | 
					 | 
					        move_once = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If y < 4 Then | 
					 | 
					 | 
					        If Y < 4 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x, y + 2) = False Then move_max_step = 2: dir_y2 = 2 | 
					 | 
					 | 
					          If Exist(X, Y + 2) = False Then move_max_step = 2: dir_y2 = 2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If x > 1 Then | 
					 | 
					 | 
					        If X > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x - 1, y + 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = 1 | 
					 | 
					 | 
					          If Exist(X - 1, Y + 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If x < 4 Then | 
					 | 
					 | 
					        If X < 4 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x + 1, y + 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = 1 | 
					 | 
					 | 
					          If Exist(X + 1, Y + 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x > 1 Then | 
					 | 
					 | 
					    If X > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x - 1, y) = False Then | 
					 | 
					 | 
					      If Exist(X - 1, Y) = False Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        move_max_step = 1 | 
					 | 
					 | 
					        move_max_step = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_once = False Then dir_x1 = -1 Else dir_x2 = -1 | 
					 | 
					 | 
					        If move_once = False Then dir_x1 = -1 Else dir_x2 = -1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        move_once = True | 
					 | 
					 | 
					        move_once = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If x > 2 Then | 
					 | 
					 | 
					        If X > 2 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x - 2, y) = False Then move_max_step = 2: dir_x2 = -2 | 
					 | 
					 | 
					          If Exist(X - 2, Y) = False Then move_max_step = 2: dir_x2 = -2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If y > 1 Then | 
					 | 
					 | 
					        If Y > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x - 1, y - 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = -1 | 
					 | 
					 | 
					          If Exist(X - 1, Y - 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = -1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If y < 5 Then | 
					 | 
					 | 
					        If Y < 5 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x - 1, y + 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = 1 | 
					 | 
					 | 
					          If Exist(X - 1, Y + 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x < 4 Then | 
					 | 
					 | 
					    If X < 4 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Exist(x + 1, y) = False Then | 
					 | 
					 | 
					      If Exist(X + 1, Y) = False Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        move_max_step = 1 | 
					 | 
					 | 
					        move_max_step = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        If move_once = False Then dir_x1 = 1 Else dir_x2 = 1 | 
					 | 
					 | 
					        If move_once = False Then dir_x1 = 1 Else dir_x2 = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        move_once = True | 
					 | 
					 | 
					        move_once = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If x < 3 Then | 
					 | 
					 | 
					        If X < 3 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x + 2, y) = False Then move_max_step = 2: dir_x2 = 2 | 
					 | 
					 | 
					          If Exist(X + 2, Y) = False Then move_max_step = 2: dir_x2 = 2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If y > 1 Then | 
					 | 
					 | 
					        If Y > 1 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x + 1, y - 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = -1 | 
					 | 
					 | 
					          If Exist(X + 1, Y - 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = -1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        If y < 5 Then | 
					 | 
					 | 
					        If Y < 5 Then | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          If Exist(x + 1, y + 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = 1 | 
					 | 
					 | 
					          If Exist(X + 1, Y + 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        End If | 
					 | 
					 | 
					        End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  block_addr(1).x = block_addr(0).x + dir_x1 | 
					 | 
					 | 
					  block_addr(1).X = block_addr(0).X + dir_x1 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  block_addr(1).y = block_addr(0).y + dir_y1 | 
					 | 
					 | 
					  block_addr(1).Y = block_addr(0).Y + dir_y1 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  block_addr(2).x = block_addr(0).x + dir_x2 | 
					 | 
					 | 
					  block_addr(2).X = block_addr(0).X + dir_x2 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  block_addr(2).y = block_addr(0).y + dir_y2 | 
					 | 
					 | 
					  block_addr(2).Y = block_addr(0).Y + dir_y2 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					Private Function Get_block_x(x As Long) As Integer | 
					 | 
					 | 
					Private Function Get_block_x(X As Long) As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  Dim i As Integer | 
					 | 
					 | 
					  Dim i As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  For i = 1 To 4 | 
					 | 
					 | 
					  For i = 1 To 4 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If x > x_split(i - 1) And x < x_split(i) Then | 
					 | 
					 | 
					    If X > x_split(i - 1) And X < x_split(i) Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					      Get_block_x = i | 
					 | 
					 | 
					      Get_block_x = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      Exit For | 
					 | 
					 | 
					      Exit For | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Next i | 
					 | 
					 | 
					  Next i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Function | 
					 | 
					 | 
					End Function | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					Private Function Get_block_y(y As Long) As Integer | 
					 | 
					 | 
					Private Function Get_block_y(Y As Long) As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  Dim i As Integer | 
					 | 
					 | 
					  Dim i As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  For i = 1 To 5 | 
					 | 
					 | 
					  For i = 1 To 5 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    If y > y_split(i - 1) And y < y_split(i) Then | 
					 | 
					 | 
					    If Y > y_split(i - 1) And Y < y_split(i) Then | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					      Get_block_y = i | 
					 | 
					 | 
					      Get_block_y = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      Exit For | 
					 | 
					 | 
					      Exit For | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Next i | 
					 | 
					 | 
					  Next i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Function | 
					 | 
					 | 
					End Function | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub init() | 
					 | 
					 | 
					Private Sub init() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  playing = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  solve_compete = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  last_move = 10 | 
					 | 
					 | 
					  last_move = 10 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  move_times = 0 | 
					 | 
					 | 
					  move_times = 0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  total_steps = 0 | 
					 | 
					 | 
					  total_steps = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  start_x = 90 | 
					 | 
					 | 
					  start_x = 180 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  start_y = 180 | 
					 | 
					 | 
					  start_y = 300 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  gap = 105 | 
					 | 
					 | 
					  gap = 105 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  square_width = 1200 | 
					 | 
					 | 
					  square_width = 1200 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  block_line_width = 1 | 
					 | 
					 | 
					  block_line_width = 1 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -340,6 +465,7 @@ Private Sub init() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  case_line_color = RGB(0, 0, 0) | 
					 | 
					 | 
					  case_line_color = RGB(0, 0, 0) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  block_color = RGB(250, 250, 250) | 
					 | 
					 | 
					  block_color = RGB(250, 250, 250) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  case_color = RGB(256, 256, 256) | 
					 | 
					 | 
					  case_color = RGB(256, 256, 256) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Call Case_init | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  x_split(0) = start_x | 
					 | 
					 | 
					  x_split(0) = start_x | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  x_split(1) = start_x + gap / 2 + square_width + gap | 
					 | 
					 | 
					  x_split(1) = start_x + gap / 2 + square_width + gap | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  x_split(2) = start_x + gap / 2 + (square_width + gap) * 2 | 
					 | 
					 | 
					  x_split(2) = start_x + gap / 2 + (square_width + gap) * 2 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -353,13 +479,13 @@ Private Sub init() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  y_split(5) = start_y + gap + (square_width + gap) * 5 | 
					 | 
					 | 
					  y_split(5) = start_y + gap + (square_width + gap) * 5 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub Output_Graph() | 
					 | 
					 | 
					Private Sub Output_Graph() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Dim m, x, y As Integer | 
					 | 
					 | 
					  Dim m, X, Y As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  Dim width As Integer, height As Integer | 
					 | 
					 | 
					  Dim width As Integer, height As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Print_Block start_x, start_y, square_width * 4 + gap * 5, square_width * 5 + gap * 6, case_line_width, case_color, case_line_color | 
					 | 
					 | 
					  Print_Block start_x, start_y, square_width * 4 + gap * 5, square_width * 5 + gap * 6, case_line_width, case_color, case_line_color | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  For m = 0 To 9 | 
					 | 
					 | 
					  For m = 0 To 9 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    If Block(m).address <> 25 Then | 
					 | 
					 | 
					    If Block(m).address <> 25 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      x = (Block(m).address Mod 4) * (square_width + gap) + gap + start_x | 
					 | 
					 | 
					      X = (Block(m).address Mod 4) * (square_width + gap) + gap + start_x | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      y = Int(Block(m).address / 4) * (square_width + gap) + gap + start_y | 
					 | 
					 | 
					      Y = Int(Block(m).address / 4) * (square_width + gap) + gap + start_y | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					      If Block(m).style = 0 Or Block(m).style = 1 Then | 
					 | 
					 | 
					      If Block(m).style = 0 Or Block(m).style = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        width = square_width * 2 + gap | 
					 | 
					 | 
					        width = square_width * 2 + gap | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      Else | 
					 | 
					 | 
					      Else | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -370,7 +496,7 @@ Private Sub Output_Graph() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      Else | 
					 | 
					 | 
					      Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        height = square_width | 
					 | 
					 | 
					        height = square_width | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      End If | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Print_Block x, y, width, height, block_line_width, block_color, block_line_color | 
					 | 
					 | 
					      Print_Block X, Y, width, height, block_line_width, block_color, block_line_color | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Next m | 
					 | 
					 | 
					  Next m | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -396,75 +522,150 @@ Private Sub Case_init() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Next i | 
					 | 
					 | 
					  Next i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub Clear_Block(m As Integer) | 
					 | 
					 | 
					Private Sub Clear_Block(m As Integer) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Dim x As Integer, y As Integer, addr As Integer | 
					 | 
					 | 
					  Dim X As Integer, Y As Integer, addr As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  addr = Block(m).address | 
					 | 
					 | 
					  addr = Block(m).address | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  y = Int(addr / 4) + 1 | 
					 | 
					 | 
					  Y = Int(addr / 4) + 1 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  x = addr - (y - 1) * 4 + 1 | 
					 | 
					 | 
					  X = addr - (Y - 1) * 4 + 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 0 Then | 
					 | 
					 | 
					  If Block(m).style = 0 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x, y) = False | 
					 | 
					 | 
					    Exist(X, Y) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x, y + 1) = False | 
					 | 
					 | 
					    Exist(X, Y + 1) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x + 1, y) = False | 
					 | 
					 | 
					    Exist(X + 1, Y) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x + 1, y + 1) = False | 
					 | 
					 | 
					    Exist(X + 1, Y + 1) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y) = 10 | 
					 | 
					 | 
					    Block_index(X, Y) = 10 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y + 1) = 10 | 
					 | 
					 | 
					    Block_index(X, Y + 1) = 10 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x + 1, y) = 10 | 
					 | 
					 | 
					    Block_index(X + 1, Y) = 10 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x + 1, y + 1) = 10 | 
					 | 
					 | 
					    Block_index(X + 1, Y + 1) = 10 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 1 Then | 
					 | 
					 | 
					  If Block(m).style = 1 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x, y) = False | 
					 | 
					 | 
					    Exist(X, Y) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x + 1, y) = False | 
					 | 
					 | 
					    Exist(X + 1, Y) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y) = 10 | 
					 | 
					 | 
					    Block_index(X, Y) = 10 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x + 1, y) = 10 | 
					 | 
					 | 
					    Block_index(X + 1, Y) = 10 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 2 Then | 
					 | 
					 | 
					  If Block(m).style = 2 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x, y) = False | 
					 | 
					 | 
					    Exist(X, Y) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x, y + 1) = False | 
					 | 
					 | 
					    Exist(X, Y + 1) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y) = 10 | 
					 | 
					 | 
					    Block_index(X, Y) = 10 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y + 1) = 10 | 
					 | 
					 | 
					    Block_index(X, Y + 1) = 10 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  If Block(m).style = 3 Then | 
					 | 
					 | 
					  If Block(m).style = 3 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Exist(x, y) = False | 
					 | 
					 | 
					    Exist(X, Y) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Block_index(x, y) = 10 | 
					 | 
					 | 
					    Block_index(X, Y) = 10 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  End If | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Block(m).address = 25 | 
					 | 
					 | 
					  Block(m).address = 25 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Block(m).style = 4 | 
					 | 
					 | 
					  Block(m).style = 4 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					Private Function Get_Code() As String | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  On Error Resume Next | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Dim temp(20) As Boolean | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Dim Table(20) As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Dim dat(1 To 12) As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Dim Code As String | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Dim i As Integer, addr As Integer, style As Integer, num As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  For i = 0 To 19 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    temp(i) = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Table(i) = 10 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Next i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  For i = 0 To 9 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    If Block(i).style = 0 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address + 1) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address + 4) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address + 5) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    ElseIf Block(i).style = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address + 1) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    ElseIf Block(i).style = 2 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address + 4) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    ElseIf Block(i).style = 3 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Table(Block(i).address) = i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Next i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  temp(Block(0).address) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  temp(Block(0).address + 1) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  temp(Block(0).address + 4) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  temp(Block(0).address + 5) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If Block(0).address < 10 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Code = Code & Block(0).address | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Code = Code & Chr(Block(0).address + 55) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  addr = 0 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  num = 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  For i = 1 To 11 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    While (temp(addr) = True) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      If addr < 19 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        addr = addr + 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        Exit Function | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Wend | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    If Table(addr) = 10 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      temp(addr) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      dat(num) = 0: num = num + 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      style = Block(Table(addr)).style | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      If style = 1 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        temp(addr) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        temp(addr + 1) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        dat(num) = 1: num = num + 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      ElseIf style = 2 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        temp(addr) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        temp(addr + 4) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        dat(num) = 2: num = num + 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      ElseIf style = 3 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        temp(addr) = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        dat(num) = 3: num = num + 1 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Next i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  For i = 1 To 6 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    num = dat(i * 2 - 1) * 4 + dat(i * 2) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    If num < 10 Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Code = Code & num | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      Code = Code & Chr(num + 55) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Next i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Get_Code = Code | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					End Function | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Sub Analyse(Code As String) | 
					 | 
					 | 
					Private Sub Analyse(Code As String) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Dim m As Integer, addr As Integer, x As Integer, y As Integer | 
					 | 
					 | 
					  Dim m As Integer, addr As Integer, X As Integer, Y As Integer | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  Call Analyse_Code(Code) | 
					 | 
					 | 
					  Call Analyse_Code(Code) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  For x = 1 To 4 | 
					 | 
					 | 
					  For X = 1 To 4 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    For y = 1 To 5 | 
					 | 
					 | 
					    For Y = 1 To 5 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x, y) = 10 | 
					 | 
					 | 
					      Block_index(X, Y) = 10 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Exist(x, y) = False | 
					 | 
					 | 
					      Exist(X, Y) = False | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Next y | 
					 | 
					 | 
					    Next Y | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Next x | 
					 | 
					 | 
					  Next X | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  For m = 0 To 9 | 
					 | 
					 | 
					  For m = 0 To 9 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    addr = Block(m).address | 
					 | 
					 | 
					    addr = Block(m).address | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    y = Int(addr / 4) + 1 | 
					 | 
					 | 
					    Y = Int(addr / 4) + 1 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    x = addr - (y - 1) * 4 + 1 | 
					 | 
					 | 
					    X = addr - (Y - 1) * 4 + 1 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    If Block(m).style = 0 Then | 
					 | 
					 | 
					    If Block(m).style = 0 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x, y) = 0 | 
					 | 
					 | 
					      Block_index(X, Y) = 0 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x, y + 1) = 0 | 
					 | 
					 | 
					      Block_index(X, Y + 1) = 0 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x + 1, y) = 0 | 
					 | 
					 | 
					      Block_index(X + 1, Y) = 0 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x + 1, y + 1) = 0 | 
					 | 
					 | 
					      Block_index(X + 1, Y + 1) = 0 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    If Block(m).style = 1 Then | 
					 | 
					 | 
					    If Block(m).style = 1 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x, y) = m | 
					 | 
					 | 
					      Block_index(X, Y) = m | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x + 1, y) = m | 
					 | 
					 | 
					      Block_index(X + 1, Y) = m | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    If Block(m).style = 2 Then | 
					 | 
					 | 
					    If Block(m).style = 2 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x, y) = m | 
					 | 
					 | 
					      Block_index(X, Y) = m | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x, y + 1) = m | 
					 | 
					 | 
					      Block_index(X, Y + 1) = m | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    If Block(m).style = 3 Then | 
					 | 
					 | 
					    If Block(m).style = 3 Then | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      Block_index(x, y) = m | 
					 | 
					 | 
					      Block_index(X, Y) = m | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    End If | 
					 | 
					 | 
					    End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Next m | 
					 | 
					 | 
					  Next m | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  For x = 1 To 4 | 
					 | 
					 | 
					  For X = 1 To 4 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    For y = 1 To 5 | 
					 | 
					 | 
					    For Y = 1 To 5 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					      If Block_index(x, y) <> 10 Then Exist(x, y) = True | 
					 | 
					 | 
					      If Block_index(X, Y) <> 10 Then Exist(X, Y) = True | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Next y | 
					 | 
					 | 
					    Next Y | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  Next x | 
					 | 
					 | 
					  Next X | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					Private Function Check() As Boolean | 
					 | 
					 | 
					Private Function Check() As Boolean | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Dim temp(0 To 19) As Boolean | 
					 | 
					 | 
					  Dim temp(0 To 19) As Boolean | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -590,7 +791,34 @@ Private Sub Analyse_Code(Code As String) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Next i | 
					 | 
					 | 
					  Next i | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					err: | 
					 | 
					 | 
					err: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					Private Sub Timer1_Timer() | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					Private Sub Menu_Debug_Mode_Click() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Menu_Debug_Mode.Checked = Not Menu_Debug_Mode.Checked | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If Menu_Debug_Mode.Checked = True Then debug_mode = True Else debug_mode = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					Private Sub Menu_On_Top_Click() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Menu_On_Top.Checked = Not Menu_On_Top.Checked | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If Menu_On_Top.Checked = True Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 1 Or 2 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, 1 Or 2 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					Private Sub Timer_Get_Time_Timer() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Static temp As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Dim time_hour As String, time_minute As String, time_second As String | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If Not temp = Second(Time) Then total_time = total_time + 1: temp = Second(Time) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  time_second = total_time Mod 60 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  time_minute = ((total_time - time_second) Mod 3600) / 60 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  time_hour = (total_time - time_second - time_minute * 60) / 3600 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If Len(time_second) = 1 Then time_second = "0" & time_second | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If Len(time_minute) = 1 Then time_minute = "0" & time_minute | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Time = "用时: " & time_hour & ":" & time_minute & ":" & time_second | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					Private Sub Timer_Debug_Timer() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Dim i As Integer, j As Integer, m As Integer, debug_dat As String | 
					 | 
					 | 
					  Dim i As Integer, j As Integer, m As Integer, debug_dat As String | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  For m = 0 To 9 | 
					 | 
					 | 
					  For m = 0 To 9 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    debug_dat = debug_dat & "Block[" & m & "] -> address = " & Block(m).address & "  style = " & Block(m).style | 
					 | 
					 | 
					    debug_dat = debug_dat & "Block[" & m & "] -> address = " & Block(m).address & "  style = " & Block(m).style | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -618,13 +846,49 @@ Private Sub Timer1_Timer() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Next j | 
					 | 
					 | 
					  Next j | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  debug_dat = debug_dat & "dir_x1=" & dir_x1 & " dir_y1=" & dir_y1 & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "dir_x1=" & dir_x1 & " dir_y1=" & dir_y1 & vbCrLf | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  debug_dat = debug_dat & "dir_x2=" & dir_x2 & " dir_y2=" & dir_y2 & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "dir_x2=" & dir_x2 & " dir_y2=" & dir_y2 & vbCrLf | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  debug_dat = debug_dat & "block_addr(0)=(" & block_addr(0).x & "," & block_addr(0).y & ")" & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "block_addr(0)=(" & block_addr(0).X & "," & block_addr(0).Y & ")" & vbCrLf | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  debug_dat = debug_dat & "block_addr(1)=(" & block_addr(1).x & "," & block_addr(1).y & ")" & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "block_addr(1)=(" & block_addr(1).X & "," & block_addr(1).Y & ")" & vbCrLf | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					  debug_dat = debug_dat & "block_addr(2)=(" & block_addr(2).x & "," & block_addr(2).y & ")" & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "block_addr(2)=(" & block_addr(2).X & "," & block_addr(2).Y & ")" & vbCrLf | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  debug_dat = debug_dat & "move_max_step=" & move_max_step & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "move_max_step=" & move_max_step & vbCrLf | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  debug_dat = debug_dat & "last_move=" & last_move & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "last_move=" & last_move & vbCrLf | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  debug_dat = debug_dat & "move_times=" & move_times & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "move_times=" & move_times & vbCrLf | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  debug_dat = debug_dat & vbCrLf | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  debug_dat = debug_dat & "total_steps=" & total_steps & vbCrLf | 
					 | 
					 | 
					  debug_dat = debug_dat & "total_steps=" & total_steps & vbCrLf | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  debug_dat = debug_dat & "total_time=" & total_time & vbCrLf | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  Text_Debug = debug_dat | 
					 | 
					 | 
					  Text_Debug = debug_dat | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					End Sub | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					Private Sub Timer_Layout_Timer() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Dim width As Integer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  width = gap * 5 + square_width * 4 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Title.Top = 45 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Code.Top = 7000 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Step.Top = 7000 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Time.Top = 7000 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Title.Left = (width - Label_Title.width) / 2 + start_x | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Code.Left = (width - Label_Code.width) / 2 + start_x | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Step.Left = start_x | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Label_Time.Left = start_x + width - Label_Time.width | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If debug_mode = True Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Form_Game.width = 11355 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Form_Game.height = 8040 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Text_Debug.Visible = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Timer_Debug.Enabled = True | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  Else | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Form_Game.width = 7380 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Form_Game.height = 8040 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Text_Debug.Visible = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Timer_Debug.Enabled = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  If change_case = True Then | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    change_case = False | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Label_Title.Caption = change_case_title & "(" & change_case_code & ")" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Call init | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Start_Code = change_case_code | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Label_Step = "步数: 0" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Label_Code = Start_Code | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Label_Time = "用时: 0:00:00" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Call Analyse(Start_Code) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Call Output_Graph | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  End If | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					End Sub | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					
  |