【原创】C# wpf 绘制五子棋游戏界面及实现UI交互

前言

本文分享如何使用wpf的原生xaml代码绘制五子棋游戏界面,及实现简单的UI交互。

整体效果

效果如下:
在这里插入图片描述

绘制棋盘

在这里插入图片描述
思路:使用两个叠加在一起的Grid:Grid1(19行19列)、Grid2(18行18列)。
1、定义个19行19列的Grid1;
2、在Grid1中填充一个Border,跨越Grid1的所有行和列;
3、在Border中放一个18行18列的Grid2,ShowGridLines设置为true(显示网格线);
注意:正确设置Border的BorderThickness和Margin,使Grid1中的棋子刚好能落在Grid2的网格线的交叉点上。xaml结构如下:
在这里插入图片描述

棋子设计

在这里插入图片描述
使用RadialGradientBrush绘制棋子光晕。黑色棋子的xaml如下:

	<Grid>
        <Border CornerRadius="15">
            <Border.Background>
                <RadialGradientBrush Center="0.3,0.3" GradientOrigin="0.3,0.3" RadiusX="0.4" RadiusY="0.4">
                    <GradientStop Color="White"/>
                    <GradientStop x:Name="gsColor1" Color="LightGray" Offset="0.2"/>
                    <GradientStop x:Name="gsColor2" Color="Black" Offset="1"/>
                </RadialGradientBrush>
            </Border.Background>
        </Border>
    </Grid>

UI交互

在Grid1上绑定MouseLeftButtonUp事件,根据鼠标坐标计算在Grid1中放置一颗棋子的row和column。

		private void GridBoard_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Point p = e.GetPosition(GridBoard);
            int c = (int)p.X / pieceSize;
            int r = (int)p.Y  / pieceSize;
            addPiece(new PieceInfo(c, r,pieceColor));
        }

扩展

基于此可以开发五子棋人机对弈或联网对战。若想要实现五子棋智能,可以参考文章:五子棋人机对战思路分享

本示例源码分享

完整源码下载:https://download.csdn.net/download/hyq106/87202770

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
用tkinter 实现的五子棋UI界面 import tkinter as tk from tkinter import messagebox from chessboard import ChessBoard ChessBoard = ChessBoard() class GUI(object): def __init__(self): self.counter = 0 self.winner = 0 self.is_start = False self.is_surrender = False self.window = tk.Tk() # 窗口对象(首字母大写) self.window.title('Gobang') self.window.geometry('800x540') self.window.resizable(width = False, height = False) # 画布对象 棋盘 self.canvas = tk.Canvas(self.window, height = 540, width = 540) self.chessboard = tk.PhotoImage(file = 'Gobang_chessboard/chessboard.gif') self.blackpoint = tk.PhotoImage(file = 'Gobang_chessboard/blackpoint.gif') self.whitepoint = tk.PhotoImage(file = 'Gobang_chessboard/whitepoint.gif') self.canvas.create_image(0, 0, anchor = 'nw', image = self.chessboard) self.canvas.bind("", self.get_point) self.start_point = 10 # 起始点位置 self.step = 35 # 每个格子的跨度 self.canvas.place(x = 0, y = 0) # 标签对象 self.l_info = tk.Label(self.window, text = 'Not started', font=('Arial', 12), width = 25, height = 2) self.l_info.place(x = 545, y = 0) # 文本框对象 self.t = tk.Text(self.window, height = 15) self.t.place(x = 540, y = 40) # 按钮对象 self.f_header = tk.Frame(self.window, highlightthickness=0) self.b_start = tk.Button(self.f_header, text = 'start', command = self.start) self.b_restart = tk.Button(self.f_header, text = 'restart', command = self.restart) self.b_regret = tk.Button(self.f_header, text = 'regret', command = self.regret) self.b_surrender = tk.Button(self.f_header, text = 'surrender', command = self.surrender) self.f_header.place(x = 545, y = 250) self.b_start.pack(side='left', padx=10) self.b_restart.pack(side = 'left') self.b_surrender.pack(side = 'right') self.b_regret.pac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hyq106

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值