import pygame, sys
import numpy as np

pygame.init()

##mitat
LEVEYS = 600
KORKEUS = 600
VIIVA_LEVEYS = 3

##värit
PUNAINEN = (255, 0, 0)
TAUSTA_VARI = (45, 45, 45)
VIIVA_VARI = (70, 70, 70)
YMPYRA_VARI = (255, 255, 255)
RISTI_VARI = (90,90,90)

POYTA_RIVIT = 3
POYTA_RIVIT2 = 3

YMPYRA_R = 60
YMPYRA_LEVEYS =15
RISTI_LEVEYS = 25
VALI = 55

screen = pygame.display.set_mode( (LEVEYS,KORKEUS) )
pygame.display.set_caption(”Ristinolla”)
screen.fill(TAUSTA_VARI)

#pöytä

poyta = np.zeros( (POYTA_RIVIT , POYTA_RIVIT2) )

##funktiot

def piirra_merkit():
for rivi in range(POYTA_RIVIT):
for linja in range(POYTA_RIVIT2):
if poyta[rivi][linja] == 1:
pygame.draw.circle(screen, YMPYRA_VARI, (int(linja * 200 + 100), int(rivi * 200 + 100)), YMPYRA_R, YMPYRA_LEVEYS)
elif poyta[rivi][linja] == 2:
pygame.draw.line(screen, RISTI_VARI, (linja *200 + VALI, rivi * 200 + 200-VALI),(linja * 200 + 200 – VALI, rivi * 200 + VALI), RISTI_LEVEYS)
pygame.draw.line(screen, RISTI_VARI, (linja *200 + VALI, rivi * 200 + VALI), (linja * 200 + 200-VALI, rivi * 200 + 200 – VALI),RISTI_LEVEYS)

def viivat():
pygame.draw.line( screen, VIIVA_VARI, (0,200),(600,200),VIIVA_LEVEYS )
pygame.draw.line( screen, VIIVA_VARI, (0,400),(600,400),VIIVA_LEVEYS )
pygame.draw.line( screen, VIIVA_VARI, (200,0),(200,600),VIIVA_LEVEYS )
pygame.draw.line( screen, VIIVA_VARI, (400,0),(400,600),VIIVA_LEVEYS )

def merkkaa_ruutu(rivi,linja,pelaaja):
poyta[rivi][linja] = pelaaja

def vapaa_ruutu(rivi, linja):
return poyta [rivi][linja] == 0

def poyta_taynna():
for rivi in range(POYTA_RIVIT):
for linja in range(POYTA_RIVIT2):
if poyta[rivi][linja] == 0:
return False
return True

def voiton_tarkistus(pelaaja):
##vertikaalinen
for linja in range(POYTA_RIVIT2):
if poyta[0][linja] == pelaaja and poyta[1][linja] == pelaaja and poyta[2][linja] == pelaaja:
voitto_vert_viiva(linja,pelaaja)
return True

##horizontaalinen
for rivi in range(POYTA_RIVIT):
if poyta[rivi][0] == pelaaja and poyta[rivi][1] == pelaaja and poyta[rivi][2] == pelaaja:
voitto_hori_viiva(rivi, pelaaja)
return True

## poikittain
if poyta[2][0] == pelaaja and poyta [1][1] == pelaaja and poyta[0][2]== pelaaja:
piirra_poikittain(pelaaja)
return True

##poikittain2
if poyta [0][0] == pelaaja and poyta[1][1] == pelaaja and poyta[2][2] == pelaaja:
piirra_poikittain2(pelaaja)
return True

return False

def voitto_vert_viiva(linja, pelaaja):
posX = linja * 200 + 100
if pelaaja == 1:
vari = YMPYRA_VARI
elif pelaaja == 2:
vari = RISTI_VARI

pygame.draw.line(screen, vari, (posX, 15), (posX, KORKEUS – 15), 15)

def voitto_hori_viiva(row, pelaaja):
posY = rivi * 200 + 100

if pelaaja == 1:
vari = YMPYRA_VARI
elif pelaaja == 2:
vari == RISTI_VARI

pygame.draw.line(screen, color, (15, posY),(LEVEYS – 15, posY), 15 )

def piirra_poikittain(pelaaja):
if pelaaja == 1:
vari = YMPYRA_VARI
elif pelaaja == 2:
vari == RISTI_VARI

pygame.draw.line(screen, vari, (15, KORKEUS – 15), (LEVEYS-15, 15), 15)

def piirra_poikittain2(pelaaja):
if pelaaja == 1:
vari = YMPYRA_VARI
elif pelaaja == 2:
vari == RISTI_VARI

pygame.draw.line(screen, vari,(15, 15), (LEVEYS-15, KORKEUS – 15), 15)

def uusiks():
screen.fill(TAUSTA_VARI)
viivat()
pelaaja = 1
for rivi in range (POYTA_RIVIT):
for linja in range(POYTA_RIVIT2):
poyta[rivi][linja] = 0

viivat()

pelaaja = 1
peli_ohi = False

##mainlooppi

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()

if event.type == pygame.MOUSEBUTTONDOWN and not peli_ohi:

mouseX = event.pos[0] # x
mouseY = event.pos[1] # y

painettu_rivi = int(mouseY // 200)
painettu_linja = int(mouseX // 200)

if vapaa_ruutu(painettu_rivi, painettu_linja):
if pelaaja == 1:
merkkaa_ruutu(painettu_rivi, painettu_linja, 1)
if voiton_tarkistus( pelaaja ):
peli_ohi = True
pelaaja = pelaaja % 2 + 1

elif pelaaja == 2:
merkkaa_ruutu(painettu_rivi, painettu_linja, 2)
if voiton_tarkistus ( pelaaja ):
peli_ohi = True
pelaaja = 1

piirra_merkit()

if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
uusiks()
pelaaja = 1
peli_ohi = False