15パズルのプログラムがうまく作動しません.
visual studio2019,windowsフォームアプリケーションにて作業しています。
関数number(x)はクリックしたボタンの四方に対し0のボタンを探し、自身が0であれば0、四方のボタンに0がある場合はそのボタン番号、自身・四方に0がない場合は17を返します。(ボタン番号は左から123…となります。)
ボタン1をクリックするとnumberからかえってきたボタン番号が2であった場合、配列mybutton(1))に書かれている数字をボタン2へ入力、ボタン1の数字を0にする。5の場合も同様に行う。
現在発生している問題は、隣接しているボタンを押してもそれを返さないことがあることです。
下記 プログラムになります。
Public Class Form1
'============================================================================================
'利用者がリセットボタンを押すと、Button1~Button16の表面に、0~15のランダムな数字を表示する。
'============================================================================================
Private Sub Button17_Click(sender As System.Object, e As System.EventArgs) Handles Button17.Click
'シャッフルする配列 Dim array As Integer() = New Integer() {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} 'Fisher-Yatesアルゴリズムでシャッフルする Dim rng As New System.Random() Dim n As Integer = array.Length While n > 1 n -= 1 Dim k As Integer = rng.Next(n + 1) Dim tmp As Integer = array(k) array(k) = array(n) array(n) = tmp End While Button1.Text = array(0) Button2.Text = array(1) Button15.Text = array(14) Button16.Text = array(15) End Sub Dim mybutton(16) As Integer Private Function number(x As Integer) As Integer Dim y As Integer mybutton(1) = Button1.Text mybutton(2) = Button2.Text 省略 mybutton(15) = Button15.Text mybutton(16) = Button16.Text If mybutton(x) = 0 Then y = 0 Return y End If If x - 1 > 0 Then '(1) If mybutton(x - 1) = 0 Then y = x - 1 Return y End If End If If (x + 1) < 17 Then If mybutton(x + 1) = 0 Then y = x + 1 Return y End If End If If (x + 2) < 17 Then If mybutton(x + 2) = 0 Then y = x + 2 Return y End If End If If (x + 3) < 17 Then If mybutton(x + 3) = 0 Then y = x + 3 Return y End If End If If (x + 4) < 17 Then If mybutton(x + 4) = 0 Then y = x + 4 Return y End If End If y = 17 Return y End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim x As Integer = 1 Dim ans As Integer = number(x) If ans = 2 Then Button2.Text = mybutton(x) Button1.Text = 0 ElseIf ans = 5 Then Button5.Text = mybutton(x) Button1.Text = 0```ここに言語を入力 End If End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim x As Integer = 2 Dim ans As Integer = number(x) If ans = 1 Then Button1.Text = mybutton(x) Button2.Text = 0 ElseIf ans = 3 Then Button3.Text = mybutton(x) Button2.Text = 0 ElseIf ans = 6 Then Button6.Text = mybutton(x) Button2.Text = 0 End If End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim x As Integer = 3 Dim ans As Integer = number(x) If ans = 2 Then Button2.Text = mybutton(x) Button3.Text = 0 ElseIf ans = 4 Then Button4.Text = mybutton(x) Button3.Text = 0 ElseIf ans = 7 Then Button7.Text = mybutton(x) Button3.Text = 0 End If End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim x As Integer = 4 Dim ans As Integer = number(x) If ans = 3 Then Button3.Text = mybutton(x) Button4.Text = 0 ElseIf ans = 8 Then Button8.Text = mybutton(x) Button4.Text = 0 End If End Sub Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Dim x As Integer = 5 Dim ans As Integer = number(x) If ans = 1 Then Button1.Text = mybutton(x) Button5.Text = 0 ElseIf ans = 6 Then Button6.Text = mybutton(x) Button5.Text = 0 ElseIf ans = 9 Then Button9.Text = mybutton(x) Button5.Text = 0 End If End Sub 以降 ボタン16まで end class
補足情報(言語/FW/ツール等のバージョンなど)
visual studio2019,windowsフォームアプリケーションにて作業しています。
修正点ありましたらよろしくお願いします。
回答2件