Python开发游戏之井字游戏的实战步骤

目录
  • 前言
  • 什么是井字游戏?
  • Python 井字游戏——项目详情
    • 先决条件
    • 构建 Python 井字游戏的步骤
      • 1.初始化游戏组件
      • 2.初始化Pygame窗口
      • 3.加载和转换图像
      • 4.定义函数
  • 总结

前言

毫无疑问,你一定在学生时代玩过井字游戏,我们每个人都喜欢玩这款游戏。您会惊讶地发现井字游戏自古埃及时代就已存在。

通过 TechVidvan 的这个 Python 项目,我们将构建一个交互式 Tic Tac Toe 游戏,我们将在此过程中学习新事物。

什么是井字游戏?

Tic Tac Toe 是玩得最多的游戏之一,也是最好的消磨时间的游戏,您可以在任何地方用笔和纸玩。如果您不知道如何玩这个游戏,请不要担心,让我们先了解一下。

游戏由两个人玩。首先,我们画一个 3×3 方格的棋盘。第一个玩家选择“X”并将其绘制在任何方形网格上,然后第二个玩家有机会在可用空间上绘制“O”。像这样,玩家在空白处交替绘制“X”和“O”,直到玩家成功地以水平、垂直或对角线方式绘制 3 个连续标记。然后玩家赢得游戏,否则当所有位置都填满时游戏平局。

Python 井字游戏——项目详情

有趣的 Python 项目将使用 pygame 库构建。我们将解释该项目中使用的所有 pygame 对象方法。Pygame 是一个很棒的库,它允许我们创建窗口并在窗口上绘制图像和形状。这样我们将捕获鼠标坐标并确定我们需要标记“X”或“O”的块。然后我们将检查用户是否赢得了比赛。

先决条件

为了实现这个游戏,我们将使用 Python 和 Pygame 的基本概念,Pygame 是一个用于构建跨平台游戏的 Python 库。它包含计算机图形和声音库所需的模块。要安装该库,您可以从命令行使用 pip 安装程序:

pip install pygame

构建 Python 井字游戏的步骤

首先,让我们检查一下在 Python 中构建 Tic Tac Toe 程序的步骤:

  • 为我们的游戏创建显示窗口。
  • 在我们将玩井字游戏的画布上绘制网格。
  • 在画布下方绘制状态栏,以显示轮到哪个玩家以及谁赢得了游戏。
  • 当有人赢得比赛或比赛平局时,我们将重置比赛。

我们需要在无限循环中运行我们的游戏。它会不断寻找事件,当用户在网格上按下鼠标按钮时,我们将首先获取鼠标的 X 和 Y 坐标。然后我们将检查用户点击了哪个方块。然后我们将在画布上绘制适当的“X”或“O”图像。所以这基本上就是我们将在这个 Python 项目想法中做的事情。

1.初始化游戏组件

因此,让我们从导入 pygame 库和时间库开始,因为我们将使用time.sleep()方法在特定位置暂停游戏。然后我们初始化我们将在 Tic Tac Toe 游戏中使用的所有全局变量。

import pygame as pg,sys
from pygame.locals import *
import time 

#初始化全局变量
XO = 'x'
winner = None
draw = False
width = 400
height = 400
white = (255, 255, 255)
line_color = (10,10 ,10) 

#TicTacToe 3x3 棋盘
TTT = [[None]*3,[None]*3,[None]*3]

在这里,TTT 是主要的 3×3 井字棋盘,起初,它将有 9 个无值。我们将玩游戏的画布的高度和宽度为 400×400。

2.初始化Pygame窗口

我们使用 pygame 创建一个新窗口,我们将在其中玩 Tic Tac Toe 游戏。所以我们用pg.init()方法初始化pygame ,设置窗口显示宽度为400,高度为500。我们预留了100像素的空间用于显示游戏状态。

pg.display.set_mode ()初始化显示,我们用 screen 变量引用它。每当我们想在显示器上画东西时,都会使用这个屏幕变量。

pg.display.set_caption 方法用于设置将出现在显示窗口顶部的名称。

