人工智能 井字棋的实现

合集下载

python70个练手项目【附源码】

python70个练手项目【附源码】

Python语言是一种广泛应用于科学计算、数据分析和人工智能领域的高级编程语言,它具有简洁、易读、易学的特点,因此备受程序员们的喜爱。

为了帮助大家更好地掌握Python语言的应用和提升编程技能,本文将介绍70个Python练手项目,并附上源码,希望能对大家有所帮助。

1. 简易计算器:设计一个简单的计算器,实现加减乘除等基本运算功能。

2. 井字棋游戏:编写一个井字棋游戏,实现人机对战的功能。

3. 简易天气应用:通过API获取天气信息,实现一个简单的天气查询应用。

4. 网页爬虫:编写一个简单的网页爬虫,爬取指定全球信息站的信息。

5. 文本词频统计:统计一篇文章中单词出现的频次,并生成词频统计图表。

6. 查找文件:编写一个程序,在指定目录中查找指定类型的文件。

7. 图片处理工具:实现图片的缩放、旋转、滤镜等功能。

8. 数据可视化:利用matplotlib库,对数据进行可视化展示。

9. 简易录音机:实现录音、播放、保存等基本录音功能。

10. 简单的贪吃蛇游戏:设计一个简单的贪吃蛇游戏,控制蛇吃食物并避开障碍。

11. 图片转字符画:将一张图片转换为字符画,并输出到控制台或保存为文本文件。

12. RSS阅读器:编写一个RSS订阅工具,用于查看最新的订阅更新。

13. 网络速度测试:测试当前网络的上传下载速度,并生成测试报告。

14. 电子书阅读器:实现一个简单的电子书阅读器,支持文本阅读、目录浏览等功能。

15. 文件加密解密:实现文件的加密和解密功能,保护文件安全。

16. 电流信箱客户端:编写一个简单的邮件客户端,实现邮件的发送和接收功能。

17. 简单的音乐播放器:实现音乐播放、列表管理、歌词显示等功能。

18. 网络聊天室:设计一个简单的网络聊天室,处理用户之间的文字交流。

19. 简易的投票系统:实现一个简单的上线投票系统,支持用户投票和结果展示。

20. 图片批量处理工具:实现对指定目录中的图片进行批量处理,如缩放、旋转、加水印等操作。

人工智能 井字棋

人工智能 井字棋

人工智能井字棋学院:信息工程学院教师:罗会兰专业:计算机软件和理论学号:6120160090姓名:朱玲简述5月23日,当今世界围棋第一人柯洁与计算机围棋程序“阿尔法狗”(Alpha Go)的第一场比赛结束,“阿尔法狗”以四分之一子优势赢得首场胜利。

这场比赛双方耗时4小时17分37秒,其中柯洁用时2小时46分43秒,“阿尔法狗”用时1小时30分54秒。

除了围观和好奇,人类骨子里的不服输以及想要看看人工智能到底有多厉害的求胜欲促成了这一挑战。

面对人类棋手注定完败于人工智能的结局,人类要做好的准备是全面迎接而非拒绝人工智能,努力去掌控而非臣服于人工智能。

接纳人工智能是今天社会发展、经济增长、人类演化的必然,更是人们生活的需求。

其实,很多人每天离不开的智能手机就是低端人工智能的应用。

更应当看到的现实是,人工智能的发展极具竞争性,未来谁在人工智能的研发和应用中落后,谁就会被淘汰。

而井字棋游戏的诞生更是吸引着不同年龄段的人群,无论男女老少都可以玩,也都喜欢玩,而当前微型计算机已经是在广大人群中流行者,用电脑来下井字棋更是一种时尚。

现在网络上出现了各种各样的井字棋软件,有大师级的,新手级的等等。

这些都满足了不同人群的需要,所以当前井字棋越来越被许多人所熟悉。

目前的井字棋程序的发展也非常快,从最初的双人发展到人机,然后到现在的网络对战,已经受到越来越多人的喜爱和重视。

井字棋不但容易上手,而且它区别于别的游戏,它不但能使人娱乐,而且能使人的头脑变的更加聪明。

而井字棋有两种对战模式,一是人机对战,二十人人对战。

这些给人无限乐趣的用途正式人工智能的杰作。

