質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

解決済

15パズルゲーム visual basic

kannnn
waxaxaxa

総合スコア2

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

2回答

0評価

0クリップ

330閲覧

投稿2022/06/09 01:55

編集2022/06/13 14:55

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フォームアプリケーションにて作業しています。

修正点ありましたらよろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

ku__ra__ge

2022/06/09 02:06

正しくソースコードが表示されるように質問を修正してください。
kannnn

2022/06/09 04:20

修正しましたが一部繋がらない部分がありました。 よろしくお願いします。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです