You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.6 KiB
Python

"""Final Project
Goal: Demonstrate what you have learned in this class with a GUI Tic-Tac-Toe
game. It's also good experience to see a description of what is wanted by a
non-programmer. My coworker helped write the following description.
Description:
--------------------------------------------------------------------------------
We are looking to develop a stand-alone Tic-Tac-Toe game! It should have the
following features:
• Players should be able to play two people vs each other.
• Players should be able to play one player vs computer (to encourage
players to keep playing, we want random moves, not an always wins computer
opponent).
• We expect that players would be able to use the dropdown menus to start a
new game, and to exit the game.
• It should automatically switch between X and O after one places their
mark.
• We also want it to, in a one player game, let players pick X or O and then
randomize if they or the computer goes first, and let players know who is
going first, not just either make a move or wait on the player looking
like nothing happened.
--------------------------------------------------------------------------------
You are free to ask me any questions about this description for more
clarification. One thing I will say is to not worry about details until you
have a working Tic-Tac-Toe GUI. Then try adding the other parts in the
description later.
Requirements:
Look at the included 'CIS 216 Project Requirements' file. There are three
formats: CSV, Libre Office, and Microsoft Office. You can use whichever one is
easiest for you. It shows everything I will be looking for when I grade your
assignment to see you have learned topics in this class. In order to receive a
grade for each topic, you are _required_ to put a line number to show where you
have fulfilled the requirement. (Again, you only need to update one format file)
Grading: 20% of main class grade
- Final Project Draft: 5% - Participation points, just push up what you have
on or before April 12, 11:59 PM to get the full 5%. This is to encourage you
starting now, and not waiting until the end of the semester.
- Final Project: 15% - Push up for turn in before May 3, 5:00 PM. The
earlier you turn it in, the greater the chance I will be able to return it back
to you with suggested fixes for full credit!
Reminder: No work is accepted after May 3, 5:00 PM!
Name: <Andres Gomez>
Date: <2021-04-10>
Notes: <2021 -04-12 display board, and draft for program>
<2021 -04-23 add GUI https://pypi.org/project/PySimpleGUI/>
"""
import string
import PySimpleGUI as sg
import random
def play_game():
display_board ()
#while the game is still going
while game_going:
#handle a turn
handle_turn(current_player)
#check if he game has ended
check_if_game_over()
# cahnge to the other player
change_player()
#the game has ended
if winner == 'X' or winner == 'O':
print (winner + " won.")
elif winner == None:
print ("Tie.")
#Make the First window
def make_window1():
menu_def = [['Game', ['Start', 'Quit']],]
layout = [[sg.Menu(menu_def, )],
[sg.Text('Select the number of Players')],
[sg.Radio('One Player', group_id="P1_PREF", default=False, size=(10, 1)), sg.Radio('Two Players', group_id="P1_PREF", default=False, size=(10, 1))],
[sg.Text('Player 1, choose X or O, then click on "Start"')],
[sg.Radio('X', group_id="P2_PREF", default=False, size=(10, 1)), sg.Radio('O', group_id="P2_PREF", default=False, size=(10, 1))],
[sg.Button('Start')]]
return sg.Window('Window 1', layout, finalize=True)
#Make the Game window
def make_window2():
bw = {'size':(3,1), 'font':('Frankling Gothic Book', 24), 'button_color':("black","#F8F8F8")}
layout = [[sg.Text(key='-IN2-')],
[sg.Button('',**bw), sg.Button('',**bw),sg.Button('',**bw)],
[sg.Button('',**bw), sg.Button('',**bw),sg.Button('',**bw)],
[sg.Button('',**bw), sg.Button('',**bw),sg.Button('',**bw)],
[sg.Button('Exit')]]
return sg.Window('Window 2', layout, finalize=True)
#Call the Window Functions
def main():
#First window does not remain active
window2 = None
window1 = make_window1()
while True:
window, event, values = sg.read_all_windows()
if event == sg.WIN_CLOSED and window == window1 or event =='Quit':
break
if event == 'Start' and not window2:
window1.hide()
window2 = make_window2()
if window == window2 and (event in (sg.WIN_CLOSED, 'Exit')):
window2.close()
window2 = None
window1.un_hide()
if __name__ == '__main__':
main()