老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

vb.net五子棋,用vb編寫五子棋

算術運算導致溢出 vb.net

第一問題好理解,?可能 key 是integer類型緣故吧,把它改為Byte。

創(chuàng)新互聯(lián)長期為1000多家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為疊彩企業(yè)提供專業(yè)的成都做網站、成都網站建設,疊彩網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

第二個沒讀懂,你換個方式試試,如:

'Dim?bts()?As?Byte?=?My.Computer.FileSystem.ReadAllBytes("")

Dim?bst?As?System.IO.BinaryReader?=?New?System.IO.BinaryReader(System.IO.File.OpenRead("D:\Program?Files(Green)\人機對戰(zhàn)五子棋-綠色免安裝單機版v1.0.exe"))

Dim?bs()?As?Byte

Const?aLength?As?Integer?=?50000

Do

bs?=?bst.ReadBytes(aLength)

Console.WriteLine(bs.Length)

Loop?Until?bs.Length??aLength

bst.Close()

文件讀到最后一塊總會小于指定長度的,你的代碼先定義數組長度,然后再讀取,這樣最后讀取的一塊二進制數組必然有一部分無效的。

五子棋游戲程序設計(VB)

五子棋的AI構想 有句話叫“當局者迷,旁觀者清。”,但這句話在由AI所控制的計算機玩家上是不成立的,因為計算機必須知道有那些獲勝方式,并計算出每下一步棋到棋盤上任一格子的獲勝幾率,也就是說,一個完整的五子棋的AI構想必須:

 

1、能夠知道所有的獲勝組合; 2、建立和使用獲勝表; 3、設定獲勝的分數; 4、使電腦具有攻擊和防守的能力; 一、求五子棋的獲勝組合 在一場五子棋的游戲中,計算機必須要知道有那些的獲勝組合,因此我們必須求得獲勝組合的總數。我們假定當前的棋盤為10*10。 (1)計算水平方向的獲勝組合數,每一列的獲勝組合是:6,共10列,所以水平方向的獲勝組合數為:6*10=60 (2)計算垂直方向的獲勝組合總數,每一行的獲勝組合是:6,共10行,則垂直方向的獲勝組合數為:6*10=60 (3)計算正對角線方向的獲勝組合總數,正對角線上的獲勝組合總數為6+(5+4+3+2+1)*2=36 (4)計算反對角線方向的獲勝組合總數,反對角線上的獲勝組合總數為6+(5+4+3+2+1)*2=36 ,這樣所有的獲勝組合數為:60+60+36+36=192 二、建立和使用獲勝表 我們已經計算出了一個10*10的五子棋盤會有192種獲勝方式,這樣我們可以利用數組建立獲勝表,獲勝表的主要作用是:1,判斷當前的獲勝方式是否有效;2,判斷當前的獲勝方式中到底有多少子落入該獲勝組合中。詳細的使用您將在后面的程序中可以看出。 三,分數的設定 在游戲中為了讓計算機能夠決定下一步最佳的走法,必須先計算出計算機下到棋盤上任一空格的分數,而其中最高分數便是計算機下一步的最佳走法。 原理:我們判定當前討論的空格與當前討論的點有幾種獲勝的方式,有幾種該空格就加幾分。這種原理初聽起來似乎是無法入手,沒關系,當您了解我們后面的程序后您就會明白這種決策原理了。 這種決策有一些缺陷,因為如果只根據這個模型設計,就有可能出現(xiàn)電腦或玩家有三個子連成一線的時候,計算機卻判斷不出,它認為其他某些空格是當前的獲勝的最佳位置而不去攻擊或防守。沒關系我們完全可以通過一個加強算法來改變當前的分值情況,也就是說當電腦或玩家有三個子或四個子連成一線時,我們通過加強算法將當前與三個子或四個子有關的空格的分值提高,從而可以彌補這一缺憾。 四、攻擊與防守 以上的方式,事實上計算機只是計算出了最佳的攻擊位置,為了防守我們還應計算當前玩家的最佳的攻擊位置。這樣有什么用呢?道理很簡單,如果玩家最佳攻擊位置的分數大于計算機最佳攻擊位置上的分數,那么計算機就將下一步的棋子擺在玩家的最佳攻擊位上以阻止玩家的進攻,否則計算機便將棋子下在自己的最佳攻擊位置上進行攻擊。 事實上,這個AI構想是很強大的如果你不是很厲害的五子棋高手的話,可能很快會被計算機打敗。我在聯(lián)眾上可是中級棋手啊,跟這種構想打的時候勝率也不是很高。 使用vb.net編寫五子棋 一、編寫前的準備: 1、用計算機的思想描述整個下棋的過程 考慮步驟: (1)為了簡便我們可以先讓電腦先走第一步棋,電腦每走一步就會封掉許多玩家的獲勝可能情況。 (2)當玩家走棋的時候我們首先應該考慮玩家走棋的合法性。 (3)如果合法,那么玩家也會封掉許多電腦的獲勝的可能情況。 (4)電腦的思考路徑:首先判斷當前玩家和電腦的所有獲勝組合是否需要進行加強賦值,

