Example #1
0
class main:
   
    def __init__(self,master):
        self.frame = Frame(master)
        self.frame.pack(fill="both", expand=True)
        self.canvas = Canvas(self.frame, width=300, height=300)
        self.canvas.pack(fill="both", expand=True)
        self.label=Label(self.frame, text='Tic Tac Toe Game', height=6, bg='black', fg='blue')
        self.label.pack(fill="both", expand=True)
        self.frameb=Frame(self.frame)
        self.frameb.pack(fill="both", expand=True)
        self.Start1=Button(self.frameb, text='Click here to start\ndouble player', height=4, command=self.start1,bg='white', fg='purple')
        self.Start1.pack(fill="both", expand=True, side=RIGHT)
        self.Start2=Button(self.frameb, text='Click here to start\nsingle player', height=4, command=self.start2,bg='purple', fg='white')
        self.Start2.pack(fill="both", expand=True, side=LEFT)     
        self._board()

    def start1(self):
        self.canvas.delete(ALL)
        self.label['text']=('Tic Tac Toe Game')
        self.canvas.bind("<ButtonPress-1>", self.sgplayer)  
        self._board()
        self.TTT=[[0,0,0],[0,0,0],[0,0,0]]
        self.i=0
        self.j=False

    def start2(self):
        self.canvas.delete(ALL)
        self.label['text']=('Tic Tac Toe Game')
        self.canvas.bind("<ButtonPress-1>", self.dgplayer)  
        self._board()
        self.TTT=[[0,0,0],[0,0,0],[0,0,0]]
        self.i=0
        self.j=False
        self.trigger=False

    def end(self):
        self.canvas.unbind("<ButtonPress-1>")
        self.j=True
        
    
    def _board(self):
        self.canvas.create_rectangle(0,0,300,300, outline="black")
        self.canvas.create_rectangle(100,300,200,0, outline="black")
        self.canvas.create_rectangle(0,100,300,200, outline="black")
        
    def sgplayer(self,event):
        for k in range(0,300,100):
            for j in range(0,300,100):
                if event.x in range(k,k+100) and event.y in range(j,j+100):
                    if self.canvas.find_enclosed(k,j,k+100,j+100)==():
                        if self.i%2==0:
                            X=(2*k+100)/2
                            Y=(2*j+100)/2
                            X1=int(k/100)
                            Y1=int(j/100)
                            self.canvas.create_oval( X+25, Y+25, X-25, Y-25, width=4, outline="black")
                            self.TTT[Y1][X1]+=1
                            self.i+=1
                        else:                         
                            X=(2*k+100)/2
                            Y=(2*j+100)/2
                            X1=int(k/100)
                            Y1=int(j/100)
                            self.canvas. create_line( X+20, Y+20, X-20, Y-20, width=4, fill="black")
                            self.canvas. create_line( X-20, Y+20, X+20, Y-20, width=4, fill="black")
                            self.TTT[Y1][X1]+=9
                            self.i+=1
        self.check()

    def dgplayer(self,event):
        for k in range(0,300,100):
            for j in range(0,300,100):
                if self.i%2==0:
                    if event.x in range(k,k+100) and event.y in range(j,j+100):
                        if self.canvas.find_enclosed(k,j,k+100,j+100)==():
                            X=(2*k+100)/2
                            Y=(2*j+100)/2
                            X1=int(k/100)
                            Y1=int(j/100)
                            self.canvas.create_oval( X+25, Y+25, X-25, Y-25, width=4, outline="black")
                            self.TTT[Y1][X1]+=1
                            self.i+=1
                            self.check()
                            self.trigger=False                           
                else:
                    print(self.i)
                    self.check()
                    print("checked")
                    self.AIcheck()
                    print("AIchecked")
                    self.trigger=False
                    
                    

                        
                        
    def check(self):
        #horizontal check
        for i in range(0,3):
            if sum(self.TTT[i])==27:
                self.label['text']=('2nd player wins!')
                self.end()
            if sum(self.TTT[i])==3:
                self.label['text']=('1st player wins!')
                self.end()
        #vertical check
        #the matrix below transposes self.TTT so that it could use the sum fucntion again
        self.ttt=[[row[i] for row in self.TTT] for i in range(3)]
        for i in range(0,3):            
            if sum(self.ttt[i])==27:
                self.label['text']=('2nd player wins!')
                self.end()
            if sum(self.ttt[i])==3:
                self.label['text']=('1st player wins!')
                self.end()
        #check for diagonal wins
        if self.TTT[1][1]==9:
            if self.TTT[0][0]==self.TTT[1][1] and self.TTT[2][2]==self.TTT[1][1] :
                self.label['text']=('2nd player wins!')
                self.end()
            if self.TTT[0][2]==self.TTT[1][1] and self.TTT[2][0]==self.TTT[1][1] :
                self.label['text']=('2nd player wins!')
                self.end()
        if self.TTT[1][1]==1:
            if self.TTT[0][0]==self.TTT[1][1] and self.TTT[2][2]==self.TTT[1][1] :
                self.label['text']=('1st player wins!')
                self.end()
            if self.TTT[0][2]==self.TTT[1][1] and self.TTT[2][0]==self.TTT[1][1] :
                self.label['text']=('1st player wins!')
                self.end()
        #check for draws
        if self.j==False:
            a=0
            for i in range(0,3):
                a+= sum(self.TTT[i])
            if a==41:
                self.label['text']=("It's a pass!")
                self.end()

                
    def AIcheck(self):
        #This is built on the self.check function
        self.ttt=[[row[i] for row in self.TTT] for i in range(3)]
        #DEFENSE
        #this is the horizontal checklist    
        for h in range(0,3): 
            k=0
            j=0            
            if sum(self.TTT[h])==2:
                while k <3:
                    if k==h:
                        while j <3:
                            if self.trigger==False:
                                if self.TTT[k][j]==0:
                                    self.cross(j,k)
                                    break
                            j+=1
                    k+=1
        #this is the vertical checklist
        for h in range(0,3):
            k=0
            j=0
            if sum(self.ttt[h])==2:                        
                while k <3:
                    if k==h:
                        while j <3:
                            if self.trigger==False:
                                if self.ttt[k][j]==0:
                                    self.cross(k,j)
                                    break
                            j+=1
                    k+=1                    
        #this is the diagonal checklist
        if self.TTT[1][1]==1:
            if self.TTT[0][0]==1:
                if self.trigger==False:
                    if self.TTT[2][2]==0:
                        self.cross(2,2)
            if self.TTT[0][2]==1:
                if self.trigger==False:
                    if self.TTT[2][0]==0:
                        self.cross(0,2)
            if self.TTT[2][0]==1:
                if self.trigger==False:
                    if self.TTT[0][2]==0:
                        self.cross(2,0)
            if self.TTT[2][2]==1:
                if self.trigger==False:
                    if self.TTT[0][0]==0:
                        self.cross(0,0)
                        
        if self.TTT[1][1]==0:
            if self.trigger==False:
                self.cross(1,1)
                self.trigger=True
        else:
            if self.trigger==False:
                self.randmove()

    def cross(self, k, j):
        # k is the x coords
        # j is the y coords
        X=(200*k+100)/2
        Y=(200*j+100)/2
        X1=int(k)
        Y1=int(j)
        self.canvas. create_line( X+20, Y+20, X-20, Y-20, width=4, fill="black")
        self.canvas. create_line( X-20, Y+20, X+20, Y-20, width=4, fill="black")
        self.TTT[Y1][X1]+=9
        self.check()
        self.i+=1
        self.trigger=True

                

    def randmove(self):
        while True:
            k=(randint(0,2))
            j=(randint(0,2))
            if self.TTT[j][k]==0:
                X=(200*k+100)/2
                Y=(200*j+100)/2
                self.canvas. create_line( X+20, Y+20, X-20, Y-20, width=4, fill="black")
                self.canvas. create_line( X-20, Y+20, X+20, Y-20, width=4, fill="black")
                self.TTT[j][k]+=9
                self.check()
                self.i+=1
                self.trigger=True
                break
            else:
                k=(randint(0,2))*100
                j=(randint(0,2))*100
Example #2
0
class main:
    def __init__(self):
        self.app = Tk()
        self.app.title('Tic Tac Toe')
        #self.app.resizable(width=False, height=False)
        #width and hight of window
        w = 900
        h = 1100
        #width and hight of screen
        ws = self.app.winfo_screenwidth()
        hs = self.app.winfo_screenheight()
        #calculate position
        x = ws / 2 - w / 2
        y = hs / 2 - h / 2
        #place window -> pramaters(visina, dolzina, pozicija x, pozicija y)
        self.app.geometry("%dx%d+%d+%d" % (w, h, x, y))

        #======================================
        self.frame = Frame()  #main frame
        self.frame.pack(fill='both', expand=True)
        self.label = Label(self.frame,
                           text='Tic Tac Toe',
                           height=4,
                           bg='white',
                           fg='blue')
        self.label.pack(fill='both', expand=True)
        #self.label2 = Label(self.frame, text	= 'here', height = 2, bg = 'white', fg = 'blue') odkomentiri samo za develop-------------
        #self.label2.pack(fill='both', expand = True)
        self.canvas = Canvas(self.frame, width=900, height=900)
        self.canvas.pack(fill='both', expand=True)
        self.framepod = Frame(self.frame)  #sub frame
        self.framepod.pack(fill='both', expand=True)
        self.Single = Button(self.framepod,
                             text='Start single player',
                             height=4,
                             command=self.startsingle,
                             bg='white',
                             fg='blue')
        self.Single.pack(fill='both', expand=True, side=RIGHT)
        self.Multi = Button(self.framepod,
                            text='Start double player',
                            height=4,
                            command=self.double,
                            bg='white',
                            fg='blue')
        self.Multi.pack(fill='both', expand=True, side=RIGHT)
        self.board = AI()
        self.draw()

    def double(self):
        #cleans the all simbols from canvas
        self.canvas.delete(ALL)
        self.label['text'] = ('Tic Tac Toe Game')
        self.canvas.bind("<ButtonPress-1>", self.place)
        self.draw()  #---------------------------------------
        self.table = [[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]]
        self.c = 0  #counter
        self.e = False  #flag for end game

    def draw(self):  #draws the outline lines
        self.canvas.create_rectangle(0, 0, 900, 900, outline='black')
        self.canvas.create_rectangle(300, 900, 600, 0, outline='black')
        self.canvas.create_rectangle(0, 300, 900, 600, outline='black')

    def place(self, event):
        for i in range(0, 900, 300):
            for j in range(0, 900, 300):
                if event.x in range(i, i + 300) and event.y in range(
                        j, j + 300):
                    if self.canvas.find_enclosed(i, j, i + 300, j + 300) == ():
                        if self.c % 2 == 0:
                            #calculate points to draw circle
                            x = (2 * i + 300) / 2
                            y = (2 * j + 300) / 2
                            x2 = int(i / 300)
                            y2 = int(j / 300)
                            self.canvas.create_oval(x + 75,
                                                    y + 75,
                                                    x - 75,
                                                    y - 75,
                                                    width=4,
                                                    outline="blue")
                            self.table[y2][x2] = 4
                            self.c += 1
                        else:
                            #calculate points to draw cross
                            x = (2 * i + 300) / 2
                            y = (2 * j + 300) / 2
                            x2 = int(i / 300)
                            y2 = int(j / 300)
                            self.canvas.create_line(x + 60,
                                                    y + 60,
                                                    x - 60,
                                                    y - 60,
                                                    width=4,
                                                    fill="red")
                            self.canvas.create_line(x - 60,
                                                    y + 60,
                                                    x + 60,
                                                    y - 60,
                                                    width=4,
                                                    fill="red")
                            self.table[y2][x2] = 1
                            self.c += 1
        self.check()

    def startsingle(self):
        self.canvas.delete(ALL)
        self.label['text'] = ('Tic Tac Toe Game')
        self.canvas.bind("<ButtonPress-1>", self.placeone)
        self.draw()
        self.board = AI()

    def placeone(self, event):
        player = 'X'
        for i in range(0, 900, 300):
            for j in range(0, 900, 300):
                if event.x in range(i, i + 300) and event.y in range(
                        j, j + 300):
                    if self.canvas.find_enclosed(i, j, i + 300, j + 300) == ():
                        x = (2 * i + 300) / 2
                        y = (2 * j + 300) / 2
                        x2 = int(i / 300)
                        y2 = int(j / 300)
                        self.canvas.create_line(x + 60,
                                                y + 60,
                                                x - 60,
                                                y - 60,
                                                width=4,
                                                fill="red")
                        self.canvas.create_line(x - 60,
                                                y + 60,
                                                x + 60,
                                                y - 60,
                                                width=4,
                                                fill="red")

                        player_move = x2 + 3 * y2  #spremeni
                        self.board.make_move(player_move, player)

        if self.board.complete():
            self.label['text'] = (self.board.winner())
            self.canvas.unbind("ButtonPress-1")
            self.board = AI()
        elif self.board.winner() != None:
            self.label['text'] = (self.board.winner())
            self.canvas.unbind("ButtonPress-1")
            self.board = AI()
        else:
            player = self.board.get_enemy(player)
            computer_move = self.board.determine(self.board, player)
            self.board.make_move(computer_move, player)

            ti = computer_move % 3
            tj = computer_move / 3

            x = (600 * ti + 300) / 2
            y = (600 * tj + 300) / 2
            #self.label2['text'] = str(computer_move) + '  ti ' + str(ti) + ' tj ' + str(tj) + ' y ' + str(y) + ' x ' +str(x)
            self.canvas.create_oval(x + 75,
                                    y + 75,
                                    x - 75,
                                    y - 75,
                                    width=4,
                                    outline="blue")

            if self.board.winner() != None:
                self.label['text'] = (self.board.winner())
                self.canvas.unbind("ButtonPress-1")
                self.board = AI()

    def check(self):
        #checks for win
        #horitontal
        for i in range(3):
            if sum(self.table[i]) == 3:
                self.label['text'] = ('X wins')
                self.end()
            if sum(self.table[i]) == 12:
                self.label['text'] = ('O wins')
                self.end()
        #vertical
        self.vs = [[row[i] for row in self.table] for i in range(3)]
        for i in range(3):
            if sum(self.vs[i]) == 3:
                self.label['text'] = ('X wins')
                self.end()
            if sum(self.vs[i]) == 12:
                self.label['text'] = ('O wins')
                self.end()
        #diagonals
        self.dig1 = 0
        self.dig2 = 0
        for i in range(3):
            self.dig1 += self.table[i][i]
        for i in range(3):
            self.dig2 += self.table[2 - i][i]

        if self.dig1 == 3:
            self.label['text'] = ('X wins')
            self.end()
        if self.dig1 == 12:
            self.label['text'] = ('O wins')
            self.end()
        if self.dig2 == 3:
            self.label['text'] = ('X wins')
            self.end()
        if self.dig2 == 12:
            self.label['text'] = ('O wins')
            self.end()

        #draw
        if self.e == False:
            a = 0
            for i in range(3):
                a += sum(self.table[i])
            if a == 24:  #5 *4 + 4 * 1 --> 5 circles and 4 crosses
                self.label['text'] = ('Draw')
                self.end()

    def end(self):
        self.canvas.unbind("<ButtonPress-1>")
        self.e = True

    def mainloop(self):
        self.app.mainloop()