正因为这样它鼓励着人们对它不断的研究,这在很大程度上促进了人工智能的发展,反过来人工智能的理论和技术上的突破能够使井字棋程序更加完美,更受欢迎。

这是一个具有简单功能的井字棋游戏。

本设计的主要完成的是井字棋的人机对弈问题,即计算机与人交替落子,当行、列或对角有连续三个以上(包括三个)相同一方棋时,则判定一方胜利,如果所有位置都已经下满,且没有哪一方赢棋,则为和局。

人工智能井字棋的实现

人工智能井字棋的实现

人工智能井字棋的实现学院:信息工程学院教师:罗会兰专业:计算机应用技术学号:6120160166姓名:王硕豪简介2016年3月9日,李世石与 AlphaGo 的人机大战开始。

这将成为写入人类史册的一天。

计算机 AI 可以在围棋上战胜人类顶尖棋手的时代已经到来。

两个月之后,美国白宫就推动成立了机器学习与人工智能分委会,由其主持和协调撰写了三个关于人工智能发展的报告:《为人工智能的未来做好准备》《国家人工智能研究和发展战略计划》和《人工智能、自动化与经济报告》。

欧盟、英国和日本等也相继发布了研发和应用人工智能的报告。

显然,中国应当参与到这种战略布局当中,这种布局不仅是国家和民族的需要,而且也是赢得未来的利器。

再厉害的程序员,也是从“hello world”程序开始写起。

再“聪明”的机器,也是从零样本开始“训练”出来的。

所以今天就来写一个最简单棋类游戏:Tic Tac Toe,又叫井字棋,大陆、台湾又称为井字游戏、圈圈叉叉;另外也有打井游戏、OX棋的称呼,香港多称井字过三关、过三关,是种纸笔游戏。

大致说下井字棋的规则:1.棋盘为 3*3 共 9 格,类似汉字“井”;2.一方为 o,一方为 x,轮流落子;3.任一方先有连成一条线的 3 个棋子(横、竖、斜皆可)则为胜利;4.棋盘摆满仍没有一方胜利,则为平局。

这种游戏实际上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。

第一位玩家在角位行第一子的话赢面最大(见图一),第二位玩家若是在边,角位下子,第一位玩家就可以以两粒连线牵制着第二位玩家,然后制造“两头蛇”。

图一运行开始的时候,会让你输入你的名字,我则输入我名字的缩写wsh;接下来,由我们来选择是先下还是后下,1是先下,2是后下;我们的符号是X,电脑的是O,由于我们选择了先下,我们在3*3的棋盘上先下在第2行第2列;电脑则下在了第1行第1列,再次由我们决定,如果我们下在了已经有棋子的位置上则会提示你已经下过了;我们决定下在第1行第3列,电脑则下在第3行第1列,我们需要注意到如果电脑再下到第2行第1列就获得胜利,所以我们需要防守我们为了防守下在了第2行第1列,电脑又下在了第2行第3列,这时候其实我们可以注意到如果想要胜利只有将第2列连成直线一种方法了;我们下在了第1行第2列,电脑下在了第3行第2列,这时候已经可以看出是个平局了;我们把最后一个位置填上,电脑告诉我们这是一个平局,是否还想要再玩;输入y,电脑让我们再次选择先后手,大家就可以根据自己的想法来试着战胜电脑了。

Python游戏设计案例实战第9章 游戏实战篇——人机对战井字棋游戏

Python游戏设计案例实战第9章  游戏实战篇——人机对战井字棋游戏

9.3 对战井字棋游戏设计步骤
3.产生可以合法走棋位置序列 #产生可以合法走棋位置序列(也就是还未下过子位置) def legal_moves(board):
moves = [] for square in range(9):
if board[square] == EMPTY: moves.append(square)
print("\n玩家你先走.") human = X computer = O else: print("\n电脑先走.") computer = X human = O return computer, human
9.3 对战井字棋游戏设计步骤
2.产生新的保存走棋信息列表和显示棋盘
#产生保存走棋信息列表board def new_board():
if board[i]==EMPTY: board2[i]=i
print("\t", board2[0], "|", board2[1], "|", board2[2]) print("\t", "---------") print("\t", board2[3], "|", board2[4], "|", board2[5]) print("\t", "---------") print("\t", board2[6], "|", board2[7], "|", board2[8], "\n")
return moves
9.3 对战井字棋游戏设计步骤