是進行加強賦值,否則進行普通的賦值。 (5)比較當前玩家和電腦誰的分值最大。將分值最大的點作為電腦的下一步走法。 2、利用vb.net窗體和圖形工具建立五子棋的棋盤界面 (1)添加一個picturebox控件 作用:使用picturebox控件繪制棋子和棋盤 (2)添加一個label控件 作用:顯示當前的獲勝標志,也就是當某一方獲勝或和棋時顯示此標簽。 (3)添加一個mainmenu控件 作用:控制游戲的開始或結束 (4)添加一個mediaplay組件 作用:使程序可以播放音樂。 3、設置整體框價 我們采取10*10的棋盤,為主要的平臺。利用數組定義整個棋盤桌面,利用數組定義獲勝組合以及獲勝標志等。 二,聲明全局數組和變量 定義虛擬桌面: Dim table(9, 9) As Integer 定義當前玩家桌面空格的分數: Dim pscore(9, 9) As Integer 定義當前電腦桌面空格的分數: Dim cscore(9, 9) As Integer 定義玩家的獲勝組合: Dim pwin(9, 9, 191) As Boolean 定義電腦的獲勝組合: Dim cwin(9, 9, 191) As Boolean 定義玩家的獲勝組合標志: Dim pflag(191) As Boolean 定義電腦的獲勝組合標志:

Dim cflag(191) As Boolean 定義游戲有效標志: Dim theplayflag As Boolean 三、初始化游戲 '*****************************************************************************

'** 模塊名稱: initplayenvironment

'**

'** 描述: 此函數主要功能如下:

'** 1. 設置背景音樂。

'** 2. 設置游戲狀態(tài)有效。

'** 3. 初始化游戲狀態(tài)標簽。

'** 4. 直接指定電腦的第一步走法。

'** 5. 初始化基本得分桌面。

'** 6. 電腦和玩家獲勝標志初始化。

'** 7. 初始化所有獲勝組合。

'** 8. 重新設定玩家的獲勝標志。

'**

'*****************************************************************************

Sub initplayenvironment()

player.FileName = ".\music\zhyu01.mid"

player.Play()

theplayflag = True

'游戲有效

Label1.Visible = False

'游戲狀態(tài)標簽不顯示

PictureBox1.Refresh()

'清空picturebox1的內容

yuandian(130, 130)

'調用繪圖函數繪制當前電腦先走的位置

Dim i, j, m, n As Integer

For i = 0 To 9

For j = 0 To 9

table(i, j) = 0

Next

Next

'桌面初始化

For i = 0 To 191

pflag(i) = True

cflag(i) = True

Next

'獲勝標志初始化

table(4, 4) = 1

'由于我們設定電腦先手,并下了4,4位所以將其值設為1

''' ******** 初始化獲勝組合 ********

n = 0

For i = 0 To 9

For j = 0 To 5

For m = 0 To 4

pwin(j + m, i, n) = True

cwin(j + m, i, n) = True

Next

n = n + 1

Next

Next

For i = 0 To 9

For j = 0 To 5

For m = 0 To 4

pwin(i, j + m, n) = True

cwin(i, j + m, n) = True

Next

n = n + 1

Next

Next

For i = 0 To 5

For j = 0 To 5

For m = 0 To 4

pwin(j + m, i + m, n) = True

cwin(j + m, i + m, n) = True

Next

n = n + 1

Next

Next

For i = 0 To 5

For j = 9 To 4 Step -1

For m = 0 To 4

pwin(j - m, i + m, n) = True

cwin(j - m, i + m, n) = True

Next

n = n + 1

Next

Next

''' ******** 初始化獲勝組合結束 ********

