Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- import os
- import random
- # Класс статистики игрока ==============================================================================================
- class Stata:
- def __init__(self, name):
- self.name = name # Постоянный никнейм игрока (возможно, фамилия)
- self.hit = [0] * 21 # Количество попаданий в простые секторы (для каждого сектора (от 1 до 20))
- self.hit2 = [0] * 21 # Количество попаданий в секторы на удвоение (для каждого сектора)
- self.hit3 = [0] * 21 # Количество попаданий в секторы на утроение (для каждого сектора)
- self.hit25 = 0 # Количество попаданий во внешннее кольцо яблочка
- self.hit50 = 0 # Количество попаданий "в яблочко"
- self.hit0 = 0 # Количество промахов
- # Глобальные переменные
- score1 = 999 # Счёт первого игрока
- score2 = 999 # Второго
- cast = 3 # Игрок, выполняющий текущий бросок (в ходе игры значение меняется с 1 на 2 и обратно)
- casting = 0 # Количество брошенных дротиков (0, 1, 2, 3. Когда 3 - обнуляется, а cast изменяется)
- gamemode = 301 # Условное название режима игры
- POINT = 20 # Сектор, в который попал дротик
- ITOGPOINT = 20 # Очки, полученные с учётом попадание на удвоение или утроение
- lastX2 = bool # Содержит информация о том, был ли совершён последний бросок на удвоение или нет
- score1mem = 999 # Запоминает предыдущее значение счёта первого игрока (для ситуации перебора или отмены хода)
- score2mem = 999 # второго
- random.seed()
- # Основное окно ========================================================================================================
- root = Tk()
- root.title("Дартс")
- root.geometry("1280x996") # root.wm_state('zoomed')
- # Окно правил дартса ===================================================================================================
- def openRules():
- os.system('PravilaDarts2018.pdf') # Открыть pdf файл через программу по умолчанию
- # Rules = Toplevel(root)
- # Rules.geometry("600x920")
- # Label(Rules, text="Правила вида спорта "Дартс"").pack()
- # RulesCloseButton = Button(Rules, text="Закрыть", command=Rules.destroy)
- # RulesCloseButton.pack()
- # Rules.grab_set()
- # frame1 - ввод ника первого игрока ====================================================================================
- frame1 = Frame(root, bg='white')
- frame1.place(relwidth=0.4, relheight=0.2, relx=0.05, rely=0.02)
- Label(frame1, text='Первый игрок', bg='white', padx=5, pady=15, font='Arial 28 bold').pack()
- name1 = StringVar() # Переменная - имя первого игрока
- name1.set('Игрок1')
- name1pole = Entry(master=frame1, font='Arial 22', width=25, textvariable=name1)
- name1pole.pack(padx=5, pady=5)
- # frame2 - ввод ника второго игрока ====================================================================================
- frame2 = Frame(root, bg='white')
- frame2.place(relwidth=0.4, relheight=0.2, relx=0.55, rely=0.02)
- Label(frame2, text='Второй игрок', bg='white', padx=5, pady=15, font='Arial 28 bold').pack()
- name2 = StringVar() # Переменная - имя второго игрока
- name2.set('Игрок2')
- name2pole = Entry(master=frame2, font='Arial 22', width=25, textvariable=name2)
- name2pole.pack(padx=5, pady=5)
- # Ограничение длины текста при вводе ника (16 символов):
- def name_len_limit(entry_text):
- if len(name1.get()) > 16 or len(name2.get()) > 16:
- entry_text.set(entry_text.get()[:16])
- Player1.config(textvariable=name1) # Исправление ошибки с неудалением одного лишнего сим-
- Player2.config(textvariable=name2) # вола из Лейблов Player1 и Player2
- name1.trace("w", lambda *args: name_len_limit(name1))
- name2.trace("w", lambda *args: name_len_limit(name2))
- # frame3 - Кнопки выбора типа игры =====================================================================================
- frame3 = Frame(root, bg='white')
- frame3.place(relwidth=0.9, relheight=0.2, relx=0.05, rely=0.24)
- Label(frame3, text='Выбор типа игры', bg='white', padx=5, pady=15, font='Arial 28 bold').pack()
- frame3_1 = Frame(frame3, bg='white', width=300, height=120)
- frame3_1.pack()
- Mode301 = Label(master=frame3_1, text=' 301 ', padx=5, pady=15, bd=8, relief='ridge', font='Arial 28 bold')
- Mode301.pack(side=LEFT)
- Label(frame3_1, text=' ', padx=5, pady=5, bg='white').pack(side=LEFT) # Промежуток между кнопками
- Mode501 = Label(master=frame3_1, text=' 501 ', padx=5, pady=15, bd=8, relief='raised', font='Arial 28')
- Mode501.pack(side=LEFT)
- def clickMode301(event): # Нажатия "кнопок"
- Mode301.config(relief='ridge', font='Arial 28 bold')
- Mode501.config(relief='raised', font='Arial 28')
- global gamemode
- gamemode = 301
- def clickMode501(event):
- Mode301.config(relief='raised', font='Arial 28')
- Mode501.config(relief='ridge', font='Arial 28 bold')
- global gamemode
- gamemode = 501
- Mode301.bind('<Button-1>', clickMode301)
- Mode501.bind('<Button-1>', clickMode501)
- # frame4 - кто начинает игру ===========================================================================================
- frame4 = Frame(root, bg='white')
- frame4.place(relwidth=0.9, relheight=0.3, relx=0.05, rely=0.46)
- Label(frame4, text='Начинает игру', bg='white', padx=5, pady=15, font='Arial 28 bold').pack()
- frame4_1 = Frame(frame4, bg='white', width=600, height=120)
- frame4_1.pack()
- Player1 = Label(master=frame4_1, textvariable=name1, padx=5, pady=15, bd=8, relief='raised', font='Arial 28')
- Player1.pack(side=LEFT)
- Label(frame4_1, text=' ', padx=5, pady=5, bg='white').pack(side=LEFT) # Промежуток между кнопками
- Player2 = Label(master=frame4_1, textvariable=name2, padx=5, pady=15, bd=8, relief='raised', font='Arial 28')
- Player2.pack(side=LEFT)
- Label(frame4, text='', padx=2, pady=2, bg='white', font='Arial 2').pack() # Промежуток между кнопками
- RandomPlayer = Label(master=frame4, text='Случайно', padx=5, pady=15, bd=8, relief='ridge', font='Arial 28 bold')
- RandomPlayer.pack()
- def clickPlayer1(event):
- Player1.config(relief='ridge', font='Arial 28 bold')
- Player2.config(relief='raised', font='Arial 28')
- RandomPlayer.config(relief='raised', font='Arial 28')
- global cast
- cast = 1
- def clickPlayer2(event):
- Player1.config(relief='raised', font='Arial 28')
- Player2.config(relief='ridge', font='Arial 28 bold')
- RandomPlayer.config(relief='raised', font='Arial 28')
- global cast
- cast = 2
- def clickRandomPlayer(event):
- Player1.config(relief='raised', font='Arial 28')
- Player2.config(relief='raised', font='Arial 28')
- RandomPlayer.config(relief='ridge', font='Arial 28 bold')
- global cast
- cast = 3
- Player1.bind('<Button-1>', clickPlayer1)
- Player2.bind('<Button-1>', clickPlayer2)
- RandomPlayer.bind('<Button-1>', clickRandomPlayer)
- # frame5 - для кнопок меню =============================================================================================
- frame5 = Frame(root, bg='white')
- frame5.place(relwidth=0.9, relheight=0.2, relx=0.05, rely=0.78)
- Label(frame5, text=' ', padx=5, pady=5, bg='white').pack() ###
- frame5_1 = Frame(frame5, bg='red', width=600, height=120)
- frame5_1.pack()
- Label(frame5, text=' ', padx=15, pady=5, bg='white').pack(side=LEFT) ###
- RulesButton = Button(frame5, text='Правила игры Дартс', font='Arial 18', command=openRules)
- RulesButton.pack(side=LEFT)
- StataButton = Button(frame5, text='Статистика игроков', font='Arial 18')
- Label(frame5, text=' ', padx=15, pady=5, bg='white').pack(side=RIGHT) ###
- StataButton.pack(side=RIGHT)
- score1Var = StringVar()
- score2Var = StringVar()
- # Окно остаётся основное, но виджеты новые, предназначенные непосредственно для раунда дартса:
- frame21 = Frame(root, bg='white',
- highlightthickness=4) # Некоторые виджеты объявлены заранее для одновременного использования
- frame22 = Frame(root, bg='white', highlightthickness=4) # в функции Game и в функции FocusCast
- Dartsman1 = Label(frame21, textvariable=name1, bg='white', padx=5, pady=15, font='Arial 28 bold')
- Dartsman2 = Label(frame22, textvariable=name2, bg='white', padx=5, pady=15, font='Arial 28 bold')
- frame21_1 = Frame(frame21, bg='red', width=180, height=60)
- shoot1_1Label = Label(frame21_1, text='', bg='white', padx=3, pady=3, font='Arial 20')
- shoot1_1 = Label(frame21_1, bg='white', padx=3, pady=3, font='Arial 20 bold')
- frame21_2 = Frame(frame21, bg='red', width=180, height=60)
- shoot1_2Label = Label(frame21_2, text='', bg='white', padx=3, pady=3, font='Arial 20')
- shoot1_2 = Label(frame21_2, bg='white', padx=3, pady=3, font='Arial 20 bold')
- frame21_3 = Frame(frame21, bg='red', width=180, height=60)
- shoot1_3Label = Label(frame21_3, text='', bg='white', padx=3, pady=3, font='Arial 20')
- shoot1_3 = Label(frame21_3, bg='white', padx=3, pady=3, font='Arial 20 bold')
- frame22_1 = Frame(frame22, bg='red', width=180, height=60)
- shoot2_1Label = Label(frame22_1, text='', bg='white', padx=3, pady=3, font='Arial 20')
- shoot2_1 = Label(frame22_1, bg='white', padx=3, pady=3, font='Arial 20 bold')
- frame22_2 = Frame(frame22, bg='red', width=180, height=60)
- shoot2_2Label = Label(frame22_2, text='', bg='white', padx=3, pady=3, font='Arial 20')
- shoot2_2 = Label(frame22_2, bg='white', padx=3, pady=3, font='Arial 20 bold')
- frame22_3 = Frame(frame22, bg='red', width=180, height=60)
- shoot2_3Label = Label(frame22_3, text='', bg='white', padx=3, pady=3, font='Arial 20')
- shoot2_3 = Label(frame22_3, bg='white', padx=3, pady=3, font='Arial 20 bold')
- frame23 = Frame(root, bg='white', relief='solid')
- def FCancel():
- Cancel()
- CancelButton = Button(root, text='Отмена', font='Arial 18', command=FCancel)
- def Game():
- # Скрыть фреймы стартового экрана
- frame1.place_forget()
- frame2.place_forget()
- frame3.place_forget()
- frame4.place_forget()
- frame5.place_forget()
- name1pole.config(state='disabled') #Заблокировать поля
- name2pole.config(state='disabled')
- shoot1 = 60
- shoot2 = 60
- shoot3 = 60
- # Определение типа игры
- global gamemode
- global score1
- global score2
- global score1mem
- global score2mem
- if gamemode == 301:
- score1 = 301
- score1Var.set('301')
- score2 = 301
- score2Var.set('301')
- score1mem = 301
- score2mem = 301
- elif gamemode == 501:
- score1 = 501
- score1Var.set('501')
- score2 = 501
- score2Var.set('501')
- score1mem = 501
- score2mem = 501
- # frame21 - текущий счёт первого игрока=============================================================================
- Label(root, text='').pack()
- CancelButton.pack()
- frame21.place(relwidth=0.4, relheight=0.3, relx=0.05, rely=0.02)
- Dartsman1.pack()
- Dartsman1score = Label(frame21, textvariable=score1Var, bg='white', padx=25, pady=15, font='Arial 28', bd=4,
- relief='groove')
- Dartsman1score.pack()
- frame21_1.pack()
- shoot1_1Label.pack(side=LEFT)
- shoot1_1.pack(side=LEFT)
- frame21_2.pack()
- shoot1_2Label.pack(side=LEFT)
- shoot1_2.pack(side=LEFT)
- frame21_3.pack()
- shoot1_3Label.pack(side=LEFT)
- shoot1_3.pack(side=LEFT)
- # frame22 - текущий счёт второго игрока=============================================================================
- frame22.place(relwidth=0.4, relheight=0.3, relx=0.55, rely=0.02)
- Dartsman2.pack()
- Dartsman2score = Label(frame22, textvariable=score2Var, bg='white', padx=25, pady=15, font='Arial 28', bd=4,
- relief='groove')
- Dartsman2score.pack()
- frame22_1.pack()
- shoot2_1Label.pack(side=LEFT)
- shoot2_1.pack(side=LEFT)
- frame22_2.pack()
- shoot2_2Label.pack(side=LEFT)
- shoot2_2.pack(side=LEFT)
- frame22_3.pack()
- shoot2_3Label.pack(side=LEFT)
- shoot2_3.pack(side=LEFT)
- global cast
- if cast != 1 and cast != 2:
- cast = random.randint(1, 2)
- FocusCast()
- # frame23 - кнопки с цифрами====================================================================================
- frame23.place(relwidth=0.9, relheight=0.6, relx=0.05, rely=0.36)
- frame23_1 = Frame(frame23, bg='red', width=900, height=150)
- frame23_1.pack()
- key20 = Label(frame23_1, text=20, bg='red3', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key20.pack(side=LEFT)
- key20.bind('<Button-1>', Click20)
- key19 = Label(frame23_1, text=19, bg='green', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key19.pack(side=LEFT)
- key19.bind('<Button-1>', Click19)
- key18 = Label(frame23_1, text=18, bg='red3', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key18.pack(side=LEFT)
- key18.bind('<Button-1>', Click18)
- key17 = Label(frame23_1, text=17, bg='green', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key17.pack(side=LEFT)
- key17.bind('<Button-1>', Click17)
- key16 = Label(frame23_1, text=16, bg='green', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key16.pack(side=LEFT)
- key16.bind('<Button-1>', Click16)
- frame23_2 = Frame(frame23, bg='red', width=900, height=150)
- frame23_2.pack()
- key15 = Label(frame23_2, text=15, bg='green', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key15.pack(side=LEFT)
- key15.bind('<Button-1>', Click15)
- key14 = Label(frame23_2, text=14, bg='red3', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key14.pack(side=LEFT)
- key14.bind('<Button-1>', Click14)
- key13 = Label(frame23_2, text=13, bg='red3', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key13.pack(side=LEFT)
- key13.bind('<Button-1>', Click13)
- key12 = Label(frame23_2, text=12, bg='red3', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key12.pack(side=LEFT)
- key12.bind('<Button-1>', Click12)
- key11 = Label(frame23_2, text=11, bg='green', fg='white', padx=25, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key11.pack(side=LEFT)
- key11.bind('<Button-1>', Click11)
- frame23_3 = Frame(frame23, bg='red', width=900, height=150)
- frame23_3.pack()
- key10 = Label(frame23_3, text=10, bg='red3', fg='white', padx=24, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key10.pack(side=LEFT)
- key10.bind('<Button-1>', Click10)
- key9 = Label(frame23_3, text=9, bg='green', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key9.pack(side=LEFT)
- key9.bind('<Button-1>', Click9)
- key8 = Label(frame23_3, text=8, bg='red3', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key8.pack(side=LEFT)
- key8.bind('<Button-1>', Click8)
- key7 = Label(frame23_3, text=7, bg='red3', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key7.pack(side=LEFT)
- key7.bind('<Button-1>', Click7)
- key6 = Label(frame23_3, text=6, bg='green', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key6.pack(side=LEFT)
- key6.bind('<Button-1>', Click6)
- frame23_4 = Frame(frame23, bg='red', width=900, height=150)
- frame23_4.pack()
- key5 = Label(frame23_4, text=5, bg='green', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key5.pack(side=LEFT)
- key5.bind('<Button-1>', Click5)
- key4 = Label(frame23_4, text=4, bg='green', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key4.pack(side=LEFT)
- key4.bind('<Button-1>', Click4)
- key3 = Label(frame23_4, text=3, bg='red3', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key3.pack(side=LEFT)
- key3.bind('<Button-1>', Click3)
- key2 = Label(frame23_4, text=2, bg='red3', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key2.pack(side=LEFT)
- key2.bind('<Button-1>', Click2)
- key1 = Label(frame23_4, text=1, bg='green', fg='white', padx=40, pady=15, font='Arial 40 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key1.pack(side=LEFT)
- key1.bind('<Button-1>', Click1)
- frame23_5 = Frame(frame23, bg='red', width=900, height=150)
- frame23_5.pack()
- key25 = Label(frame23_5, text=25, bg='green', fg='white', padx=51, pady=15, font='Arial 60 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key25.pack(side=LEFT)
- key25.bind('<Button-1>', Click25)
- key0 = Label(frame23_5, text=0, bg='black', fg='white', padx=77, pady=15, font='Arial 60 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key0.pack(side=LEFT)
- key0.bind('<Button-1>', Click0)
- key50 = Label(frame23_5, text=50, bg='red3', fg='white', padx=51, pady=15, font='Arial 60 bold',
- highlightbackground='#ffffff', highlightthickness=6)
- key50.pack(side=LEFT)
- key50.bind('<Button-1>', Click50)
- # Функция смены фокуса на другого игрока (когда один завершил свой бросок и к броску должен приступить второй)
- def FocusCast():
- global cast
- global score1
- global score2
- global score1mem
- global score2mem
- if cast == 1:
- frame21.config(bg='white', highlightbackground='#000000')
- frame22.config(bg='gray94', highlightbackground='#f0f0f0')
- Dartsman1.config(bg='white')
- Dartsman2.config(bg='gray94')
- shoot1_1Label.config(bg='white', text='1 бросок...')
- shoot1_2Label.config(bg='white', text='')
- shoot1_3Label.config(bg='white', text='')
- shoot1_1.config(bg='white', text='')
- shoot1_2.config(bg='white', text='')
- shoot1_3.config(bg='white', text='')
- shoot2_1Label.config(bg='gray94')
- shoot2_2Label.config(bg='gray94')
- shoot2_3Label.config(bg='gray94')
- shoot2_1.config(bg='gray94')
- shoot2_2.config(bg='gray94')
- shoot2_3.config(bg='gray94')
- score1mem = score1
- elif cast == 2:
- frame21.config(bg='gray94', highlightbackground='#f0f0f0')
- frame22.config(bg='white', highlightbackground='#000000')
- Dartsman1.config(bg='gray94')
- Dartsman2.config(bg='white')
- shoot1_1Label.config(bg='gray94')
- shoot1_2Label.config(bg='gray94')
- shoot1_3Label.config(bg='gray94')
- shoot1_1.config(bg='gray94')
- shoot1_2.config(bg='gray94')
- shoot1_3.config(bg='gray94')
- shoot2_1Label.config(bg='white', text='1 бросок...')
- shoot2_2Label.config(bg='white', text='')
- shoot2_3Label.config(bg='white', text='')
- shoot2_1.config(bg='white', text='')
- shoot2_2.config(bg='white', text='')
- shoot2_3.config(bg='white', text='')
- score2mem = score2
- def FocusChange(): #поменять значение переменной фокуса
- global cast
- global casting
- if cast == 1:
- cast = 2
- else:
- cast = 1
- casting = 0
- def Click20(Event): ShootWindow(20)
- def Click19(Event): ShootWindow(19)
- def Click18(Event): ShootWindow(18)
- def Click17(Event): ShootWindow(17)
- def Click16(Event): ShootWindow(16)
- def Click15(Event): ShootWindow(15)
- def Click14(Event): ShootWindow(14)
- def Click13(Event): ShootWindow(13)
- def Click12(Event): ShootWindow(12)
- def Click11(Event): ShootWindow(11)
- def Click10(Event): ShootWindow(10)
- def Click9(Event): ShootWindow(9)
- def Click8(Event): ShootWindow(8)
- def Click7(Event): ShootWindow(7)
- def Click6(Event): ShootWindow(6)
- def Click5(Event): ShootWindow(5)
- def Click4(Event): ShootWindow(4)
- def Click3(Event): ShootWindow(3)
- def Click2(Event): ShootWindow(2)
- def Click1(Event): ShootWindow(1)
- def Click25(Event): ShootWindow(25)
- def Click50(Event): ShootWindow(50)
- def Click0(Event): ShootWindow(0)
- #
- pointsVar = StringVar()
- def ShootWindow(points):
- global POINT
- global ITOGPOINT
- global score1
- global score2
- global cast
- global casting
- global score1mem
- global score2mem
- POINT = points
- ClickX1() # По-умолчанию X1.
- ShootWindow = Toplevel(root)
- x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2 - 250 # Чтобы поместить окошко в центре экрана
- y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2 - 175
- ShootWindow.geometry("500x350")
- ShootWindow.wm_geometry("+%d+%d" % (x, y))
- ShootWindow.resizable(False, False)
- FrameShootWindow = Frame(ShootWindow, width=500, height=120)
- FrameShootWindow.pack()
- NumberLabel = Label(FrameShootWindow, text=(str(points) + ' ×'), font='Arial 60', padx=5)
- NumberLabel.pack(side=LEFT)
- ItogLabel = Label(ShootWindow, textvariable=pointsVar, font='Arial 80 bold', fg='red3', pady=10)
- ItogLabel.pack()
- ButtonX1 = Button(FrameShootWindow, text='1', font='Arial 45 bold', command=ClickX1)
- ButtonX1.pack(side=LEFT)
- ButtonX2 = Button(FrameShootWindow, text='2', font='Arial 45 bold', command=ClickX2)
- ButtonX2.pack(side=LEFT)
- ButtonX3 = Button(FrameShootWindow, text='3', font='Arial 45 bold', command=ClickX3)
- ButtonX3.pack(side=LEFT)
- if points == 25 or points == 50 or points == 0: # Для этих вариантов попаданий должно быть окно без умножений.
- FrameShootWindow.pack_forget()
- ShootWindow.geometry("500x250")
- def ShootWindowDestroy(): # При закрытии этого окна:
- global casting
- global cast
- casting = casting + 1
- if cast == 1: # Если ходит первый игрок
- global score1
- if score1 == ITOGPOINT and lastX2 == 1: # Обработка победы
- Win(1)
- ShootWindow.destroy()
- return
- if score1 - ITOGPOINT < 2: # Обработка перебора
- if casting == 1:
- shoot1_1Label.config(text='1 бросок:')
- shoot1_1.config(text=('ПЕРЕБОР '))
- elif casting == 2:
- shoot1_2Label.config(text='2 бросок:')
- shoot1_2.config(text=('ПЕРЕБОР '))
- elif casting == 3:
- shoot1_3Label.config(text='3 бросок:')
- shoot1_3.config(text=('ПЕРЕБОР '))
- score1 = score1mem
- score1Var.set(score1)
- FocusChange()
- FocusCast()
- ShootWindow.destroy()
- return # Ситуация перебора преждевременно заканчивает функцию
- score1 = score1 - ITOGPOINT
- score1Var.set(score1)
- if casting == 1: # Если совершён первый бросок (первым игроком)
- shoot1_1Label.config(text='1 бросок:')
- shoot1_1.config(text=(str(ITOGPOINT) + ' ')) # Пробелы - сдвиг текста влево
- shoot1_2Label.config(text='2 бросок...')
- if casting == 2: # Если совершён второй бросок...
- shoot1_2Label.config(text='2 бросок:')
- shoot1_2.config(text=(str(ITOGPOINT) + ' '))
- shoot1_3Label.config(text='3 бросок...')
- if casting == 3:
- shoot1_3Label.config(text='3 бросок:')
- shoot1_3.config(text=(str(ITOGPOINT) + ' '))
- if cast == 2: # Если ходит второй игрок
- global score2
- if score2 == ITOGPOINT and lastX2 == 1: # Обработка победы
- Win(2)
- ShootWindow.destroy()
- return
- if score2 - ITOGPOINT < 2: # Обработка перебора
- if casting == 1:
- shoot2_1Label.config(text='1 бросок:')
- shoot2_1.config(text=('ПЕРЕБОР '))
- elif casting == 2:
- shoot2_2Label.config(text='2 бросок:')
- shoot2_2.config(text=('ПЕРЕБОР '))
- elif casting == 3:
- shoot2_3Label.config(text='3 бросок:')
- shoot2_3.config(text=('ПЕРЕБОР '))
- score2 = score2mem
- score2Var.set(score2)
- FocusChange()
- FocusCast()
- ShootWindow.destroy()
- return # Ситуация перебора преждевременно заканчивает функцию
- score2 = score2 - ITOGPOINT
- score2Var.set(score2)
- if casting == 1:
- shoot2_1Label.config(text='1 бросок:')
- shoot2_1.config(text=(str(ITOGPOINT) + ' '))
- shoot2_2Label.config(text='2 бросок...')
- if casting == 2:
- shoot2_2Label.config(text='2 бросок:')
- shoot2_2.config(text=(str(ITOGPOINT) + ' '))
- shoot2_3Label.config(text='3 бросок...')
- if casting == 3:
- shoot2_3Label.config(text='3 бросок:')
- shoot2_3.config(text=(str(ITOGPOINT) + ' '))
- if casting == 3: # Если совершён третий бросок, то игрока нужно сменить.
- FocusChange()
- FocusCast()
- ShootWindow.destroy()
- def onClick(X):
- if X.char == '1':
- ClickX1()
- if X.char == '2':
- ClickX2()
- if X.char == '3':
- ClickX3()
- def ClickEnter(Event): # Функция при нажатии Энтера
- ShootWindowDestroy() # Вызывает закрытие окна
- ShootWindow.bind('<Return>', ClickEnter) # Забита на нажатие энтера во всём окне.
- ShootWindow.bind('<KeyPress>', onClick)
- ButtonFix = Button(ShootWindow, text='Зафиксировать попадание', font='Arial 24', command=ShootWindowDestroy)
- if points == 0: ButtonFix.config(text='Зафиксировать промах')
- ButtonFix.pack()
- ShootWindow.focus_set()
- ShootWindow.grab_set()
- def Cancel(): # Отмена последнего хода
- global casting
- global cast
- global score1
- global score2
- global score1mem
- global score2mem
- if casting == 0:
- if cast == 1:
- score2 = score2mem
- score2Var.set(score2)
- if cast == 2:
- score1 = score1mem
- score1Var.set(score1)
- FocusChange()
- FocusCast()
- else:
- casting = 0
- if cast == 1:
- score1 = score1mem
- score1Var.set(score1)
- if cast == 2:
- score2 = score2mem
- score2Var.set(score2)
- FocusCast()
- def ClickX1():
- global POINT
- global ITOGPOINT
- global lastX2
- if POINT == 50: # Если попадание в булл, то оно тоже засчитывается как x2
- lastX2 = 1
- else:
- lastX2 = 0
- ITOGPOINT = POINT
- pointsVar.set(str(ITOGPOINT))
- def ClickX2():
- global POINT
- global ITOGPOINT
- global lastX2
- lastX2 = 1
- ITOGPOINT = POINT * 2
- pointsVar.set(str(ITOGPOINT))
- def ClickX3():
- global POINT
- global ITOGPOINT
- global lastX2
- lastX2 = 0
- ITOGPOINT = POINT * 3
- pointsVar.set(str(ITOGPOINT))
- StartButton = Button(frame5_1, text='Начать раунд', font='Arial 28', command=Game)
- StartButton.pack()
- def Win(who):
- def StopGame():
- # Скрыть все фреймы игры:
- frame21.place_forget()
- frame22.place_forget()
- frame23.place_forget()
- # Вернуть фреймы меню:
- frame1.place(relwidth=0.4, relheight=0.2, relx=0.05, rely=0.02)
- frame2.place(relwidth=0.4, relheight=0.2, relx=0.55, rely=0.02)
- frame3.place(relwidth=0.9, relheight=0.2, relx=0.05, rely=0.24)
- frame4.place(relwidth=0.9, relheight=0.3, relx=0.05, rely=0.46)
- frame5.place(relwidth=0.9, relheight=0.2, relx=0.05, rely=0.78)
- name1pole.config(state='normal')
- name2pole.config(state='normal')
- global casting
- casting = 0
- WinWindow.destroy()
- WinWindow = Toplevel(root)
- x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2 - 400 # Чтобы поместить окошко в центре экрана
- y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2 - 100 - 200
- WinWindow.geometry("800x200")
- WinWindow.wm_geometry("+%d+%d" % (x, y))
- WinWindow.resizable(False, False)
- FrameWinWindow = Frame(WinWindow, width=800, height=50)
- FrameWinWindow.pack()
- Label(FrameWinWindow, text=('Победитель: '), font='Arial 30', pady=25, padx=5).pack(side=LEFT)
- Winner = Label(FrameWinWindow, textvariable=name1, font='Arial 30 bold',pady=25,padx=5)
- if who == 2: Winner.config(textvariable=name2)
- Winner.pack(side=LEFT)
- ButtonMenu = Button(WinWindow, text=' ОК ', font='Arial 24', command=StopGame)
- ButtonMenu.pack()
- WinWindow.focus_set()
- WinWindow.grab_set()
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement