用 Python 编写的井字游戏

news2024/9/20 9:30:17

一.介绍

在本文中,我将向您展示如何使用 Python 创建一个非常简单的井字游戏。

井字游戏是一种非常简单的双人游戏。因此每次只能有两个玩家玩。该游戏也称为井字游戏或 Xs 和 Os 游戏。一个玩家玩 X,另一个玩家玩 O。在这个游戏中,我们有一个由 3X3 网格组成的棋盘。网格数量可以增加。

井字棋棋盘如下所示

二.游戏规则

  1. 传统上,第一个玩家会用“X”来玩。因此,您可以决定谁想用“X”玩,谁想用“O”玩。
  2. 每次只能有一名玩家玩。
  3. 如果任何玩家已经填充了一个方格,那么另一个玩家和同一个玩家就不能覆盖该方格。
  4. 只有两种情况,可能匹配会打平或者获胜。
  5. 成功将三个相应的标记(X 或 O)放置在水平、6. 垂直或对角线上的玩家获胜。

三.获胜条件

谁在水平、垂直或对角线上放置三个相应的标记(X 或 O)谁就是获胜者。

游戏的代码如下

import os
import time

board = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
player = 1

# Win Flags
Win = 1
Draw = -1
Running = 0
Stop = 1

Game = Running
Mark = 'X'


def DrawBoard():
    print(" %c | %c | %c " % (board[1], board[2], board[3]))
    print("___|___|___")
    print(" %c | %c | %c " % (board[4], board[5], board[6]))
    print("___|___|___")
    print(" %c | %c | %c " % (board[7], board[8], board[9]))
    print(" | | ")


def CheckPosition(x):
    if board[x] == ' ':
        return True
    else:
        return False


def CheckWin():
    global Game

    if board[1] == board[2] and board[2] == board[3] and board[1] != ' ':
        Game = Win
    elif board[4] == board[5] and board[5] == board[6] and board[4] != ' ':
        Game = Win
    elif board[7] == board[8] and board[8] == board[9] and board[7] != ' ':
        Game = Win
    elif board[1] == board[4] and board[4] == board[7] and board[1] != ' ':
        Game = Win
    elif board[2] == board[5] and board[5] == board[8] and board[2] != ' ':
        Game = Win
    elif board[3] == board[6] and board[6] == board[9] and board[3] != ' ':
        Game = Win
    elif board[1] == board[5] and board[5] == board[9] and board[5] != ' ':
        Game = Win
    elif board[3] == board[5] and board[5] == board[7] and board[5] != ' ':
        Game = Win
    elif board[1] != ' ' and board[2] != ' ' and board[3] != ' ' and \
            board[4] != ' ' and board[5] != ' ' and board[6] != ' ' and \
            board[7] != ' ' and board[8] != ' ' and board[9] != ' ':
        Game = Draw
    else:
        Game = Running


print("Tic-Tac-Toe Game Designed By Sourabh Somani")
print("Player 1 [X] --- Player 2 [O]\n")
print()
print()
print("Please Wait...")
time.sleep(3)

while Game == Running:
    os.system('cls')
    DrawBoard()

    if player % 2 != 0:
        print("Player 1's chance")
        Mark = 'X'
    else:
        print("Player 2's chance")
        Mark = 'O'

    choice = int(input("Enter the position between [1-9] where you want to mark: "))
    if CheckPosition(choice):
        board[choice] = Mark
        player += 1
        CheckWin()

    os.system('cls')
    DrawBoard()

    if Game == Draw:
        print("Game Draw")
    elif Game == Win:
        player -= 1
        if player % 2 != 0:
            print("Player 1 Won")
        else:
            print("Player 2 Won")
输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java+springboot+mysql疾病查询网站01548-计算机毕业设计项目选题推荐(附源码)

摘 要 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的疾病查询网站,会使疾病查询工作系统化、规范化,也会提高医院形象,提高管理效率。 本疾病查…

最强开源模型 Llama 3.1 部署推理微调实战大全

目录 引言一、Llama 3.1简介二、Llama 3.1性能评估三、Llama 3.1模型推理实战1、环境准备2、安装依赖3、模型下载4、模型推理 四、Llama 3.1模型微调实战1、数据集准备2、导入依赖包3、读取数据集4、处理数据集5、定义模型6、Lora配置7、配置训练参数8、开始Trainer训练9、合并…

Effective Java 学习笔记--第18、19条继承与复合

目录 继承的设计 对用于继承的类可覆盖方法的说明 被继承类还需要遵循的约束 如何对继承类进行测试 如何禁止继承 复合的设计 什么是复合 复合的缺点 这两条的关系较强,核心都是继承,但是更强调继承的脆弱性,而且给出了继承的一个更优…

【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

香港电讯亮相2024算网融合产业发展大会,荣获“SD-WAN优秀产品奖”