For i = 0 To 191

If pwin(4, 4, i) = True Then

pflag(i) = False

End If

Next

'由于電腦已下了4,4位所以我們需要重新設定玩家的獲勝標志

End Sub

四,處理鼠標事件 '*****************************************************************************

'** 模塊名稱: themousedown

'**

'** 描述: 此函數主要實行以下功能:

'** 1. 判定當前游戲標志是否有效。

'** 2. 將實際坐標轉化成虛擬坐標。

'** 3. 繪制玩家的棋子。

'** 4. 執(zhí)行檢查獲勝函數。

'** 5. 執(zhí)行電腦算法函數。

'**

'*****************************************************************************

Sub themousedown(ByVal x As Integer, ByVal y As Integer)

If theplayflag = False Then

Exit Sub

End If

'檢查游戲狀態(tài)是否有效

Dim i, j As Integer

Dim zhx, zhy As Integer

zhx = Int((x - 10) / 30)

zhy = Int((y - 10) / 30)

For i = 0 To 9

For j = 0 To 9

If table(zhx, zhy) 0 Then

Exit Sub

End If

Next

Next

'檢查當前鼠標點擊的格子是否有效

Dim mycolor As Color

Dim g As System.Drawing.Graphics

g = PictureBox1.CreateGraphics

mycolor = Color.White

Dim brush1 As System.Drawing.Brush = New SolidBrush(mycolor)

g.FillEllipse(brush1, zhx * 30 + 10, zhy * 30 + 10, 30, 30)

'繪制玩家的棋子

table(zhx, zhy) = 2

For i = 0 To 191

If cwin(zhx, zhy, i) = True Then

cflag(i) = False

End If

Next

'重設電腦的獲勝標志

checkwin()

'檢查當前玩家是否獲勝

diannao()

'調用電腦算法

End Sub 五、獲勝檢查算法。 '*****************************************************************************

'** 模塊名稱: checkwin

'**

'** 描述: 此模塊執(zhí)行以下功能:

'** 1. 檢查是否和棋。

'** 2. 檢查電腦是否獲勝。

'** 3. 檢查玩家是否獲勝。

'**

'*****************************************************************************

Sub checkwin()

Dim i, j, k, m, n As Integer

Dim ca As Integer

Dim pa As Integer

Dim cnormal As Integer = 0

For i = 0 To 191

If cflag(i) = False Then

cnormal = cnormal + 1

End If

Next

If cnormal = 190 Then

Label1.Visible = True

Label1.Text = "和棋,請重新開始!"

PictureBox1.Refresh()

theplayflag = False

Exit Sub

End If

'設定和棋規(guī)則

For i = 0 To 191

If cflag(i) = True Then

ca = 0

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 1 Then

If cwin(j, k, i) = True Then

ca = ca + 1

End If

End If

Next

Next

If ca = 5 Then

Label1.Visible = True

Label1.Text = "電腦獲勝,請重新開始"

PictureBox1.Refresh()

theplayflag = False

Exit Sub

End If

End If

Next

'檢查電腦是否獲勝

For i = 0 To 191

If pflag(i) = True Then

pa = 0

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 2 Then

If pwin(j, k, i) = True Then

pa = pa + 1

End If

End If

Next

Next

If pa = 5 Then

Label1.Visible = True

Label1.Text = "玩家獲勝,請重新開始"

PictureBox1.Refresh()

theplayflag = False

Exit Sub

End If

End If

Next

'檢查玩家是否獲勝

End Sub  六、電腦算法 '*****************************************************************************

'** 模塊名稱: diannao

'**

'** 描述: 此程序主要執(zhí)行以下功能:

'** 1. 初始化賦值系統(tǒng)。

'** 2. 賦值加強算法。

'** 3. 計算電腦和玩家的最佳攻擊位。

'** 4. 比較電腦和玩家的最佳攻擊位并決定電腦的最佳策略。

'** 5. 執(zhí)行檢查獲勝函數。

'**

'***************************************************************************** Sub diannao()

Dim i, j, k, m, n As Integer

Dim dc As Integer

Dim cab As Integer

Dim pab As Integer

For i = 0 To 9

For j = 0 To 9

pscore(i, j) = 0

cscore(i, j) = 0

Next

Next

'初始化賦值數組

