联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> Python编程Python编程

日期:2021-06-06 10:10

Lab 4: 2 Player Tic Tac Toe

Due Jun 2 by 11:59pm

Points 30

Submitting an external tool

Available Apr 30 at 5:20am - Jun 4 at 11:59pm about 1 month

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.8), 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 Overview:

Here is an overview of the program flow of this Tic Tac Toe game:

Player 1, the host of the game (who can also be thought of as the server), starts the game on

their side, displaying shareable join information (server connection info) and waiting for another

player to join them. Player 2, the player joining in (who can also be thought of as the client),

enters the information of the host and sends a request to the host asking to let them join the

game. Player 1 accepts the request, and starts the game.

After the game has begun, Player 2 makes and sends the first move of the game (Player 2 will

always make the first move of every game) to Player 1 who had been waiting for them. Then,

Player 1 makes and sends their move to Player 2, who waits for Player 1’s move. The game

2021/6/3

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


2/5

continues on, with both players keeping track of the board and waiting for each other to make

and send their moves.

After the game is over, Player 2 decides if they want to play again or not, and Player 1 waits for

their decision. If both the users want to play again, Player 1 again waits for Player 2 to make

the first move of the game, and everything repeats.

Once either of the players is done playing, the game ends for both and displays the statistics of

the games played.

Program Details:

You will create 3 new modules with the following details:

BoardClass (gameboard.py)

General Information:

The board game will consist of the following public interface. (Note this module is

to 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):

Class Variables:

The current board of the game that keeps track of all the moves

Usernames of both players

Username of the last player to have a turn

Total Number of games played

Total Number of wins

Total Number of ties

Total Number of losses

Class Methods:

recordGamePlayed()

Updates how many total games have been played

resetGameBoard()

Clear all the moves from game board

playMoveOnBoard()

Updates the game board with the player's move

isBoardFull()

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

isGameFinished()

Checks if the latest move resulted in a win, loss or tie

Updates the wins, losses and ties count if the game is over

computeStats()

Gathers and returns the following information:

Usernames of both players

The username of the last person to make a move

The total number of games

2021/6/3

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


3/5

The total number of wins

The total number of losses

The total number of ties

Player 1 Module (Module Name: player1.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 1 will accept incoming requests to start a new game

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

send their username

4. Once Player 1 receives Player 2's user name, then Player 1 will send "player1" as their

username to Player 2 and wait for Player 2 to send their move.

1. Once Player 1 receives Player 2'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 1 sends their move they will wait for Player 2'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 1 will wait for player 2 to indicate if they

want to play again using the user interface.

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

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

Player 2 Module(Module Name: player2.py) - The joining player, or the client

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

game:

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

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

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

1. Upon successful connection they will send Player 1 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' then you will request the host information from the user again

2. If the user enters 'n' then you will end the program

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

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

2. Send the move to player 1.

1. Player 2 will always be x/X

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

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

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

2021/6/3

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


4/5

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' or 'Y' then player 2 will send "Play Again" to player 1

2. If the user enters 'n' or 'N' then player 2 will send "Fun Times" to player 1 and end the

program

1. Once the user is done, the module will print all 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. The user interface

should include the following components:

1. A text input in that beginning for the host information

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

3. A dialog that asks the user if they want to play again

4. A display area where you display the BoardClass's computed statistics when they

are done and any other printed information specified in the lab.

5. A text input area for the players name

6. An area where the user name of the current players turn will be displayed.

7. An area where the final results will be displayed (It is okay to print this info in the

shell as well but it must be on the UI as well).

8. Quit button that allows the user to quit prior to finishing a game

Other Considerations:

1. All user inputs 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


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp