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