''' ******** 電腦加強算法 ********

For i = 0 To 191

If cflag(i) = True Then

cab = 0

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 1 Then

If cwin(j, k, i) = True Then

cab = cab + 1

End If

End If

Next

Next

Select Case cab

Case 3

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 0 Then

If cwin(m, n, i) = True Then

cscore(m, n) = cscore(m, n) + 5

End If

End If

Next

Next

Case 4

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 0 Then

If cwin(m, n, i) = True Then

yuandian(m * 30 + 10, n * 30 + 10)

table(m, n) = 1

For dc = 0 To 191

If pwin(m, n, dc) = True Then

pflag(dc) = False

checkwin()

Exit Sub

End If

Next

End If

End If

Next

Next

End Select

End If

Next

For i = 0 To 191

If pflag(i) = True Then

pab = 0

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 2 Then

If pwin(j, k, i) = True Then

pab = pab + 1

End If

End If

Next

Next

Select Case pab

Case 3

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 0 Then

If pwin(m, n, i) = True Then

pscore(m, n) = pscore(m, n) + 30

End If

End If

Next

Next

Case 4

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 0 Then

If pwin(m, n, i) = True Then

yuandian(m * 30 + 10, n * 30 + 10)

table(m, n) = 1

For dc = 0 To 191

If pwin(m, n, dc) = True Then

pflag(dc) = False

checkwin()

Exit Sub

End If

Next

End If

End If

Next

Next

End Select

End If

Next

''' ******** 電腦加強算法結束 ******** ' ******** 賦值系統(tǒng) ********

For i = 0 To 191

If cflag(i) = True Then

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 0 Then

If cwin(j, k, i) = True Then

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 1 Then

If cwin(m, n, i) = True Then

cscore(j, k) = cscore(j, k) + 1

End If

End If

Next

Next

End If

End If

Next

Next

End If

Next

For i = 0 To 191

If pflag(i) = True Then

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 0 Then

If pwin(j, k, i) = True Then

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 2 Then

If pwin(m, n, i) = True Then

pscore(j, k) = pscore(j, k) + 1

End If

End If

Next

Next

End If

End If

Next

Next

End If

Next

''' ******** 賦值系統(tǒng)結束 ********

''' ******** 分值比較算法 ********

Dim a, b, c, d As Integer

Dim cs As Integer = 0

Dim ps As Integer = 0

For i = 0 To 9

For j = 0 To 9

If cscore(i, j) cs Then

cs = cscore(i, j)

a = i

b = j

End If

Next

Next

For i = 0 To 9

For j = 0 To 9

If pscore(i, j) ps Then

ps = pscore(i, j)

c = i

d = j

End If

Next

Next

If cs ps Then

yuandian(a * 30 + 10, b * 30 + 10)

table(a, b) = 1

For i = 0 To 191

If pwin(a, b, i) = True Then

pflag(i) = False

End If

Next

Else

yuandian(c * 30 + 10, d * 30 + 10)

table(c, d) = 1

For i = 0 To 191

If pwin(c, d, i) = True Then

pflag(i) = False

End If

Next

End If

''' ******** 分值比較算法結束 ********

checkwin()

End Sub 七、繪制棋子 '*****************************************************************************

'** 模塊名稱: yuandian

'**

'** 描述: 此函數主要進行電腦棋子的繪制。

'**

'***************************************************************************** Sub yuandian(ByVal x As Integer, ByVal y As Integer)

Dim mycolor As Color

Dim g As System.Drawing.Graphics

g = PictureBox1.CreateGraphics

Dim zhx, zhy As Integer

zhx = Int((x - 10) / 30)

zhy = Int((y - 10) / 30)

mycolor = Color.Black

Dim brush1 As System.Drawing.Brush = New SolidBrush(mycolor)

g.FillEllipse(brush1, zhx * 30 + 10, zhy * 30 + 10, 30, 30)

End Sub

急求vb雙人對戰(zhàn)五子棋源代碼

Option Explicit

'五子棋程序 人機對戰(zhàn)版本

'需要2個Label控件 2個CommandButton控件

Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

'Dim PlayStep() As String '記錄棋譜的數組

'Dim Label2Cap As String

Private Const BoxL As Single = 50, BoxT As Single = 50, BoxW As Single = 25, BoxN As Integer = 18

Dim Table() As Long '棋盤(0-BoxN,0-BoxN) 0-空 1-黑子 2-白子

Dim PsCore() As Long '定義當前玩家桌面空格的分數

Dim CsCore() As Long '定義當前電腦桌面空格的分數

Dim pWin() As Boolean '定義玩家的獲勝組合

Dim cWin() As Boolean '定義電腦的獲勝組合

Dim pFlag() As Boolean '定義玩家的獲勝組合標志

Dim cFlag() As Boolean '定義電腦的獲勝組合標志

Dim ThePlayFlag As Boolean '定義游戲有效標志

Private Sub Command1_Click()

If Not ThePlayFlag Then Call InitPlayEnvironment: Exit Sub

If MsgBox("本局還沒有下完,是否重新開始?(Y/N)", vbYesNo) = vbNo Then Exit Sub

Call InitPlayEnvironment

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Form_Load()

Dim i As Long, lw As Long, lh As Long

'Label2Cap = "000 黑方 行 00 列 00"

Me.Width = 10815: Me.Height = 8040

' Me.Caption = "五子棋 - 人機對戰(zhàn)": Me.Show

lw = Me.Width \ Screen.TwipsPerPixelX: lh = Me.Height \ Screen.TwipsPerPixelY

SetWindowRgn Me.hWnd, CreateRoundRectRgn(0, 0, lw, lh, 60, 60), True

With Label1

.Alignment = vbCenter: .FontSize = 12: .FontBold = True

.ForeColor = vbRed: .BackStyle = 0: .AutoSize = True: .Move 8910, 510

End With

Label2.AutoSize = True: Label2.WordWrap = True

Label2.BackStyle = 0: Label2.Move 8040, 1050, 2280

Command1.Move 8025, 7035, 1020, 435: Command1.Caption = "再來一局"

Command2.Move 9300, 7035, 1020, 435: Command2.Caption = "不玩了"

Call DrawChessBoard: Me.FillStyle = 0: Call InitPlayEnvironment

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

End

End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim iRow As Long, iCol As Long, i As Long, k As Long, t As String

If Not ThePlayFlag Then Exit Sub

If Button = vbLeftButton Then '左鍵下棋

iRow = -1: iCol = -1

For i = 0 To BoxN '鼠標必須落在交叉點 半徑10以內 若是則給出行列號

If (Y + 10) (BoxT + i * BoxW) And (Y - 10) = (BoxT + i * BoxW) Then iRow = i

If (X + 10) (BoxL + i * BoxW) And (X - 10) = (BoxL + i * BoxW) Then iCol = i

Next

If (iRow = -1) Or (iCol = -1) Then Beep: Exit Sub

If Table(iCol, iRow) 0 Then Exit Sub

Table(iCol, iRow) = 2: Label1.Caption = "下一步 黑方"

Me.FillColor = vbWhite: Me.Circle (iCol * BoxW + BoxT, iRow * BoxW + BoxL), 8

For i = 0 To UBound(cWin, 3)

If cWin(iCol, iRow, i) = True Then cFlag(i) = False

Next

Call CheckWin: Call DianNao '檢查當前玩家是否獲勝 調用電腦算法

End If

End Sub

Public Sub InitPlayEnvironment()

'*****************************************************************************

' 模塊名稱: InitPlayEnvironment [初始化過程]

'

' 描述: 1. 設置背景音樂。 2. 設置游戲狀態(tài)有效。

' 3. 初始化游戲狀態(tài)標簽。 4. 直接指定電腦的第一步走法。

' 5. 初始化基本得分桌面。 6. 電腦和玩家獲勝標志初始化。

' 7. 初始化所有獲勝組合。 8. 重新設定玩家的獲勝標志。

'*****************************************************************************

Dim i As Long, j As Long, m As Long, n As Long

ThePlayFlag = True: Label1.Caption = "下一步 白方": Label2.Caption = ""

Me.FillColor = vbBlack: Me.FillStyle = 0: Me.AutoRedraw = True

Me.Cls: Me.Circle (9 * BoxW + BoxL, 9 * BoxW + BoxT), 8

ReDim Table(0 To BoxN, 0 To BoxN) As Long

ReDim pFlag(NumsWin(BoxN + 1) - 1) As Boolean

ReDim cFlag(UBound(pFlag)) As Boolean

ReDim PsCore(BoxN, BoxN) As Long, CsCore(BoxN, BoxN) As Long

ReDim pWin(BoxN, BoxN, UBound(pFlag)) As Boolean

ReDim cWin(BoxN, BoxN, UBound(pFlag)) As Boolean

For i = 0 To UBound(pFlag): pFlag(i) = True: cFlag(i) = True: Next

Table(9, 9) = 1 '假定電腦先手 并下了(9, 9)位 將其值設為1

'******** 初始化獲勝組合 ****************************************

For i = 0 To BoxN: For j = 0 To BoxN - 4

For m = 0 To 4

pWin(j + m, i, n) = True: cWin(j + m, i, n) = True

Next

n = n + 1

Next: Next

For i = 0 To BoxN: For j = 0 To BoxN - 4

For m = 0 To 4

pWin(i, j + m, n) = True: cWin(i, j + m, n) = True

Next

n = n + 1

Next: Next

For i = 0 To BoxN - 4: For j = 0 To BoxN - 4

For m = 0 To 4

pWin(j + m, i + m, n) = True: cWin(j + m, i + m, n) = True

Next

n = n + 1

Next: Next

For i = 0 To BoxN - 4: For j = BoxN To 4 Step -1

For m = 0 To 4

pWin(j - m, i + m, n) = True: cWin(j - m, i + m, n) = True

Next

n = n + 1

Next: Next

'******** 初始化獲勝組合結束 *************************************

For i = 0 To UBound(pWin, 3) '由于電腦已下了(9, 9)位 所以需要重新設定玩家的獲勝標志

If pWin(9, 9, i) = True Then pFlag(i) = False

Next

End Sub

Public Function DrawChessBoard() As Long

'容器的(BoxL, BoxT)為左上角坐標畫一個 BoxN*BoxN, 每格邊長為 BoxW 象素的棋盤

Dim i As Long, j As Long, cx As Long, cy As Long

Me.ScaleMode = 3: Me.FillStyle = 1: Me.AutoRedraw = True: Me.Cls

For i = 0 To BoxN '畫棋盤

Me.Line (BoxL + i * BoxW, BoxT)-(BoxL + i * BoxW, BoxT + BoxN * BoxW)

Me.Line (BoxL, BoxT + i * BoxW)-(BoxL + BoxN * BoxW, BoxT + i * BoxW)

Me.CurrentX = BoxL + i * BoxW - IIf(i 9, 6, 2)

Me.CurrentY = BoxT - 20: Me.Print Format(i)

Me.CurrentX = BoxL - IIf(i 9, 23, 20)

Me.CurrentY = BoxT + i * BoxW - 6: Me.Print Format(i)

Next

For i = 3 To 16 Step 6: For j = 3 To 16 Step 6 '畫小標志

cx = BoxL + j * BoxW - 3: cy = BoxT + i * BoxW - 3

Me.Line (cx, cy)-(cx + 6, cy + 6), , B

Next: Next

Me.AutoRedraw = False: Set Me.Picture = Me.Image

End Function

Public Sub CheckWin()

'*****************************************************************************

' 模塊名稱: CheckWin [獲勝檢查算法]

'

' 描述: 1. 檢查是否和棋。 2. 檢查電腦是否獲勝。 3. 檢查玩家是否獲勝。

'*****************************************************************************

Dim i As Long, j As Long, k As Long, m As Long, n As Long

Dim cA As Long, pA As Long, cN As Long

For i = 0 To UBound(cFlag): cN = IIf(cFlag(i) = False, cN + 1, cN): Next

If cN = UBound(cFlag) - 1 Then '設定和棋規(guī)則

Label1.Caption = "雙方和棋!": ThePlayFlag = False: Exit Sub

End If

For i = 0 To UBound(cFlag) '檢查電腦是否獲勝

If cFlag(i) = True Then

cA = 0: For j = 0 To BoxN: For k = 0 To BoxN

If Table(j, k) = 1 And cWin(j, k, i) = True Then cA = cA + 1

Next: Next

If cA = 5 Then Label1.Caption = "電腦獲勝!": ThePlayFlag = False: Exit Sub

End If

Next

For i = 0 To UBound(pFlag) '檢查玩家是否獲勝

If pFlag(i) = True Then

pA = 0: For j = 0 To BoxN: For k = 0 To BoxN

If Table(j, k) = 2 And pWin(j, k, i) = True Then pA = pA + 1

Next: Next

If pA = 5 Then Label1.Caption = "玩家獲勝!": ThePlayFlag = False: Exit Sub

End If

Next

End Sub

Public Sub DianNao()

'*****************************************************************************

' 模塊名稱: DianNao [電腦算法]

' 描述: 1. 初始化賦值系統(tǒng)。 2. 賦值加強算法。 3. 計算電腦和玩家的最佳攻擊位。

' 4. 比較電腦和玩家的最佳攻擊位并決定電腦的最佳策略。 5. 執(zhí)行檢查獲勝函數。

'*****************************************************************************

Dim i As Long, j As Long, k As Long, m As Long, n As Long

Dim Dc As Long, cAb As Long, pAb As Long

ReDim PsCore(BoxN, BoxN) As Long, CsCore(BoxN, BoxN) As Long '初始化賦值數組

'******** 電腦加強算法 ********

For i = 0 To UBound(cFlag)

If cFlag(i) = True Then

cAb = 0

For j = 0 To BoxN: For k = 0 To BoxN

If Table(j, k) = 1 And cWin(j, k, i) = True Then cAb = cAb + 1

Next: Next

Select Case cAb

Case 3

For m = 0 To BoxN: For n = 0 To BoxN

If Table(m, n) = 0 And cWin(m, n, i) = True Then CsCore(m, n) = CsCore(m, n) + 5

Next: Next

Case 4

For m = 0 To BoxN: For n = 0 To BoxN

If Table(m, n) = 0 And cWin(m, n, i) = True Then

Table(m, n) = 1: Label1.Caption = "下一步 白方"

Me.FillColor = vbBlack: Me.Circle (m * BoxW + BoxL, n * BoxW + BoxT), 8

For Dc = 0 To UBound(pWin, 3)

If pWin(m, n, Dc) = True Then pFlag(Dc) = False: Call CheckWin: Exit Sub

Next

End If

Next: Next

End Select

End If

Next

For i = 0 To UBound(pFlag)

If pFlag(i) = True Then

pAb = 0

For j = 0 To BoxN: For k = 0 To BoxN

If Table(j, k) = 2 And pWin(j, k, i) = True Then pAb = pAb + 1

Next: Next

Select Case pAb

Case 3

For m = 0 To BoxN: For n = 0 To BoxN

If Table(m, n) = 0 And pWin(m, n, i) = True Then PsCore(m, n) = PsCore(m, n) + 30

Next: Next

Case 4

For m = 0 To BoxN: For n = 0 To BoxN

If Table(m, n) = 0 And pWin(m, n, i) = True Then

Table(m, n) = 1: Label1.Caption = "下一步 白方"

Me.FillColor = vbBlack: Me.Circle (m * BoxW + BoxL, n * BoxW + BoxT), 8

For Dc = 0 To UBound(pWin, 3)

If pWin(m, n, Dc) = True Then pFlag(Dc) = False: Call CheckWin: Exit Sub

Next

End If

Next: Next

End Select

End If

Next

'******** 電腦加強算法結束 ********

'******** 賦值系統(tǒng) ****************

For i = 0 To UBound(cFlag)

If cFlag(i) = True Then

For j = 0 To BoxN: For k = 0 To BoxN

If (Table(j, k) = 0) And cWin(j, k, i) Then

For m = 0 To BoxN: For n = 0 To BoxN

If (Table(m, n) = 1) And cWin(m, n, i) Then CsCore(j, k) = CsCore(j, k) + 1

Next: Next

End If

Next: Next

End If

Next

For i = 0 To UBound(pFlag)

If pFlag(i) = True Then

For j = 0 To BoxN: For k = 0 To BoxN

If (Table(j, k) = 0) And pWin(j, k, i) Then

For m = 0 To BoxN: For n = 0 To BoxN

If (Table(m, n) = 2) And pWin(m, n, i) Then PsCore(j, k) = PsCore(j, k) + 1

Next: Next

End If

Next: Next

End If

Next

'******** 賦值系統(tǒng)結束 ************

'******** 分值比較算法 ************

Dim a As Long, b As Long, c As Long, d As Long

Dim cS As Long, pS As Long

For i = 0 To BoxN: For j = 0 To BoxN

If CsCore(i, j) cS Then cS = CsCore(i, j): a = i: b = j

Next: Next

For i = 0 To BoxN: For j = 0 To BoxN

If PsCore(i, j) pS Then pS = PsCore(i, j): c = i: d = j

Next: Next

If cS pS Then

Table(a, b) = 1: Label1.Caption = "下一步 白方"

Me.FillColor = vbBlack: Me.Circle (a * BoxW + BoxL, b * BoxW + BoxT), 8

For i = 0 To UBound(pWin, 3)

If pWin(a, b, i) = True Then pFlag(i) = False

Next

Else

Table(c, d) = 1: Label1.Caption = "下一步 白方"

Me.FillColor = vbBlack: Me.Circle (c * BoxW + BoxL, d * BoxW + BoxL), 8

For i = 0 To UBound(pWin, 3)

If pWin(c, d, i) = True Then pFlag(i) = False

Next

End If

'******** 分值比較算法結束 ********

Call CheckWin

End Sub

Public Function NumsWin(ByVal n As Long) As Long

'根據輸入的棋盤布局 n*n 計算總共有多少種獲勝組合

'假定棋盤為 10 * 10 相應的棋盤數組就是 Table(9, 9)

'水平方向 每一列獲勝組合是6 共10列 6*10=60

'垂直方向 每一行獲勝組合是6 共10行 8*10=60

'正對角線方向 6 + (5 + 4 + 3 + 2 + 1) * 2 = 36

'反對角線方向 6 + (5 + 4 + 3 + 2 + 1) * 2 = 36

'總的獲勝組合數為 60 + 60 + 36 + 36 = 192

Dim i As Long, t As Long

For i = n - 5 To 1 Step -1: t = t + i: Next

NumsWin = 2 * (2 * t + n - 4) + 2 * n * (n - 4)

End Function

C#寫五子棋,如何實現(xiàn),落子

軟糖有一個五子棋源碼,不過是VB.net的。

棋盤是用int[,]二維數組做的,值為0就是空,1是白方,2是黑方。

落子判斷值是否為0,然后根據當前玩家的賦值為1或2。

'''?summary

