2024年全国大学生电子设计竞赛E题_三子棋游戏装置

三子棋游戏装置(E 题)

【本科组】

一.任务

       设计并制作三子棋游戏装置,能够控制机械臂或其他机构放置棋子,实现人 机对弈。图 1 所示的三子棋棋盘和棋子位置示意图中,棋盘由黑色实线围成 9    个方格,人、机分别从棋子放置处拾取棋子并放置到方格中,先将己方的 3 个棋 子连成一线(横连、竖连、斜连皆可)即获胜。

二.要求

1)装置能将任意 1 颗黑棋子放置到 5 号方格中。(5 分)

2)装置能将任意 2 颗黑棋子和 2 颗白棋子依次放置到指定方格中。(20 分)

3)将棋盘绕中心±45°范围内旋转后,装置能将任意 2 颗黑棋子和 2  白棋子依次放置到指定方格中。(20 分)

4)装置执黑棋先行与人对弈(第 1 步方格可设置),若人应对的第 1 步白 棋有错误,装置能获胜。(20 分)

5)人执黑棋先行,装置能正确放置白棋子以保持不输棋。(20 分)

6)对弈过程中,若人将装置下过的 1 颗棋子变动位置,装置能自动发现 并将该棋子放置回原来位置。(10 分)

7)其他。(5 分)

8)设计报告。(20 分)

三.说明

1)三子棋棋盘和棋子在测评时由选手自带。棋盘尺寸如图 1 所标,其背 景颜色由选手自定;棋子直径约 22±2mm,材质由选手自定。图 1 中的蓝色标 注及虚线等,实物中不出现。黑、白棋子在放置处各摆成 1 列,棋子间距不限。

2)装置放置棋子的过程中,不可触压黑实线;放置后不可脱离方格区域; 放置一颗棋子的时间不大于 15s。否则扣分。

3)要求(2)(3)中,装置可设置黑棋子和白棋子被放置的方格号。

4)要求(4)(5)中,人下完 1 步棋后,通过按动装置上的某唯一指定按 钮通知装置,同时启动计时;装置下完 1 步棋后,通过亮灯指示,计时停止。

5)要求(6)中,在人下棋期间,并不下新子,而是将装置下过的 1 颗棋 子变动位置;轮到装置下时,装置能将被变动的棋子放置回原来位置,时间不大 15s

6)装置应能适应正常室内照明环境,测试时不得有特殊照明条件要求。

四.评分标准

### 使用 OpenCV 实现三子游戏开发教程 #### 1. 环境搭建 为了使用 OpenCV 来实现三子游戏,首先需要确保已经成功安装了 OpenCV 库。对于 Ubuntu 16.04 用户来说,可以按照特定指南来完成这一过程[^1]。 ```bash sudo apt-get update sudo apt-get install python-opencv ``` #### 2. 图像采集与预处理 通过摄像头或其他图像源获取实时视频流,并对其进行必要的灰度化、二值化等操作以便后续分析。 ```python import cv2 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 显示窗口 cv2.imshow('Gray Frame', gray_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` #### 3. 盘检测 利用形态学变换以及轮廓查找技术识别出完整的九宫格区域作为盘位置。 ```python _, thresh = cv2.threshold(gray_frame, 127, 255, cv2.THRESH_BINARY_INV) kernel = np.ones((5,5),np.uint8) dilation = cv2.dilate(thresh,kernel,iterations = 1) contours, _ = cv2.findContours(dilation.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2:] largest_contour = max(contours, key=cv2.contourArea) epsilon = 0.1*cv2.arcLength(largest_contour,True) approx = cv2.approxPolyDP(largest_contour, epsilon, True) if len(approx)==4: screenCnt = approx else: pass ``` #### 4. 子件分类 基于颜色特征区分黑白两方的子,在此之前可能还需要做一次更精细的颜色空间转换(如 HSV 转换),从而提高准确性。 ```python hsv_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) lower_black = np.array([0,0,0]) upper_black = np.array([180,255,30]) mask_black = cv2.inRange(hsv_img, lower_black, upper_black) res_black = cv2.bitwise_and(frame,frame, mask= mask_black) ``` #### 5. 下一步预测算法设计 考虑到这是一个简单的博弈论问,可以采用 MiniMax 或 Alpha-Beta 剪枝法来进行下一步的最佳走位计算;当然也可以引入机器学习模型训练历史数据集以获得更好的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值