国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

五子棋(一)——VB.net

這篇具有很好參考價(jià)值的文章主要介紹了五子棋(一)——VB.net。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

19南師軟工——人機(jī)交互作業(yè)


前言

用vb來實(shí)現(xiàn)簡易的五子棋,我們?nèi)藱C(jī)交互大作業(yè),兩人一組完成。是很簡陋的學(xué)生作品


一、五子棋窗口彈開

我們設(shè)置的窗口是一個(gè)開始新游戲的界面和一個(gè)打開之前某次的游戲記錄,點(diǎn)擊開始游戲的界面則彈出該窗體的一個(gè)子窗口,且可以同時(shí)開啟多個(gè)子窗口

所以我們五子棋是有兩個(gè)窗口,一個(gè)frmGame窗口,一個(gè)frmStartGame窗口。

frmstartGame窗口

對于frmStartGame窗口,我設(shè)置了一個(gè)好看的背景圖片
五子棋(一)——VB.net

放在resources文件夾里
五子棋(一)——VB.net
窗口的具體代碼:

Public Class frmStartGame
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles StartGame.Click
        CreateChild()
    End Sub
    Sub CreateChild()
        Dim game As Form = New frmGame
        '   Dim NewChild As Form = New frmGame
        Me.IsMdiContainer = True
        game.MdiParent = Me
        game.Show()
    End Sub

    Private Sub frmStartGame_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '繼續(xù)游戲
    End Sub
End Class

frmGame窗口

另外一個(gè)窗口是這個(gè)樣子的:
五子棋(一)——VB.net
其中一個(gè)是listbox,一個(gè)是picturebox(背景色是黃色)

運(yùn)行結(jié)果:

運(yùn)行彈出的窗口:我們默認(rèn)是最大化,可以更改
五子棋(一)——VB.net
這個(gè)是點(diǎn)擊開始新游戲之后

五子棋(一)——VB.net
可以同時(shí)打開好幾個(gè)游戲窗口
五子棋(一)——VB.net

二、畫棋盤

畫線段

首先一個(gè)五子棋的棋盤是固定的15*15的規(guī)格,也就是我們要畫15條橫線和豎線
而畫線段的函數(shù)是

 g.DrawLine(Pens.Black, x1, y, x2, y)

g是畫筆,參數(shù)分別是顏色,起始坐標(biāo)的xy值,終點(diǎn)坐標(biāo)的xy值

數(shù)據(jù)

我們會(huì)怎么畫一條線段了,那么,怎么來畫一個(gè)棋盤呢

對于要在PictureBox里畫出兩組15的線段組,那么我們需要知道

	 Public Wxy As Integer   '行數(shù)
    Public gap As Integer  '棋子間的縫隙
    Public ChessR As Integer '棋子的半徑
    Public CellSize As Integer  '格子的大小

具體是多少,可以直接制定比例

change()

當(dāng)我們拖動(dòng)窗口,畫的畫框會(huì)消失怎么辦?

我的解決辦法是chang事件

 Public Event Changed()  '當(dāng)界面改變的響應(yīng)事件

在frmGame窗口里建立一個(gè)響應(yīng)的事件,每次改變就再畫一次棋盤


    Private Sub ChessBox_Changed() Handles ChessBox.Changed
        Dim g As Graphics = PictureBox.CreateGraphics
        ChessBox.Draw(g)
    End Sub

三、畫棋子

畫一個(gè)棋子

在五子棋中的棋子,是一個(gè)實(shí)心的?,有黑白兩種顏色

g.FillEllipse(Brushes.White, x, y, 2 * clsChessBox.ChessR, 2 * clsChessBox.ChessR)
g.FillEllipse(Brushes.Black, x, y, 2 * clsChessBox.ChessR, 2 * clsChessBox.ChessR)               

參數(shù):

顏色,定義橢圓的邊界矩形左上角的 xy值,定義橢圓的邊界矩形的寬和高

隨鼠標(biāo)畫棋子

處理的事件:鼠標(biāo)點(diǎn)擊picturebox
而在五子棋游戲中,點(diǎn)擊棋盤,其實(shí)就是開始下棋了,既在chessbox中的Do函數(shù)

