五子棋(一)——VB.net

这篇具有很好参考价值的文章主要介绍了五子棋(一)——VB.net。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

19南师软工——人机交互作业


前言

用vb来实现简易的五子棋,我们人机交互大作业,两人一组完成。是很简陋的学生作品


一、五子棋窗口弹开

我们设置的窗口是一个开始新游戏的界面和一个打开之前某次的游戏记录,点击开始游戏的界面则弹出该窗体的一个子窗口,且可以同时开启多个子窗口

所以我们五子棋是有两个窗口,一个frmGame窗口,一个frmStartGame窗口。

frmstartGame窗口

对于frmStartGame窗口,我设置了一个好看的背景图片
五子棋(一)——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
        '继续游戏
    End Sub
End Class

frmGame窗口

另外一个窗口是这个样子的:
五子棋(一)——VB.net
其中一个是listbox,一个是picturebox(背景色是黄色)

运行结果:

运行弹出的窗口:我们默认是最大化,可以更改
五子棋(一)——VB.net
这个是点击开始新游戏之后

五子棋(一)——VB.net
可以同时打开好几个游戏窗口
五子棋(一)——VB.net

二、画棋盘

画线段

首先一个五子棋的棋盘是固定的15*15的规格,也就是我们要画15条横线和竖线
而画线段的函数是

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

g是画笔,参数分别是颜色,起始坐标的xy值,终点坐标的xy值

数据

我们会怎么画一条线段了,那么,怎么来画一个棋盘呢

对于要在PictureBox里画出两组15的线段组,那么我们需要知道

	 Public Wxy As Integer   '行数
    Public gap As Integer  '棋子间的缝隙
    Public ChessR As Integer '棋子的半径
    Public CellSize As Integer  '格子的大小

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

change()

当我们拖动窗口,画的画框会消失怎么办?

我的解决办法是chang事件

 Public Event Changed()  '当界面改变的响应事件

在frmGame窗口里建立一个响应的事件,每次改变就再画一次棋盘


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

三、画棋子

画一个棋子

在五子棋中的棋子,是一个实心的⚪,有黑白两种颜色

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

参数:

颜色,定义椭圆的边界矩形左上角的 xy值,定义椭圆的边界矩形的宽和高

随鼠标画棋子

处理的事件:鼠标点击picturebox
而在五子棋游戏中,点击棋盘,其实就是开始下棋了,既在chessbox中的Do函数

而,我的想法是将棋子的状态定义为黑白和没有棋子的状态,并且在最开始,就将创建所有的棋子。

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) '创建15*15个棋子
                QiHe.Add(chess) 'i是rol,j是col,链表的标是14*(i-1)+j-1
   	 Next
Next

所有当我们开始下棋时,只要将点的位置对于的棋子的状态改变就行

在五子棋在中,棋子变成黑色或者白色时,就不能再下到这个位置了,所以我们需要将Do设置为能有返回值的fuction,以此来判断,再次点击棋盘时,需不需要变换颜色

具体代码

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   '行数
    Public gap As Integer  '棋子间的缝隙
    Public ChessR As Integer '棋子的半径
    Public CellSize As Integer  '格子的大小
    Public QiHe As List(Of Chess) '记录所有的棋子,既旗盒


    Public blackchess As List(Of Chess) '记录已经下的黑棋,方便记录步骤悔棋
    Public whitechess As List(Of Chess)

    Public Event Changed()  '当界面改变的响应事件

    Public Sub New(ByVal pic As PictureBox, ByVal Wxy As Integer) '默认执行
        Me.Wxy = Wxy
        Dim BoxSize As Integer
        If pic.Width < pic.Height Then
            BoxSize = pic.Width
        Else
            BoxSize = pic.Height
        End If    '棋盘的大小定义,因为必须是正方形的
        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) '创建15*15个棋子
                QiHe.Add(chess) 'i是rol,j是col,链表的标是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
        '计算行列号
        If (QiHe((15 * row) + col).flag = ChessFlag.Null) Then
            QiHe((15 * row) + col).flag = Flag '改变对于位置棋子的状态
            '当前加入步骤记录
            RaiseEvent Changed()
            [Do] = 0
        Else
            [Do] = 1
        End If
    End Function

End Class

