基于组件表单的五子棋程序棋盘UI界面及相关代码与序列图解析

2025-06-18
来源:万象资讯

用户界面

鉴于该五子棋程序相对简单,我们决定采用一个仅含有一个组件的表单来构建棋盘的用户界面。

位置定义

public class Position { public int Row = -1; //行 public int Col = -1; //列 public static Position Empty { 获取方法:返回一个位置对象,其坐标分别为负一和负一。 } public bool IsEmpty { 获取结果:行坐标等于负一,且列坐标也等于负一。 } 公开构造函数Position,接收两个整型参数,分别代表行数和列数。 { Row = pRow; Col = pCol; } public int GetHashCode() { 将行字符串与列字符串拼接,形成一个新的字符串,然后通过调用该字符串的GetHashCode方法来获取其哈希码。 } public Position Clone() { 设定新的位置点NewPosition,其行坐标为this.Row,列坐标为this.Col。 return NewPostion; } 公开方法 PositionString,用于返回位置字符串 { 返回 Row 的字符串表示形式,接着是逗号,然后是 Col 的字符串表示形式。 } 公开方法IsEqual,用于判断位置pos2是否与当前对象相等。 { if (pos2 == null) { return false; }

五子棋程序UI设计 _五子棋抖音小游戏_ C#五子棋位置定义

此函数返回值取决于本对象的定位字符串是否与pos2对象的定位字符串相匹配。 } 仅允许通过行号和列号进行查询。 { 判断结果为:行数与指定行数相等,且列数与指定列数相同。 } }

用户界面\IUI.cs

此接口定义方法和事件。我们用于实现此接口。

public interface IUI { // 棋盘点击事件 事件板上的单元格点击处理函数为CellClicked。 // 重绘UI void RenderUI(); // 手动移动鼠标结束(完成落子) 定义一个函数,其名为MoveCursorTo,该函数接受一个名为position的参数,用于将光标移动到指定位置。 // 机器人完成落子事件 事件处理程序EventHandler HasFinishedMoveCursor,用于处理鼠标移动结束的事件。 // 游戏结束事件 定义一个方法,当游戏结束时,由指定的发送者触发,并接收一个事件参数。 //机器人落子 游戏机器人执行思考过程,当触发事件时,将自动调用void Game_BotThinking方法,并传入sender对象和e事件参数。 //机器人落子完成 当游戏机器人完成思考后,应调用事件处理程序,该程序由发送者对象和事件参数e触发。 }

UI\\.cs

为了支持各种主题,我们使用多个 来渲染。

此代码仅展示各点的位置信息,每个点将以两行文字的形式呈现,若为交点,其中心将绘制一个微小的圆形标记。

私有方法PaintBorder,接收Graphics对象g和扩展标签对象pLabel作为参数。 { 在PointX位置创建的Point对象被初始化为空值。 Point toPointX = Point.Empty; 在Point类中,创建了一个名为PointY的新点,并将其初始化为空点对象。 Point toPointY = Point.Empty; int beginWidth = 0; 计算中间宽度,取pLabel的宽度除以二,得到int类型的变量middleWidth。 int endWidth = pLabel.Width; int beginHeight = 0; 计算中间高度,取pLabel的高度值,然后除以二,得到的结果赋值给变量middleHeight。 计算结束时的标签高度,该值等于pLabel的高度。 根据pLabel.CellAttribute.GoboardPosition的值,执行相应的操作。 { 当遇到GoBoardPositionEnum枚举中的中心位置时: fromPointY 被初始化为一个新点,该点的横坐标为中间宽度,纵坐标为起始高度。 pointY赋值为一个新的点对象,其横坐标为中间宽度,纵坐标为结束高度。 从起始宽度位置,创建一个新的点对象,其X坐标值为beginWidth,Y坐标值为middleHeight; 创建新点对象toPointX,其横坐标设为endWidth,纵坐标设定为middleHeight。 break; 省略其他职位的代码。 } 绘制线条时,程序执行了以下操作:使用画笔penTable,从起点fromPointY开始,沿着路径绘制至终点toPointY。 绘制线条时,使用笔表绘制,起点坐标为fromPointX,终点坐标为toPointX。 g. 合成模式设置为源上覆盖模式; 若(pLabel.CellAttribute)属性表明其为交点。 { 创建一个名为RectangleF的矩形对象,该对象与圆形相交部分的区域。 创建一个新的矩形对象,其左上角坐标为中间宽度减去4,中间高度减去4,宽度和高度均为8。 绘制椭圆,使用共享图形对象的实色画笔,其颜色源自笔表中的设定。 RecCircleIntersecton); } }

在这张图像里,蓝色区域被标记出来,其中BH代表某个特定区域,EH代表另一个特定区域,BW和EW分别指代另外两个不同的区域。

用户单击时的序列图。

这是用户单击时的序列图。我省略了 () 部分中的细节。

您可以在 Game.cs 文件中查阅关于 bot 运作流程的序列图。

至此,关于五子棋游戏UI绘制基本完成。

a /Five in a Row in C# -

分享