Advertisement
sebbu

bataille navale

Apr 22nd, 2016
404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.31 KB | None | 0 0
  1. # -*- coding: latin-1 -*-
  2. """
  3. Created on Wed Mar 09 20:14:13 2016
  4.  
  5. @author: Clunet
  6. """
  7.  
  8. from tkFont import *;
  9. from Tkinter import *;
  10.  
  11. #fond de page
  12. fenetre = Tk()
  13. fenetre.title("Bataille Navale")
  14. canevas = Canvas(fenetre, width=1200, height=550, bg= "light blue")
  15. canevas.create_line(600, 553, 600, 0, fill="white", width=100)
  16. canevas.create_line(675, 50, 675, 0, fill="white", width=50)
  17. canevas.create_line(0, 50, 0, 0, fill="white", width=100)
  18. canevas.pack()
  19.  
  20. #plateau 1
  21.  
  22. #ligne horizontale et verticale
  23. canevas.create_line(50, 3, 550, 3, width=3)
  24. canevas.create_line(3, 550, 3, 50, width=3)
  25.  
  26. canevas.create_line(1200, 3, 700, 3, width=3)
  27. canevas.create_line(650, 550, 650, 50, width=3)
  28. for i in range(50,600,50):
  29.     canevas.create_line(0, i, 550, i, width=3)
  30.     canevas.create_line(i, 550, i, 0, width=3)
  31.     canevas.create_line(1200, i, 650, i, width=3)
  32.     canevas.create_line(650+i, 550, 650+i, 0, width=3)
  33.  
  34. #échelle
  35. #for i in range(75, 600, 50):
  36. for i in range(0, 10, 1):
  37.     chiffre=chr(ord('1')+i)
  38.     if chiffre==':':
  39.         chiffre = "10"
  40.     canevas.create_text(75+i*50, 25, font=("Comic Sans MS", 20), fill="Black", text=chr(ord('A')+i))
  41.     canevas.create_text(25, 75+i*50, font=("Comic Sans MS", 20),fill="Black", text=chiffre)
  42.     canevas.create_text(725+i*50, 25, font=("Comic Sans MS", 20), fill="Black", text=chr(ord('A')+i))
  43.     canevas.create_text(675, 75+i*50, font=("Comic Sans MS", 20),fill="Black", text=chiffre)
  44.  
  45. #placement bateau
  46.  
  47. def placement():
  48.  
  49.     global bateaux
  50.  
  51.     bateaux = Toplevel()
  52.     bateaux.title("Bateaux")  
  53.  
  54.     Label(bateaux, text="Coordonnées du torpilleur : ").grid(row=0)
  55.     Label(bateaux, text="(exemple : A1, A2)").grid(row=1)
  56.     Label(bateaux, text="Coordonnées du croiseur : ").grid(row=2)
  57.     Label(bateaux, text="(exemple : A1, A2, A3)").grid(row=3)
  58.     Label(bateaux, text="Coordonnées du sous-marin : ").grid(row=4)
  59.     Label(bateaux, text="(exemple : A1, A2, A3)").grid(row=5)
  60.     Label(bateaux, text="Coordonnées du contre-torpilleur : ").grid(row=6)
  61.     Label(bateaux, text="(exemple : A1, A2, A3, A4)").grid(row=7)
  62.     Label(bateaux, text="Coordonnées du porte-avion : ").grid(row=8)
  63.     Label(bateaux, text="(exemple : A1, A2, A3, A4, A5)").grid(row=9)
  64.  
  65.     e1 = Entry(bateaux)
  66.     e2 = Entry(bateaux)
  67.     e3 = Entry(bateaux)
  68.     e4 = Entry(bateaux)
  69.     e5 = Entry(bateaux)
  70.  
  71.     e1.grid(row=0, column=1)
  72.     e2.grid(row=2, column=1)
  73.     e3.grid(row=4, column=1)        
  74.     e4.grid(row=6, column=1)
  75.     e5.grid(row=8, column=1)
  76.  
  77.     f1 = Button(bateaux, text ='Valider')
  78.     f1.grid(row=0, column=2, padx=10, pady=2)
  79.     f2 = Button(bateaux, text ='Valider')
  80.     f2.grid(row=2, column=2, padx=10, pady=2)
  81.     f3 = Button(bateaux, text ='Valider')
  82.     f3.grid(row=4, column=2, padx=10, pady=2)
  83.     f4 = Button(bateaux, text ='Valider')
  84.     f4.grid(row=6, column=2, padx=10, pady=2)
  85.     f5 = Button(bateaux, text ='Valider')
  86.     f5.grid(row=8, column=2, padx=10, pady=2)
  87.  
  88. b1 = Button(fenetre, text ='Bateaux', command=placement)
  89. b1.pack(side=LEFT, padx=5, pady=5)
  90.  
  91.  
  92. """
  93. Disposition aléatoire des bateaux
  94. """
  95.  
  96. import random
  97.  
  98. dirs = [0, 1, 2, 3]
  99. # 0 : haut
  100. # 1 : gauche
  101. # 2 : bas
  102. # 3 : droite
  103. def check_length(row, col, size):
  104.     global list
  105.     res2 = -1
  106.     while res2==-1:
  107.         # éviter de tjrs placer les bateaux dans le meme sens
  108.         res = random.randint(0, len(dirs))
  109.         if res==0:
  110.             if row >= size-1:
  111.                 #placement en haut possible
  112.                 res2=0
  113.         if res==1:
  114.             if col >= size-1:
  115.                 #placement à gauche possible
  116.                 res2=1
  117.         if res==2:
  118.             if row <= len(list)-size:
  119.                 #placement en bas possible
  120.                 res2=2
  121.         if res==3:
  122.             if col <= len(list[0])-size:
  123.                 #placement à droite possible
  124.                 res2=3
  125.     return res2
  126.  
  127. # 0 : fail
  128. # 1 : ok
  129. def check_avail(row, col, size, dir):
  130.     global list
  131.     for i in range(0, size):
  132.         if dir==0:
  133.             if list[row-i][col]!=0:
  134.                 return 0
  135.         if dir==1:
  136.             if list[row][col-i]!=0:
  137.                 return 0
  138.         if dir==2:
  139.             if list[row+i][col]!=0:
  140.                 return 0
  141.         if dir==3:
  142.             if list[row][col+i]!=0:
  143.                 return 0
  144.     return 1
  145.  
  146. def list_fill(row, col, size, dir, nb):
  147.     global list
  148.     for i in range(0, size):
  149.         if dir==0:
  150.             list[row-i][col]=nb
  151.         if dir==1:
  152.             list[row][col-i]=nb
  153.         if dir==2:
  154.             list[row+i][col]=nb
  155.         if dir==3:
  156.             list[row][col+i]=nb
  157.            
  158.  
  159. #coordonnées
  160.  
  161. # A-J 1-10
  162. # i   j
  163. # 0-9 0-9
  164. # A1-J10 : (75+i*50, 50+j*50, 75+i*50, 100+j*50)
  165.  
  166. sizes = [2, 3, 3, 4, 5]
  167.  
  168. def grid_to_screen(row, col):
  169.     coord = row*10 + col
  170.     return (75+coord%10*50, 50+coord/10*50,
  171.             75+coord%10*50, 100+coord/10*50)
  172.  
  173. cond = True
  174. while cond:
  175.     try:
  176.         list  = [[0 for i in range(10)] for j in range(10)]
  177.         for i in range(0, 5):
  178.             coord = random.randint(0,100)
  179.             # tirage d'un nombre entre 00 et 99 inclus
  180.             # le premier chiffre (coord/10) est la ligne
  181.             # le deuxième chiffre (coord%10) est la colonne
  182.             row=coord/10
  183.             col=coord%10
  184.             print row, col
  185.             dir=check_length(row, col, sizes[i])
  186.             if dir == -1:
  187.                 raise NameError('placement pas possible')
  188.             print dir
  189.             if check_avail(row, col, sizes[i], dir)==0:
  190.                 raise NameError('placement occupé')
  191.            
  192.             list_fill(row, col, sizes[i], dir, i+1)
  193.             # taille des bateaux : 2, 3, 3, 4, 5
  194.             # list = 1 : 2
  195.             # list = 2 : 3
  196.             # list = 3 : 3
  197.             # list = 4 : 4
  198.             # list = 5 : 5
  199.             cond = False
  200.     except NameError as exp:
  201.         print exp.message
  202.         cond = True
  203.  
  204. colors=["yellow", "green", "red", "blue", "pink"]
  205. for row in range(0, 10):
  206.     for col in range(0, 10):
  207.         # 0 = vide, 1-5 = bateaux
  208.         bat = list[row][col]-1
  209.         if bat!=-1:
  210.             canevas.create_line(grid_to_screen(row, col), width=50, fill=colors[bat])
  211.  
  212. Button(fenetre, text ='Bouton 2').pack(side=LEFT, padx=5, pady=5)
  213.  
  214. fenetre.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement