[PYTHON] 〇✕ J'ai fait un jeu

Motivation

Quand j'étais petit, il fut un temps où c'était mon boom de jouer le jeu de la formation à trois yeux avec mes amis en peu de temps. J'ai donc décidé de le faire cette fois.


Résultat d'exécution

Capture d'écran (39) .png


Contenu

Créer des écrans et des boutons

from tkinter import *
from tkinter import ttk
from tkinter import messagebox

squares = 3

class TictacApp(ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.create_widgets()
        self.set_value()

    def create_widgets(self):
        for i in range(squares):
            for j in range(squares):
                button = ttk.Button(self, command=self.record(i, j))
                button.bind('<Button-1>', self.mark)
                button.grid(column=i, row=j, sticky=(N, S, E, W))

        for i in range(squares):
            self.columnconfigure(i, weight=1)
            self.rowconfigure(i, weight=1)

        self.master.columnconfigure(0, weight=1)
        self.master.rowconfigure(0, weight=1)

        self.grid(column=0, row=0, sticky=(N, S, E, W))


def main():
    root = Tk()
    root.title('〇✕ Jeu')
    TictapApp(root)
    root.mainloop()


if __name__ == '__main__':
    main()

〇 et ✕ sont affichés

def mark(self, event):
        if not event.widget['text']:
            if self.player == 1:
                event.widget['text'] = str('〇')
            else:
                event.widget['text'] = str('×')


Souvenez-vous du bouton sur lequel vous avez appuyé


def record(self, i, j):
        def x():
            if not self.field[i][j]:
                self.field[i][j] = self.player
                self.line_check()
                self.change_player()
                self.clear()
        return x

    def set_value(self):
        self.player = 1
        self.field = []
        for i in range(squares):
            self.field.append(['' for i in range(squares)])
        self.finish = 0


Juger si la troisième ligne est alignée

    def line_check(self):
        cross = 0
        for i in range(squares):
            horizon = 0
            vertical = 0
            for j in range(squares):
                if self.field[i][j] == self.player:
                    horizon += 1
                if self.field[j][i] == self.player:
                    vertical += 1
            if self.field[i][i] == self.player:
                cross += 1
            if horizon == 3 or vertical == 3 or cross == 3:
                self.game_end()
        if self.field[0][2] == self.field[1][1] == self.field[2][0] == self.player:
            self.game_end()

Informer la victoire ou la défaite

   def game_end(self):
        if self.player == 1:
            messagebox.showinfo('Félicitations!', 'Première victoire')
        else:
            messagebox.showinfo('Félicitations!', 'Deuxième victoire d'attaque')
        self.finish = 1

Si tu ne peux pas t'installer

    def change_player(self):
        if self.finish == 0:
            self.player = -self.player

    def clear(self):
        if self.finish == 1:
            self.create_widgets()
            self.set_value()

Code source

from tkinter import *
from tkinter import ttk
from tkinter import messagebox

squares = 3


class TictacApp(ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.create_widgets()
        self.set_value()

    def set_value(self):
        self.player = 1
        self.field = []
        for i in range(squares):
            self.field.append(['' for i in range(squares)])
        self.finish = 0

    def create_widgets(self):
        for i in range(squares):
            for j in range(squares):
                button = ttk.Button(self, command=self.record(i, j))
                button.bind('<Button-1>', self.mark)
                button.grid(column=i, row=j, sticky=(N, S, E, W))

        for i in range(squares):
            self.columnconfigure(i, weight=1)
            self.rowconfigure(i, weight=1)

        self.master.columnconfigure(0, weight=1)
        self.master.rowconfigure(0, weight=1)

        self.grid(column=0, row=0, sticky=(N, S, E, W))

    def mark(self, event):
        if not event.widget['text']:
            if self.player == 1:
                event.widget['text'] = str('〇')
            else:
                event.widget['text'] = str('×')

    def record(self, i, j):
        def x():
            if not self.field[i][j]:
                self.field[i][j] = self.player
                self.line_check()
                self.change_player()
                self.clear()
        return x

    def change_player(self):
        if self.finish == 0:
            self.player = -self.player

    def line_check(self):
        cross = 0
        for i in range(squares):
            horizon = 0
            vertical = 0
            for j in range(squares):
                if self.field[i][j] == self.player:
                    horizon += 1
                if self.field[j][i] == self.player:
                    vertical += 1
            if self.field[i][i] == self.player:
                cross += 1
            if horizon == 3 or vertical == 3 or cross == 3:
                self.game_end()
        if self.field[0][2] == self.field[1][1] == self.field[2][0] == self.player:
            self.game_end()

    def game_end(self):
        if self.player == 1:
            messagebox.showinfo('Félicitations!', 'Première victoire')
        else:
            messagebox.showinfo('Félicitations!', 'Deuxième victoire d'attaque')
        self.finish = 1

    def clear(self):
        if self.finish == 1:
            self.create_widgets()
            self.set_value()


def main():
    root = Tk()
    root.title('Jeu OX')
    TictacApp(root)
    root.mainloop()


if __name__ == '__main__':
    main()

Impressions que j'ai faites

J'ai écrit le programme en regardant "J'ai essayé de créer une interface graphique avec Python et Tkinter côte à côte" auquel j'ai fait référence cette fois-ci, mais je vérifiais ce que je faisais. 〇✕ J'ai eu beaucoup de mal à créer un jeu. De plus, cette fois, j'ai pu me référer à quelque chose, mais je pensais que ce serait très difficile de le faire à partir de zéro. A partir de maintenant, j'ai décidé d'étudier pour pouvoir le faire moi-même à partir de zéro.


Les références

--Le livre d'introduction à Python le plus simple Fumitaka Osawa [Auteur]

Recommended Posts

〇✕ J'ai fait un jeu
J'ai fait un jeu de vie avec Numpy
J'ai fait un jeu rogue-like avec Python
J'ai fait un texte Python
J'ai fait un robot discord
J'ai fait un jeu de cueillette avec Python
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé un jeu d'introduction au festival scolaire avec Ren'py
J'ai fait un jeu mono tombé avec Sense HAT
J'ai créé un site d'apprentissage C ++
J'ai fait un Line-bot avec Python!
J'ai créé un script de traduction basé sur CUI (2)
J'ai fait un wikipedia gacha bot
J'ai fait une loterie avec Python.
J'ai créé un script de traduction basé sur CUI
Zura fait comme un jeu de la vie
J'ai créé un démon avec Python
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai fait un jeu de combat Numer0n en Java (j'ai aussi fait de l'IA)
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai créé un docset de tableau de bord pour Holoviews
J'ai fait un programme de gestion de la paie en Python!
J'ai touché "Orator" alors j'ai fait une note
J'ai fait un compteur de caractères avec Python
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
Débutant: j'ai créé un lanceur à l'aide d'un dictionnaire
J'ai fait un interlocuteur comme Siri
J'ai fait un script pour afficher des pictogrammes
J'ai fait une carte hexadécimale avec Python
J'ai fait un générateur Hanko avec GAN
J'ai créé un outil d'estampage automatique du navigateur.
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai fait une application WEB avec Django
J'ai fait un simulateur de neurones avec Python
J'ai créé un jeu appelé Battle Ship en utilisant pygame et tkinter
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
Faisons un jeu de squash
J'ai fait un robot de remplacement de tampon avec une ligne
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai fait une prévision météo de type bot avec Python.
J'ai fait un algorithme de rechange2 moins cher pour uWSGI
J'ai créé un outil utile pour Digital Ocean
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Je veux faire un jeu avec Python
J'ai fait un truc fou appelé tuple typé
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai créé un outil de collecte de configuration de routeur Config Collecor
J'ai fait un simple portefeuille de Bitcoin avec pycoin
J'ai créé un téléchargeur pour l'expression distribuée par mot
J'ai créé un Bot LINE avec Serverless Framework!
J'ai créé un outil pour compiler nativement Hy
J'ai un sqlite3.OperationalError
J'ai créé un installateur Ansible
J'ai créé un outil pour obtenir de nouveaux articles