#初始化pygame窗口
pg.init()
fps = 30
CLOCK = pg.time.Clock()
screen = pg.display.set_mode((width, height+100),0,32)
pg.display.set_caption("Tic Tac Toe")

3.加载和转换图像

Python 项目使用了许多图像,例如游戏开始或重置时将显示的开场图像。当用户点击网格时我们将绘制的 X 和 O 图像。我们加载所有图像并调整它们的大小,以便它们很容易适合我们的窗口。

#加载图像
opening = pg.image.load('tic tac opening.png')
x_img = pg.image.load('x.png')
o_img = pg.image.load('o.png')

#调整图像大小
x_img = pg.transform.scale(x_img, (80,80))
o_img = pg.transform.scale(o_img, (80,80))
opening = pg.transform.scale(opening, (width, height+100))

4.定义函数

现在我们创建一个函数来启动游戏。当我们想要重新启动游戏时,我们也会使用这个函数。在 pygame 中,blit()函数用于在表面上绘制一个图像到另一个图像之上。

所以我们绘制开场图像,绘制之后,我们总是需要用pg.display.update()更新显示。绘制开始图像时,我们使用time.sleep(1)等待 1 秒,然后用白色填充屏幕。

接下来,我们在白色背景上绘制 2 条垂直线和水平线来制作 3×3 网格。最后,我们调用draw_status()函数

def game_opening():
    screen.blit(opening,(0,0))
    pg.display.update() time.sleep
    (1)
    screen.fill(white) 

    # 绘制垂直线
    pg.draw.line(screen,line_color,(width/3,0),(width/3, height),7)
    pg.draw.line(screen,line_color,(width/3*2,0),(width/3*2, height),7)
    # 绘制水平线
    pg.draw.line(screen,line_color,(0,height/3),(width, height/3),7)
    pg.draw.line(screen,line_color,(0,height/3*2),(width, height/3*2),7)
    draw_status()

draw_status ()函数绘制一个黑色矩形,我们在其中更新游戏状态,显示轮到哪个玩家以及游戏是结束还是平局。

def draw_status():
    global draw

    if winner is None:
        message = XO.upper() + "'s Turn"
    else:
        message = winner.upper() + "won!"
    if draw:
        message = 'Game Draw!'
    font = pg.font.Font(None, 30)
    text = font.render(message, 1, (255, 255, 255))
    # 将呈现的消息复制到板上
    screen.fill ((0, 0, 0), (0、400、500、100))
    text_rect = text.get_rect(center=(width/2, 500-50))
    screen.blit(text, text_rect)
    pg.display.update()

check_win()函数检查井字棋盘以查看“X”和“O”的所有标记。它计算玩家是否赢得了比赛。当玩家在一行、一列或对角线上连续标记 3 个标记时,他们可以获胜。每当我们在板上画一个标记“X”或“O”时,都会调用此函数。

def check_win():
    global TTT, winner,draw

    # 检查获胜行
    for row in range (0,3):
        if ((TTT [row][0] == TTT[row][1] == TTT[row][2]) and(TTT [row][0] is not None)):
            # this row won
            winner = TTT[row][0]
            pg.draw.line(screen, (250,0,0), (0, (row + 1)*height/3 -height/6),\
                              (width, (row + 1)*height/3 - height/6 ), 4)
            break

    # 检查获胜列
    for col in range (0, 3):
        if (TTT[0][col] == TTT[1][col] == TTT[2][col]) and (TTT[0][col] is not None):
            # 绘制获胜线
            winner = TTT[0][col]
            #draw winning line
            pg.draw.line (screen, (250,0,0),((col + 1)* width/3 - width/6, 0),\
                          ((col + 1)* width/3 - width/6, height), 4)
            break

    # 检查对角线赢家
    if (TTT[0][0] == TTT[1][1] == TTT[2][2]) and (TTT[0][0] is not None):
        # game won 对角线从左到右
        winner = TTT[0][0]
        pg.draw.line (screen, (250,70,70), (50, 50), (350, 350), 4)

    if (TTT[0][2] == TTT[1][1] == TTT[2][0]) and (TTT[0][2] is not None):
        # game won diagonally right to left
        winner = TTT[0][2]
        pg.draw.line (screen, (250,70,70), (350, 50), (50, 350), 4)

    if(all([all(row) for row in TTT]) and winner is None ):
        draw = True
    draw_status()