人工智能α-β剪枝实现的一字棋实验报告

人工智能α-β剪枝实现的一字棋实验报告

实验 5:-剪枝实现一字棋一、实验目的学习极大极小搜寻及-剪枝算法实现一字棋。

二、实验原理1.游戏规则"一字棋 "游戏(又叫 "三子棋 " 或"井字棋 "),是一款十分经典的益智小游戏。

"井字棋 " 的棋盘很简单,是一个 3× 3 的格子,很像中国文字中的 " 井"字,因此得名 "井字棋 "。

"井字棋 "游戏的规则与 "五子棋 " 十分近似, "五子棋 "的规则是一方第一五子连成一线就成功; "井字棋 "是一方第一三子连成一线就成功。

2.极小极大剖析法设有九个空格,由 MAX,MIN 二人棋战,轮到谁走棋谁就往空格上放一只自己的棋子,谁先使自己的棋子组成 "三子成一线 "(同一行或列或对角线全部是某人的棋子 ),谁就获得了成功。

○╳用圆圈表示 MAX,用叉号代表 MIN○○○╳╳比方左图中就是MAX 取胜的棋局。

估价函数定义以下设棋局为P,估价函数为e(P)。

(1) 若 P 对任何一方来说都不是获胜的地点,则e(P)=e(那些仍为MAX 空着的完好的行、列或对角线的总数 )-e(那些仍为 MIN 空着的完好的行、列或对角线的总数 )(2)若 P 是 MAX 必胜的棋局,则 e(P)=+(实质上赋了 60)。

(3)若 P 是 B 必胜的棋局,则 e(P)= -(实质上赋了 -20)。

比方 P 以下列图示 ,则 e(P)=5-4=1○需要说明的是, +赋 60,- 赋-20 的原由是机器╳若赢了,则无论玩家下一步能否会赢,都会走这步必赢棋。

3.- 剪枝算法上述的极小极大剖析法,实质是先生成一棵博弈树,而后再计算其倒推值,至使极小极大剖析法效率较低。

于是在极小极大剖析法的基础上提出了- 剪枝技术。

人工智能问题求解与计算思维教学初探——以南京航空航天大学为例

人工智能问题求解与计算思维教学初探——以南京航空航天大学为例

0 引言我国是工程教育大国,仅2016年就有1.7万个工科专业,123万名工科本科生毕业。

然而,我国工程人才培养的目标定位并不清晰,存在着制造业人才资源总量不足,人才结构矛盾突出,高端人才特别是高科技研发领军人才、高水平工程师和一线实务型技能人才存在较大缺口等问题。

2016年,教育部提出了“新工科”概念,强调以产业需求为导向,以信息化带动工业化的教育思路。

对高等院校来说,这需要主动设置和发展一批新兴工科专业,推动现有工科专业的改革创新,培养能够适应和支撑产业发展的、具有国际竞争力的创新型工程人才。

随着以信息技术为代表的新一代科学技术的不断发展和突破,信息及信息技术已经改变了人们的工作及生活方式,并融入人们生活的方方面面。

计算思维也成为与理论思维和实验思维并列的、人们必须具备的基础性思维方式之一。

计算思维是指运用计算机科学的基本概念解决问题,实现系统设计及人类行为理解等涵盖计算机科学广度的一系列思维活动[1]。

计算思维在全球范围内获得了强劲的发人工智能问题求解与计算思维教学初探——以南京航空航天大学为例朱玉莲1,刘 佳1,江爱华2(1.南京航空航天大学信息化技术中心,江苏 南京 210016; 2.南京航空航天大学教师发展中心,江苏 南京 210016)【摘要】计算思维是计算相关学科的核心,它是认知发展、解决创造性问题、算法设计及编程的强大基石。

在“新工科”建设背景下,培养高校工科专业学生的计算思维、求解复杂专业问题的能力和工程创新能力成为必要。

本文中笔者使用“井字棋”案例,通过计算机模拟人的智能行为进行人机对弈,将计算思维要素潜移默化地体现出来,探究人工智能问题对学生计算思维培养的影响。

【关键词】计算思维;人工智能;新工科建设【中图分类号】G642 【文献标识码】 A 【文章编号】2095-5065(2018)09-0057-04收稿日期:2018-5-3作者简介:朱玉莲(1978—),女,山东聊城人,博士,副教授,研究方向为机器学习与计算机视觉;刘佳(1979—),男,江苏苏州人,博士,工程师,研究方向为计算机辅助设计和飞机维修性工程;江爱华(1971—),男,江苏南通人,硕士,副研究员,研究方向为高等教育管理和教师跨界发展。

第6讲 棋类游戏-井字棋游戏人机对弈

第6讲 棋类游戏-井字棋游戏人机对弈

10
3.2 程序中用到的资源
资源有:快捷键 位图 光标 快捷键、位图 光标、 快捷键 位图、光标 对话框、图标 菜单、字符串 图标、菜单 字符串、 对话框 图标 菜单 字符串 工具栏等。 工具栏
11
位图: IDB_BITMAP1:bmBlackNew.bmp位图,对应于黑棋 IDB_BITMAP1 棋子(玩家)。 IDB_BITMAP2:bmRedNew.bmp位图,对应于红棋 IDB_BITMAP2 棋子(计算机)。 菜单(非向导生成的菜单命令): ID_START:重新开始 ID_START ID_SAVE:保存游戏 ID_SAVE ID_LOAD:载入游戏 ID_LOAD ID_REGRET:悔棋 ID_REGRET ID_ComputerFirst:计算机先下 ID_ComputerFirst ID_Level:难度(易) ID_Level
//视图类自定义成员变量 //QP[i][j]为1表示该位置上是黑方(玩家)棋子, //为-1表示是红方棋子,为0表示没有棋子 int QP[3][3]; //存储棋盘状态 int pre_qp[3][3]; //存储上一步(指计算机和玩家各走了一步)棋盘状态,以便悔棋
8
其他表示游戏状态 游戏状态的成员变量。 游戏状态
5
三、程序界面采用的技术和方法
程序界面具有的特点: 程序界面 单文档应用程序(下一个案例,五子棋,也是单文档应 单文档应用程序 用程序),在视图中绘图。 能保存游戏 保存游戏,能载入游戏 载入游戏。 保存游戏 载入游戏 能悔棋 悔棋(但只能悔一步)。 悔棋 通过一个菜单命令 一个菜单命令来选择先下的两种选项 两种选项:计算机先 一个菜单命令 两种选项 下、玩家先下。 通过一个菜单命令 一个菜单命令来选择两种游戏难度 两种游戏难度:难、易。 一个菜单命令 两种游戏难度

井字棋课程设计报告

井字棋课程设计报告

软件工程课程设计报告题目:井字棋游戏班级:2013软件工程学号:*****************姓名:***二○一四年十二月一日课程设计题目说明书第一章可行性研究1.1引言1.1.1可行性研究目的在课程设计项目中,井字棋游戏设计作为初学者的我们来说,是个比较适合和有研究意义的题目。

“井字棋”游戏(又叫“三子棋”),或是一字棋,是一款十分经典的益智小游戏,想必很多玩家都有玩过。

“井字棋”的棋盘很简单,是一个3×3的格子,很像中国文字中的“井”字,所以得名“井字棋”。

“井字棋”游戏的规则与“五子棋”十分类似,“五子棋”的规则是一方首先五子连成一线就胜利;“井字棋”是一方首先三子连成一线就胜利。

虽然这只是个很简单的小游戏,但作为初学者的我们认识项目设计的技巧与结构及其概念的理解,封装性、继承派生、多肽的理解及实现,是比较好的课题。

对我们以后的大型程序的设计奠定了基础。

所以作为我们这次的课程设计项目来说,我们认为是个很好的、有可研究性的设计项目。

1.1.2背景(说明井字棋设计背景,开发目的等)对于21世纪的人们来说,游戏日益成为我们生活中必不可少的休闲娱乐工具。

为了满足人们的需要,现在越来越多的人们把游戏作为一种商品对待,就比如中国,像盛大、网易、滕讯等大型的游戏开发公司更把游戏的研究看作是一棵摇钱树,所以游戏程序设计人员在未来是不可多得的人才。

