欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python開發(fā)游戲之井字游戲的實(shí)戰(zhàn)步驟

 更新時(shí)間:2023年02月04日 09:50:58   作者:Sonhhxg_柒  
最近正在學(xué)習(xí)Python,所以最近做了一個(gè)關(guān)于Python的實(shí)例,下面這篇文章主要給大家介紹了關(guān)于Python開發(fā)游戲之井字游戲的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

毫無疑問,你一定在學(xué)生時(shí)代玩過井字游戲,我們每個(gè)人都喜歡玩這款游戲。您會驚訝地發(fā)現(xiàn)井字游戲自古埃及時(shí)代就已存在。

通過 TechVidvan 的這個(gè) Python 項(xiàng)目,我們將構(gòu)建一個(gè)交互式 Tic Tac Toe 游戲,我們將在此過程中學(xué)習(xí)新事物。

什么是井字游戲?

Tic Tac Toe 是玩得最多的游戲之一,也是最好的消磨時(shí)間的游戲,您可以在任何地方用筆和紙玩。如果您不知道如何玩這個(gè)游戲,請不要擔(dān)心,讓我們先了解一下。

游戲由兩個(gè)人玩。首先,我們畫一個(gè) 3×3 方格的棋盤。第一個(gè)玩家選擇“X”并將其繪制在任何方形網(wǎng)格上,然后第二個(gè)玩家有機(jī)會在可用空間上繪制“O”。像這樣,玩家在空白處交替繪制“X”和“O”,直到玩家成功地以水平、垂直或?qū)蔷€方式繪制 3 個(gè)連續(xù)標(biāo)記。然后玩家贏得游戲,否則當(dāng)所有位置都填滿時(shí)游戲平局。

Python 井字游戲——項(xiàng)目詳情

有趣的 Python 項(xiàng)目將使用 pygame 庫構(gòu)建。我們將解釋該項(xiàng)目中使用的所有 pygame 對象方法。Pygame 是一個(gè)很棒的庫,它允許我們創(chuàng)建窗口并在窗口上繪制圖像和形狀。這樣我們將捕獲鼠標(biāo)坐標(biāo)并確定我們需要標(biāo)記“X”或“O”的塊。然后我們將檢查用戶是否贏得了比賽。

先決條件

為了實(shí)現(xiàn)這個(gè)游戲,我們將使用 Python 和 Pygame 的基本概念,Pygame 是一個(gè)用于構(gòu)建跨平臺游戲的 Python 庫。它包含計(jì)算機(jī)圖形和聲音庫所需的模塊。要安裝該庫,您可以從命令行使用 pip 安裝程序:

pip install pygame

構(gòu)建 Python 井字游戲的步驟

首先,讓我們檢查一下在 Python 中構(gòu)建 Tic Tac Toe 程序的步驟:

  • 為我們的游戲創(chuàng)建顯示窗口。
  • 在我們將玩井字游戲的畫布上繪制網(wǎng)格。
  • 在畫布下方繪制狀態(tài)欄,以顯示輪到哪個(gè)玩家以及誰贏得了游戲。
  • 當(dāng)有人贏得比賽或比賽平局時(shí),我們將重置比賽。

我們需要在無限循環(huán)中運(yùn)行我們的游戲。它會不斷尋找事件,當(dāng)用戶在網(wǎng)格上按下鼠標(biāo)按鈕時(shí),我們將首先獲取鼠標(biāo)的 X 和 Y 坐標(biāo)。然后我們將檢查用戶點(diǎn)擊了哪個(gè)方塊。然后我們將在畫布上繪制適當(dāng)?shù)?ldquo;X”或“O”圖像。所以這基本上就是我們將在這個(gè) Python 項(xiàng)目想法中做的事情。

1.初始化游戲組件

因此,讓我們從導(dǎo)入 pygame 庫和時(shí)間庫開始,因?yàn)槲覀儗⑹褂?strong>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 個(gè)無值。我們將玩游戲的畫布的高度和寬度為 400×400。

2.初始化Pygame窗口

我們使用 pygame 創(chuàng)建一個(gè)新窗口,我們將在其中玩 Tic Tac Toe 游戲。所以我們用pg.init()方法初始化pygame ,設(shè)置窗口顯示寬度為400,高度為500。我們預(yù)留了100像素的空間用于顯示游戲狀態(tài)。

pg.display.set_mode ()初始化顯示,我們用 screen 變量引用它。每當(dāng)我們想在顯示器上畫東西時(shí),都會使用這個(gè)屏幕變量。

pg.display.set_caption 方法用于設(shè)置將出現(xiàn)在顯示窗口頂部的名稱。

#初始化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.加載和轉(zhuǎn)換圖像

Python 項(xiàng)目使用了許多圖像,例如游戲開始或重置時(shí)將顯示的開場圖像。當(dāng)用戶點(diǎn)擊網(wǎng)格時(shí)我們將繪制的 X 和 O 圖像。我們加載所有圖像并調(diào)整它們的大小,以便它們很容易適合我們的窗口。

#加載圖像
opening = pg.image.load('tic tac opening.png')
x_img = pg.image.load('x.png')
o_img = pg.image.load('o.png')
 
#調(diào)整圖像大小
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.定義函數(shù)

