diff --git a/.DS_Store b/.DS_Store index 4b6330a..48edf85 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/HNS/.DS_Store b/HNS/.DS_Store index 7391456..875fa23 100644 Binary files a/HNS/.DS_Store and b/HNS/.DS_Store differ diff --git a/HNS/Excercises/.DS_Store b/HNS/Excercises/.DS_Store index 5794bfe..f9f9bb9 100644 Binary files a/HNS/Excercises/.DS_Store and b/HNS/Excercises/.DS_Store differ diff --git a/HNS/Excercises/ShipCraft/main.py b/HNS/Excercises/ShipCraft/main.py new file mode 100644 index 0000000..fdfa7af --- /dev/null +++ b/HNS/Excercises/ShipCraft/main.py @@ -0,0 +1,105 @@ +from tkinter import * +from enum import Enum + + +buttons = [] + +field_size = 10 + +empty_field = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] + +my_field = list(empty_field) +enemy_field = list(empty_field) + + +# 1. Определите перечисление (Enum) ShootResult со следующими значениями: +# EMPTY (мимо), DAMAGED (ранен), KILLED (убит), UNDEFINED (действие не определено) + +class ShootResult(Enum): + EMPTY = "EMPTY" + DAMAGED = "DAMAGED" + KILLED = "KILLED" + UNDEFINED = "UNDEFINED" + + +def set_ship(row, col, size, direction): + if row < 0 or row > field_size - 1: + return + if col < 0 or col > field_size - 1: + return + index = row * field_size + col + if direction == 0: + if field_size - row < size: + return + for r in range(row, row + size): + index = r * field_size + col + my_field[index] = '1' + if direction == 1: + if field_size - col < size: + return + for c in range(col, col + size): + index = row * field_size + c + my_field[index] = "1" + + +def shoot(field, row, col): + if row < 0 or row > field_size - 1: + return + if col < 0 or col > field_size - 1: + return + index = row * field_size + col + if field[index] == "": + field[index] = 0 + return ShootResult.EMPTY + elif field[index] == "1": + field[index] = "\\" + return ShootResult.DAMAGED + elif field[index] == "1" or field[index] == "\\" or field[index] == "x": + return ShootResult.DAMAGED + + +def draw_field(window, field): + for r in range(0, field_size): + for c in range(0, field_size): + index = r * field_size + c + bg = 'Lightgray' + if field[index] == '1': + bg = 'pink' + btn = Button(window, text='', bg=bg, width=5, height=2) + btn.grid(column=c, row=r) + buttons.append(btn) + + +def colorize(field, buttons): + bg = "grey" + for i in range(len(field)): + if i == '1': + bg = 'pink' + if i == '\\': + bg = 'red' + if i == '0': + bg = 'black' + buttons.configure(bg=bg) + + +window = Tk() +window.title("Ship Craft!") +window.geometry('450x410') +set_ship(1, 1, 4, 1) +set_ship(0, 6, 3, 0) +set_ship(9, 9, 1, 0) +set_ship(0, 0, 1, 0) +set_ship(9, 0, 1, 0) +set_ship(9, 2, 4, 1) +shoot(my_field, 9, 2) +draw_field(window, my_field) +window.mainloop()