hnc-eduard/HNS/Excercises/ShipCraft/main.py

106 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()