而,我的想法是將棋子的狀態(tài)定義為黑白和沒有棋子的狀態(tài),并且在最開始,就將創(chuàng)建所有的棋子。

Enum ChessFlag
    White
    Black
    Null
End Enum
QiHe = New List(Of Chess) '將棋盒初始化
For i = 0 To Wxy
     For j = 0 To Wxy
        Dim chess As New Chess(Me, i, j, ChessFlag.Null) '創(chuàng)建15*15個(gè)棋子
                QiHe.Add(chess) 'i是rol,j是col,鏈表的標(biāo)是14*(i-1)+j-1
   	 Next
Next

所有當(dāng)我們開始下棋時(shí),只要將點(diǎn)的位置對于的棋子的狀態(tài)改變就行

在五子棋在中,棋子變成黑色或者白色時(shí),就不能再下到這個(gè)位置了,所以我們需要將Do設(shè)置為能有返回值的fuction,以此來判斷,再次點(diǎn)擊棋盤時(shí),需不需要變換顏色

具體代碼

frmGame窗口

  Private Sub PictureBox_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox.MouseDown
        Static Flag As ChessFlag = ChessFlag.Black '棋子初始是黑色的
        Dim i = ChessBox.Do(e.Location, Flag)
        If i = 0 Then
            If Flag = ChessFlag.Black Then
                Flag = ChessFlag.White
            Else
                Flag = ChessFlag.Black
            End If
        End If
    End Sub

    Private Sub frmGame_Load(sender As Object, e As EventArgs) Handles Me.Load
        ChessBox = New ClsChessBox(PictureBox, 14) '棋子都是十五行
    End Sub

    Private Sub ChessBox_Changed() Handles ChessBox.Changed
        Dim g As Graphics = PictureBox.CreateGraphics
        ChessBox.Draw(g)
    End Sub

clschessbox

Class ClsChessBox
    Public Wxy As Integer   '行數(shù)
    Public gap As Integer  '棋子間的縫隙
    Public ChessR As Integer '棋子的半徑
    Public CellSize As Integer  '格子的大小
    Public QiHe As List(Of Chess) '記錄所有的棋子,既旗盒


    Public blackchess As List(Of Chess) '記錄已經(jīng)下的黑棋,方便記錄步驟悔棋
    Public whitechess As List(Of Chess)

    Public Event Changed()  '當(dāng)界面改變的響應(yīng)事件

    Public Sub New(ByVal pic As PictureBox, ByVal Wxy As Integer) '默認(rèn)執(zhí)行
        Me.Wxy = Wxy
        Dim BoxSize As Integer
        If pic.Width < pic.Height Then
            BoxSize = pic.Width
        Else
            BoxSize = pic.Height
        End If    '棋盤的大小定義,因?yàn)楸仨毷钦叫蔚?/span>
        CellSize = BoxSize * 1.6 / (Wxy + 1) '定義格子的比例
        gap = CellSize * 0.2  '棋子是格子的0.8倍
        ChessR = CellSize * 0.8 * 0.5
        QiHe = New List(Of Chess) '將棋盒初始化
        whitechess = New List(Of Chess)
        blackchess = New List(Of Chess)
        For i = 0 To Wxy
            For j = 0 To Wxy
                Dim chess As New Chess(Me, i, j, ChessFlag.Null) '創(chuàng)建15*15個(gè)棋子
                QiHe.Add(chess) 'i是rol,j是col,鏈表的標(biāo)是15*(i-1)+j-1
            Next
        Next
    End Sub

    Public Sub Draw(ByVal g As Graphics)
        For i = 0 To Wxy
            ' 畫水平線
            Dim y As Integer = i * CellSize + CellSize * 1
            Dim x1 As Integer = CellSize * 1
            Dim x2 As Integer = CellSize * Wxy + CellSize * 1
            g.DrawLine(Pens.Black, x1, y, x2, y)
        Next
        For i = 0 To Wxy
            ' 畫垂直線
            Dim x As Integer = i * CellSize + CellSize * 1
            Dim y1 As Integer = CellSize * 1
            Dim y2 As Integer = CellSize * Wxy + CellSize * 1
            g.DrawLine(Pens.Black, x, y1, x, y2)
        Next
        For i = 0 To QiHe.Count - 1
            QiHe(i).Draw(g) '畫棋子
        Next
    End Sub

    Function [Do](ByVal p As Point, ByVal Flag As ChessFlag) '下棋的操作
        Dim row As Integer = (p.Y - CellSize * 0.5) / CellSize
        Dim col As Integer = (p.X - CellSize * 0.5) / CellSize
        '計(jì)算行列號(hào)
        If (QiHe((15 * row) + col).flag = ChessFlag.Null) Then
            QiHe((15 * row) + col).flag = Flag '改變對于位置棋子的狀態(tài)
            '當(dāng)前加入步驟記錄
            RaiseEvent Changed()
            [Do] = 0
        Else
            [Do] = 1
        End If
    End Function

End Class

chess文章來源地址http://www.zghlxwxcb.cn/news/detail-452771.html

Enum ChessFlag
    White
    Black
    Null
End Enum
Class Chess
    Private clsChessBox As ClsChessBox
    Private row As Integer
    Private col As Integer '行列
    Public flag As ChessFlag '記錄這個(gè)棋子的狀態(tài)

    Public Sub New(clsChessBox As ClsChessBox, i As Integer, j As Integer, flag As ChessFlag)
        Me.clsChessBox = clsChessBox
        Me.row = i
        Me.col = j
        Me.flag = flag
    End Sub

    Friend Sub Draw(g As Graphics)
        If flag = ChessFlag.Black Or flag = ChessFlag.White Then
            '棋子是null的狀態(tài)時(shí),就不需要進(jìn)行操作
            '棋子邊界矩形左上角的坐標(biāo)
            Dim x As Integer = col * clsChessBox.CellSize + clsChessBox.CellSize / 2
            Dim y As Integer = row * clsChessBox.CellSize + clsChessBox.CellSize / 2
            If flag = ChessFlag.White Then
                '畫白棋
                g.FillEllipse(Brushes.White, x, y, 2 * clsChessBox.ChessR, 2 * clsChessBox.ChessR)
            ElseIf flag = ChessFlag.Black Then
                '畫黑棋
                g.FillEllipse(Brushes.Black, x, y, 2 * clsChessBox.ChessR, 2 * clsChessBox.ChessR)
            End If
        End If
    End Sub
End Class

