Advertisement
sphinx2001

морской бой. 1 группа, часть 3

Nov 28th, 2020
712
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.79 KB | None | 0 0
  1. import tkinter as tk
  2. from tkinter import messagebox
  3. import time
  4. import random
  5.  
  6. def on_close_window():
  7.     global flag_run_game
  8.     if messagebox.askokcancel("Морской бой", "Хотите завершить игру?"):
  9.         flag_run_game = False
  10.         game.destroy()
  11.  
  12. def draw_battle_map():
  13.     for i in range(cells_w + 1):
  14.         canvas.create_line(cell_size_w * i, 0, cell_size_w * i, size_width)
  15.     for i in range(cells_h + 1):
  16.         canvas.create_line(0, cell_size_h * i, size_heigh, cell_size_h * i)
  17.  
  18. version = "0.3"
  19.  
  20. size_width = 700
  21. size_heigh = 700
  22. cells_w = cells_h = 10
  23. cell_size_w = size_width // cells_w
  24. cell_size_h = size_heigh // cells_h
  25.  
  26. # ++Часть 2
  27. size_width = cell_size_w * cells_w
  28. size_heigh = cell_size_h * cells_h
  29.  
  30. battle_map = []
  31.  
  32.  
  33. #--Часть 2
  34.  
  35. flag_run_game = True
  36.  
  37. game = tk.Tk()
  38. game.title(f"Игра - Морской бой. Версия. {version}")
  39. game.resizable(0, 0)
  40. game.wm_attributes("-topmost", 1)
  41. game.protocol("WM_DELETE_WINDOW", on_close_window)
  42.  
  43. # ++Часть 2
  44. def generate_battle_map():
  45.     global battle_map
  46.     battle_map = [[0 for x in range(cells_w)] for y in range(cells_h)]
  47.     ships = cells_w // 2
  48.     ships_config = []
  49.     for i in range(ships):
  50.         ships_config.append(random.choice([1, 2, 3]))
  51.  
  52.     sum_all_ships = sum(ships_config)
  53.     sum_enemy = 0
  54.     while sum_enemy != sum_all_ships:
  55.         battle_map = [[0 for x in range(cells_w)] for y in range(cells_h)]
  56.         for i in range(ships):
  57.             ls = ships_config[i] # длина коробля
  58.             horizontal_vertical = random.randint(0, 2) # 0 горизонтали, 1 по вертикали
  59.             pos_x = random.randint(0, cells_w)
  60.             pos_y = random.randint(0, cells_h)
  61.  
  62.             if horizontal_vertical == 0: # по горизонтали
  63.                 if pos_x + ls < cells_w:
  64.                     for j in range(ls):
  65.                         try:
  66.                             check_near_ships = 0
  67.                             check_near_ships = battle_map[pos_y][pos_x - 1] + \
  68.                                 battle_map[pos_y][pos_x + j] + \
  69.                                 battle_map[pos_y][pos_x + j + 1] + \
  70.                                 battle_map[pos_y + 1][pos_x + j + 1] + \
  71.                                 battle_map[pos_y - 1][pos_x + j + 1] + \
  72.                                 battle_map[pos_y + 1][pos_x + j] + \
  73.                                 battle_map[pos_y - 1][pos_x + j]
  74.  
  75.                             if check_near_ships == 0:
  76.                                 battle_map[pos_y][pos_x] = 1
  77.  
  78.                         except Exception:
  79.                             pass
  80.             else: # по вертикали
  81.                 if pos_y + ls < cells_h:
  82.                     for j in range(ls):
  83.                         try:
  84.                             check_near_ships = 0
  85.                             check_near_ships = battle_map[pos_y - 1][pos_x] + \
  86.                                 battle_map[pos_y + j][pos_x] + \
  87.                                 battle_map[pos_y + j + 1][pos_x] + \
  88.                                 battle_map[pos_y + j + 1][pos_x + 1] + \
  89.                                 battle_map[pos_y + j + 1][pos_x - 1] + \
  90.                                 battle_map[pos_y + j][pos_x + 1] + \
  91.                                 battle_map[pos_y + j][pos_x - 1]
  92.                             if check_near_ships == 0:
  93.                                 battle_map[pos_y + j][pos_x] = 1
  94.                         except Exception:
  95.                             pass
  96.  
  97.             sum_enemy = 0
  98.             for row in battle_map:
  99.                 sum_enemy += sum(row)
  100.  
  101.  
  102.  
  103.  
  104.  
  105. def command_show_ships():
  106.     for i in range(cells_w):
  107.         for j in range(cells_h):
  108.             if battle_map[j][i] != 0:
  109.                 canvas.create_rectangle(i * cell_size_w, j * cell_size_h, (i + 1) * cell_size_w, (j + 1) * cell_size_h, fill="red")
  110.  
  111. def command_start():
  112.     canvas.create_rectangle(0, 0, size_width, size_heigh, fill="white")
  113.     draw_battle_map()
  114.     generate_battle_map()
  115.  
  116.  
  117. # canvas = tk.Canvas(game, width=size_width, height=size_heigh, bd=0, highlightthickness=0)
  118. canvas = tk.Canvas(game, width=size_width + 250, height=size_heigh, bd=0, highlightthickness=0)
  119. canvas.create_rectangle(0, 0, size_width, size_heigh, fill="white")
  120. canvas.pack()
  121.  
  122.  
  123. button1 = tk.Button(game, text="Показать корабли", command=command_show_ships)
  124. button2 = tk.Button(game, text="Начать заново", command=command_start)
  125. button1.place(x=size_width+20, y=30)
  126. button2.place(x=size_width+20, y=90)
  127. # --Часть 2
  128.  
  129.  
  130. generate_battle_map()
  131. game.update()
  132. draw_battle_map()
  133. while flag_run_game:
  134.     if flag_run_game:
  135.         game.update_idletasks()
  136.         game.update()
  137.     time.sleep(0.005)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement