Oon tässä koodaillu ristinollaa jonku tutoriaalin pohjalta, ja nyt on käytnyt ilmi, että toimii muuten paitsi, kun tietokone voittaa ohjelma ei keskeydy vaan voin silti syöttää omat siirtoni ja täten myös voittaa, koodi on siis pythonia
import random board = [0,1,2, 3,4,5, 6,7,8] def nayta(): print board[0], '|',board[1],'|',board[2] print '----------' print board[3], '|',board[4],'|',board[5] print '----------' print board[6], '|',board[7],'|',board[8] def checkLine(char, spot1, spot2, spot3): if (board[spot1] == char) and (board[spot2] == char) and (board [spot3] == char) : return True else: return False def checkAll(char): ret = False if checkLine(char, 0, 1, 2): ret = True if checkLine(char, 0,3, 6): ret = True if checkLine(char, 1, 4, 7): ret = True if checkLine(char, 2, 5, 8): ret = True if checkLine(char, 6, 7, 8): ret = True if checkLine(char, 3, 4, 5): ret = True if checkLine(char, 2, 4, 6): ret = True if checkLine(char, 0, 4, 8): ret = True return ret moves = range(9) numindex = 1 ratkennut = False while moves: nayta() input = raw_input("Sijoita x: ") try: val = int(input) input = int(input) except ValueError: print("Syota numero") input = raw_input("Sijoita x: ") input = int(input) if input in moves: moves.remove(input) if board [input] != 'x' and board[input] != 'o': board[input] = 'x' if checkAll('x') == True: print "~~ X Voitti ~~" ratkennut = True break; while moves: random.seed() #Arpooo vastustajan liikkeen opponent = random.choice(moves) moves.remove(opponent) if board[opponent] != 'o' and board[opponent] != 'x': board[opponent] = 'o' if checkAll('o') == True: print "~~ O Voitti ~~" ratkennut = True break; else: print 'Tama paikka on varattu' else: print "Tasapeli"
En jaksa edes lukea koodia, koska ratkaisu on niin itsestään selvä. Tarkista tarvittavissa paikoissa pelin tila ja salli käyttäjän siirrot vain silloin, kun tila on sopiva.
Tiloja voi olla kaksi tai useampia. Loogisimmat kaksi vaadittua tilaa: peli käynnissä, peli ei käynnissä. Miksi tämä piti sanoa erikseen?
Siis tarkoitin sitä että peli ei lopu siihen kun vasustaja voittaa vaan jatkuu siitä eteenpäin..
Pelissäsi on silmukka ”while moves”, jolloin on täysin luonnollista, että peli jatkuu niin kauan, kuin mahdollisia siirtoja on jäljellä (eli lauta ei ole täynnä). Jos haluat, että peli loppuu voittoon, sinun pitää silmukan ehdossa tarkistaa, että peliä ei ole vielä voitettu, tai sinun pitää voiton yhteydessä tyhjentää mahdollisten siirtojen lista.
Bonusvinkkinä lyhyempi suoratarkistusfunktio:
def checkLine(char, spot1, spot2, spot3): return char == board[spot1] == board[spot2] == board[spot3]
checkAll tarkistaa turhaan kaikki suorat joka kerta. Lisäksi random.seed() on tarpeeton, etenkin silmukan sisällä.
Halutessasi voisit koodata siirron kyselyn while-silmukkaan, josta ei poistuta ennen oikean arvon saamista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.