对于学软件工程的我们来说,一个优秀的程序员也许是我们学习的优秀目标,所以在出始阶段我们就注重项目设计的理念,而且喜欢游戏的我们更希望自己在将来能够做出一个自己很满意且适合市场的游戏来,所以我们这次以这个为题目就是想熟悉游戏编程的最基础的设计思想和实现手段的了解,为我们以后打下基础。

虽然井字棋是个很简单的小游戏,基本上人们都不玩了,但是作为一种我们的设计项目,我们都觉得是个很好的且适合的项目。

1.2可行性研究的前提1.2.1要求(说明井字棋的预期要求)功能:屏幕输出棋盘和棋子(可用特殊符号代替);实现:用户与电脑下棋(可选)功能和修改。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

人工智能井字棋的实现学院:信息工程学院教师:罗会兰专业:计算机应用技术学号:6120160166姓名:王硕豪简介2016年3月9日,李世石与 AlphaGo 的人机大战开始。

这将成为写入人类史册的一天。

计算机 AI 可以在围棋上战胜人类顶尖棋手的时代已经到来。

两个月之后,美国白宫就推动成立了机器学习与人工智能分委会,由其主持和协调撰写了三个关于人工智能发展的报告:《为人工智能的未来做好准备》《国家人工智能研究和发展战略计划》和《人工智能、自动化与经济报告》。

欧盟、英国和日本等也相继发布了研发和应用人工智能的报告。

显然,中国应当参与到这种战略布局当中,这种布局不仅是国家和民族的需要,而且也是赢得未来的利器。

再厉害的程序员,也是从“hello world”程序开始写起。

再“聪明”的机器,也是从零样本开始“训练”出来的。

所以今天就来写一个最简单棋类游戏:Tic Tac Toe,又叫井字棋,大陆、台湾又称为井字游戏、圈圈叉叉;另外也有打井游戏、OX棋的称呼,香港多称井字过三关、过三关,是种纸笔游戏。

大致说下井字棋的规则:1.棋盘为 3*3 共 9 格,类似汉字“井”;2.一方为 o,一方为 x,轮流落子;3.任一方先有连成一条线的 3 个棋子(横、竖、斜皆可)则为胜利;4.棋盘摆满仍没有一方胜利,则为平局。

这种游戏实际上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。

第一位玩家在角位行第一子的话赢面最大(见图一),第二位玩家若是在边,角位下子,第一位玩家就可以以两粒连线牵制着第二位玩家,然后制造“两头蛇”。

图一运行开始的时候,会让你输入你的名字,我则输入我名字的缩写wsh;接下来,由我们来选择是先下还是后下,1是先下,2是后下;我们的符号是X,电脑的是O,由于我们选择了先下,我们在3*3的棋盘上先下在第2行第2列;电脑则下在了第1行第1列,再次由我们决定,如果我们下在了已经有棋子的位置上则会提示你已经下过了;我们决定下在第1行第3列,电脑则下在第3行第1列,我们需要注意到如果电脑再下到第2行第1列就获得胜利,所以我们需要防守我们为了防守下在了第2行第1列,电脑又下在了第2行第3列,这时候其实我们可以注意到如果想要胜利只有将第2列连成直线一种方法了;我们下在了第1行第2列,电脑下在了第3行第2列,这时候已经可以看出是个平局了;我们把最后一个位置填上,电脑告诉我们这是一个平局,是否还想要再玩;输入y,电脑让我们再次选择先后手,大家就可以根据自己的想法来试着战胜电脑了。