drawXO(row, col) 函数获取鼠标单击的行和列,然后绘制“X”或“O”标记。我们从绘制标记的 png 图像的位置计算起点的 x 和 y 坐标。

def drawXO(row,col):
    global TTT,XO
    if row==1:
        posx = 30
    if row==2:
        posx = width/3 + 30
    if row==3:
        posx = width/3*2 + 30

    if col==1:
        posy = 30
    if col==2:
        posy = height/3 + 30
    if col==3:
        posy = height/3*2 + 30
    TTT[row-1][col-1] = XO
    if(XO == 'x'):
        screen.blit(x_img,(posy,posx))
        XO= 'o'
    else:
        screen.blit(o_img,(posy,posx))
        XO= 'x'
    pg.display.update()
    #print(posx,posy)
    #print(TTT)

最后一个函数是 reset_game()。这将重新启动游戏,我们还将所有变量重置为游戏的开始。

def reset_game():
    global TTT, winner,XO, draw
    time.sleep(3)
    XO = 'x'
    draw = False
    game_opening()
    winner=None
    TTT = [[None]*3,[None]*3,[None]*3]

万岁!游戏已经完成,可以玩了。使用tictactoe.py文件名保存源代码并运行该文件。

总结

到此这篇关于Python开发游戏之井字游戏的文章就介绍到这了,更多相关Python开发井字游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实现简单井字棋游戏

    井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名.游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X),任意三个标记形成一条直线,则为获胜. 游戏的难点在于,如何判断连接成了一条线:横.竖.斜三个方向: 游戏的代码: #!/usr/bin/env python3 # -*- coding:utf-8 -*- u''' Created on 2019年4月13日 @au

  • python实现井字棋小游戏

    本文为大家分享了python实现井字棋小游戏,供大家参考,具体内容如下 周五晚上上了python的选修课,本来以为老师是从python的基础语法开始的,没想到是从turtle画图开始,正好补上了我以前一些不懂的地方,有人讲一下还是比啃书好一点. 之前从图书馆借了一本python游戏编程,看了前面几章后就没怎么看了,晚上突然想看看,然后跟着教程写个游戏的.最后就有了这个井字棋的诞生,其实代码并不是很长,主要是思路,需要考虑的周全一点.代码写完后就和电脑下了好久的井字棋,一局都没赢,真的是很无奈了,

  • python实现简单的井字棋

    本文实例为大家分享了python实现简单的井字棋的具体代码,供大家参考,具体内容如下 使用python实现井字棋游戏,没有具体算法,只是用随机下棋简单实现: import random board = [['+','+','+'],['+','+','+'],['+','+','+']] def ma(board): if isempty(board): a = random.randint(0, 2) b = random.randint(0, 2) if board[a][b] != 'X'

  • python实现井字棋游戏

    本文实例介绍了python实现井字棋游戏的方法,分享给大家,具体内容如下 windows7下python3.4.0编译运行通过.由于采用了cmd调用,所以与Linux不兼容,无法在Linux下运行. 游戏就是井字棋,小键盘上的数字位置对应棋盘位置. #本游戏python3.4.0下编写调试,只能在windows下运行. import random import subprocess import time #定义函数 def draw_board(the_board): subprocess.c

  • python入门之井字棋小游戏

    引言: 刚学python好几天了,从java到python,基础学起来确实比较容易,语法掌握,基本概念上都比较容易入脑. 唯一比较郁闷的是老想着用java的语法去学python代码,这点还需要后面慢慢掌握吧,相信学多种语言的你们也有这种经历吧. start:开始上代码了,希望有更好的逻辑思维来写,自己也是用最笨拙的思路去写的,如果有可以优化的代码请各位大神指教 #!/user/bin/python # -*- coding: utf-8 -*- import os import sys #棋盘模

  • python实现简单的井字棋游戏(gui界面)

    项目输出 项目先决条件 要使用python构建井字游戏,我们需要tkinter模块和python的基本概念 Tkinter模块是用于渲染图形的标准图形用户界面. Tkinter.messagebox用于显示消息框 要安装tkinter模块,我们在命令提示符下使用了pip install命令: pip install tkinter 项目文件结构 这些是使用python构建井字游戏的步骤: 导入模块 初始化窗口 检查结果的功能 检查获胜者的功能 定义标签和按钮 1.导入模块 from tkinte

  • python实现简单井字棋小游戏

    用python实现的一个井字棋游戏,供大家参考,具体内容如下 #Tic-Tac-Toe 井字棋游戏 #全局常量 X="X" O="O" EMPTY=" " #询问是否继续 def ask_yes_no(question): response=None; while response not in("y","n"): response=input(question).lower() return respon

  • Python实现的井字棋(Tic Tac Toe)游戏示例

    本文实例讲述了Python实现的井字棋(Tic Tac Toe)游戏.分享给大家供大家参考,具体如下: 说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选择人人.人机.机人.机机四种对战模式之一 电脑玩家的AI使用了minimax算法,带apha-beta剪枝 电脑玩家在思考时,时时刻刻都有一个"假想敌".以便使得minimax算法运转起

  • python实现简单的井字棋小游戏

    Python做三子棋游戏,这个是我刚开始了解做Python小游戏的时候第一个项目,因为简单好入手,实现它的过程是我开始摸索Python的GUI界面的入门之路.这个设计也都是按照自己对于这个游戏的理解,一步一步去实现它. 窗口 万能的窗口,实现窗口都可以进行简单的修改进行使用: from tkinter import * root = Tk()         #窗口名称 root.title("憨憨制作的三子棋") f1=Frame(root) f1.pack() w1 = Canva

  • Python开发游戏之井字游戏的实战步骤

    目录 前言 什么是井字游戏? Python 井字游戏——项目详情 先决条件 构建 Python 井字游戏的步骤 1.初始化游戏组件 2.初始化Pygame窗口 3.加载和转换图像 4.定义函数 总结 前言 毫无疑问,你一定在学生时代玩过井字游戏,我们每个人都喜欢玩这款游戏.您会惊讶地发现井字游戏自古埃及时代就已存在. 通过 TechVidvan 的这个 Python 项目,我们将构建一个交互式 Tic Tac Toe 游戏,我们将在此过程中学习新事物. 什么是井字游戏? Tic Tac Toe

  • 使用Python开发游戏运行脚本成功调用大漠插件

    目录 一.搭建python开发环境 二.使用Pip下载pypiwin32库文件 三.下载大漠插件 3.1 下载大漠插件 四.成功调用大漠API 常见错误 闲来无事,想通过python来实现一些简单的游戏辅助脚本,而游戏辅助脚本的主要原理就是通过程序来查找游戏程序窗口,模拟实现鼠标点击和键盘按键等事件来实现游戏辅助的:window系统本身是有提供对应功能的API的,不过这次想通过大漠插件来实现查找窗口,鼠标点击和键盘按键的功能.我们这里使用的是大漠插件(dm.dll)的最后一个免费版: 3.123

  • Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解

    virtualenv是一个创建隔绝的Python环境的工具.virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包.创建的环境是独立的,互不干扰,无需sudo权限即可使用 pip 来进行包的管理. 第一步安装包: 第二步:创建目录用来存放虚拟环境 第三步:进入家目录找到.bashrc文件 以及可以看到第二步创建的.virtualenvs文件夹 第四步:使用vim编辑.bashrc文件在文件末尾加入如下内容 然后保存退出. 第五步:运行source ~/.b

  • 使用Python开发游戏运行脚本实现模拟点击

    本文接上一篇文章 使用Python开发游戏运行脚本(一)成功调用大漠插件 上一篇我们已经简单实现了python调用大漠插件并输出版本号的功能,接下来我们要做的就是通过大漠插件模拟鼠标点击和键盘文字输入. 由于近年来最热门的游戏基本都是手游,所以我们也会以手游为例来进行游戏脚本的开发.大漠插件是一款针对Windows平台的鼠标键盘模拟+图文查找库, 这样我们要想实现手游脚本开发的第一步,就是下载Android模拟器,然后在对安卓模拟器进行鼠标和键盘的模拟,以此来实现自动化游戏脚本. 一.Andro

  • Python开发游戏自动化后台脚本的实现

    目录 前言 说明 获取窗口句柄 获得后台窗口截图 数字识别 识别并点击图片位置 后台文字输入 完整代码 参考 前言 前段时间沉迷猪场一梦江湖,由于实在太肝便萌生出用脚本做日常的想法,写了第一个test.py,随着后来各种功能的逐步添加,脚本也从前台变成了支持后台静默运行,功能渐渐完善,包括了常用的 1.鼠标左键单击指定坐标2.识别并单击指定图像3.识别图像中文字4.后台截取程序画面以供识别5.鼠标滚轮上下滚动6.鼠标左键范围点击以防检测7.程序中的键盘控制8.程序中字符的输入 说明 获取窗口句柄

  • python开发游戏的前期准备

    本文章面向有一定基础的python学习者,使用Pygame包开发一款简单的游戏 首先打开命令行,使用PyPI下载Pygame包(输入命令pip install pygame) 打开python编辑器(vs,IDLE,或其他),再引入包 定义一些需要用到的数据 先使用pygame包创建一个游戏窗口,然后使用循环将窗口展示出来,运行会出现下图 现在定义一个可操控的小球类Player,draw()方法可以使它展示在屏幕上,update()方法让小球跟随鼠标移动 类似的,定义不可操控的小球类Ball,使

  • Python开发.exe小工具的详细步骤

    v1.0.0 完成基础框架.初始功能 背景:为了提高日常工作效率.学习界面工具开发,可以将一些常用的功能集成到一个小的测试工具中,供大家使用. 一.环境 Python3,pyinstall pyinstall安装: pip install pyinstaller   (会自动下载future,pywin32,pyinstaller) 或者采用国内镜像 pip install -i https://pypi.douban.com/simple/ pyinstaller(豆瓣源) 二.代码准备,直接

  • 在VSCode中如何配置Python开发环境

    之前编写Python更多的是使用pycharm作为编译器进行开发,但是个人感觉用起来比较笨重,而且还收费的,需要进行破解才能使用.后来发现vscode这个软件,觉得很轻便,而且和之前使用的vs2018风格一样. 在这里对vscode配置Python开发环境做一下记录. 步骤1:安装Python 安装Python的教程网上有很多.直接到官网下载安装就行. 下载链接:https://www.python.org/ 步骤2:安装vscode 安装很简单,直接点击安装文件,然后一直点击next就可以了.

  • python能开发游戏吗

    python可以写游戏,但不适合.下面我们来分析一下具体原因. 用锤子能造汽车吗? 谁也没法说不能吧?历史上也确实曾经有些汽车,是用锤子造出来的.但一般来说,还是用工业机器人更合适对吗? 比较大型的,使用Python的游戏有两个,一个是<EVE>,还有一个是<文明>.但这仅仅是个例,没有广泛意义. 一般来说,用来做游戏的语言,有两种.一是C++..一是C#.. Python理论上,不仅不适合做游戏,而是只要大型的程序,都不适合.只适合写比较小型的东西,比如一个计算器,一个爬虫等.

  • Windows下搭建python开发环境详细步骤

    本文为大家分享了Windows下搭建python开发环境详细步骤,供大家参考,具体内容如下 1.搭建Java环境 (1)直接从官网下载相应版本的JDK或者JRE并点击安装就可以 (2)JDK与JRE的区别: 1)JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境.SDK是Software Development Kit 一般指软件开发包,可以包括函数库.编译程序等 2)JRE是Java Runtime Envirom

随机推荐