'''?返回玩家能否在棋盤(X,Y)的位置下棋

'''?/summary

'''?param?name="X"橫向坐標/param

'''?param?name="Y"縱向坐標/param

'''?returns如果已經有棋子或不在棋盤上,則返回False/returns

'''?remarks本函數會調用檢查五子并對檢查結果進行判斷/remarks

Public?Function?下棋(ByVal?X?As?Integer,?ByVal?Y?As?Integer)?As?Boolean

If?棋盤(X,?Y)??0?Then?Return?False

棋盤(X,?Y)?=?M當前玩家

Dim?檢查結果?As?Integer

檢查結果?=?檢查五子(X,?Y)

If?檢查結果??0?Then?玩家獲勝(檢查結果)?Else?交換玩家()

Return?True

End?Function


網頁名稱:vb.net五子棋,用vb編寫五子棋
網站URL:http://www.xueling.net.cn/article/hcoddh.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 91看片在线 | gogogo高清免费观看中国 | 黄黄的网站在线观看 | 欧美精品在线播放 | blacked欧美黑粗硬大 | 一区在线看 | 被男人吃奶很爽的毛片 | 午夜男女爽爽爽免费播放 | 亚洲精品一区二区三区蜜桃 | 久久艹一区 | 久久人妻无码中文字幕 | 色偷偷日本 | 国产AV导航大全精品 | 人人爽人人澡人人人妻、百度 | 中文字幕一区二区三区在线观看 | 国产一级特黄录像片 | 最近最好最新2019中文字幕免费 | 成人精品天堂一区二区三区 | 国产福利免费看 | 国产精品视频免费观看www | 亚洲精品久久久久久久久久久 | 国产精品视频入口麻豆 | 无码国产玉足脚交久久2024 | 在线观看国产麻豆 | 真实国产乱子伦视频对白 | 婷婷亚洲天堂影院 | 中国一级大毛片 | 国产日韩精品一区在线观看播放 | 国产成人一区二区啪在线观看 | 成年人黄色在线观看 | 在线观看免费av网站 | 国产精品视频免费一区 | 亚洲情在线| 国产一区二区怡红院 | 91热热| www.性色| 久久精品噜噜噜成人av农村 | 欧美精品乱码久久久久久 | 国产人妻精品无码AV | 日韩爱情动作片 | 日韩av无码一区二区三区不卡毛片 |