代写Lab 4: 2 Player Tic Tac Toe with GUI (No Autograder for this Assignment)帮做Python编程

- 首页 >> OS编程

Lab 4: 2 Player Tic Tac Toe with GUI (No Autograder for this Assignment)

Due Friday by 11:59pm

Points 20

Submitting an external tool

Available May 17 at 12am - Jun 9 at 11:59pm

Purpose of this Lab:

The purpose of this lab is to get you used to networking by using sockets. (In our case, both the client and the server will be running on our local machine) and creating a user interface. The main libraries to be used are the sockets library (socket) and tkinter (or PyGames).

As for all labs this quarter, you will need to ensure your code works using IDLE with the version being used this quarter (Python 3.10), and refer to my lecture on sockets and tkinter for a refresher on how to use sockets and create a user interface.

Introduction to the Lab :

In this lab, we will be creating a Tic Tac Toe game. For those not familiar with Tic Tac Toe, refer to this Wikipedia page (Links to an external site.) (https://en.wikipedia.org/wiki/Tic-tac-toe) for it. In short, Tic Tac Toe is a 2-player game where one player's game piece is X and the second player's game piece is O (letter). The players take turns putting 1 of their game pieces in 1 of the empty slots in the 3 by 3 board. The first player to get 3 of their game pieces to align (vertically, horizontally or diagonally) wins. If the board has no empty slots and neither of the players has already won, no one wins and the game ends in a tie.

For this lab, I would like you to use sockets to pass the player moves between the players, one of whom is acting as the server and the other as the client. Our tic tac toe game will use a standard 3 x 3 board, and we will also use the standard x/X and o/O for the values that we will be passing back and forth.

Program Details:

You will create 3 new modules with the following details:

class BoardClass (gameboard.py)

The board game will consist of the following public interface. (Note this module can be imported and used by both player1 and player2 modules

The class should have a minimum of the following (you can add more if you need to):

Attributes:

User name of player 1

User name of player 2

User name of the last player to have a turn

Number of wins

Number of ties

Number of losses

Functions:

updateGamesPlayed()

Keeps track how many games have started

resetGameBoard()

Clear all the moves from game board

updateGameBoard()

Updates the game board with the player's move

isWinner()

Checks if the latest move resulted in a win

Updates the wins and losses count

boardIsFull()

Checks if the board is full (I.e. no more moves to make - tie)

Updates the ties count

computeStats()

Computes and returns the following stats:

The username of both players

The number of games

The number of wins

The number of losses

The number of ties

Player 1 Module(Module Name: player1.py) - The joining player

1. As the client, Player 1 will ask the user for the host information of Player 2 to join the game:

1. Prompt the user for the host name/IP address of Player 2 they want to play with

2. Prompt the user for the port to use in order to play with Player 2

2. Using that information they will attempt to connect to Player 2

1. Upon successful connection they will send Player 2 their username (just alphanumeric username with no special characters)

2. If the connection cannot be made then the user will be asked if they want to try again:

1. If the user enters 'Y/y' (or clicks a button) then you will request the host information from the user again

2. If the user enters 'N/n' (or clicks a button) then you will end the program

3. Once Player 1 receives Player 2's username or if the users decides to play again

1. Player 1 will ask the user for their move using the current player display area.

2. Send the move to player 2.

1. Player 1 will always be x/X

2. Player 1 will always send the first move to Player 2

1. Each move will correspond to the area on the board they user clicks on.

3. Once player 1 sends their move they will wait for Player 2's move.

4. Repeat steps 3.1 - 3.2.3 until the game is over (A game is over when a winner is found or the board is full)

4. Once a game has finished (win, lose, or tie) the user will indicate if they want to play again using the user interface.

1. If the user enters 'Y/y' (or clicks a button) then player 2 will send "Play Again" to player 2

2. If the user enters 'N/n' (or clicks a button) then player 2 will send "Fun Times" to player 2 and end the program

1. Once the user is done, the module will print all the statistics.

Player 2 Module (Module Name: player2.py) - The host of the game, or the server

1. The user will be asked to provide the host information so that it can establish a socket connection as the server

2. Player 2 will accept incoming requests to start a new game

3. When a connection request is received and accepted, Player 2 will wait for Player 1 to send their username

4. Once Player 2 receives Player 1's user name, then Player 2 will ask the user to enter their username and send it to Player 1 and wait for Player 1 to send their move.

1. Once Player 2 receives Player 1's move they will ask the user for their move and send it to Player 1 using the current player display area.

1. Each move will correspond to the area on the board they user clicks on.

2. Once player 2 sends their move they will wait for Player 1's move.

3. Repeat steps 4.1 - 4.2 until the game is over (A game is over when a winner is found or the board is full)

5. Once a game has finished (win or tie) player 2 will wait for player 1 to indicate if they want to play again using the user interface.

1. If Player 1 wants to play again then Player 2 will wait for player 1's first move.

2. If Player 1 does not wants to play again then Player 2 will print the statistics

User Interface:

1. You will create a user interface using either the Tkinter library or the PyGames library. At no point should the user be required to interact with the python shell with the input() or print() functions. The user interface should include the following components:

1. A text entry for the host information

2. A text entry for the username

3. A Tic Tac Toe board that allows the user to select their move by clicking on that

4. A dialog that asks the user if they want to play again (only on player 1)

5. A display area where you display the BoardClass's computed statistics when they are done and any other printed information specified in the lab.

6. An area indicating who's turn it is currently

7. An area where the final results will be displayed

Other Considerations:


1. All user text input are case insensitive.

2. Hint: Maintain the current state of the board on both client and server side to determine if someone won, lost or the board is full.

3. There is no autograder for this lab

4. Do not use any external libraries outside of what we have discussed in class or in this lab. This is to ensure it runs on our machines without having to install any external libraries.

5. Do not use global variables or write everything in 1 giant code block. Organize your code to use functions with inputs and outputs instead.


Lab 4: Tic Tac Toe (2) (1)

                                                                                           Rubric

A Tic Tac Toe board for each user that allows the user to select their move by clicking on it (1pts The user does not need to click on anything other than the position on the board to play the gam A message that asks player 1 if they want to play again (1 pts)

A display area where you display the reporting statistics when they are done and any other print pts)

A text input area for the players' username (1 pts)

An area that displays who's turn it currently is. (1 pts)

The current board state with every move played out is shown to both players after each player m

Player 2 program ends when player 1 no longer wants to play (1)

Continuing to play once a game is done properly starts a new game including clearing both boar Game statistics are printed on both Player 1 UI and Player 2 UI when player 1 chooses to quit p own statistics(2pt)

Classes are used appropriately (1pt)

Functions are small and cohesive (2 pts)

Variable names are meaningful and self-identifying (0.5 pts)

Docstrings follow the Google Style. Guide (0.5 pt)

Input and return types are documented properly in the function declaration (0.5 pts)








站长地图