Example #3
0
class main:

	def __init__ (self):
		self.app = Tk()
		self.app.title('Tic Tac Toe')
		#self.app.resizable(width=False, height=False)
		#width and hight of window
		w = 900
		h = 1100
		#width and hight of screen
		ws = self.app.winfo_screenwidth()
		hs = self.app.winfo_screenheight()
		#calculate position
		x = ws/2 - w/2
		y = hs/2 - h/2
		#place window -> pramaters(visina, dolzina, pozicija x, pozicija y)
		self.app.geometry("%dx%d+%d+%d" % (w,h, x, y))

		#======================================
		self.frame = Frame() #main frame
		self.frame.pack(fill = 'both', expand = True)
		self.label = Label(self.frame, text	= 'Tic Tac Toe', height = 4, bg = 'white', fg = 'blue')
		self.label.pack(fill='both', expand = True)
		#self.label2 = Label(self.frame, text	= 'here', height = 2, bg = 'white', fg = 'blue') odkomentiri samo za develop-------------
		#self.label2.pack(fill='both', expand = True)
		self.canvas = Canvas(self.frame, width = 900, height = 900)
		self.canvas.pack(fill = 'both', expand = True)
		self.framepod = Frame(self.frame)#sub frame
		self.framepod.pack(fill = 'both', expand = True)
		self.Single = Button(self.framepod, text = 'Start single player', height = 4, command = self.startsingle, bg = 'white', fg = 'blue')
		self.Single.pack(fill='both', expand = True, side=RIGHT)
		self.Multi = Button(self.framepod, text = 'Start double player', height = 4, command = self.double, bg = 'white', fg = 'blue')
		self.Multi.pack(fill='both', expand = True, side=RIGHT)
		self.board = AI()
		self.draw()

	def double(self): 
		#cleans the all simbols from canvas
		self.canvas.delete(ALL)
		self.label['text'] = ('Tic Tac Toe Game')
		self.canvas.bind("<ButtonPress-1>", self.place)
		self.draw() #---------------------------------------
		self.table=[[-1,-1,-1],[-1,-1,-1],[-1,-1,-1]]
		self.c=0 #counter
		self.e=False #flag for end game

	def draw(self): #draws the outline lines
		self.canvas.create_rectangle(0,0,900,900, outline='black')
		self.canvas.create_rectangle(300,900,600,0, outline='black')
		self.canvas.create_rectangle(0,300,900,600, outline='black')

	def place(self, event):
		for i in range(0,900,300):
			for j in range(0,900,300):
				if event.x in range(i,i+300) and event.y in range(j, j+300):
					if self.canvas.find_enclosed(i,j,i+300, j+300) == ():
						if self.c % 2 == 0:
							#calculate points to draw circle
							x=(2*i+300)/2
							y=(2*j+300)/2
							x2=int(i/300)
							y2=int(j/300)
							self.canvas.create_oval(x+75,y+75,x-75,y-75, width = 4, outline="blue")
							self.table[y2][x2] = 4
							self.c+=1
						else:
							#calculate points to draw cross
							x=(2*i+300)/2
							y=(2*j+300)/2
							x2=int(i/300)
							y2=int(j/300)
							self.canvas.create_line(x+60,y+60,x-60,y-60, width = 4, fill="red")
							self.canvas.create_line(x-60,y+60,x+60,y-60, width = 4, fill="red")
							self.table[y2][x2] = 1
							self.c+=1
		self.check() 


	def startsingle(self):
		self.canvas.delete(ALL)
		self.label['text'] = ('Tic Tac Toe Game')
		self.canvas.bind("<ButtonPress-1>", self.placeone)
		self.draw()
		self.board = AI()

	def placeone(self, event):
		player = 'X'
		for i in range(0,900,300):
			for j in range(0,900,300):
				if event.x in range(i,i+300) and event.y in range(j, j+300):
					if self.canvas.find_enclosed(i,j,i+300, j+300) == ():
						x=(2*i+300)/2
						y=(2*j+300)/2
						x2=int(i/300)
						y2=int(j/300)
						self.canvas.create_line(x+60,y+60,x-60,y-60, width = 4, fill="red")
						self.canvas.create_line(x-60,y+60,x+60,y-60, width = 4, fill="red")

						
						player_move = x2 + 3*y2 #spremeni
						self.board.make_move(player_move, player)
						
		if self.board.complete():
			self.label['text'] = (self.board.winner())
			self.canvas.unbind("ButtonPress-1")
			self.board = AI()
		elif self.board.winner() != None:
			self.label['text'] = (self.board.winner())
			self.canvas.unbind("ButtonPress-1")
			self.board = AI()
		else:
			player = self.board.get_enemy(player)
			computer_move = self.board.determine(self.board, player)
			self.board.make_move(computer_move, player)

			ti = computer_move % 3
			tj = computer_move / 3

			x=(600*ti+300)/2
			y=(600*tj+300)/2
			#self.label2['text'] = str(computer_move) + '  ti ' + str(ti) + ' tj ' + str(tj) + ' y ' + str(y) + ' x ' +str(x)
			self.canvas.create_oval(x+75,y+75,x-75,y-75, width = 4, outline="blue")
			
			if self.board.winner() != None:
				self.label['text'] = (self.board.winner())
				self.canvas.unbind("ButtonPress-1")
				self.board = AI()

 

	def check(self):
		#checks for win
		#horitontal
		for i in range(3):
			if sum(self.table[i])==3:
				self.label['text'] = ('X wins')
				self.end()
			if sum(self.table[i])==12:
				self.label['text'] = ('O wins')
				self.end()
		#vertical
		self.vs=[[row[i] for row in self.table] for i in range(3)]
		for i in range(3):
			if sum(self.vs[i])==3:
				self.label['text'] = ('X wins')
				self.end()
			if sum(self.vs[i])==12:
				self.label['text'] = ('O wins')
				self.end()
		#diagonals
		self.dig1=0
		self.dig2=0
		for i in range(3):
			self.dig1+=self.table[i][i]
		for i in range(3):
			self.dig2+=self.table[2-i][i]

		if self.dig1==3:
			self.label['text'] = ('X wins')
			self.end()
		if self.dig1==12:
			self.label['text'] = ('O wins')
			self.end()
		if self.dig2==3:
			self.label['text'] = ('X wins')
			self.end()
		if self.dig2==12:
			self.label['text'] = ('O wins')
			self.end()

		#draw
		if self.e==False:
			a=0
			for i in range(3):
				a+=sum(self.table[i])
			if a == 24: #5 *4 + 4 * 1 --> 5 circles and 4 crosses
				self.label['text'] = ('Draw')
				self.end()

	def end(self):
		self.canvas.unbind("<ButtonPress-1>")
		self.e=True

	def mainloop(self):
		self.app.mainloop()
