15パズルのプログラムがうまく作動しません.
visual studio2013,windowsフォームアプリケーションにて作業しています。
関数number(x)はクリックしたボタンの四方に対し0のボタンを探し、自身が0であれば0、四方のボタンに0がある場合はそのボタン番号、自身・四方に0がない場合は17を返します。(ボタン番号は左から123…となります。)
ボタン1をクリックするとnumberからかえってきたボタン番号が2であった場合、配列mybutton(1))に書かれている数字をボタン2へ入力、ボタン1の数字を0にする。
5の場合も同様に行う。また、参照したボタン番号をlabel1に表示させます。
###発生している問題
1)自身・四方に0がない場合number()から17が返ってくるはずが0が返ってきます。
2)number()がすべてコードパスで値を返しません」とエラーが出ます。
3)0と表示されているボタンに隣接していてもそのボタン番号を返さないことがある。
###ソースコード
Public Class Form1
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} 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 ElseIf x - 1 > 0 Then If mybutton(x - 1) = 0 Then y = x - 1 Return y End If ElseIf (x + 1) < 17 Then If mybutton(x + 1) = 0 Then y = x + 1 Return y End If ElseIf (x - 4) > 0 Then If mybutton(x - 4) = 0 Then y = x - 4 Return y End If ElseIf (x + 4) < 17 Then If mybutton(x + 4) = 0 Then y = x + 4 Return y End If Else : y = 17 Return y End If 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 Label1.Text = ans 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 Label1.Text = ans 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 Label1.Text = ans 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 Label1.Text = ans 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 Label1.Text = ans End Sub
以下button16まで省略
End Class
###試したこと
returnを最後ではなく、各if内に記入
###補足情報(言語/FW/ツール等のバージョンなど)
visual studio2013,windowsフォームアプリケーションにて作業しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/01 05:18