Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #leoleosuper's Tic-Tac-Toe
- import turtle
- import random
- import time
- end=0
- TL="N"
- ML="N"
- BL="N"
- TM="N"
- MM="N"
- BM="N"
- TR="N"
- MR="N"
- BR="N"
- game="play"
- ff="Verdana",88,"bold"
- #Makes board
- def write(color):
- global wn
- global Leo
- wn=turtle.Screen()
- wn.setup(500,500)
- wn.bgcolor("DeepSkyBlue")
- Leo=turtle.Turtle()
- Leo.pensize(15)
- Leo.speed(100)
- Leo.color(color)
- moveTo(Leo,0,-240)
- Leo.write("Tic-Tac-Toe",False,align="center",font=("Verdana",20,"bold"))
- line(0,300,-175,100)
- line(0,300,-175,0)
- line(-90,300,-75,200)
- line(0,300,25,200)
- #Moves turtle to (x,y)
- def moveTo(tur,x,y):
- tur.penup()
- tur.goto(x,y)
- tur.pendown()
- #Rematch
- def again(re):
- global game
- global TL
- global ML
- global BL
- global TM
- global MM
- global BM
- global TR
- global MR
- global BR
- global turn
- global xyz
- global end
- global player
- if(re=="1" or re=="y" or re=="yes" or re=="Y" or re=="Yes" or re=="one" or re=="YES"
- or re=="One" or re=="ONE"):
- write("forestGreen")
- TL="N"
- ML="N"
- BL="N"
- TM="N"
- MM="N"
- BM="N"
- TR="N"
- MR="N"
- BR="N"
- game="play"
- turn = xyz
- end=0
- else:
- player="end"
- #Checks if game is won by ether side, then displays so
- def chess(p):
- global game
- if (game == "win" + p):
- time.sleep(4)
- wn.bye()
- re=input(p + " Wins! Rematch? 1/y/yes: ")
- again(re)
- #Draws a line
- def line(n,m,x,y):
- Leo.color("forestGreen")
- Leo.left(n)
- moveTo(Leo,x,y)
- Leo.forward(m)
- #Helps the check command
- def helpch(K):
- global TL
- global ML
- global BL
- global TM
- global MM
- global BM
- global TR
- global MR
- global BR
- global game
- if(TL==K):
- if(ML==K and BL==K):
- game="win" + K
- line(0,300,-125,200)
- return 1
- if(MM==K and BR==K):
- line(45,425,-175,200)
- game="win" + K
- return 1
- if(TM==K and TR==K):
- game="win" + K
- line(90,300,-175,150)
- return 1
- if(TM==K):
- if(MM==K and BM==K):
- game="win" + K
- line( 0,300,-25,200)
- return 1
- if(TR==K):
- if(MR==K and BR==K):
- game="win" + K
- line(0,300,75,200)
- return 1
- if(MM==K and BL==K):
- game="win" + K
- line(-45,425,125,200)
- return 1
- if(ML==K):
- if(MM==K and MR==K):
- game="win" + K
- line(90,300,-175,50)
- return 1
- if(BL==K):
- if(BM==K and BR==K):
- game="win" + K
- line(90,300,-175,-50)
- return 1
- return 0
- #Checks if ether team has won
- def check():
- global TL
- global ML
- global BL
- global TM
- global MM
- global BM
- global TR
- global MR
- global BR
- global game
- E = 0
- E = helpch("X")
- if (E==0):
- E = helpch("O")
- if (E==1):
- return 1
- if(TL is not "N" and ML is not "N" and BL is not "N" and TM is not "N" and MM is not "N"
- and BM is not "N" and TR is not "N" and MR is not "N" and BR is not "N"):
- game="Tie"
- print("endw")
- return 1
- return 0
- #Uses Bot's turn to block enemy from winning
- def smartMove(y,p,e):
- global TL
- global ML
- global BL
- global TM
- global MM
- global BM
- global TR
- global MR
- global BR
- global itWorks
- global turn
- if((TL=="N" and TR==p and TM==p) or (MM==p and BR==p and TL=="N") or
- (ML==p and BL==p and TL=="N")):
- moveTo(Leo,-127,82)
- Leo.write(p,False,align="center",font=ff)
- TL=p
- itWorks=1
- turn=y
- return 1
- if((ML=="N" and TL==p and BL==p) or
- (MM==p and MR==p and ML=="N")):
- moveTo(Leo,-127,-18)
- Leo.write(p,False,align="center",font=ff)
- ML=p
- itWorks=1
- turn=y
- return 1
- if((BL=="N" and TL==p and ML==p) or (BM==p and BR==p and BL=="N") or
- (MM==p and TR==p and BL=="N")):
- moveTo(Leo,-127,-120)
- Leo.write(p,False,align="center",font=ff)
- BL=p
- itWorks=1
- turn=y
- return 1
- if((TM=="N" and TR==p and TL==p) or
- (MM==p and BM==p and TM=="N")):
- moveTo(Leo,-24,82)
- Leo.write(p,False,align="center",font=ff)
- TM=p
- itWorks=1
- turn=y
- return 1
- if((MM=="N" and TL==p and BR==p) or (MM=="N" and BL==p and TR==p) or
- (MM=="N" and TM==p and BM==p) or (MM=="N" and ML==p and MR==p)):
- moveTo(Leo,-24,-18)
- Leo.write(p,False,align="center",font=ff)
- MM=p
- itWorks=1
- turn=y
- return 1
- if((BM=="N" and BR==p and BL==p) or (MM==p and TM==p and BM=="N")):
- moveTo(Leo,-24,-120)
- Leo.write(p,False,align="center",font=ff)
- BM=p
- itWorks=1
- turn=y
- return 1
- if((TR=="N" and TM==p and TL==p) or (MM==p and BL==p and TR=="N") or
- (MR==p and BR==p and TR=="N")):
- moveTo(Leo,77,82)
- Leo.write(p,False,align="center",font=ff)
- TR=p
- itWorks=1
- turn=y
- return 1
- if((MR=="N" and TR==p and BR==p) or (MM==p and ML==p and MR=="N")):
- moveTo(Leo,77,-18)
- Leo.write(p,False,align="center",font=ff)
- MR=p
- itWorks=1
- turn=y
- return 1
- if((BR=="N" and BM==p and BL==p) or (MM==p and TL==p and BR=="N") or
- (MR==p and TR==p and BR=="N")):
- moveTo(Leo,77,-120)
- Leo.write(p,False,align="center",font=ff)
- BR=p
- itWorks=1
- turn=y
- return 1
- if((TL=="N" and TR==e and TM==e) or (MM==e and BR==e and TL=="N") or
- (ML==e and BL==e and TL=="N")):
- moveTo(Leo,-127,82)
- Leo.write(p,False,align="center",font=ff)
- TL=p
- itWorks=1
- turn=y
- return 1
- if((ML=="N" and TL==e and BL==e) or (MM==e and MR==e and ML=="N")):
- moveTo(Leo,-127,-18)
- Leo.write(p,False,align="center",font=ff)
- ML=p
- itWorks=1
- turn=y
- return 1
- if((BL=="N" and TL==e and ML==e) or (BM==e and BR==e and BL=="N") or
- (MM==e and TR==e and BL=="N")):
- moveTo(Leo,-127,-120)
- Leo.write(p,False,align="center",font=ff)
- BL=p
- itWorks=1
- turn=y
- return 1
- if((TM=="N" and TR==e and TL==e) or (MM==e and BM==e and TM=="N")):
- moveTo(Leo,-24,82)
- Leo.write(p,False,align="center",font=ff)
- TM=p
- itWorks=1
- turn=y
- return 1
- if((MM=="N" and TL==e and BR==e) or (MM=="N" and BL==e and TR==e) or
- (MM=="N" and TM==e and BM==e) or (MM=="N" and ML==e and MR==e)):
- moveTo(Leo,-24,-18)
- Leo.write(p,False,align="center",font=ff)
- MM=p
- itWorks=1
- turn=y
- return 1
- if((BM=="N" and BR==e and BL==e) or (MM==e and TM==e and BM=="N")):
- moveTo(Leo,-24,-120)
- Leo.write(p,False,align="center",font=ff)
- BM=p
- itWorks=1
- turn=y
- return 1
- if((TR=="N" and TM==e and TL==e) or (MM==e and BL==e and TR=="N") or
- (MR==e and BR==e and TR=="N")):
- moveTo(Leo,77,82)
- Leo.write(p,False,align="center",font=ff)
- TR=p
- itWorks=1
- turn=y
- return 1
- if((MR=="N" and TR==e and BR==e) or (MM==e and ML==e and MR=="N")):
- moveTo(Leo,77,-18)
- Leo.write(p,False,align="center",font=ff)
- MR=p
- itWorks=1
- turn=y
- return 1
- if((BR=="N" and BM==e and BL==e) or (MM==e and TL==e and BR=="N") or
- (MR==e and TR==e and BR=="N")):
- moveTo(Leo,77,-120)
- Leo.write(p,False,align="center",font=ff)
- BR=p
- itWorks=1
- turn=y
- return 1
- #Bot's turn
- def CPUTurn(pla,z,p,e):
- plac=pla
- global itWorks
- global turn
- global TL
- global ML
- global BL
- global TM
- global MM
- global BM
- global TR
- global MR
- global BR
- de=smartMove(z,p,e)
- if (de==1):
- turn = z
- return z
- if(plac==1 and TL == "N"):
- moveTo(Leo,-127,82)
- Leo.write(p,False,align="center",font=ff)
- TL=p
- itWorks=1
- turn = z
- return z
- if(plac==2 and ML == "N"):
- moveTo(Leo,-127,-18)
- Leo.write(p,False,align="center",font=ff)
- ML=p
- itWorks=1
- turn = z
- return z
- if(plac==3 and BL == "N"):
- moveTo(Leo,-127,-120)
- Leo.write(p,False,align="center",font=ff)
- BL=p
- itWorks=1
- turn = z
- return z
- if(plac==4 and TM == "N"):
- moveTo(Leo,-24,82)
- Leo.write(p,False,align="center",font=ff)
- TM=p
- itWorks=1
- turn = z
- return z
- if(plac==5 and MM == "N"):
- moveTo(Leo,-24,-18)
- Leo.write(p,False,align="center",font=ff)
- MM=p
- itWorks=1
- turn = z
- return z
- if(plac==6 and BM == "N"):
- moveTo(Leo,-24,-120)
- Leo.write(p,False,align="center",font=ff)
- BM=p
- itWorks=1
- turn = z
- return z
- if(plac==7 and TR == "N"):
- moveTo(Leo,77,82)
- Leo.write(p,False,align="center",font=ff)
- TR=p
- itWorks=1
- turn = z
- return z
- if(plac==8 and MR == "N"):
- moveTo(Leo,77,-18)
- Leo.write(p,False,align="center",font=ff)
- MR=p
- itWorks=1
- turn = z
- return z
- if(plac==9 and BR == "N"):
- moveTo(Leo,77,-120)
- Leo.write(p,False,align="center",font=ff)
- BR=p
- itWorks=1
- turn = z
- return z
- #Player's turn
- def Xmove(x,y,p,z):
- global turn
- global TL
- global ML
- global BL
- global TM
- global MM
- global BM
- global TR
- global MR
- global BR
- if (-176<x<-75):
- if (100<y<201 and TL=="N"):
- moveTo(Leo,-127,82)
- Leo.write(p,False,align="center",font=ff)
- TL=p
- turn = z
- if (-1<y<101 and ML=="N"):
- moveTo(Leo,-127,-18)
- Leo.write(p,False,align="center",font=ff)
- ML=p
- turn = z
- if (-100<y<0 and BL=="N"):
- moveTo(Leo,-127,-118)
- Leo.write(p,False,align="center",font=ff)
- BL=p
- turn = z
- elif (-76<x<25):
- if (100<y<201 and TM=="N"):
- moveTo(Leo,-24,82)
- Leo.write(p,False,align="center",font=ff)
- TM=p
- turn = z
- if (-1<y<101 and MM=="N"):
- moveTo(Leo,-24,-18)
- Leo.write(p,False,align="center",font=ff)
- MM=p
- turn = z
- if (-100<y<0 and BM=="N"):
- moveTo(Leo,-24,-118)
- Leo.write(p,False,align="center",font=ff)
- BM=p
- turn = z
- elif (24<x<125):
- if (100<y<201 and TR=="N"):
- moveTo(Leo,77,82)
- Leo.write(p,False,align="center",font=ff)
- TR=p
- turn = z
- if (-1<y<101 and MR=="N"):
- moveTo(Leo,77,-18)
- Leo.write(p,False,align="center",font=ff)
- MR=p
- turn = z
- if (-100<y<0 and BR=="N"):
- moveTo(Leo,77,-118)
- Leo.write(p,False,align="center",font=ff)
- BR=p
- turn = z
- else:
- print("Not in bounds.")
- #Main function
- def display(x,y):
- wn.onclick(None)
- global turn
- global place
- global game
- global TL
- global ML
- global BL
- global TM
- global MM
- global BM
- global TR
- global MR
- global BR
- global player
- global itWorks
- global end
- if(player=="2"):
- if (turn==1):
- Leo.color("Fuchsia")
- Xmove(x,y,"X",0)
- check()
- else:
- Leo.color("SteelBlue")
- Xmove(x,y,"O",1)
- check()
- if (player=="1"):
- if (turn==1):
- Leo.color("Fuchsia")
- Xmove(x,y,"X",0)
- end=check()
- if (turn==0 and end==0):
- Leo.color("SteelBlue")
- itWorks=0
- while (itWorks==0):
- pla=random.randint(1,9)
- turn=CPUTurn(pla,1,"O","X")
- end=check()
- if (player=="0"):
- if (turn==1 and end==0):
- Leo.color("Fuchsia")
- itWorks=0
- while (itWorks==0):
- pla=random.randint(1,9)
- CPUTurn(pla,0,"X","O")
- end=check()
- if (turn==0 and end==0):
- Leo.color("SteelBlue")
- itWorks=0
- while (itWorks==0):
- pla=random.randint(1,9)
- CPUTurn(pla,1,"O","X")
- end=check()
- chess("O")
- chess("X")
- if (game == "Tie"):
- time.sleep(3)
- wn.bye()
- re=input("Nobody wins. Rematch? 1/y/yes: ")
- again(re)
- if (player=="end"):
- print("No rematch. GGnoRe")
- player="end"
- if (end == 0):
- wn.onclick(display)
- #Main lines for function, starts it up.
- print("Single or Multiplayer?")
- ad=0
- player="2"
- turn=1
- game=0
- xyz=1
- derp=input("Everything but 1, single, singleplayer, variants thereof, or 0 will be multiplayer: ")
- if(derp=="0"):
- player="0"
- if(derp=="single" or derp=="1" or derp=="one" or derp=="singleplayer" or derp=="Single" or
- derp=="One" or derp=="Singleplayer" or derp=="SinglePlayer" or derp=="singlePlayer"):
- player="1"
- ad=input("Cpu or you first? Cpu and variants thereof will have CPU as X: ")
- if(ad=="Cpu" or ad=="CPU" or ad=="cpu" or ad=="Computer" or ad=="computer"):
- turn=0
- xyz=0
- wn=turtle.Screen()
- Leo=turtle.Turtle()
- write("ForestGreen")
- if(ad=="Cpu" or ad=="CPU" or ad=="cpu" or ad=="Computer" or ad=="computer"):
- display(-300,-300)
- wn.onclick(display)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement