python入门之井字棋小游戏


Posted in Python onMarch 05, 2020

引言:

刚学python好几天了,从java到python,基础学起来确实比较容易,语法掌握,基本概念上都比较容易入脑。

唯一比较郁闷的是老想着用java的语法去学python代码,这点还需要后面慢慢掌握吧,相信学多种语言的你们也有这种经历吧。

start:开始上代码了,希望有更好的逻辑思维来写,自己也是用最笨拙的思路去写的,如果有可以优化的代码请各位大神指教

#!/user/bin/python
# -*- coding: utf-8 -*-
import os
import sys
#棋盘模块
def model(dictionary,serial=False):
 if serial:
  print('-(初版)井字棋游戏,输入棋号进行对战,')
  print('对应棋号为第一行:a1-a2-a3',end=',')
  print('对应棋号为第二行:b1-b2-b3',end=',')
  print('对应棋号为第三行:c1-c2-c3')
 print(dictionary['a1'] + ' | '+ dictionary['a2'] +' | '+ dictionary['a3'] +' | ')
 print('- +- +- +-')
 print(dictionary['b1'] + ' | ' + dictionary['b2'] + ' | ' + dictionary['b3'] + ' | ')
 print('- +- +- +-')
 print(dictionary['c1'] + ' | ' + dictionary['c2'] + ' | ' + dictionary['c3'] + ' | ')
#主模块
def main():
 dictionary={'a1':' ','a2':' ','a3':' ','b1':' ','b2':' ','b3':' ','c1':' ','c2':' ','c3':' '}
 model(dictionary, True)
 u1 = 'x' #用户1
 u2 = 'o' #用户2
 stepNumber =1 #记录步数
 break_fang = 0 #获胜者记录
 while(stepNumber<=9):
 fv = True # 判断条件2
 while fv:
  num = input('请用户u1开始下棋:')
  compare=1 #判断条件1
  for x in dictionary:
  if x.find(num)!=-1:compare=0
  if compare ==0:
  fv=False
 dictionary[num] = u1
 model(dictionary)
 # 0:继续 1,用户1胜,2,用户2胜
 break_fang = forResult(dictionary)
 if break_fang > 0: break
 fv =True #清楚状态
 stepNumber+=1
 while fv:
  num1=input('请用户u2开始下棋:')
  compare = 1 # 判断条件1
  for x in dictionary:
  if x.find(num1)!=-1:compare=0
  if compare == 0:
  fv=False
 dictionary[num1] = u2
 model(dictionary)
 break_fang = forResult(dictionary)
 if break_fang > 0: break
 stepNumber+=1
 gameover(break_fang)
#退出下棋
def gameover(break_fang):
 c = input('是否重新开始? yes:no:')
 if c.find('yes')!=-1:
 main()
 else:
 print('-游戏结束-')
 return
#判断获胜情况
#dictionary:棋盘信息
def forResult(dictionary):
 dicts= dict(dictionary)
 if dicts['a1'] == dicts['a2'] and dicts['a2'] == dicts['a3'] and len(dicts['a3'].strip())>0:
 print('游戏结束,' + '用户1-获胜' if dicts['a1'] == 'x' else '用户2-获胜')
 return 1 if dicts['a1']=='x' else 2
 elif dicts['a1'] == dicts['b2'] and dicts['b2'] == dicts['c3'] and len(dicts['c3'].strip())>0:
 print('游戏结束,' + '用户1-获胜' if dicts['a1'] == 'x' else '用户2-获胜')
 return 1 if dicts['a1'] == 'x' else 2
 elif dicts['a1'] == dicts['b1'] and dicts['b1'] == dicts['c1'] and len(dicts['c1'].strip())>0:
  print('游戏结束,' + '用户1-获胜' if dicts['a1'] == 'x' else '用户2-获胜')
  return 1 if dicts['a1'] == 'x' else 2
 elif dicts['a2'] == dicts['b2'] and dicts['b2'] == dicts['c2'] and len(dicts['c2'].strip())>0:
 print('游戏结束,' + '用户1-获胜' if dicts['a2'] == 'x' else '用户2-获胜')
 return 1 if dicts['a2'] == 'x' else 2
 elif dicts['a3'] == dicts['b3'] and dicts['b3'] == dicts['c3'] and len(dicts['c3'].strip())>0:
  print('游戏结束,' + '用户1-获胜' if dicts['a3'] == 'x' else '用户2-获胜')
  return 1 if dicts['a3'] == 'x' else 2
 elif dicts['a3'] == dicts['b2'] and dicts['b3'] == dicts['c1'] and len(dicts['c1'].strip())>0:
  print('游戏结束,' + '用户1-获胜' if dicts['a3'] == 'x' else '用户2-获胜')
  return 1 if dicts['a3'] == 'x' else 2
 elif dicts['b1'] == dicts['b2'] and dicts['b2'] == dicts['b3'] and len(dicts['b3'].strip())>0:
  print('游戏结束,' + '用户1-获胜' if dicts['b1'] == 'x' else '用户2-获胜')
  return 1 if dicts['b1'] == 'x' else 2
 elif dicts['c1'] == dicts['c2'] and dicts['c2'] == dicts['c3'] and len(dicts['c3'].strip())>0:
  print('游戏结束,' + '用户1-获胜' if dicts['c1'] == 'x' else '用户2-获胜')
  return 1 if dicts['c1'] == 'x' else 2
 else:
 return 0
