As a student of computer science, I embarked on an exciting journey to learn and apply my programming skills. One of my first projects was to build a Tic Tac Toe game using Python, which allowed me to showcase my progress and newfound knowledge of the language.
Through the development of this Tic Tac Toe game, I learned about fundamental concepts such as data structures, conditional statements, user input, and game logic. I was able to apply these concepts to create a functional game that provided an enjoyable user experience.
This is my Python implementation of a Tic Tac Toe Game. Basically, it consists of two clases: TicTacToe
and Player
<span>class</span> <span>TicTacToe</span><span>:</span><span>def</span> <span>__init__</span><span>(</span><span>self</span><span>):</span><span>self</span><span>.</span><span>available_cells</span> <span>=</span> <span>[</span><span>'A1'</span><span>,</span> <span>'A2'</span><span>,</span> <span>'A3'</span><span>,</span> <span>'B1'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'B3'</span><span>,</span> <span>'C1'</span><span>,</span> <span>'C2'</span><span>,</span> <span>'C3'</span><span>]</span><span>self</span><span>.</span><span>players</span> <span>=</span> <span>[]</span><span>self</span><span>.</span><span>table</span> <span>=</span> <span>""" A B C 1 A1 B1 C1 2 A2 B2 C3 3 A3 B3 C3"""</span><span>self</span><span>.</span><span>winner</span> <span>=</span> <span>''</span><span>self</span><span>.</span><span>last_played</span> <span>=</span> <span>''</span><span>self</span><span>.</span><span>combinations_to_win</span> <span>=</span> <span>[</span><span>[</span><span>'A1'</span><span>,</span> <span>'A2'</span><span>,</span> <span>'A3'</span><span>],</span><span>[</span><span>'B1'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'B3'</span><span>],</span><span>[</span><span>'C1'</span><span>,</span> <span>'C2'</span><span>,</span> <span>'C3'</span><span>],</span><span>[</span><span>'A1'</span><span>,</span> <span>'B1'</span><span>,</span> <span>'C1'</span><span>],</span><span>[</span><span>'A2'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'C2'</span><span>],</span><span>[</span><span>'A3'</span><span>,</span> <span>'B3'</span><span>,</span> <span>'C3'</span><span>],</span><span>[</span><span>'A1'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'C3'</span><span>],</span><span>[</span><span>'A3'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'C1'</span><span>]</span><span>]</span><span>class</span> <span>TicTacToe</span><span>:</span> <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>):</span> <span>self</span><span>.</span><span>available_cells</span> <span>=</span> <span>[</span><span>'A1'</span><span>,</span> <span>'A2'</span><span>,</span> <span>'A3'</span><span>,</span> <span>'B1'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'B3'</span><span>,</span> <span>'C1'</span><span>,</span> <span>'C2'</span><span>,</span> <span>'C3'</span><span>]</span> <span>self</span><span>.</span><span>players</span> <span>=</span> <span>[]</span> <span>self</span><span>.</span><span>table</span> <span>=</span> <span>""" A B C 1 A1 B1 C1 2 A2 B2 C3 3 A3 B3 C3"""</span> <span>self</span><span>.</span><span>winner</span> <span>=</span> <span>''</span> <span>self</span><span>.</span><span>last_played</span> <span>=</span> <span>''</span> <span>self</span><span>.</span><span>combinations_to_win</span> <span>=</span> <span>[</span> <span>[</span><span>'A1'</span><span>,</span> <span>'A2'</span><span>,</span> <span>'A3'</span><span>],</span> <span>[</span><span>'B1'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'B3'</span><span>],</span> <span>[</span><span>'C1'</span><span>,</span> <span>'C2'</span><span>,</span> <span>'C3'</span><span>],</span> <span>[</span><span>'A1'</span><span>,</span> <span>'B1'</span><span>,</span> <span>'C1'</span><span>],</span> <span>[</span><span>'A2'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'C2'</span><span>],</span> <span>[</span><span>'A3'</span><span>,</span> <span>'B3'</span><span>,</span> <span>'C3'</span><span>],</span> <span>[</span><span>'A1'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'C3'</span><span>],</span> <span>[</span><span>'A3'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'C1'</span><span>]</span> <span>]</span>class TicTacToe: def __init__(self): self.available_cells = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'] self.players = [] self.table = """ A B C 1 A1 B1 C1 2 A2 B2 C3 3 A3 B3 C3""" self.winner = '' self.last_played = '' self.combinations_to_win = [ ['A1', 'A2', 'A3'], ['B1', 'B2', 'B3'], ['C1', 'C2', 'C3'], ['A1', 'B1', 'C1'], ['A2', 'B2', 'C2'], ['A3', 'B3', 'C3'], ['A1', 'B2', 'C3'], ['A3', 'B2', 'C1'] ]
Enter fullscreen mode Exit fullscreen mode
The TicTacToe
class handles the game logic and flow. It keeps track of the available cells, players, game table, winner, and the last played move. It also includes a list of combinations needed to win the game.
<span>def</span> <span>start_game</span><span>(</span><span>self</span><span>,</span> <span>phase</span> <span>=</span> <span>0</span><span>):</span><span>self</span><span>.</span><span>available_cells</span> <span>=</span> <span>[</span><span>'A1'</span><span>,</span> <span>'A2'</span><span>,</span> <span>'A3'</span><span>,</span> <span>'B1'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'B3'</span><span>,</span> <span>'C1'</span><span>,</span> <span>'C2'</span><span>,</span> <span>'C3'</span><span>]</span><span>self</span><span>.</span><span>table</span> <span>=</span> <span>""" A B C 1 A1 B1 C1 2 A2 B2 C3 3 A3 B3 C3"""</span><span>self</span><span>.</span><span>winner</span> <span>=</span> <span>''</span><span>self</span><span>.</span><span>last_played</span> <span>=</span> <span>''</span><span>if</span> <span>phase</span> <span>==</span> <span>0</span><span>:</span><span>self</span><span>.</span><span>players</span> <span>=</span> <span>[]</span><span>print</span><span>(</span><span>"Welcome to Sebas TicTacToe made in Python 3, hope you enjoy while playing!"</span><span>)</span><span>print</span><span>(</span><span>"Let's begin by setting your names"</span><span>)</span><span>player1</span> <span>=</span> <span>Player</span><span>(</span><span>input</span><span>(</span><span>"Player1's name: "</span><span>),</span> <span>self</span><span>)</span><span>player2</span> <span>=</span> <span>Player</span><span>(</span><span>input</span><span>(</span><span>"Player2's name: "</span><span>),</span> <span>self</span><span>)</span><span>self</span><span>.</span><span>players</span><span>.</span><span>extend</span><span>([</span><span>player1</span><span>,</span> <span>player2</span><span>])</span><span>print</span><span>(</span><span>"Let's start!"</span><span>)</span><span>self</span><span>.</span><span>start_game</span><span>(</span><span>1</span><span>)</span><span>if</span> <span>phase</span> <span>==</span> <span>1</span><span>:</span><span>player1</span> <span>=</span> <span>self</span><span>.</span><span>get_player</span><span>(</span><span>1</span><span>)</span><span>player2</span> <span>=</span> <span>self</span><span>.</span><span>get_player</span><span>(</span><span>2</span><span>)</span><span>while</span> <span>self</span><span>.</span><span>check_winner</span><span>()</span> <span>==</span> <span>False</span><span>:</span><span>self</span><span>.</span><span>draw_table</span><span>()</span><span>if</span> <span>self</span><span>.</span><span>last_played</span> <span>==</span> <span>self</span><span>.</span><span>get_player</span><span>(</span><span>1</span><span>):</span><span>player2</span><span>.</span><span>play_round</span><span>()</span><span>else</span><span>:</span><span>player1</span><span>.</span><span>play_round</span><span>()</span><span>self</span><span>.</span><span>draw_table</span><span>()</span><span>print</span><span>(</span><span>"We have a winner!"</span><span>)</span><span>print</span><span>(</span><span>"Congratulations on winning {winner_name}"</span><span>.</span><span>format</span><span>(</span><span>winner_name</span><span>=</span><span>self</span><span>.</span><span>winner</span><span>))</span><span>play_again</span> <span>=</span> <span>input</span><span>(</span><span>"Do you wish to play again? (Y/N) "</span><span>)</span><span>if</span> <span>play_again</span> <span>==</span> <span>'Y'</span><span>:</span><span>for</span> <span>player</span> <span>in</span> <span>self</span><span>.</span><span>players</span><span>:</span><span>player</span><span>.</span><span>played_cells</span> <span>=</span> <span>[]</span><span>self</span><span>.</span><span>start_game</span><span>(</span><span>1</span><span>)</span><span>else</span><span>:</span><span>print</span><span>(</span><span>"Okay! Have a great day."</span><span>)</span><span>def</span> <span>start_game</span><span>(</span><span>self</span><span>,</span> <span>phase</span> <span>=</span> <span>0</span><span>):</span> <span>self</span><span>.</span><span>available_cells</span> <span>=</span> <span>[</span><span>'A1'</span><span>,</span> <span>'A2'</span><span>,</span> <span>'A3'</span><span>,</span> <span>'B1'</span><span>,</span> <span>'B2'</span><span>,</span> <span>'B3'</span><span>,</span> <span>'C1'</span><span>,</span> <span>'C2'</span><span>,</span> <span>'C3'</span><span>]</span> <span>self</span><span>.</span><span>table</span> <span>=</span> <span>""" A B C 1 A1 B1 C1 2 A2 B2 C3 3 A3 B3 C3"""</span> <span>self</span><span>.</span><span>winner</span> <span>=</span> <span>''</span> <span>self</span><span>.</span><span>last_played</span> <span>=</span> <span>''</span> <span>if</span> <span>phase</span> <span>==</span> <span>0</span><span>:</span> <span>self</span><span>.</span><span>players</span> <span>=</span> <span>[]</span> <span>print</span><span>(</span><span>"Welcome to Sebas TicTacToe made in Python 3, hope you enjoy while playing!"</span><span>)</span> <span>print</span><span>(</span><span>"Let's begin by setting your names"</span><span>)</span> <span>player1</span> <span>=</span> <span>Player</span><span>(</span><span>input</span><span>(</span><span>"Player1's name: "</span><span>),</span> <span>self</span><span>)</span> <span>player2</span> <span>=</span> <span>Player</span><span>(</span><span>input</span><span>(</span><span>"Player2's name: "</span><span>),</span> <span>self</span><span>)</span> <span>self</span><span>.</span><span>players</span><span>.</span><span>extend</span><span>([</span><span>player1</span><span>,</span> <span>player2</span><span>])</span> <span>print</span><span>(</span><span>"Let's start!"</span><span>)</span> <span>self</span><span>.</span><span>start_game</span><span>(</span><span>1</span><span>)</span> <span>if</span> <span>phase</span> <span>==</span> <span>1</span><span>:</span> <span>player1</span> <span>=</span> <span>self</span><span>.</span><span>get_player</span><span>(</span><span>1</span><span>)</span> <span>player2</span> <span>=</span> <span>self</span><span>.</span><span>get_player</span><span>(</span><span>2</span><span>)</span> <span>while</span> <span>self</span><span>.</span><span>check_winner</span><span>()</span> <span>==</span> <span>False</span><span>:</span> <span>self</span><span>.</span><span>draw_table</span><span>()</span> <span>if</span> <span>self</span><span>.</span><span>last_played</span> <span>==</span> <span>self</span><span>.</span><span>get_player</span><span>(</span><span>1</span><span>):</span> <span>player2</span><span>.</span><span>play_round</span><span>()</span> <span>else</span><span>:</span> <span>player1</span><span>.</span><span>play_round</span><span>()</span> <span>self</span><span>.</span><span>draw_table</span><span>()</span> <span>print</span><span>(</span><span>"We have a winner!"</span><span>)</span> <span>print</span><span>(</span><span>"Congratulations on winning {winner_name}"</span><span>.</span><span>format</span><span>(</span><span>winner_name</span><span>=</span><span>self</span><span>.</span><span>winner</span><span>))</span> <span>play_again</span> <span>=</span> <span>input</span><span>(</span><span>"Do you wish to play again? (Y/N) "</span><span>)</span> <span>if</span> <span>play_again</span> <span>==</span> <span>'Y'</span><span>:</span> <span>for</span> <span>player</span> <span>in</span> <span>self</span><span>.</span><span>players</span><span>:</span> <span>player</span><span>.</span><span>played_cells</span> <span>=</span> <span>[]</span> <span>self</span><span>.</span><span>start_game</span><span>(</span><span>1</span><span>)</span> <span>else</span><span>:</span> <span>print</span><span>(</span><span>"Okay! Have a great day."</span><span>)</span>def start_game(self, phase = 0): self.available_cells = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'] self.table = """ A B C 1 A1 B1 C1 2 A2 B2 C3 3 A3 B3 C3""" self.winner = '' self.last_played = '' if phase == 0: self.players = [] print("Welcome to Sebas TicTacToe made in Python 3, hope you enjoy while playing!") print("Let's begin by setting your names") player1 = Player(input("Player1's name: "), self) player2 = Player(input("Player2's name: "), self) self.players.extend([player1, player2]) print("Let's start!") self.start_game(1) if phase == 1: player1 = self.get_player(1) player2 = self.get_player(2) while self.check_winner() == False: self.draw_table() if self.last_played == self.get_player(1): player2.play_round() else: player1.play_round() self.draw_table() print("We have a winner!") print("Congratulations on winning {winner_name}".format(winner_name=self.winner)) play_again = input("Do you wish to play again? (Y/N) ") if play_again == 'Y': for player in self.players: player.played_cells = [] self.start_game(1) else: print("Okay! Have a great day.")
Enter fullscreen mode Exit fullscreen mode
The start_game
method initializes the game, allows players to enter their names, and resets the game once it’s over.
<span>def</span> <span>draw_table</span><span>(</span><span>self</span><span>):</span><span>table_to_draw</span> <span>=</span> <span>self</span><span>.</span><span>table</span><span>for</span> <span>cell</span> <span>in</span> <span>self</span><span>.</span><span>available_cells</span><span>:</span><span>table_to_draw</span> <span>=</span> <span>table_to_draw</span><span>.</span><span>replace</span><span>(</span><span>cell</span><span>,</span> <span>' '</span><span>)</span><span>print</span><span>(</span><span>table_to_draw</span><span>)</span><span>def</span> <span>draw_table</span><span>(</span><span>self</span><span>):</span> <span>table_to_draw</span> <span>=</span> <span>self</span><span>.</span><span>table</span> <span>for</span> <span>cell</span> <span>in</span> <span>self</span><span>.</span><span>available_cells</span><span>:</span> <span>table_to_draw</span> <span>=</span> <span>table_to_draw</span><span>.</span><span>replace</span><span>(</span><span>cell</span><span>,</span> <span>' '</span><span>)</span> <span>print</span><span>(</span><span>table_to_draw</span><span>)</span>def draw_table(self): table_to_draw = self.table for cell in self.available_cells: table_to_draw = table_to_draw.replace(cell, ' ') print(table_to_draw)
Enter fullscreen mode Exit fullscreen mode
The draw_table
method displays the current state of the game board.
<span>def</span> <span>check_winner</span><span>(</span><span>self</span><span>):</span><span>for</span> <span>player</span> <span>in</span> <span>self</span><span>.</span><span>players</span><span>:</span><span>for</span> <span>combination</span> <span>in</span> <span>self</span><span>.</span><span>combinations_to_win</span><span>:</span><span>if</span> <span>all</span><span>(</span><span>cell</span> <span>in</span> <span>player</span><span>.</span><span>played_cells</span> <span>for</span> <span>cell</span> <span>in</span> <span>combination</span><span>):</span><span>self</span><span>.</span><span>winner</span> <span>=</span> <span>player</span><span>.</span><span>name</span><span>return</span> <span>True</span><span>return</span> <span>False</span><span>def</span> <span>check_winner</span><span>(</span><span>self</span><span>):</span> <span>for</span> <span>player</span> <span>in</span> <span>self</span><span>.</span><span>players</span><span>:</span> <span>for</span> <span>combination</span> <span>in</span> <span>self</span><span>.</span><span>combinations_to_win</span><span>:</span> <span>if</span> <span>all</span><span>(</span><span>cell</span> <span>in</span> <span>player</span><span>.</span><span>played_cells</span> <span>for</span> <span>cell</span> <span>in</span> <span>combination</span><span>):</span> <span>self</span><span>.</span><span>winner</span> <span>=</span> <span>player</span><span>.</span><span>name</span> <span>return</span> <span>True</span> <span>return</span> <span>False</span>def check_winner(self): for player in self.players: for combination in self.combinations_to_win: if all(cell in player.played_cells for cell in combination): self.winner = player.name return True return False
Enter fullscreen mode Exit fullscreen mode
The check_winner
method checks if a player has won the game by comparing the played cells against the winning combinations.
<span>class</span> <span>Player</span><span>:</span><span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>name</span><span>,</span> <span>game</span><span>):</span><span>self</span><span>.</span><span>name</span> <span>=</span> <span>name</span><span>self</span><span>.</span><span>game</span> <span>=</span> <span>game</span><span>self</span><span>.</span><span>played_cells</span> <span>=</span> <span>[]</span><span>class</span> <span>Player</span><span>:</span> <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>name</span><span>,</span> <span>game</span><span>):</span> <span>self</span><span>.</span><span>name</span> <span>=</span> <span>name</span> <span>self</span><span>.</span><span>game</span> <span>=</span> <span>game</span> <span>self</span><span>.</span><span>played_cells</span> <span>=</span> <span>[]</span>class Player: def __init__(self, name, game): self.name = name self.game = game self.played_cells = []
Enter fullscreen mode Exit fullscreen mode
The Player
class represents a player in the game. Each player has a name, the game instance they are on, and a list of played cells.
<span>def</span> <span>play_round</span><span>(</span><span>self</span><span>):</span><span>print</span><span>(</span><span>"{player_name} it's your turn"</span><span>.</span><span>format</span><span>(</span><span>player_name</span><span>=</span><span>self</span><span>.</span><span>name</span><span>))</span><span>selected_cell</span> <span>=</span> <span>input</span><span>(</span><span>"Select one cell (Ex: A1, B2, C3): "</span><span>)</span><span>while</span> <span>selected_cell</span> <span>not</span> <span>in</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>available_cells</span><span>:</span><span>print</span><span>(</span><span>"Please select a valid cell"</span><span>)</span><span>selected_cell</span> <span>=</span> <span>input</span><span>(</span><span>"Select one cell (Ex: A1, B2, C3): "</span><span>)</span><span>self</span><span>.</span><span>played_cells</span><span>.</span><span>append</span><span>(</span><span>selected_cell</span><span>)</span><span>self</span><span>.</span><span>game</span><span>.</span><span>available_cells</span><span>.</span><span>remove</span><span>(</span><span>selected_cell</span><span>)</span><span>if</span> <span>self</span><span>.</span><span>is_o</span><span>():</span><span>self</span><span>.</span><span>game</span><span>.</span><span>table</span> <span>=</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>table</span><span>.</span><span>replace</span><span>(</span><span>selected_cell</span><span>,</span> <span>'O '</span><span>)</span><span>elif</span> <span>self</span><span>.</span><span>is_x</span><span>():</span><span>self</span><span>.</span><span>game</span><span>.</span><span>table</span> <span>=</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>table</span><span>.</span><span>replace</span><span>(</span><span>selected_cell</span><span>,</span> <span>'X '</span><span>)</span><span>self</span><span>.</span><span>game</span><span>.</span><span>last_played</span> <span>=</span> <span>self</span><span>def</span> <span>play_round</span><span>(</span><span>self</span><span>):</span> <span>print</span><span>(</span><span>"{player_name} it's your turn"</span><span>.</span><span>format</span><span>(</span><span>player_name</span><span>=</span><span>self</span><span>.</span><span>name</span><span>))</span> <span>selected_cell</span> <span>=</span> <span>input</span><span>(</span><span>"Select one cell (Ex: A1, B2, C3): "</span><span>)</span> <span>while</span> <span>selected_cell</span> <span>not</span> <span>in</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>available_cells</span><span>:</span> <span>print</span><span>(</span><span>"Please select a valid cell"</span><span>)</span> <span>selected_cell</span> <span>=</span> <span>input</span><span>(</span><span>"Select one cell (Ex: A1, B2, C3): "</span><span>)</span> <span>self</span><span>.</span><span>played_cells</span><span>.</span><span>append</span><span>(</span><span>selected_cell</span><span>)</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>available_cells</span><span>.</span><span>remove</span><span>(</span><span>selected_cell</span><span>)</span> <span>if</span> <span>self</span><span>.</span><span>is_o</span><span>():</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>table</span> <span>=</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>table</span><span>.</span><span>replace</span><span>(</span><span>selected_cell</span><span>,</span> <span>'O '</span><span>)</span> <span>elif</span> <span>self</span><span>.</span><span>is_x</span><span>():</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>table</span> <span>=</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>table</span><span>.</span><span>replace</span><span>(</span><span>selected_cell</span><span>,</span> <span>'X '</span><span>)</span> <span>self</span><span>.</span><span>game</span><span>.</span><span>last_played</span> <span>=</span> <span>self</span>def play_round(self): print("{player_name} it's your turn".format(player_name=self.name)) selected_cell = input("Select one cell (Ex: A1, B2, C3): ") while selected_cell not in self.game.available_cells: print("Please select a valid cell") selected_cell = input("Select one cell (Ex: A1, B2, C3): ") self.played_cells.append(selected_cell) self.game.available_cells.remove(selected_cell) if self.is_o(): self.game.table = self.game.table.replace(selected_cell, 'O ') elif self.is_x(): self.game.table = self.game.table.replace(selected_cell, 'X ') self.game.last_played = self
Enter fullscreen mode Exit fullscreen mode
The play_round
method allows the player to select a cell to play and updates the game board accordingly.
sebasxm00 / Sebas-TicTacToe
TicTacToe Game
This is a Python project that implements the game of “Tic Tac Toe”. It allows two players to compete against each other to achieve a line of three symbols (X or O) on a game board.
Features
- Command-line interface.
- Support for two players.
- Interactive game board.
- Automatic detection of the winner.
- Game restart after a winner has been determined.
- Option to play multiple rounds.
Prerequisites
- Python 3.x
Usage Instructions
-
Clone the repository or download the files to your local machine.
-
Open a terminal or command prompt and navigate to the project directory.
-
Run the following command to start the game:
python tic_tac_toe.pypython tic_tac_toe.py
python tic_tac_toe.py
-
Follow the on-screen instructions to enter the players’ names and select the cells on the game board.
Contributions
Contributions are welcome. If you wish to enhance the game, make corrections, or add new features, feel free to submit a pull request.
About the Author
This project…
In conclusion, this Tic Tac Toe project serves as a significant milestone in my journey as a computer science student. Through the development of this game, I had the opportunity to apply my Python skills, reinforce my understanding of programming concepts, and enhance my problem-solving abilities.
Moving forward, I look forward to expanding my skill set, exploring new technologies, and taking on more challenging projects. This Tic Tac Toe game is just the beginning, and I am excited to continue my learning journey in the world of programming.
Thank you for joining me on this journey of building a Tic Tac Toe game in Python. I invite you to share your thoughts, suggestions, and contributions.
Happy coding!
原文链接:Building My First Game in Python: A Journey of Learning and Progress
暂无评论内容