python入门游戏之井字棋实例代码
作者:闫海南 发布时间:2021-07-13 20:26:48
标签:python,井字棋
井字棋简介
井字棋又称三子棋,英文名为Tic Tac Toe。具体玩法为在一个3x3的棋盘上,一个玩家用X做棋子,另一个玩家用O做棋子,谁先在棋盘上的一行、一列或对角线上画满三个棋子,即可获胜,如果棋盘下满无人胜出,即为平局。
实例代码
#要用的函数,可以在主程序用到时再看
def panduan1(a,b):#判断是否获胜,返回1则证明此颜色的棋获胜
x=0
if x==0:
for i in range(3):#检索二维数组的第i行
q=0;p=0
for j in range(3):#检索第i行列表的所有元素
if a[i][j]==b:
q+=1#i行每有一个与所给的b棋的颜色相同,q就加一
if q==3:#如果此行三个元素都与所给棋的颜色相同,则返回1
return 1
if a[j][i]==b:#i,j位置颠倒,变为检测每列的三个元素
p+=1#i列每有一个与所给的b棋的颜色相同,q就加一
if p==3:#如果此列三个元素都与所给棋的颜色相同,则返回1
return 1
q=0;w=0
for i in range(3):#判断对角线上的三个元素棋的颜色是否与b棋相同
if a[i][i]==b:#判断正对角线
q+=1#正对角线每有一个棋子与b颜色相同,q就加一
if a[i][2-i]==b:#判断另一条对角线
w+=1#负对角线每有一个棋子与b颜色相同,w就加一
if q==3 or w==3:#其中一条对角线和b棋颜色全部相同,则返回1
return 1
return 0#以上条件都未返回值,则运行到这一步,返回0
def xiaqi(all,qi,a):#将指定qi棋(白棋或黑棋)下到指定的a位置
all[int(qi[1])-1][int(qi[0])-1]=a
def shuru1():#输入要下的位置并返回对应的9键位置列表
x=input()#输入要下棋盘的位置
suoyou='123456789'
if suoyou.find(x)==-1:#限制范围为1-9,模拟的手机的9键位置
print('输入不符合要求:')
return 'no'#不合要求返回no
y=0
sum=''#存棋下的位置
for j in range(1,4):#行号,整个循环循环x次,因为被下边break语句限制
for z in range(1,4):#列号
y+=1#循环一次加一,用于匹配是否和输入的数一样
sum=str(z)+','+str(j)#键盘的9个键和相应的坐标all[j][z]
if y==int(x):#匹配是否和输入的数一样,从1开始,匹配一样则返回9键对应位置列表并中断循环,比如输入2,返回[2,1],对应9键第一行第二列
return(sum.split(','))#返回对应9键的位置列表
break
def panduan2(all,x):#判断棋盘此位置是否已有棋子
hang=int(x[1])
lie=int(x[0])
if all[hang-1][lie-1]!='-':#只需要判断此位置是否为'-'号即可
return 1#返回1,就是此位置已有棋子
else:
return 0#返回0,就是此位置没有棋子
def dayin(all):#打印函数:用于打印棋盘现在的状况
for i in range(3):
print(' '.join(all[i]))
#主程序开始
all=[['-','-','-'],['-','-','-'],['-','-','-']]#建立棋盘,“-”号代表棋盘无棋子
t=0;w=0
print('游戏开始!\n黑棋先:')
while t==0 and w==0:#利用t,w来分别表明黑白两棋的获胜,1为获胜,初始为0是为了进行一个整体循环,直到有一方获胜,则跳出循环
dayin(all)
print('轮到黑棋了:')#先下黑棋,标识符为'1'
hei=shuru1()#输入黑棋要下的位置
while hei=='no' or panduan2(all,hei)==1:#设置重新输入判断命令,在输入的数不为1-9的数字或此位置有棋时重新输入,直到输入正确时退出循环
dayin(all)#有误时先再次打印一次棋盘
print('请重新输入:')
hei=shuru1()#再次输入1-9数字
xiaqi(all,hei,'1')#下黑棋
t=panduan1(all,'1')#判断黑棋是否获胜,是则返回1
dayin(all)#再次打印此时棋盘
if t==1:#判断hei返回是否为1,是的话代表hei棋获胜,并退出循环
print('黑棋赢!')
break
all1=all[0]+all[1]+all[2]#将棋盘加成一个字符串,利于判断是否还有空位置可下棋
if all1.count('-')==0:#如果没有'-'号,则棋盘被下满,平局,退出循环
dayin(all)#再次打印棋盘,为了好看,可以将这句挪到print下边
print('平局!')
break
print('轮到白棋了:')#以下内容和黑棋下法一样,是白棋的下法,白棋标识为'0'
bai=shuru1()
while bai=='no' or panduan2(all,bai)==1:
dayin(all)
print('请重新输入:')
bai=shuru1()
xiaqi(all,bai,'0')
w=panduan1(all,'0')
if w==1:
print('白棋赢!')
dayin(all)
all1=all[0]+all[1]+all[2]
if all1.count('-')==0:
dayin(all)
print('平局!')
break
print('游戏结束!')
运行结果在这啦,快和你的小伙伴一块玩吧:
总结
到此这篇关于python入门游戏之井字棋的文章就介绍到这了,更多相关python入门游戏井字棋内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://blog.csdn.net/qq_53891711/article/details/121436980


