I come for your help. I happen to be doing a game in python a "Battleship". Create the interface with tkinter and to make it online I started using sockets. The problem is that when I want to perform an "attack", everything is pasted. The connection is created well, but when you press a button in the 10x10 grid where each button has the function "attack ()", it dies.
def crearConexion(host, puerto, nombreJugador, ventanaLogin): #Funcion encargada de crear la conexion con el cliente
global sock
global nombreJugador1
nombreServidor = str(host.get())
puerto = int(puerto.get())
nombreJugador1 = str(nombreJugador.get())
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.bind(('127.0.0.1', puerto))
sock.listen(1)
ventanaLogin.destroy()
except:
tkMessageBox.showerror("Error","Puerto utilizado o puerto incorrecto, ingrese otro por favor.")
def jugar(matrizEnemigo):
global Turno
enviarMensaje(str(matrizEnemigo))
if Turno == "Jugador 1":
ataqueEnemigo = recibirMensaje()
recibirAtaque(ataqueEnemigo)
Turno = "Jugador 2"
print "Turno: ", Turno
def atacar(ventanaTableroJuego, posicion):
global matrizEnemigo
global matrizBotones
global Turno
if Turno == "Jugador 2":
for i in range(10):
for j in range(10):
if matrizEnemigo[i][j] == "1" or matrizEnemigo[i][j] == "2" or matrizEnemigo[i][j] == "3" or matrizEnemigo[i][j] == "4" or matrizEnemigo[i][j] == "5":
matrizEnemigo[i][j] = "X"
matrizBotones[posicion].config(bg="black")
Turno = "Jugador 1"
jugar(matrizEnemigo)
def TableroJuego():
global matrizBotones2
global matrizBotones
matrizBotones = []
matrizCoordenadas = [0] * 20
fila = 1
columna = 1
letra = ""
k= 10
l = 0
ventanaTableroJuego = Tk()
ventanaTableroJuego.resizable(0,0)
ventanaTableroJuego.title("Battleship Servidor")
framePadre = Frame(ventanaTableroJuego)
framePadre.grid(row = 0, column = 0, sticky= W)
framePadre.config(bg= "cyan4")
for j in range(10):
if j == 0:
matrizCoordenadas[0] = Button(framePadre,text="+",width=6,height=3)
matrizCoordenadas[0].grid(row= 0,column= 0)
matrizCoordenadas[0].config(bg="cyan4", fg="white")
if j == 0:
letra = "A"
elif j == 1:
letra = "B"
elif j == 2:
letra = "C"
elif j == 3 :
letra = "D"
elif j == 4:
letra = "E"
elif j == 5 :
letra = "F"
elif j == 6 :
letra = "G"
elif j == 7:
letra = "H"
elif j == 8:
letra = "I"
elif j == 9:
letra = "J"
matrizCoordenadas[j+1] = (Button(framePadre,text=letra,width=6,height=3))
matrizCoordenadas[j+1].grid(row= 0,column= j+1)
matrizCoordenadas[j+1].config(bg="cyan3", fg="white")
matrizCoordenadas[k] = (Button(framePadre,text=j+1,width=6,height=3,bg="white"))
matrizCoordenadas[k].grid(row= j+1,column= 0)
matrizCoordenadas[k].config(bg="cyan3", fg="white")
k+=1
for i in range(100):
matrizBotones.append(Button(framePadre,text="",width=6,height=3))
matrizBotones[i].grid(row= fila,column= columna)
matrizBotones[i].config(bg="steel blue", command= lambda i=i: atacar(framePadre,i))
if columna%10==0 and columna != 1:
fila+=1
columna = 1
else:
columna+=1
matrizBotones2 = []
matrizCoordenadas2 = [0] * 20
fila = 1
columna = 1
k= 10
l = 0
frameBarcos = Frame(framePadre)
frameBarcos.grid(row = 1 , column = 11, rowspan= 5, sticky = W, padx=10)
for i in range(100):
matrizBotones2.append(Button(frameBarcos,text="",width=2,height=1))
matrizBotones2[i].grid(row= fila,column= columna)
matrizBotones2[i].config(bg="steel blue")
if columna%10==0 and columna != 1:
fila+=1
columna = 1
else:
columna+=1
for posicion in barco1tablero:
matrizBotones2[posicion].config(bg="red")
for posicion in barco2tablero:
matrizBotones2[posicion].config(bg="yellow2")
for posicion in barco3tablero:
matrizBotones2[posicion].config(bg="magenta4")
for posicion in barco4tablero:
matrizBotones2[posicion].config(bg="darkorange")
for posicion in barco5tablero:
matrizBotones2[posicion].config(bg="green2")
Label(framePadre, text="Barcos Propios", bg="cyan3",fg = "white", bd= 5, relief = RAISED, font= "Helvetica 11 bold italic").grid(row = 0, column=11, rowspan=1)
Button(framePadre, text="Quien parte", bg="red", fg="white", command= lambda: botonQuienParte()).grid(row=7, column=11)
ventanaTableroJuego.mainloop()
The game has both a client and a server, but with both the same thing happens. Please, I hope you can help me.