Sign InCoursewareNuggetsTutorials CoursesCodePad



The task of this unit is to design and implement the game of tic tac toe.

You should enable two players to play. Whoever gets three pieces in a row first wins.

Have fun!

import turtle import time canvas = turtle.Screen() canvas.setup(600, 600) canvas.bgcolor("white") size = 600 pen = turtle.Turtle() pen.hideturtle() pen.pensize(4) pen.speed(0) squares = [['a','b','c'],['d','e','f'],['g','h','i']] turn = 'X' exit = 0 x_index = 0 y_index = 0 num_clicks = 0 def drawGrid(color): pen.color(color) pen.up() pen.goto(-size/2, size/6) pen.down() pen.forward(size) pen.up() pen.goto(-size/2, -size/6) pen.down() pen.forward(size) pen.up() pen.goto(-size/6, size/2) pen.right(90) pen.down() pen.forward(size) pen.up() pen.goto(size/6, size/2) pen.down() pen.forward(size) def drawX(color, x, y): pen.color(color) pen.up() pen.goto(x, y) pen.down() pen.write('X', font=('Ariel', 100, 'normal')) def drawO(color, x, y): pen.color(color) pen.up() pen.goto(x, y) pen.down() pen.write('O', font=('Ariel', 100, 'normal')) def getIndex(raw): if raw >= -size/2 and raw <= -size/6: return 0 elif raw <= size/6: return 1 else: return 2 def indexToCoordinate(index): if index == 0: return -size/3 - 40 if index == 1: return -40 if index == 2: return size/3 - 40 def play(x, y): global turn global x_index global y_index global num_clicks global exit x_index = getIndex(x) y_index = getIndex(y) if exit == 0: if squares[x_index][y_index] != 'X' and squares[x_index][y_index] != 'O': num_clicks += 1 if turn == 'X': squares[x_index][y_index] = 'X' drawX('red', indexToCoordinate(x_index), indexToCoordinate(y_index)) turn = 'O' else: squares[x_index][y_index] = 'O' drawO('blue', indexToCoordinate(x_index), indexToCoordinate(y_index)) turn = 'X' exit = game_over() if exit == 1: game_msg("X wins!") elif exit == 2: game_msg("O wins!") elif exit == 3: game_msg("It is a tie!") def game_msg(msg): msg_pen = turtle.Turtle() msg_pen.hideturtle() msg_pen.up() msg_pen.goto(0, -80) msg_pen.down() msg_pen.color("purple") msg_pen.speed(1) msg_pen.write(msg, align="center", font=("Helvetica", 30, "bold italic")) def game_over(): global num_clicks if (squares[0][0] == squares[0][1] and squares[0][1] == squares[0][2]) or \ (squares[1][0] == squares[1][1] and squares[1][1] == squares[1][2]) or \ (squares[2][0] == squares[2][1] and squares[2][1] == squares[2][2]) or \ (squares[0][0] == squares[1][0] and squares[1][0] == squares[2][0]) or \ (squares[0][1] == squares[1][1] and squares[1][1] == squares[2][1]) or \ (squares[0][2] == squares[1][2] and squares[1][2] == squares[2][2]) or \ (squares[0][0] == squares[1][1] and squares[1][1] == squares[2][2]) or \ (squares[0][2] == squares[1][1] and squares[1][1] == squares[2][0]): if turn == 'X': return 2 else: return 1 elif num_clicks >= 9: return 3 else: return 0 drawGrid("black") canvas.onclick(play) canvas.mainloop()

© CS Wonders·About·Gallery·Fun Facts·Cheatsheet