猜你喜欢
- 微信小程序 报错:this.setData is not a function在page中定义的代码如下,代码会报错:this.setDat
- php cookie中不能使用点号(句号),实际上不是很严格,应该说可以使用点号的cookie名,但会被转换,你命名一个cookie:$_C
- js 数组对象操作方法如下:1. 创建数组var array1 = [1,2] //方法一var array2 = new Ar
- 本文实例讲述了PHP实现上传文件并存进数据库的方法。分享给大家供大家参考。具体如下:show_add.php文件如下:<?php &n
- 今天很有可能你已经做了一些使用滑动窗口(也称为移动窗口)的事情,而你甚至不知道它。例如:许多编辑算法都是基于移动窗口的。在GIS中做地形分析
- 数据结构Redis有五种基础数据结构,分别为:1、string(字符串)2、list(列表)3、hash(字典)4、set(集合)5、zse
- Vue.extend配置项data必须为function,否则配置无效。data的合并规则(可以看《Vue官方文档梳理-全局配置》)源码如下
- 虽然以前我写过IE6、IE7、IE8共存的解决方案,但是看到IETester这个软件以后那些都已经没有意义了(那些办法副作用比较大,而且实现
- 语法: ROW_NUMBER() OVER([ <partition_by_clause>] <order_by_clau
- 众所周知,OpenStack的通信方式有两种,一种是基于HTTP协议的RESTFul API方式,另一种则是RPC调用。两种通信方式的应用场
- 这是一个小技巧,看着.ejs的后缀总觉得不爽,使用如下方法,可以将模板文件的后缀换成我们习惯的.html。1.在app.js的头上定义ejs
- 前言:问题分析:在进行数据库查询的时候,我们都知道索引可以加快数据查询的效率。但是在实际的业务场景下,经常会遇到即使在表中增加了索引,但是同
- 本文实例讲述了Python实现的KMeans聚类算法。分享给大家供大家参考,具体如下:菜鸟一枚,编程初学者,最近想使用Python3实现几个
- 为什么要使用缓存?一个 * 站的基本权衡点就是,它是动态的。 每次用户请求页面,服务器会重新计算。从开销处理的角度来看,这比你读取一个现成的
- 前言Exception类是常用的异常类,该类包括StandardError,StopIteration, GeneratorExit, Wa
- 一、re.compile 函数作用:compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match()
- Vue Demi是什么如果你想开发一个同时支持Vue2和Vue3的库可能想到以下两种方式:1.创建两个分支,分别支持Vue2和Vue32.只
- Django###request如果说 urls.py 是 Django 中前端页面和后台程序桥梁,那么 request 就是桥上负责运输的
- 一、什么是数据库事务数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执
- 1,新建一个项目File --> New Project...2,新建一个文件右键单击刚建好的helloWord项目,选择New --