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中数据解析
May 05 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
Linux下为不同版本python安装第三方库
Aug 31 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
Python中import机制详解
Nov 14 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
python 实现数字字符串左侧补零的方法
Dec 04 Python
python的range和linspace使用详解
Nov 27 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
Django自带的用户验证系统实现
Dec 18 Python
python绘制雷达图实例讲解
Jan 03 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输出Excel文件类
2010/02/08 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
如何让CI框架支持service层
2014/10/29 PHP
php画图实例
2014/11/05 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
浅析return false的正确使用
2013/11/04 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
Python对字符串实现去重操作的方法示例
2017/08/11 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
高中生职业规划范文
2014/03/09 职场文书
应急管理培训方案
2014/06/12 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL