debut_bataille_navale.py
Created by
vgalletramond
Created on
January 16, 2025
8.45 KB
from kandinsky import *
from ion import keydown
from time import sleep
from random import randint
color = ( ' white ' , ' white ' , ' red ' , ' gray ' )
pos = [ 0 , 0 ]
col = [[],[],[],[],[]]
col_e = [[],[],[],[],[]]
g_e = [[ 0 for i in range ( 10 )] for j in range ( 10 )]
g_j = [[ 0 for i in range ( 10 )] for j in range ( 10 )]
vie = ( 5 , 4 , 3 , 3 , 2 )
def acceuil ():
fill_rect ( 0 , 0 , 320 , 222 , ' black ' )
draw_string ( " Bataille navale " , 80 , 20 , ' white ' , ' black ' )
draw_string ( " Solo " , 140 , 60 , ' white ' , ' black ' )
draw_string ( " Duo " , 145 , 90 , ' white ' , ' black ' )
draw_string ( " Contre bot " , 110 , 120 , ' white ' , ' black ' )
def jeu ( pl ):
fill_rect ( 85 , 10 , 151 , 151 , ' black ' )
for j in range ( 10 ):
for i in range ( 10 ):
fill_rect ( 86 + 15 * i , 11 + 15 * j , 14 , 14 , color [ pl [ j ][ i ]] * ( not ( pl == g_j and pl [ j ][ i ] == 1 )) + ' black ' * ( pl == g_j and pl [ j ][ i ] == 1 ))
def depla ():
for k in range ( 5 ):
pos = [ 0 , 0 ]
s = 0
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i , 11 + 15 * pos [ 1 ], 14 , 14 , ' black ' )
while 42 :
if keydown ( 0 ):
if pos [ 0 ] - 1 >= 0 :
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' white ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 0 ) + ' black ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 1 ))
pos [ 0 ] -= 1
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' black ' )
sleep ( 0.3 )
elif keydown ( 1 ):
if pos [ 1 ] - 1 >= 0 :
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' white ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 0 ) + ' black ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 1 ))
pos [ 1 ] -= 1
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' black ' )
sleep ( 0.3 )
elif keydown ( 2 ):
if pos [ 1 ] + 1 + ( vie [ k ] - 1 ) * ( s == 1 ) < 10 :
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' white ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 0 ) + ' black ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 1 ))
pos [ 1 ] += 1
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' black ' )
sleep ( 0.3 )
elif keydown ( 3 ):
if pos [ 0 ] + 1 + ( vie [ k ] - 1 ) * ( s == 0 ) < 10 :
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' white ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 0 ) + ' black ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 1 ))
pos [ 0 ] += 1
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' black ' )
sleep ( 0.3 )
elif keydown ( 12 ):
for i in range ( vie [ k ]):
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' white ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 0 ) + ' black ' * ( g_j [ pos [ 1 ] + 1 * ( i * ( s == 1 ))][ pos [ 0 ] + 1 * ( i * ( s == 0 ))] == 1 ))
s = 1 - s
for i in range ( vie [ k ]):
if s == 0 and pos [ 0 ] > 10 - vie [ k ]:
pos [ 0 ] = 10 - vie [ k ]
elif s == 1 and pos [ 1 ] > 10 - vie [ k ]:
pos [ 1 ] = 10 - vie [ k ]
fill_rect ( 86 + 15 * pos [ 0 ] + 15 * i * ( s == 0 ), 11 + 15 * pos [ 1 ] + 15 * i * ( s == 1 ), 14 , 14 , ' black ' )
sleep ( 0.3 )
elif keydown ( 4 ) or keydown ( 52 ):
ch = 0
if s == 0 :
for i in range ( vie [ k ]):
if g_j [ pos [ 1 ]][ pos [ 0 ] + 1 * i ] == 1 :
ch = 1
if ch == 0 :
for i in range ( vie [ k ]):
col [ k ]. append ([ pos [ 0 ] + 1 * i , pos [ 1 ]])
for b in col :
for x , y in b :
g_j [ y ][ x ] = 1
sleep ( 0.5 )
break
elif s == 1 :
for i in range ( vie [ k ]):
if g_j [ pos [ 1 ] + 1 * i ][ pos [ 0 ]] == 1 :
ch = 1
if ch == 0 :
for i in range ( vie [ k ]):
col [ k ]. append ([ pos [ 0 ], pos [ 1 ] + 1 * i ])
for b in col :
for x , y in b :
g_j [ y ][ x ] = 1
sleep ( 0.5 )
break
def act ( pos ):
fill_rect ( 85 + 15 * pos [ 0 ], 10 + 15 * pos [ 1 ], 1 , 15 , ' black ' )
fill_rect ( 85 + 15 * pos [ 0 ], 10 + 15 * pos [ 1 ], 15 , 1 , ' black ' )
fill_rect ( 100 + 15 * pos [ 0 ], 10 + 15 * pos [ 1 ], 1 , 15 , ' black ' )
fill_rect ( 85 + 15 * pos [ 0 ], 25 + 15 * pos [ 1 ], 15 , 1 , ' black ' )
def act2 ( pos ):
fill_rect ( 85 + 15 * pos [ 0 ], 10 + 15 * pos [ 1 ], 1 , 15 , ' red ' )
fill_rect ( 85 + 15 * pos [ 0 ], 10 + 15 * pos [ 1 ], 15 , 1 , ' red ' )
fill_rect ( 100 + 15 * pos [ 0 ], 10 + 15 * pos [ 1 ], 1 , 15 , ' red ' )
fill_rect ( 85 + 15 * pos [ 0 ], 25 + 15 * pos [ 1 ], 15 , 1 , ' red ' )
def torp ():
global nb_tir
draw_string ( " tir: " + str ( nb_tir ), 250 , 201 , ' white ' ,( 148 , 113 , 222 ))
pos = [ 0 , 0 ]
act2 ( pos )
while 42 :
if keydown ( 0 ):
if pos [ 0 ] - 1 >= 0 :
act ( pos )
pos [ 0 ] -= 1
act2 ( pos )
sleep ( 0.3 )
elif keydown ( 1 ):
if pos [ 1 ] - 1 >= 0 :
act ( pos )
pos [ 1 ] -= 1
act2 ( pos )
sleep ( 0.3 )
elif keydown ( 2 ):
if pos [ 1 ] + 1 < 10 :
act ( pos )
pos [ 1 ] += 1
act2 ( pos )
sleep ( 0.3 )
elif keydown ( 3 ):
if pos [ 0 ] + 1 < 10 :
act ( pos )
pos [ 0 ] += 1
act2 ( pos )
sleep ( 0.3 )
elif keydown ( 4 ) or keydown ( 52 ):
if g_e [ pos [ 1 ]][ pos [ 0 ]] != 2 and g_e [ pos [ 1 ]][ pos [ 0 ]] != 3 :
nb_tir += 1
draw_string ( " tir: " + str ( nb_tir ), 250 , 201 , ' white ' ,( 148 , 113 , 222 ))
touche ( pos )
c = 0
for li in g_e :
for cole in li :
if cole == 1 :
c = 1
if c != 1 :
break
if mod == 1 :
break
sleep ( 0.3 )
def touche ( co ):
f = 0
for i in range ( len ( col_e )):
for j in range ( len ( col_e [ i ])):
if col_e [ i ][ j ] == co :
del col_e [ i ][ j ]
g_e [ co [ 1 ]][ co [ 0 ]] = 2
print ( ' touché ' )
if len ( col_e [ i ]) == 0 :
print ( ' coulé ' )
del col_e [ i ]
f = 1
draw_string ( " coulés: " + str ( 5 - len ( col_e )), 150 , 201 , ' white ' ,( 148 , 113 , 222 ))
if len ( col_e ) == 0 :
print ( ' Vous avez gagné ' )
break
if f == 1 :
break
if g_e [ co [ 1 ]][ co [ 0 ]] != 2 :
g_e [ co [ 1 ]][ co [ 0 ]] = 3
print ( ' plouf ' )
fill_rect ( 86 + 15 * co [ 0 ], 11 + 15 * co [ 1 ], 14 , 14 , color [ g_e [ co [ 1 ]][ co [ 0 ]]])
def barre_bas ():
fill_rect ( 0 , 200 , 320 , 22 , ( 148 , 113 , 222 ))
draw_string ( " coulés: " + str ( 5 - len ( col_e )), 150 , 201 , ' white ' ,( 148 , 113 , 222 ))
def aleatoire_pl ():
for k in range ( 5 ):
while 42 :
x , y , s = randint ( 0 , 9 - vie [ k ]), randint ( 0 , 9 - vie [ k ]), randint ( 0 , 1 )
for i in range ( vie [ k ]):
if g_e [ y + i * ( s == 1 )][ x + i * ( s == 0 )] != 0 :
col_e [ k ] = []
break
else :
g_e [ y + i * ( s == 1 )][ x + i * ( s == 0 )] = 1
col_e [ k ]. append ([ x + i * ( s == 0 ), y + i * ( s == 1 )])
if len ( col_e [ k ]) > 0 :
break
def tir_bot ():
while 42 :
x , y = randint ( 0 , 9 ), randint ( 0 , 9 )
if g_j [ y ][ x ] == 0 or g_j [ y ][ x ] == 1 :
if g_j [ y ][ x ] == 0 :
g_j [ y ][ x ] = 3
elif g_j [ y ][ x ] == 1 :
g_j [ y ][ x ] = 2
jeu ( g_j )
break
global nb_tir
nb_tir = 0
mod = 1
#acceuil()
barre_bas ()
if mod == 0 :
aleatoire_pl ()
jeu ( g_j )
torp ()
elif mod == 1 :
jeu ( g_j )
depla ()
aleatoire_pl ()
while 42 :
sleep ( 1 )
if len ( col ) == 0 :
break
jeu ( g_e )
torp ()
sleep ( 1 )
if len ( col_e ) == 0 :
break
jeu ( g_j )
sleep ( 1 )
tir_bot ()
print ( ' col ' , col )
print ( ' col_e ' , col_e )
print ( ' g_e ' , g_e )
print ( ' g_j ' , g_j )