到了這里,關(guān)于五子棋(一)——VB.net的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python五子棋代碼最簡單的,python五子棋代碼能復(fù)制

    python五子棋代碼最簡單的,python五子棋代碼能復(fù)制

    本篇文章給大家談?wù)刾ython五子棋代碼紅方藍(lán)方,以及python五子棋代碼最簡單的,希望對各位有所幫助,不要忘了收藏本站喔。 開端 畫棋盤 首先肯定是要畫出棋盤來,用? pygame ?畫出一個(gè) 19 × 19 或 15 × 15 的棋盤并不是什么難事,這在之前的文章中已經(jīng)多次用到,就不贅述了

    2024年03月13日
    瀏覽(26)
  • python五子棋代碼最簡單的,python五子棋代碼手機(jī)版

    python五子棋代碼最簡單的,python五子棋代碼手機(jī)版

    大家好,本文將圍繞python五子棋代碼最簡單的展開說明,python五子棋代碼手機(jī)版是一個(gè)很多人都想弄明白的事情,想搞清楚python五子棋代碼畫棋盤需要先了解以下幾個(gè)事情。 【實(shí)例簡介】 【實(shí)例截圖】 【核心代碼】 \\\"\\\"\\\"五子棋之人機(jī)對戰(zhàn)\\\"\\\"\\\" import sys import random import pygame from

    2024年01月19日
    瀏覽(29)
  • 中秋時(shí)節(jié)賞明月,五子棋戲月餅趣 — Flutter中秋限定版五子棋

    中秋時(shí)節(jié)賞明月,五子棋戲月餅趣 — Flutter中秋限定版五子棋

    前言 當(dāng)中秋時(shí)節(jié)來臨,我們都期待著與親人朋友共度這個(gè)美好的節(jié)日。這個(gè)時(shí)候,除了傳統(tǒng)的賞月和品嘗美味的月餅,我還有一個(gè)特別的建議——嘗試一款有趣的Flutter五子棋游戲!這款五子棋游戲以中秋為主題,游戲的棋子也可愛地模仿了月餅和玉兔的形狀,讓我們在這個(gè)

    2024年02月06日
    瀏覽(24)
  • 五子棋游戲

    五子棋游戲

    一。畫出棋盤x和y? 橫和豎個(gè)15條線,畫出中央的小點(diǎn) 二,創(chuàng)建列表,計(jì)算出x和y的當(dāng)前坐標(biāo)的位置,且存儲(chǔ)二維列表的值,畫出圓形白色棋子 三.黑白棋子交替出現(xiàn) 四,提示已經(jīng)被其他棋子占領(lǐng)了,不能重復(fù)占領(lǐng) 五。創(chuàng)建檢測五子相連的函數(shù)? def? check 六.,實(shí)現(xiàn)水平向左和

    2024年02月05日
    瀏覽(22)
  • Python實(shí)現(xiàn)五子棋

    Python實(shí)現(xiàn)五子棋

    我認(rèn)為這個(gè)五子棋核心還是在于二維數(shù)組,將實(shí)際當(dāng)中鼠標(biāo)點(diǎn)擊的物理位置轉(zhuǎn)換到棋盤中的邏輯地址,之后便用數(shù)組的方法進(jìn)行操作,例如檢測是否獲勝,電腦下棋策略等。 是否可落子 是否有輸贏 每次標(biāo)記最新下棋的位置即可 電腦下棋 策略:主要根據(jù)一個(gè)網(wǎng)上的經(jīng)驗(yàn)評分

    2024年02月06日
    瀏覽(22)
  • 五子棋(Python實(shí)現(xiàn))

    2024年02月11日
    瀏覽(18)
  • python實(shí)現(xiàn)《五子棋》

    python實(shí)現(xiàn)《五子棋》

    ? ? ? ? 今天突然心血來潮,想全程自己寫一個(gè)小游戲(畢竟對于一個(gè)才接觸python不到一個(gè)月的小白來說,還是比較為難,雖然不算是完全成功,因?yàn)槠灞P大小和布局還是借鑒了其它博主的,但這都是小問題,重要是其它的都是自己寫的嘛?。。。ㄟ?,這小編真能扯,還不上

    2024年02月12日
    瀏覽(21)
  • 在線五子棋對戰(zhàn)

    在線五子棋對戰(zhàn)

    目錄 ? 數(shù)據(jù)管理模塊(數(shù)據(jù)庫設(shè)計(jì)) 前端界面模塊 業(yè)務(wù)處理模塊 會(huì)話管理模塊網(wǎng)絡(luò)通信模塊(session,cookie) 在線管理模塊 房間管理模塊 用戶匹配模塊 項(xiàng)目擴(kuò)展 數(shù)據(jù)庫中有可能存在很多張表,每張表中管理的數(shù)據(jù)?有不同,要進(jìn)?的數(shù)據(jù)操作也各不相同,因此我們可以為每?

    2024年02月14日
    瀏覽(18)
  • Pygame 五子棋編程

    Pygame 五子棋編程

    編程說明: ?pygame編程五子棋程序。 設(shè)計(jì)流程 :新建棋盤,落子畫圓,校驗(yàn)五子相連,贏家信息顯示,自動(dòng)重啟下一局,程序打包成exe。 關(guān)鍵點(diǎn) : ????新建棋盤:考慮線的間隔,需提前計(jì)算好。 ? ??落子畫圓:考慮黑白交替,已落子坐標(biāo)位不可重復(fù)落子。 ? ? 校驗(yàn)五子

    2024年02月08日
    瀏覽(27)
  • C++制作五子棋

    C++制作五子棋

    正文 01 思路 我沒有選擇專業(yè)的五子棋棋型,用我自己的邏輯(初高中玩五子棋的方法),去實(shí)現(xiàn)簡單的人機(jī)對戰(zhàn)。 首先因?yàn)橐?jì)算五子棋每一步的分?jǐn)?shù),那么你就要分析每一步形成的棋盤,以下圖為例: 當(dāng)你即將在紅色方框區(qū)域內(nèi)落子時(shí),通過數(shù)據(jù)處理獲取四個(gè)方向的棋子

    2024年02月11日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包