基于Proteus的井字棋游戏设计与仿真

2021-06-15 01:08朱其祥蒋宗华陈晓玲
关键词:数码管落子棋盘

朱其祥,徐 勇,蒋宗华,陈晓玲

(安徽财经大学 管理科学与工程学院,安徽 蚌埠 233030)

0 引言

井字棋[1](Tic Tac Toe)又称井字游戏,也叫九宫格游戏,即两人轮流在印有九格方盘上画“X”或“O”字,谁先把三个同一记号排成横线、直线、斜线即为胜者.1952年,EDSAC计算机上的“OXO”游戏成为了已知的第一款电子游戏,计算机能与人类对手完美地进行对战.井字棋也被应用于人工智能与博弈论的研究.本文拟用单片机结合Proteus仿真软件来设计一款井字棋游戏.

1 功能说明

依据系统电路的按键来控制游戏双方放置棋子的位置,分别用仿手机键盘中的①~⑨与棋盘格子相对应,其中①~③对应棋盘第一行从左到右的3个棋格,④~⑥对应棋盘第二行从左到右的3个棋格,⑦~⑨对应棋盘第三行从左到右的3个棋格.分别用‘红’和‘黄’两种颜色的双色发光二极管代表游戏双方的棋子.若棋盘格子为空时,则可以放置棋子;若格子已有棋子,则放置无效.当程序判断出有一方获胜时,即在数码管上显示‘r’或‘y’(表示‘红’方或‘黄’方获胜),同时禁止输的一方再继续落子,此局宣告结束;当棋盘格子已被棋子占满且无任何一方获胜时,即在数码管上显示‘P’(表示‘平手’),如图1所示;当棋盘格子未被占满且无任何一方获胜或平手时,即在数码管上显示‘-’(表示可以‘继续’).延迟一段时间后(也可在游戏进行中按‘0’键),程序会自动清空棋盘,开始新的对局,同时交换‘红’、‘黄’先手(先手多一子获胜概率大,每次交换先手较为公平).

图1 “红”方胜、“黄”方胜、“平手”仿真效果图

2 硬件电路设计

依据游戏功能说明,绘制出游戏仿真电路图[2-5],如图2所示.电路由单片机最小系统、蜂鸣器、共阳极数码管及限流电阻、9只红黄双色LED及限流电阻、仿手机键盘及解码芯片等组成.解码芯片74C922[6]的作用:一方面可以省去用软件扫描矩阵键盘获得按键编码;另一方面按键时可以形成外部中断请求信号.为了形成棋子与棋盘的效果,将做好的方格图覆盖在双色LED图上,如图3所示.

3 软件设计

软件采用KeilC51集成开发环境来编写,程序由主函数、延时函数、发声函数、清空棋盘函数、判赢函数、外部中断处理函数等构成.游戏双方的按键采用外部中断方式处理,当任何一方按键后,即进入外部中断处理函数.首先判断该位置是否为空,若为空,才可放棋子.点击按键后,使该位置的LED点亮,若是‘黄’方,则使其发黄光,若是‘红’方,则使其发红光.并发出‘滴’一声,然后修改走棋方的标志,如刚才走棋的是‘黄’方,则下次就该轮到‘红’方走棋,反之亦然;若该位置已有棋子,则操作无效,并发出‘嘟’一声,此时,不修改走棋标志,仍是该当前走棋的一方落子.在程序处理上,定义一个2维数组arr[3],用以记录棋子的状态.开始将数组初始化为‘’(空格)字符,如当‘黄’方在某方格落子有效后,数组中相应位置的数据则修改为‘Y’;如当‘红’方在某方格落子有效后,数据的内容变则为‘R’.判赢函数的算法是:扫描数组中的所有元素,当某一行的三个元素内容相同、或某一列三个元素内容相同、或者是对角线上的三个元素内容相同即为获胜!(返回对应数组元素即可判断是哪方赢了,如返回的内容是‘Y’,则为‘黄’方获胜,若返回的内容是‘R’,则为‘红’方获胜).若输赢的判断没有结果,并判断棋盘上是否还有位置(是否有空格),若还有的话则继续(返回‘N’表示游戏继续);没有则是平局!(返回‘P’表示平局).

图2 井字棋游戏仿真电路图

图3 模拟的棋子和棋盘仿真图

4 游戏仿真

用Keil C51集成开发环境将编写好的项目文件及添加的.C文件进行编译生成.HEX文件,然后将其装载到用Proteus画好的电路图的CPU中即可仿真运行[7-11].仿真效果如图1所示.

5 总结

利用AT89C51单片机来设计井字棋游戏,结合Proteus仿真软件,实现了井字棋游戏的预期功能,对于用单片机开发和设计游戏有一定的借鉴作用,譬如还可以设计人机对弈的井字棋游戏以及五子棋游戏等.

猜你喜欢
数码管落子棋盘
物理项目教学设计,用单片机控制四位数码管显示
蓝桥杯树莓派模拟题解析三:“电子测距仪”
Arduino编程
琴(外一首)
MC9S08FL16单片机数码管静态显示分析
银行理财子公司“落子”布局
落子山东,意在全局
落子沧州
棋盘人生
棋盘里的天文数字