現(xiàn)在我們創(chuàng)建一個(gè)函數(shù)來啟動(dòng)游戲。當(dāng)我們想要重新啟動(dòng)游戲時(shí),我們也會使用這個(gè)函數(shù)。在 pygame 中,blit()函數(shù)用于在表面上繪制一個(gè)圖像到另一個(gè)圖像之上。

所以我們繪制開場圖像,繪制之后,我們總是需要用pg.display.update()更新顯示。繪制開始圖像時(shí),我們使用time.sleep(1)等待 1 秒,然后用白色填充屏幕。

接下來,我們在白色背景上繪制 2 條垂直線和水平線來制作 3×3 網(wǎng)格。最后,我們調(diào)用draw_status()函數(shù)

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 ()函數(shù)繪制一個(gè)黑色矩形,我們在其中更新游戲狀態(tài),顯示輪到哪個(gè)玩家以及游戲是結(jié)束還是平局。

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)) 
    # 將呈現(xiàn)的消息復(fù)制到板上
    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()函數(shù)檢查井字棋盤以查看“X”和“O”的所有標(biāo)記。它計(jì)算玩家是否贏得了比賽。當(dāng)玩家在一行、一列或?qū)蔷€上連續(xù)標(biāo)記 3 個(gè)標(biāo)記時(shí),他們可以獲勝。每當(dāng)我們在板上畫一個(gè)標(biāo)記“X”或“O”時(shí),都會調(diào)用此函數(shù)。

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) 函數(shù)獲取鼠標(biāo)單擊的行和列,然后繪制“X”或“O”標(biāo)記。我們從繪制標(biāo)記的 png 圖像的位置計(jì)算起點(diǎn)的 x 和 y 坐標(biāo)。

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)

最后一個(gè)函數(shù)是 reset_game()。這將重新啟動(dòng)游戲,我們還將所有變量重置為游戲的開始。

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]

萬歲!游戲已經(jīng)完成,可以玩了。使用tictactoe.py文件名保存源代碼并運(yùn)行該文件。

總結(jié)

到此這篇關(guān)于Python開發(fā)游戲之井字游戲的文章就介紹到這了,更多相關(guān)Python開發(fā)井字游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 爬取淘寶商品信息欄目的實(shí)現(xiàn)

    Python 爬取淘寶商品信息欄目的實(shí)現(xiàn)

    這篇文章主要介紹了Python 爬取淘寶商品信息欄目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python 獲取sqlite3數(shù)據(jù)庫的表名和表字段名的實(shí)例

    python 獲取sqlite3數(shù)據(jù)庫的表名和表字段名的實(shí)例

    今天小編就為大家分享一篇python 獲取sqlite3數(shù)據(jù)庫的表名和表字段名的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 關(guān)于python中模塊和重載的問題

    關(guān)于python中模塊和重載的問題

    這篇文章主要介紹了python模塊和重載的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 用python做游戲的細(xì)節(jié)詳解

    用python做游戲的細(xì)節(jié)詳解

    在本篇內(nèi)容里小編給大家分享的是關(guān)于python做游戲的細(xì)節(jié)相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • PyTorch模型保存與加載實(shí)例詳解

    PyTorch模型保存與加載實(shí)例詳解

    大家都知道pytorch的模型和參數(shù)是分開的,可以分別保存或加載模型和參數(shù),這篇文章主要給大家介紹了關(guān)于PyTorch模型保存與加載的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • python網(wǎng)絡(luò)應(yīng)用開發(fā)知識點(diǎn)淺析

    python網(wǎng)絡(luò)應(yīng)用開發(fā)知識點(diǎn)淺析

    在本篇內(nèi)容中小編給學(xué)習(xí)python的朋友們整理了關(guān)于網(wǎng)絡(luò)應(yīng)用開發(fā)的相關(guān)知識點(diǎn)以及實(shí)例內(nèi)容,需要的朋友們參考下。
    2019-05-05
  • python使用ctypes調(diào)用第三方庫時(shí)出現(xiàn)undefined?symbol錯(cuò)誤詳解

    python使用ctypes調(diào)用第三方庫時(shí)出現(xiàn)undefined?symbol錯(cuò)誤詳解

    python中時(shí)間的庫有time和datetime,pandas也有提供相應(yīng)的時(shí)間處理函數(shù),下面這篇文章主要給大家介紹了關(guān)于python使用ctypes調(diào)用第三方庫時(shí)出現(xiàn)undefined?symbol錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 解讀FastAPI異步化為transformers模型打造高性能接口

    解讀FastAPI異步化為transformers模型打造高性能接口

    這篇文章主要介紹了解讀FastAPI異步化為transformers模型打造高性能接口問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python 彈窗設(shè)計(jì)小人發(fā)射愛心

    Python 彈窗設(shè)計(jì)小人發(fā)射愛心

    今天小編就為大家分享一篇使用Python畫出小人發(fā)射愛心的代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-09-09
  • 在windows系統(tǒng)中實(shí)現(xiàn)python3安裝lxml

    在windows系統(tǒng)中實(shí)現(xiàn)python3安裝lxml

    本文主要給大家簡單介紹了下在windows以及l(fā)inux系統(tǒng)中使用Python安裝LXML模塊的教程,非常簡單實(shí)用,有需要的小伙伴可以參考下
    2016-03-03

最新評論