秉承“开放、创新、融合、共赢”的发展战略,中国通信标准化协会算网融合产业及标准推进委员会(CCSATC621)联合中国信息通信研究院,于2024年7月10日共同召开“2024年算网融合产业发展大会”。本次大会发布了多项算网融合领域最新研…

SpringBoot 日志:从基础到高级的全面指南

📚 SpringBoot 日志:从基础到高级的全面指南 🔍 📚 SpringBoot 日志:从基础到高级的全面指南 🔍摘要引言正文内容一、日志概述 📜二、日志使用 📝2.1 打印日志 📣2.2 日志…

主文件表遗失:数据恢复策略与实战指南

深入解析:无法恢复主文件表的困境 在数字化时代,数据不仅是信息的载体,更是企业运营和个人生活的核心。然而,当遭遇“无法恢复主文件表”的困境时,整个数据系统仿佛被按下了暂停键,让人措手不及。主文件表…

数据集成是什么意思?方法有哪些?数据集成三种方法介绍

1 数据集成是什么 数据集成(Data Intergration),也称为数据整合,是通过将分布式环境中的异构数据集成起来,为用户提供统一透明的数据访问方式。该定义中的集成是指从整体层面上维护数据的一致性,并提高对数据的利用和共享&#x…

智能语音转Markdown的神器

嘿,技术大咖们,今天我要给你们安利一个超酷炫的智能语音转Markdown笔记系统,它融合了前沿的语音识别技术和强大的AI大模型,绝对是记录和整理信息的神器! 打造了一个语音转Markdown的神器 智能语音生成Markdown笔记 这…

芋道源码yudao-cloud 二开日记(商品sku数据归类为规格属性)

商品的每一条规格和属性在数据库里都是单一的一条数据,从数据库里查出来后,该怎么归类为对应的规格和属性值?如下图: 在商城模块,商品的单规格、多规格、单属性、多属性功能可以说是非常完整,如下图&#x…

Java新手启航:JDK 21 版本安装,开启编程之行

在Java开发前,JDK是必不可少的环境,接下来,让我们一起完成JDK 21版本的下载和安装! 种一棵树最好的时间是10年前,其次就是现在,加油! …

【Redis 进阶】事务

Redis 的事务和 MySQL 的事务概念上是类似的,都是把一系列操作绑定成一组,让这一组能够批量执行。 一、Redis 的事务和 MySQL 事务的区别 1、MySQL 事务 原子性:把多个操作打包成一个整体。(要么全都做,要么都不做&am…

实时渲染云交互助力汽车虚拟仿真新体验!

汽车虚拟仿真是指利用软件和数学模型,模拟汽车的设计、制造、测试和运行等过程,以及汽车与环境、驾驶员、乘客等的交互。汽车虚拟仿真可以帮助汽车工程师快速验证方案,优化性能,降低成本,提高安全性和可靠性。 ​ 汽车…

S32G3系列芯片Serial Boot功能详解!

《S32G3系列芯片——Boot详解》系列——S32G3系列芯片Serial Boot功能详解!★★★ 一、Serial Boot模式概述二、串行下载协议2.1 基于UART和CAN的下载协议概述2.2 基于FlexCAN的Serial Boot2.2.1 IO配置2.2.2 时钟配置2.2.3 通信波特率2.2.4 基于FlexCAN的Serial Bo…

精心准备的高水平的博客【点评语】,来抄啊!

大家好,我是一名_全栈_测试开发工程师,已经开源一套【自动化测试框架】和【测试管理平台】,欢迎大家关注我,和我一起【分享测试知识,交流测试技术,趣聊行业热点】。 第 1 条 这篇博客文章如同灯塔般照亮了技…

ElementPlus 覆盖默认样式的探索

文章目录 问题解决:global 解释改进一下在研究一下 问题 解决 使用 :global(.el-header) :global(.el-header) {padding: 0; } :global(.el-menu--horizontal) {justify-content: center; }:global 解释 在Vue中,:global() 是一个特殊的 CSS 选择器,用…

在Windows中使用VS Code连接远程服务器

①首先生成自己的密钥 ssh-keygen ②打开VS Code的扩展,安装连接工具 Remote-SSH Remote - SSH: Editing Configuration Files ③点击左侧远程资源管理器,之后点击SSH右侧齿轮,选择一个配置文件 注意:此部分的Host名字要与生成…

【Python机器学习系列】一文教你实现决策树模型可视化(案例+源码)

这是我的第335篇原创文章。 一、引言 决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结束条件或叶子节点纯度达到阈值。根据分割指标和分割方法,可分为:ID3、C4.5、CART算法。每一种颜色代…

GitLab安装方式

一、什么是GitLab GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释,可以管理团队对…

动态代理对象在 IronPython 中的实现

动态代理对象是一种设计模式,允许在运行时动态地创建对象,并在这些对象上拦截和处理方法调用。它常用于 AOP(面向方面编程)、日志记录、权限控制等场景。应用非常广泛,下面跟着我来聊一聊我遇到的问题。 1、问题背景 …