Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
オセロのサンプルが??
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9043#CommentId11068
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
デフォルト
 (社会人)
投稿日時
2009/3/28 04:45:59
黒と白のコマを交互に置く「くるくるバトル」というゲームです
置いた位置から縦、横、斜めにコマを調べて、自分の持ちコマではさんだときに裏返すことができます。
SearchPieceとChangePieceメソッドの中にあるFor i = 1 To PIECE - 1の部分が
どうしても理解できません。
オセロと同じ物だとおもうのですが、管理人様の作られたオセロと違うようなので
何ともお手上げです。helpをお願いします。
Private PBox(35) As PictureBox 'PictureBoxの配列
Private PBox2(5, 5) As PictureBox 'PictureBoxの二次元配列
Private dw(7) As Integer '横方向移動量
Private dh(7) As Integer '縦方向移動量
Const PIECE As Integer = 6 '1辺のコマの数
'-----------------
'起動時
'PictureBoxの配列を作成
'二次元配列を作成
'移動量を設定
dh = New Integer() {-1, -1, -1, 0, 1, 1, 1, 0}
dw = New Integer() {-1, 0, 1, 1, 1, 0, -1, -1}
'盤面のドラッグ/ドロップを設定
'コマを表示
sender.Image = e.Data.GetData(DataFormats.Bitmap)
'周囲のピクチャボックスを調べる
Call CheckPiece(sender.Tag)
------------------------------
'周囲のピクチャボックスを調べる
'
Private Sub CheckPiece(ByVal index As Integer)
Dim i As Integer 'カウンタ
Dim pos As Integer 'チェック対象の番号
Dim flg As Boolean '裏返すかどうか
For i = 0 To 7
'ピクチャボックスの番号を調べる
pos = GetIndex(index, i)
'ピクチャボックスの番号が正しいかどうか
If pos < 0 Then
'
Else
'コマが置いてあるかどうか
If PBox(pos).Image Is Nothing Then
'
Else
'ドラッグしたコマと同じ色かどうか
If PBox(index).Image Is PBox(pos).Image Then
'
Else
'コマを裏返す
flg = SearchPiece(index, i)
If flg = True Then
Call ChangePiece(index, i)
End If
中略
'-----------------------------
'インデックスを取得する
'
Private Function GetIndex(ByVal index As Integer, ByVal n As Integer) As Integer
Dim h As Integer '行番号
Dim w As Integer '列番号
Dim hh As Integer 'チェック対象の行番号
Dim ww As Integer 'チェック対象の列番号
'行・列番号の取得
h = index \ PIECE
w = index Mod PIECE
'チェック対象の行・列番号
hh = h + dh(n)
ww = w + dw(n)
'インデックスの取得
If (hh < 0) Or (hh > PIECE - 1) Then
GetIndex = -1
ElseIf (ww < 0) Or (ww > PIECE - 1) Then
GetIndex = -1
Else
GetIndex = PBox2(hh, ww).Tag
End If
End Function
'-----------------------------
'コマを調べる
'
Private Function SearchPiece(ByVal index As Integer, ByVal n As Integer) As Boolean
Dim tmp As Integer '仮の基準位置
Dim pos As Integer 'チェック対象の番号
Dim i As Integer 'カウンタ
Dim flg As Boolean '裏返すかどうか
'初期化
tmp = index
'一方向の繰り返し
For i = 1 To PIECE - 1
'インデックスの取得
pos = GetIndex(tmp, n)
'インデックスが正しいかどうか
If pos < 0 Then
Exit For
Else
'コマが置いてあるかどうか
If PBox(pos).Image Is Nothing Then
Exit For
Else
'裏返す必要があるかどうか
If PBox(index).Image Is PBox(pos).Image Then
flg = True
Exit For
End If
End If
End If
'基準の位置を更新
tmp = pos
Next i
'結果を返す
SearchPiece = flg
End Function
'--------------------------
'コマを裏返す
'
Private Sub ChangePiece(ByVal index As Integer, ByVal n As Integer)
Dim tmp As Integer '仮の基準位置
Dim pos As Integer 'チェック対象の番号
Dim i As Integer 'カウンタ
'初期化
tmp = index
'一方向の繰り返し
For i = 1 To PIECE - 1
'インデックスの取得
pos = GetIndex(tmp, n)
'インデックスが正しいかどうか
If pos < 0 Then
Exit For
Else
'イメージがあるかどうか
If PBox(pos).Image Is Nothing Then
Exit For
Else
'ドロップしたコマと同じ色かどうか
If PBox(index).Image Is PBox(pos).Image Then
Exit For
Else
'コマを裏返す
PBox(pos).Image = PBox(index).Image
'基準の位置を更新
tmp = pos
Next i
End Sub