Permalänk
Medlem

Python hjälp

Hejsan

Jag är ny när det gäller programmering och nu har jag skrivit en kod i python som representerar spelet tic tac toe. Men den gör inte riktigt som jag vill. Jag vill att datorn ska försöka förhindra den andra från att vinna, och det ska dessutom kunna bli oavgjort och att det då printas ut "It's a tie" eller nåt liknande, men jag har inte lyckats. Finns det någon som skulle kunna hjälpa mig med koden? Jag har kämpst länge med det.
Tack

Kod:

--------------------------------------------------------------------------------

import random

Board = ['1 ', '2', '3 ', '4', '5 ', '6', '7 ', '8', '9 ']

EMPTY = "_"
X = "X"
O = "O"
TIE = "TIE"
NUM_SQUARES = 9
X = player
computer = O

def Playboard ():
XRange for rx in (0.3):
rx = r * 3
print '|% s |% s |% s |'% (board [r 0], board [r +1], board [r 2])
print

def Win ():
a, b, c, d, e, f, g, h, i = Board
winlist = [(a, b, c), (d, e, f), (g, h, i), (a, d, g), (b, e, h), (c, f, and )
(A, e, i), (g, e, c)]
winning = False
for the in winlist:
f in [0] == in [1] == in [2]:
winning = w [0]

winning return

playerwin = False
Run = True
while Run:
Playboard ()

choice = True
while choice:
play = raw_input ("Make a move, 1-9")
play.lower f () in ["quit", "exit", "close", "end"]:
choice = Run = False

try:
play = int (play)
int f (Board [play-1]) == play:
Board [play-1] = 'X'
choice = False
Except:
pass

Win f ():
playerwin = True
Playboard ()
print "You Win!"
Run = False

f playerwin == False:
Moves = []
XRange for n in (0.9):
if board [n] == str (n +1):
Moves.append (str (n))

Random.randint X = (0, len (Moves) -1)
X = Moves [X]
Board [int (X)] = "O"

Win f ():
#if all ([et al ['X', 'O'] for i in Board]):
# Print "REMI"
# Playerwin = True
# Run = False
Playboard ()
print "Computer Win!"
Run = False

Permalänk
Medlem

Använd [ code][ /code] taggar så tabbar bevaras i koden, nästan omöjligt att läsa den som den är nu.

Allvarligt talat så ser din kod hemsk ut... Många helt obegripliga saker.

Kan rekommendera http://diveintopython.org/ , extremt bra bok för python programmering!

Permalänk

Måste hålla med Lonsas. Svårt att förstå vad du vill ska hända med vissa stycken.

Den där boken låter som en bra idé.
Sen rekommenderar jag att du skriver lite kod i taget och tester ofta.

Permalänk
Medlem

det är inte så att det inte går att spela, den e bara lite knasig och behöver fixas till.

import random Board = ["1","2","3","4","5","6","7","8","9"] EMPTY = "_" X = "X" O = "O" TIE = "TIE" NUM_SQUARES = 9 player = X computer = O def playboard(): for rx in xrange(0,3): r = rx * 3 print '| %s | %s | %s |' %(Board[r+0],Board[r+1],Board[r+2]) print def Win(): a,b,c,d,e,f,g,h,i = Board winlist = [(a,b,c), (d,e,f), (g,h,i), (a,d,g,), (b,e,h), (c,f,i), (a,e,i), (g,e,c)] winning = False for w in winlist: if w[0]==w[1]==w[2]: winning = w[0] return winning playerwin = False Run = True while Run: playboard() choice = True while choice: play = raw_input("Make a move, 1-9: ") if play.lower() in ["quit","exit","close","end"]: choice = Run = False try: play = int(play) if int(Board[play-1]) == play: Board[play-1] = "X" choice = False except: pass if Win(): playerwin = True playboard() print "You Win!" Run = False if playerwin == False: Moves = [] for n in xrange(0,9): if Board[n] == str(n+1): Moves.append(str(n)) X = random.randint(0,len(Moves)-1) X = Moves[X] Board[int(X)] = "O" if Win(): #if all([i in ['X','O'] for i in Board]): #print "REMI!" #playerwin = True #Run = False playboard() print "Computer Win!" Run = False

Permalänk
Medlem

För tie, så kollar du om det finns några moves datorn kan göra innan den försöker göra något
if(len(Moves)>0):

if playerwin == False: Moves = [] for n in xrange(0,9): if Board[n] == str(n+1): Moves.append(str(n)) if(len(Moves)>0): X = random.randint(0,len(Moves)-1) X = Moves[X] Board[int(X)] = "O" if Win(): #if all([i in ['X','O'] for i in Board]): #print "REMI!" #playerwin = True #Run = False playboard() print "Computer Win!" Run = False else: print "It's a tie" Run= False

För att göra motståndaren lite smartare så behöver du göra ungefär som du gör när du kollar om någon vunnit - du sätter upp scenarion och därefter bestämmer vad datorn ska göra, eller så kan du hitta på någon smartare lösning

Permalänk
Medlem

Tack så hemskt mycket för hjälpen. Jag ska testa lite senare idag.