如果失败了,也会询问你是否再次挑战,如果输入n则会直接跳出;代码实现棋盘本身的数据,用int a[3][3]来表示,棋盘中0表示空,1表示我们下的,其余的则是电脑下的;void print(){int i,j;cout<<"\n";for(i=0;i<3;i++){for(j=0;j<3;j++){if(a[i][j]==0)cout<<".\t";elseif(a[i][j]==1)cout<<"X\t";elsecout<<"O\t";}cout<<endl;}}检查是否有人获胜,分别是三行,三列,对角线的8种情况int check(){for(int i=0;i<3;i++)if((a[i][0]!=0&&a[i][0]==a[i][1]&&a[i][1]==a[i][2])||(a[0][i]!=0&&a[0][i]==a[1][i]&&a[1 ][i]==a[2][i]))return 1;if(a[0][0]!=0&&a[0][0]==a[1][1]&&a[1][1]==a[2][2])return 1;elseif(a[0][2]!=0&&a[0][2]==a[1][1]&&a[1][1]==a[2][0])return 1;elsereturn 0;}我们下棋的时候,下第几行第几列,如果输入大于2或者小于0提示输入正确的数字,如果下的位置已经被下过了提示这里已经被下过了;void pin(){int r=0,c=0;cout<<"Enter row: ";cin>>r;cout<<"Enter column: ";cin>>c;r--;c--;if(r>2||c>2||r<0||c<0){strcpy(str,"Enter correct value ");strcat(str,name);strcat(str,".\n");puts(str);pin();}elseif(a[r][c]!=0){cout<<"It is already filled.\n";pin();}elsea[r][c]=t;}电脑的防守策略,即我们选择先手时电脑的应对策略int defend(int c, int p, int b){if(b<3)return 0;elseif(a[0][0]+a[1][1]+a[2][2]==2*c&&a[0][0]!=p&&a[1][1]!=p&&a[2][2]!=p) {for(int i=0;i<3;i++){if(a[i][i]==0){a[i][i]=y;cout<<"Computer turn: "<<i+1<<""<<i+1<<endl;return 1;}}}elseif(a[0][2]+a[1][1]+a[2][0]==2*c&&a[0][2]!=p&&a[1][1]!=p&&a[2][0]!=p) {for(int i=0;i<3;i++){if(a[i][2-i]==0){a[i][2-i]=y;cout<<"Computer turn: "<<i+1<<""<<3-i<<endl;return 1;}}}else{int i,j;for(i=0;i<3;i++){if(a[i][0]+a[i][1]+a[i][2]==2*c&&a[i][0]!=p&&a[i][1]!=p&&a[i][2]!=p){for(j=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computer turn: "<<i+1<<""<<j+1<<endl; return 1; }}}elseif(a[0][i]+a[1][i]+a[2][i]==2*c&&a[0][i]!=p&&a[1][i]!=p&&a[2][i]!=p){for(j=0;j<3;j++){if(a[j][i]==0){a[j][i]=y;cout<<"Computer turn: "<<j+1<<""<<i+1<<endl;return 1;}}}}}return 0;}电脑的进攻策略,即我们选择后手时电脑的落子策略int attack()//takes a move as to win in future.{int i,j;if(a[0][0]+a[0][2]+a[2][0]+a[2][2]==t||a[0][0]+a[0][2]+a[2][0]+a[2][2]==2*t) {for(i=0;i<3;i++){if( a[i][0]+a[i][1]+a[i][2]==y && (a[i][0]==y||a[i][1]==y||a[i][2]==y) ){if(i==1){for(j=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computer turn: "<<i+1<<""<<j+1<<endl; return 1;}}}else{for(j=2;j>=0;j--){if(a[i][j]==0){a[i][j]=y;cout<<"Computer turn: "<<i+1<<""<<j+1<<endl; return 1;}}}}if(a[0][i]+a[1][i]+a[2][i]==y && (a[0][i]==y||a[1][i]==y||a[2][i]==y)) {if(i==1){for(j=0;j<3;j++){if(a[j][i]==0){a[j][i]=y;cout<<"Computer turn: "<<j+1<<""<<i+1<<endl; return 1;}}}else{for(j=2;j>=0;j--){if(a[j][i]==0){a[j][i]=y;cout<<"Computer turn: "<<j+1<<""<<i+1<<endl; return 1;}}}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][2-i]+a[1][ 2-i]+a[2][2-i]==t&&(a[0][2-i]==t||a[1][2-i]==t||a[2][2-i]==t))){a[i][2-i]=y;cout<<"Computer turn: "<<i+1<<""<<3-i<<endl;return 1;}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){a[i][2-i]=y;cout<<"Computer turn: "<<i+1<<""<<3-i<<endl;return 1;}}}}else{if(a[0][0]+a[1][1]+a[2][2]==y && (a[0][0]==y||a[1][1]==y||a[2][2]==y)){for(i=2;i>=0;i--){if((a[i][i]==0)&& ((a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y)) ||( (a[0][i]+a[1][i]+a[2][i]==y)&&(a[0][i]==y||a[1][i]==y||a[2][i]==y)))){a[i][i]=y;cout<<"Computer turn: "<<i+1<<""<<i+1<<endl;return 1;}}for(i=2;i>=0;i--){if(a[i][i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][i]+a[1][i] +a[2][i]==t&&(a[0][i]==t||a[1][i]==t||a[2][i]==t))){a[i][i]=y;cout<<"Computer turn: "<<i+1<<""<<i+1<<endl;return 1;}}}for(i=2;i>=0;i--){if(a[i][i]==0){a[i][i]=y;cout<<"Computer turn: "<<i+1<<""<<i+1<<endl;return 1;}}}elseif( a[0][2]+a[1][1]+a[2][0]==y && (a[0][2]==y||a[1][1]==y||a[2][0]==y)){for(i=2;i>=0;i--){if(a[i][2-i]==0&&((a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y))||( (a[0][2-i]+a[1][2-i]+a[2][2-i]==y)&&(a[0][2-i]==y||a[1][2-i]==y||a[2][2-i]==y)))){a[i][2-i]=y;cout<<"Computer turn: "<<i+1<<""<<3-i<<endl;return 1;}}for(i=2;i>=0;i--){if(a[i][2-i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][2-i]+a[1][ 2-i]+a[2][2-i]==t&&(a[0][2-i]==t||a[1][2-i]==t||a[2][2-i]==t))){a[i][2-i]=y;cout<<"Computer turn: "<<i+1<<""<<3-i<<endl;return 1;}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){cout<<"Computer turn: "<<i+1<<""<<3-i<<endl;return 1;}}}else{for(i=0;i<3;i++){if( a[i][0]+a[i][1]+a[i][2]==y && (a[i][0]==y||a[i][1]==y||a[i][2]==y) ){if(i==1){for(int j=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computer turn: "<<i+1<<""<<j+1<<endl; return 1;}}}else{for(j=2;j>=0;j--){if(a[i][j]==0){a[i][j]=y;cout<<"Computer turn: "<<i+1<<""<<j+1<<endl; return 1;}}}}elseif(a[0][i]+a[1][i]+a[2][i]==y && (a[0][i]==y||a[1][i]==y||a[2][i]==y)) {if(i==1){for(j=0;j<3;j++){if(a[j][i]==0)a[j][i]=y;cout<<"Computer turn: "<<j+1<<""<<i+1<<endl;return 1;}}}else{for(j=2;j>=0;j--){if(a[j][i]==0){a[j][i]=y;cout<<"Computer turn: "<<j+1<<""<<i+1<<endl;return 1;}}}}}}}return 0;}电脑的AI运用进攻和防守策略控制其的落子void ai(int b){if(!defend(y,t,b)){if(!defend(t,y,b)){if((a[0][0]+a[0][2]+a[2][0]+a[2][2]==t+y||a[0][0]+a[0][2]+a[2][0]+a[2][2]==t+2*y)&&a[1] [1]==0){for(int i=0;i<3;i+=2){for(int j=0;j<3;j+=2)if(a[i][j]==0){a[i][j]=y;cout<<"Computer turn: "<<i+1<<""<<j+1<<endl;goto end;}}}elseif(b==2&&a[1][1]==0){a[1][1]=y;cout<<"Computer turn: 2 2\n";goto end;}if(!attack()){if(b==0){time_t seconds;time(&seconds);srand((unsignedint) seconds);int i,j;a[(rand()%2)*2][(rand()%2)*2]=y;for(i=0;i<3;i+=2){for(j=0;j<3;j+=2)if(a[i][j]==y)cout<<"Computer turn: "<<i+1<<""<<j+1<<endl; }}elseif(a[1][1]==0){a[1][1]=y;cout<<"Computer turn: 2 2\n";}else{int i,j;for(i=0;i<3;i++){for(j=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computer turn: "<<i+1<<""<<j+1<<endl; goto end;}}} }}}}end:cout<<endl;}。

相关文档
最新文档