Mac OS下的五子棋盘

  • 制作棋盘
  • 画棋盘线
    • 画横线
    • 画竖线
    • 画棋子
  • 棋盘最终效果
  • END

制作棋盘

首先需要制作一个简单的500x500的棋盘窗口,这里使用xib来布局


下一步创建棋盘类,关联xib

class GobangChessBoard: NSView
{override func draw(_ dirtyRect: NSRect) {super.draw(dirtyRect)}
}

draw 方法就是实现棋盘的关键,在里边进行棋盘绘制

画棋盘线

五子棋盘又横竖线交织排列形成,棋子落于交叉点

画横线

var horizontalLineNum: Int? //定义横线条数
//计算当前棋盘能占有多少条横线,横线距离为30,+ 1是为了封住最后一条横线,-30是为了距离左边30,不至于第一行落子无法显示。
horizontalLineNum = Int((view.frame.size.height-30)/30 + 1)
//现在开始利用贝塞尔曲线来画出横线(如图1.1)
for i in 0..<horizontalLineNum! {let bezier = NSBezierPath()bezier.move(to: NSPoint(x: 23, y: 15 + CGFloat(i * 30)))bezier.line(to: NSPoint(x: CGFloat(horizontalLineNum! * 30) - 7, y: 15 + CGFloat(i * 30)))bezier.lineWidth = 1.0NSColor.black.set()bezier.stroke()
}


图1.1

画竖线

与横线同理了,继续贝塞尔曲线画

var verticalLineNum: Int? //定义竖线条数
//计算当前棋盘能占有多少条竖线,竖线距离为30,+ 1是为了封住最后一条竖线,-30是为了距离上边30,不至于第一行落子无法显示。
verticalLineNum = Int((view.frame.size.width-30)/30 + 1)
//现在开始利用贝塞尔曲线来画出竖线(如图1.2)
for i in 0..<verticalLineNum! {let bezier = NSBezierPath()bezier.move(to: NSPoint(x: 23 + CGFloat(i * 30), y: 15))bezier.line(to: NSPoint(x: 23 + CGFloat(i * 30), y: CGFloat(verticalLineNum! * 30) - 15))bezier.lineWidth = 1.0NSColor.black.set()bezier.stroke()
}


图1.2

画棋子

棋子在此五子棋中,我直接就定义为一个圆形黑白快,依然使用贝塞尔曲线来绘制

let bezier = NSBezierPath()
bezier.lineWidth = 1.0
bezier.appendArc(withCenter: NSPoint(x: p.point.x*30+23, y: p.point.y*30+15), radius: 10, startAngle: 0, endAngle: 360, clockwise: false)
if p.isblackOrWhite {NSColor.black.set()
}else {NSColor.white.set()
}
bezier.stroke()
bezier.fill()

棋盘最终效果

我们将上述三种合并,看看棋盘的最终效果

END

下一节,我们实现黑白子交替落位,以及实现重开及悔棋两个小功能。

macOS swift下使用贝塞尔曲线制作五子棋盘(1)相关推荐

  1. macOS swift下使用贝塞尔曲线制作五子棋盘(2)

    macOS swift下使用贝塞尔曲线制作五子棋盘(2) 落子 黑白子交替 计算落子的point 功能 判断当前落点是否有相同棋子,并保存 判断输赢 分析 左右分析 上下分析 斜向分析 悔棋 重开游戏 ...

  2. 使用贝塞尔曲线制作网页手鼓猫

    使用贝塞尔曲线制作网页手鼓猫 效果图 CSS代码 HTML代码 JS代码部分 总结 效果图 一只简易版的网页手鼓猫 CSS代码 <style>*{margin: 0;padding: 0; ...

  3. Unity之使用贝塞尔曲线制作图片轮播

    一.效果图 1.效果1 2.效果2 二.贝塞尔曲线 关于贝塞尔曲线的学习大家可以看这个文章进行学习https://blog.csdn.net/qq_39162826/article/details/1 ...

  4. Linux下使用dd命令制作启动盘

    date: 2018-09-25 10:39:41+00:00 原标题: Linux下使用dd命令制作启动盘 原链接: https://www.dreamoftime0.com/2018/09/25/ ...

  5. Unity 贝塞尔曲线制作迁徙图

    效果图: 实现该效果图所需的知识点: 1.贝塞尔曲线 贝塞尔曲线是图形学中非常重要的参数曲线,在此不做详细介绍,这里我们用到的是二次方公式: using UnityEngine; using Syst ...

  6. 贝塞尔曲线开发的艺术

    贝塞尔曲线开发的艺术 一句话概括贝塞尔曲线:将任意一条曲线转化为精确的数学公式. 很多绘图工具中的钢笔工具,就是典型的贝塞尔曲线的应用,这里的一个网站可以在线模拟钢笔工具的使用: http://bez ...

  7. android波浪动画简书,Android贝塞尔曲线————波浪效果(大波浪)

    Hello大家好,很高兴又一次与大家见面,今天是农历丁酉鸡年(大年初四),现在跟大家拜年有点晚,算是拜晚年,祝大家晚年幸福. 这么快大伙都到了晚年了,Android贝塞尔曲线我也准备以一个大波浪来结束 ...

  8. HTML5 JS Canvas利用贝塞尔曲线绘制圆角矩形

    啥也不说,先上示例代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. 多视角探析贝塞尔曲线匀速化技术、实现及其应用

    概述 就在三年前,我于CSDN博客上发布了一篇题为<贝塞尔曲线运动n阶追踪方程的数学原理及其匀速化方法和应用>的博客文章,主要探讨的是贝塞尔曲线由一阶至n阶在数学层面的生成过程,以及匀速化 ...

最新文章

  1. android dialog
  2. Google今日更新PR值,帆船书会由1升到了3
  3. PAT (Advanced Level) 1014 Waiting in Line(模拟)
  4. 漫画家Neal Adams推出以蝙蝠侠等超级英雄为主题的NFT
  5. Openresty 安装、源码编译,增加WAF模块naxsi
  6. 计算机一级b考试理论知识,计算机等级考试一级B基础知识精选考点串讲
  7. iso 9000下载_ISO 9000 | 软件工程
  8. 电脑需不需要安装杀毒软件?
  9. ereg/eregi报错处理办法
  10. 浅谈电能质量在线监测装置的基本简介
  11. 两张图片切换比例虚拟进度条
  12. 百度竞价开户需要什么资料,竞价开户流程
  13. 一个C#版的多选题选项及判分设计方案
  14. NDK/C++ 耗时统计类TimeUtils
  15. js 对象的键名 可以是数字么
  16. 影流之主——stm32OLED显示一张图片方法基于战舰
  17. 多张JPG图片怎么转成一个PDF
  18. 愿你一生欢喜,不为世俗裹挟 | 笔记摘要
  19. FPGA的三个时代,最初三十年的回顾(附原英文资料)
  20. P4281 [AHOI2008]紧急集合 / 聚会(LCA做法)

热门文章

  1. 程序设计大赛—Booklet Printing
  2. python爬去易车网某地市经销商信息
  3. java-php-python-ssm医院疫情隔离室管理系统计算机毕业设计
  4. 计算机 公务员经济学,2020年公务员考试,这五大类专业很吃香
  5. 在左上角倾斜四十五度显示的TextView
  6. 3D Human Body Reconstruction
  7. 第二阶段(三)——MySQL
  8. FtpUtil ftp工具类 过滤文件名
  9. 关于使用SPI总线读取并转串(74HC165)发生数据移位的问题
  10. PyQt5——QMessageBox类的简单使用