Example #4
0
class main:
    def __init__(self, master):
        self.frame = Frame(master)
        self.frame.pack(fill="both", expand=True)
        self.canvas = Canvas(self.frame, width=300, height=300)
        self.canvas.pack(fill="both", expand=True)
        self.label = Label(self.frame,
                           text='Tic Tac Toe Game',
                           height=6,
                           bg='black',
                           fg='blue')
        self.label.pack(fill="both", expand=True)
        self.frameb = Frame(self.frame)
        self.frameb.pack(fill="both", expand=True)
        self.Start1 = Button(self.frameb,
                             text='Click here to start\ndouble player',
                             height=4,
                             command=self.start1,
                             bg='white',
                             fg='purple')
        self.Start1.pack(fill="both", expand=True, side=RIGHT)
        self.Start2 = Button(self.frameb,
                             text='Click here to start\nsingle player',
                             height=4,
                             command=self.start2,
                             bg='purple',
                             fg='white')
        self.Start2.pack(fill="both", expand=True, side=LEFT)
        self._board()

    def start1(self):
        self.canvas.delete(ALL)
        self.label['text'] = ('Tic Tac Toe Game')
        self.canvas.bind("<ButtonPress-1>", self.sgplayer)
        self._board()
        self.TTT = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
        self.i = 0
        self.j = False

    def start2(self):
        self.canvas.delete(ALL)
        self.label['text'] = ('Tic Tac Toe Game')
        self.canvas.bind("<ButtonPress-1>", self.dgplayer)
        self._board()
        self.TTT = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
        self.i = 0
        self.j = False
        self.trigger = False

    def end(self):
        self.canvas.unbind("<ButtonPress-1>")
        self.j = True

    def _board(self):
        self.canvas.create_rectangle(0, 0, 300, 300, outline="black")
        self.canvas.create_rectangle(100, 300, 200, 0, outline="black")
        self.canvas.create_rectangle(0, 100, 300, 200, outline="black")

    def sgplayer(self, event):
        for k in range(0, 300, 100):
            for j in range(0, 300, 100):
                if event.x in range(k, k + 100) and event.y in range(
                        j, j + 100):
                    if self.canvas.find_enclosed(k, j, k + 100, j + 100) == ():
                        if self.i % 2 == 0:
                            X = (2 * k + 100) / 2
                            Y = (2 * j + 100) / 2
                            X1 = int(k / 100)
                            Y1 = int(j / 100)
                            self.canvas.create_oval(X + 25,
                                                    Y + 25,
                                                    X - 25,
                                                    Y - 25,
                                                    width=4,
                                                    outline="black")
                            self.TTT[Y1][X1] += 1
                            self.i += 1
                        else:
                            X = (2 * k + 100) / 2
                            Y = (2 * j + 100) / 2
                            X1 = int(k / 100)
                            Y1 = int(j / 100)
                            self.canvas.create_line(X + 20,
                                                    Y + 20,
                                                    X - 20,
                                                    Y - 20,
                                                    width=4,
                                                    fill="black")
                            self.canvas.create_line(X - 20,
                                                    Y + 20,
                                                    X + 20,
                                                    Y - 20,
                                                    width=4,
                                                    fill="black")
                            self.TTT[Y1][X1] += 9
                            self.i += 1
        self.check()

    def dgplayer(self, event):
        for k in range(0, 300, 100):
            for j in range(0, 300, 100):
                if self.i % 2 == 0:
                    if event.x in range(k, k + 100) and event.y in range(
                            j, j + 100):
                        if self.canvas.find_enclosed(k, j, k + 100,
                                                     j + 100) == ():
                            X = (2 * k + 100) / 2
                            Y = (2 * j + 100) / 2
                            X1 = int(k / 100)
                            Y1 = int(j / 100)
                            self.canvas.create_oval(X + 25,
                                                    Y + 25,
                                                    X - 25,
                                                    Y - 25,
                                                    width=4,
                                                    outline="black")
                            self.TTT[Y1][X1] += 1
                            self.i += 1
                            self.check()
                            self.trigger = False
                else:
                    print(self.i)
                    self.check()
                    print("checked")
                    self.AIcheck()
                    print("AIchecked")
                    self.trigger = False

    def check(self):
        #horizontal check
        for i in range(0, 3):
            if sum(self.TTT[i]) == 27:
                self.label['text'] = ('2nd player wins!')
                self.end()
            if sum(self.TTT[i]) == 3:
                self.label['text'] = ('1st player wins!')
                self.end()
        #vertical check
        #the matrix below transposes self.TTT so that it could use the sum fucntion again
        self.ttt = [[row[i] for row in self.TTT] for i in range(3)]
        for i in range(0, 3):
            if sum(self.ttt[i]) == 27:
                self.label['text'] = ('2nd player wins!')
                self.end()
            if sum(self.ttt[i]) == 3:
                self.label['text'] = ('1st player wins!')
                self.end()
        #check for diagonal wins
        if self.TTT[1][1] == 9:
            if self.TTT[0][0] == self.TTT[1][1] and self.TTT[2][2] == self.TTT[
                    1][1]:
                self.label['text'] = ('2nd player wins!')
                self.end()
            if self.TTT[0][2] == self.TTT[1][1] and self.TTT[2][0] == self.TTT[
                    1][1]:
                self.label['text'] = ('2nd player wins!')
                self.end()
        if self.TTT[1][1] == 1:
            if self.TTT[0][0] == self.TTT[1][1] and self.TTT[2][2] == self.TTT[
                    1][1]:
                self.label['text'] = ('1st player wins!')
                self.end()
            if self.TTT[0][2] == self.TTT[1][1] and self.TTT[2][0] == self.TTT[
                    1][1]:
                self.label['text'] = ('1st player wins!')
                self.end()
        #check for draws
        if self.j == False:
            a = 0
            for i in range(0, 3):
                a += sum(self.TTT[i])
            if a == 41:
                self.label['text'] = ("It's a pass!")
                self.end()

    def AIcheck(self):
        #This is built on the self.check function
        self.ttt = [[row[i] for row in self.TTT] for i in range(3)]
        #DEFENSE
        #this is the horizontal checklist
        for h in range(0, 3):
            k = 0
            j = 0
            if sum(self.TTT[h]) == 2:
                while k < 3:
                    if k == h:
                        while j < 3:
                            if self.trigger == False:
                                if self.TTT[k][j] == 0:
                                    self.cross(j, k)
                                    break
                            j += 1
                    k += 1
        #this is the vertical checklist
        for h in range(0, 3):
            k = 0
            j = 0
            if sum(self.ttt[h]) == 2:
                while k < 3:
                    if k == h:
                        while j < 3:
                            if self.trigger == False:
                                if self.ttt[k][j] == 0:
                                    self.cross(k, j)
                                    break
                            j += 1
                    k += 1
        #this is the diagonal checklist
        if self.TTT[1][1] == 1:
            if self.TTT[0][0] == 1:
                if self.trigger == False:
                    if self.TTT[2][2] == 0:
                        self.cross(2, 2)
            if self.TTT[0][2] == 1:
                if self.trigger == False:
                    if self.TTT[2][0] == 0:
                        self.cross(0, 2)
            if self.TTT[2][0] == 1:
                if self.trigger == False:
                    if self.TTT[0][2] == 0:
                        self.cross(2, 0)
            if self.TTT[2][2] == 1:
                if self.trigger == False:
                    if self.TTT[0][0] == 0:
                        self.cross(0, 0)

        if self.TTT[1][1] == 0:
            if self.trigger == False:
                self.cross(1, 1)
                self.trigger = True
        else:
            if self.trigger == False:
                self.randmove()

    def cross(self, k, j):
        # k is the x coords
        # j is the y coords
        X = (200 * k + 100) / 2
        Y = (200 * j + 100) / 2
        X1 = int(k)
        Y1 = int(j)
        self.canvas.create_line(X + 20,
                                Y + 20,
                                X - 20,
                                Y - 20,
                                width=4,
                                fill="black")
        self.canvas.create_line(X - 20,
                                Y + 20,
                                X + 20,
                                Y - 20,
                                width=4,
                                fill="black")
        self.TTT[Y1][X1] += 9
        self.check()
        self.i += 1
        self.trigger = True

    def randmove(self):
        while True:
            k = (randint(0, 2))
            j = (randint(0, 2))
            if self.TTT[j][k] == 0:
                X = (200 * k + 100) / 2
                Y = (200 * j + 100) / 2
                self.canvas.create_line(X + 20,
                                        Y + 20,
                                        X - 20,
                                        Y - 20,
                                        width=4,
                                        fill="black")
                self.canvas.create_line(X - 20,
                                        Y + 20,
                                        X + 20,
                                        Y - 20,
                                        width=4,
                                        fill="black")
                self.TTT[j][k] += 9
                self.check()
                self.i += 1
                self.trigger = True
                break
            else:
                k = (randint(0, 2)) * 100
                j = (randint(0, 2)) * 100