chess文章来源地址https://www.toymoban.com/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 '记录这个棋子的状态

    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的状态时,就不需要进行操作
            '棋子边界矩形左上角的坐标
            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

到了这里,关于五子棋(一)——VB.net的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python五子棋代码最简单的,python五子棋代码手机版

    大家好,本文将围绕python五子棋代码最简单的展开说明,python五子棋代码手机版是一个很多人都想弄明白的事情,想搞清楚python五子棋代码画棋盘需要先了解以下几个事情。 【实例简介】 【实例截图】 【核心代码】 \\\"\\\"\\\"五子棋之人机对战\\\"\\\"\\\" import sys import random import pygame from

    2024年01月19日
    浏览(35)
  • python五子棋代码最简单的,python五子棋代码能复制

    本篇文章给大家谈谈python五子棋代码红方蓝方,以及python五子棋代码最简单的,希望对各位有所帮助,不要忘了收藏本站喔。 开端 画棋盘 首先肯定是要画出棋盘来,用  pygame  画出一个 19 × 19 或 15 × 15 的棋盘并不是什么难事,这在之前的文章中已经多次用到,就不赘述了

    2024年03月13日
    浏览(38)
  • 中秋时节赏明月,五子棋戏月饼趣 — Flutter中秋限定版五子棋

    前言 当中秋时节来临,我们都期待着与亲人朋友共度这个美好的节日。这个时候,除了传统的赏月和品尝美味的月饼,我还有一个特别的建议——尝试一款有趣的Flutter五子棋游戏!这款五子棋游戏以中秋为主题,游戏的棋子也可爱地模仿了月饼和玉兔的形状,让我们在这个

    2024年02月06日
    浏览(45)
  • 在线五子棋对战

    目录   数据管理模块(数据库设计) 前端界面模块 业务处理模块 会话管理模块网络通信模块(session,cookie) 在线管理模块 房间管理模块 用户匹配模块 项目扩展 数据库中有可能存在很多张表,每张表中管理的数据⼜有不同,要进⾏的数据操作也各不相同,因此我们可以为每⼀

    2024年02月14日
    浏览(35)
  • 鸿蒙小案例-五子棋

    刚开始以为挺简单的,越写越…emo 因为代码有点多,所以这里就简单讲下逻辑,文末贴上代码 逻辑只是我个人想的,不代表只有这一种实现方式,有其他想法可以在下面留言 另外功能做的比较简单,有一些没实现,但是基本功能都有,大家可以自行优化 组件就比较简单,采

    2024年02月21日
    浏览(30)
  • Pygame 五子棋编程

    编程说明:  pygame编程五子棋程序。 设计流程 :新建棋盘,落子画圆,校验五子相连,赢家信息显示,自动重启下一局,程序打包成exe。 关键点 :     新建棋盘:考虑线的间隔,需提前计算好。     落子画圆:考虑黑白交替,已落子坐标位不可重复落子。     校验五子

    2024年02月08日
    浏览(42)
  • C++制作五子棋

    正文 01 思路 我没有选择专业的五子棋棋型,用我自己的逻辑(初高中玩五子棋的方法),去实现简单的人机对战。 首先因为要计算五子棋每一步的分数,那么你就要分析每一步形成的棋盘,以下图为例: 当你即将在红色方框区域内落子时,通过数据处理获取四个方向的棋子

    2024年02月11日
    浏览(25)
  • 五子棋游戏

    一。画出棋盘x和y  横和竖个15条线,画出中央的小点 二,创建列表,计算出x和y的当前坐标的位置,且存储二维列表的值,画出圆形白色棋子 三.黑白棋子交替出现 四,提示已经被其他棋子占领了,不能重复占领 五。创建检测五子相连的函数  def  check 六.,实现水平向左和

    2024年02月05日
    浏览(31)
  • Python实现五子棋

    我认为这个五子棋核心还是在于二维数组,将实际当中鼠标点击的物理位置转换到棋盘中的逻辑地址,之后便用数组的方法进行操作,例如检测是否获胜,电脑下棋策略等。 是否可落子 是否有输赢 每次标记最新下棋的位置即可 电脑下棋 策略:主要根据一个网上的经验评分

    2024年02月06日
    浏览(36)
  • 五子棋(Python实现)

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包