if __name__ =='__main__':
 main()

补一点更改思路:forResult()的另一种实现,compares()函数:少了6行代码量。

def compares(dictionary={'':''},string=''):
 if len(dictionary)>0 | len(string.strip())==0:print('传值为空!')
 else:
 axle =('a1','a3','b2','c1','c3') # 四个角和中间的数特殊判断 条件1
 axle_fang=False #特殊棋号需要多加一种可能性
 for x in axle:
  if string==x:axle_fang=True
 if axle_fang: #条件1
  if dictionary['a1']==dictionary['b2'] and dictionary['b2']==dictionary['c3'] and dictionary['c3'].strip()!=''\
   or dictionary['a3']==dictionary['b2'] and dictionary['b2']==dictionary['c1']and dictionary['c1'].strip()!='':
   print('游戏结束,' + '用户1-获胜' if dictionary[string] == 'x' else '用户2-获胜')
   return 1 if dictionary[string] == 'x' else 2
 # 拆分棋号 splitStr0,splitStr1,普通棋号只需判断俩种a俩种可能,上下-左右间的位置
 splitStr0,splitStr1 = string[0],string[1]
 print(splitStr0+":"+splitStr1)
 if dictionary[splitStr0+'1']==dictionary[splitStr0+'2'] and dictionary[splitStr0+'2']==dictionary[splitStr0+'3']\
  or dictionary['a'+splitStr1]==dictionary['b'+splitStr1] and dictionary['b'+splitStr1]==dictionary['c'+splitStr1]:
  print('游戏结束,' + '用户1-获胜' if dictionary[string] == 'x' else '用户2-获胜')
  return 1 if dictionary[string] == 'x' else 2
 else:return 0

end:写完这些也有九十行代码量了,总感觉太多了。

控制台打印:

python入门之井字棋小游戏

python入门之井字棋小游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符遍历的艺术
Sep 06 Python
一些Python中的二维数组的操作方法
May 02 Python
在Python中操作字符串之replace()方法的使用
May 19 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
python删除本地夹里重复文件的方法
Nov 19 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
python读取目录下最新的文件夹方法
Dec 24 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
解决Python图形界面中设置尺寸的问题
Mar 05 #Python
python实现简单井字棋小游戏
Mar 05 #Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 #Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 #Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 #Python
在python tkinter界面中添加按钮的实例
Mar 04 #Python
Python tkinter布局与按钮间距设置方式
Mar 04 #Python
You might like
聊天室php&amp;mysql(二)
2006/10/09 PHP
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
浅析php原型模式
2014/11/25 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
Python聚类算法之基本K均值实例详解
2015/11/20 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
深入理解Django的自定义过滤器
2017/10/17 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
印刷工程专业应届生求职信
2013/09/29 职场文书
会计专业毕业生推荐信
2013/11/05 职场文书
个人自荐书
2013/12/20 职场文书
机关办公室岗位职责
2014/04/16 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
学生个人总结范文
2015/02/15 职场文书
初中政教处工作总结
2015/08/12 职场文书
会计入职心得体会
2016/01/22 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
react 路由Link配置详解
2021/11/11 Javascript