python井字棋快来看看孩子的头发

  • 怎么用python做井字棋游戏,废话不多说上代码!
  • 相关说明

怎么用python做井字棋游戏,废话不多说上代码!

觉得有帮助送我上去!!!!!!!!!!!!!!!!!!!

(这行不是代码:比较繁琐没简化。为什么?问就是头发没了)
import time
import random
def printf(a):for i in range(len(a)):print(a[i])
def luozi(a,b,c):#落子方法。参数说明a:棋盘。b:位置(是逻辑位置哦注意转换)。c:棋子del a[int(b[0])-1][int(b[1])-1:int(b[1])]a[int(b[0])-1].insert(int(b[1])-1,c)
def shuying(a,b):#判断输赢的方法for i in range(0,2):if a[i][0]==a[i][1]==a[i][2]==b:return 1for i in range(0,2):if a[0][i]==a[1][i]==a[2][i]==b:return 1if a[0][0]==a[1][1]==a[2][2]==b or a[0][2]==a[1][1]==a[2][0]==b:return 1else:return 0
def duzi(a,b,c):#ai防守堵子方法b被堵方,c是堵方。就是将15种赢的方法遍历一遍for i in range(0,2):if a[i][0]==a[i][1]==b and a[i][2]=='0':luozi(a,[i+1,3],c)return 0if a[i][0]==a[i][2]==b and a[i][1]=='0':luozi(a,[i+1,2],c)return 0if a[i][1]==a[i][2]==b and a[i][0]=='0':luozi(a,[i+1,1],c)return 0if a[0][i]==a[1][i]==b and a[2][i]=='0':luozi(a,[3,i+1],c)return 0if a[0][i]==a[2][i]==b and a[1][i]=='0':luozi(a,[2,i+1],c)return 0if a[1][i]==a[2][i]==b and a[0][i]=='0':luozi(a,[1,i+1],c)return 0if a[0][0]==a[1][1]==b and a[2][2]=='0':luozi(a,[3,3],c)return 0if a[0][0]==a[2][2]==b and a[1][1]=='0':luozi(a,[2,2],c)return 0if a[1][1]==a[2][2]==b and a[0][0]=='0':luozi(a,[1,1],c)return 0if a[0][2]==a[1][1]==b and a[2][0]=='0':luozi(a,[3,1],c)return 0if a[0][2]==a[2][0]==b and a[1][1]=='0':luozi(a,[2,2],c)return 0if a[1][1]==a[2][0]==b and a[0][2]=='0':luozi(a,[1,3],c)return 0
def ailuozi(a,c):#ai进攻落子算法,和上面差不多for i in range(0,2):if a[i][0]==a[i][1]==c and a[i][2]=='0':luozi(a,[i+1,3],c)return 0if a[i][0]==a[i][2]==c and a[i][1]=='0':luozi(a,[i+1,2],c)return 0if a[i][1]==a[i][2]==c and a[i][0]=='0':luozi(a,[i+1,1],c)return 0if a[0][i]==a[1][i]==c and a[2][i]=='0':luozi(a,[3,i+1],c)return 0if a[0][i]==a[2][i]==c and a[1][i]=='0':luozi(a,[2,i+1],c)return 0if a[1][i]==a[2][i]==c and a[0][i]=='0':luozi(a,[1,i+1],c)return 0if a[0][0]==a[1][1]==c and a[2][2]=='0':luozi(a,[3,3],c)return 0if a[0][0]==a[2][2]==c and a[1][1]=='0':luozi(a,[2,2],c)return 0if a[1][1]==a[2][2]==c and a[0][0]=='0':luozi(a,[1,1],c)return 0if a[0][2]==a[1][1]==c and a[2][0]=='0':luozi(a,[3,1],c)return 0if a[0][2]==a[2][0]==c and a[1][1]=='0':luozi(a,[2,2],c)return 0if a[1][1]==a[2][0]==c and a[0][2]=='0':luozi(a,[1,3],c)return 0
def AI(a,b,c,d,e):#b表示人,c表示AI,d表示方式谁先下1人先下。0ai先下,e表示第几轮下棋了很有必要。if d==1:if a[1][1]==b and e==1:#如果井字棋中心位置是人下的,ai只能下四角不然ai输。#定义随机下四角suiji=[[1,1],[1,3],[3,1],[3,3]]suiji1=random.choice(suiji)luozi(a,suiji1,c)return 0if a[1][1]==b and e==2 and ((a[0][0]==b and a[2][2]==c) or (a[0][2]==b and a[2][0]==c) or (a[2][0]==b and a[0][2]==c) or (a[2][2]==b and a[0][0]==c)):#一个特殊情况,其他情况就先调用进攻方法再调用防守方法(下面会做介绍)suiji=[[1,1],[1,3],[3,1],[3,3]]while True:suiji1=random.choice(suiji)if a[suiji1[0]-1][suiji1[1]-1]=='0':luozi(a,suiji1,c)breakreturn 0if a[1][1]==b and e==2:if ailuozi(a,c)==0:return 0else:duzi(a,b,c)return 0if a[1][1]==b and e>2:if ailuozi(a,c)==0:return 0else:duzi(a,b,c)return 0if a[1][1]!=b and e==1:luozi(a,[1][1],c)return 0if a[1][1]!=b and e>=2:if ailuozi(a,c)==0:return 0else:duzi(a,b,c)return 0else:if ailuozi(a,c)==0:return 0else:duzi(a,b,c)return 0if d==2 and e==2:if a[0][1]==b or a[1][0]==b or a[1][2]==b or a[2][1]==b:suiji=[[1,1],[1,3],[3,1],[3,3]]suiji1=random.choice(suiji)luozi(a,suiji1,c)return 0if a[0][0]==b or a[0][2]==b or a[2][0]==b or a[2][2]==b:suiji=[[1,1],[1,3],[3,1],[3,3]]#随机落子害好复杂没时间了while True:suiji1=random.choice(suiji)if a[suiji1[0]-1][suiji1[1]-1]=='0':luozi(a,suiji1,c)breakreturn 0if d==2 and e>2:if ailuozi(a,c)==0:return 0else:duzi(a,b,c)return 0
while True:game=int(input("选择与谁下?1:与你的朋友。2:与AI下。3:退出游戏"))a=[['0','0','0'],['0','0','0'],['0','0','0']]#注意是str'0'if game==1:b1=input("你用什么符号?")b2=input("你对手用什么符号?")printf(a)while True:c=list(input("请落子(标准是数字,数字举例(11)就是在第一行,第一列落子)"))luozi(a,c,b1)printf(a)if shuying(a,b1)==1:print(b1,"方胜利")breakc=list(input("(对手)请落子(标准是数字,数字举例(11)就是在第一行,第一列落子)"))luozi(a,c,b2)printf(a)if shuying(a,b2)==1:print(b2,"方胜利")breakif '0' not in a[0] and '0' not in a[1] and '0' not in a[2]:print('平局!')breakprint("游戏结束:")if game==2:p=int(input("谁先下?1:AI这么强当然是我先下拉。2:AI算什么让它先下。"))b2='x'if p==1:e=1b1=input("你用什么符号?AI用的是x符号")printf(a)while True:c=list(input("请落子(标准是数字,数字举例(11)就是在第一行,第一列落子)"))luozi(a,c,b1)printf(a)print("AI落子")time.sleep(1)if shuying(a,b1)==1:print("怎么可能你尽然胜利了!")breakAI(a,b1,b2,p,e)e+=1printf(a)if shuying(a,b2)==1:print("AI胜利,AI表示你这个人类很谦虚")breakif '0' not in a[0] and '0' not in a[1] and '0' not in a[2]:print('平局')breakif p==2:b1=input("你用什么符号?AI用的是x符号")del a[1][1:2];a[1].insert(1,b2)printf(a)c=list(input("请落子(标准是数字,数字举例(11)就是在第一行,第一列落子)"))luozi(a,c,b1)printf(a)e=2while True:AI(a,b1,b2,p,e)e+=1print("AI落子")time.sleep(1)printf(a)if shuying(a,b2)==1:print("AI胜利")str1='哈哈哈,愚蠢的人类还敢小看我!'for i in str1:time.sleep(0.5)print(i,end="")breakc=list(input("请落子(标准是数字,数字举例(11)就是在第一行,第一列落子)"))luozi(a,c,b1)printf(a)if shuying(a,b1)==1:print("怎么可能你尽然胜利了!")break if '0' not in a[0] and '0' not in a[1] and '0' not in a[2]:print('平局')breakif game==3:break

相关说明

前两轮就是下,第三轮就要用到堵子和进攻方法。(这里就体现了参数e的重要性了)
先进攻:判断那个方法(15种)可以赢。注意我进攻方法每种情况都return了,就是防止连续判断。

if ailuozi(a,c)==0:return 0else:duzi(a,b,c)return 0

time包就是更加真实吧
最后还可以加上,判断棋盘上先有没有棋子。没有才可以下(很简单的代码加在每次落子前面)根据返回值来判断。

def panduan(a,c):#a还是棋盘c是一个含两个元素的listif a[int(c[0])-1][int(c[1])-1]!='0':print("该位置已经有棋子了!请重新落子")return 0else:luozi(a,c,b)#b棋子return 1

python井字棋。分与人机和朋友下的那种相关推荐

  1. python井字棋游戏人机对战_用Python做一个井字棋小游戏

    井字棋是一个经典的小游戏,在九宫格上玩家轮流画OXO,当每列或每行或是两个对角成一线时便是获胜. 今天就用Python编写一个井字棋小游戏,与电脑对战. 程序执行画面如下图所示: 程序提供了两种人工智 ...

  2. python井字棋游戏开发(人人对战,人机对战,包含源码,逻辑思维流程图)

    需求分析 井字棋是比较便捷休闲娱乐的一种迷你棋,玩法比较简单,只需要一个九宫格棋盘就可以实现两人对战,规则为谁先连成三个棋子的一条线即可获胜.本游戏,需要满足两个主要功能:1.能实现玩家对战:2.能实 ...

  3. python井字棋ai,python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  4. python井字棋_python实现井字棋小游戏

    本文为大家分享了python实现井字棋小游戏,供大家参考,具体内容如下 周五晚上上了python的选修课,本来以为老师是从python的基础语法开始的,没想到是从turtle画图开始,正好补上了我以前 ...

  5. python井字棋游戏代码_Python实现的井字棋(Tic Tac Toe)游戏示例

    Python实现的井字棋(Tic Tac Toe)游戏示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python实现的井字棋(Tic Tac Toe)游戏示 ...

  6. python井字棋_python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  7. python井字棋_用Python做一个井字棋小游戏

    井字棋是一个经典的小游戏,在九宫格上玩家轮流画OXO,当每列或每行或是两个对角成一线时便是获胜. 今天就用Python编写一个井字棋小游戏,与电脑对战. 程序执行画面如下图所示: 程序提供了两种人工智 ...

  8. python井字棋ai_实现AI下井字棋的alpha-beta剪枝算法(python实现)

    代码参考自中国大学mooc上人工智能与信息社会陈斌老师的算法,我在原来的基础上增加了玩家输入的异常捕获 AlphaBeta剪枝算法是对Minimax方法的优化,能够极大提高搜索树的效率,如果对这个算法 ...

  9. python井字棋ai_[Python100行系列]-井字棋游戏

    博客:Hzy的博客 | Hzy Blog​hzeyuan.cn一些学习python的小项目,小游戏.python小项目​github.com 话不多说,今天尝试用turtle库来写一个井字棋游戏.1. ...

最新文章

  1. 一种新的Heap区溢出技术分析[转贴]
  2. Unicode(UTF-8, UTF-16)令人混淆的概念
  3. 上大专是学计算机还是会计,上三本还是上专科 大专学什么专业好
  4. java 前端页面传过来的值怎么防止篡改_反爬虫,到底是怎么回事儿?
  5. 数据结构与算法 | 堆
  6. 英宝通4.0公开课---致力于提供最新的Unity3D技术
  7. HTML5之webSocket使用
  8. Java占位符替换工具类
  9. 动态规划 NOIP经典问题 开心的金明(洛谷P1060题题解,Java语言描述)
  10. 如何使用SSH密钥登录你的云服务器?使用SSH密钥的好处
  11. 无线路由不能上网问题的解决的方法
  12. HDOJ--2094--产生冠军
  13. OpenShift免费空间绑定顶级域名(图文教程)
  14. foxmail新建文件夹失败或者新建文件夹不显示的问题
  15. SCM供应链管理系统解决方案:实现供应可视化、管理信息化,成本可控化
  16. FEMA和地×××府运用GIS对抗灾害
  17. 幼儿园故事导入语案例_幼儿园大班语言故事
  18. 主题目录检索是什么举例子_文献检索复习
  19. Android帧动画分析
  20. 《铁血残明》的经典章节“猛虎桥”配图及动漫技术讨论

热门文章

  1. vue实现 toggle显示隐藏效果
  2. 增值税发票查验小技巧
  3. 激光跟踪仪测量距离原理
  4. 闻之梦中,曾经如是(寒假篇)
  5. 仿android商城商品列表,商品列表 · 人人商城 IOS、Android API · 看云
  6. 人人都需要知道 关于大数据最常见的10个问题
  7. 【paper reading】Uncalibrated Photometric Stereo under Natural Illumination
  8. 功率谱分析笔记-------脑电相关
  9. oracle产品清单位置无效,[急]oracle打patch出错,求助!!
  10. 世界上最复杂的函数_世界上最轻松的工作