Я делаю игру с помощью tkinter и черепаховой графики. Мой режим для двух игроков работает отлично, однако в одиночном режиме экран выключается, как только он открывается. Я попробовал метод exitonclick, но при его использовании моя черепаха не двигается. Еще одна проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы метка внутри изображения показывала победителя, так как я могу это сделать?
from tkinter import *
from turtle import *
#Single Player
def single():
Name_1 = inputname.get().strip()
opl.destroy()
windows = Screen()
windows.title("Bounce Game by TechLord")
windows.bgcolor("white")
windows.setup(width=1200, height=760)
windows.tracer(0)
# Score
score = 0
# paddle a
paddle = Turtle()
paddle.speed(0)
paddle.shape("square")
paddle.color("blue")
paddle.shapesize(stretch_wid=1, stretch_len=5)
paddle.penup()
paddle.goto(0, -330)
# ball
ball = Turtle()
ball.speed(0)
ball.shape("circle")
ball.color("red")
ball.shapesize(stretch_wid=1.2, stretch_len=1.2)
ball.penup()
ball.goto(0, 0)
ball.dx = 1
ball.dy = 1
# Pen
pen = Turtle()
pen.speed(0)
pen.color("black")
pen.penup()
pen.hideturtle()
pen.goto(0, 330)
pen.write("{}: 0".format(Name_1), align="center", font=("Bebas Neue", 24, "italic"))
# Function
def paddle_right():
x = paddle.xcor()
x += 20
paddle.setx(x)
def paddle_left():
x = paddle.xcor()
x -= 20
paddle.setx(x)
# keyboard binding
windows.listen()
windows.onkeypress(paddle_right, "Right")
windows.onkeypress(paddle_left, "Left")
# Main loop
while score < 10:
windows.update()
# moving ball
ball.setx(ball.xcor() + ball.dx)
ball.sety(ball.ycor() + ball.dy)
# border checking
# Top and Side borders
if ball.ycor() > 380:
ball.sety(380)
ball.dy *= -1
if ball.xcor() > 600:
ball.setx(600)
ball.dx *= -1
if ball.xcor() < -600:
ball.setx(-600)
ball.dx *= -1
# paddle and ball collisions
if ball.ycor() < -320 and ball.ycor() > -330 and (ball.xcor() < paddle.xcor() + 55 and ball.xcor() > paddle.xcor() - 55):
ball.setx(-330)
ball.dx *= -1
else:
score += 1
Screen().bye()
#Double Player
def double():
name_1 = inputname1.get().strip()
name_2 = inputname2.get().strip()
pl.destroy()
windows = Screen()
windows.title("Bounce Game by TechLord")
windows.bgcolor("white")
windows.setup(width=1200, height=760)
windows.tracer(0)
# Score
score_a = 0
score_b = 0
# paddle a
pad_a = Turtle()
pad_a.speed(0)
pad_a.shape("square")
pad_a.color("blue")
pad_a.shapesize(stretch_wid=5, stretch_len=1)
pad_a.penup()
pad_a.goto(-550, 0)
# paddle b
pad_b = Turtle()
pad_b.speed(0)
pad_b.shape("square")
pad_b.color("blue")
pad_b.shapesize(stretch_wid=5, stretch_len=1)
pad_b.penup()
pad_b.goto(550, 0)
# ball
ball = Turtle()
ball.speed(0)
ball.shape("circle")
ball.color("red")
ball.shapesize(stretch_wid=1.2, stretch_len=1.2)
ball.penup()
ball.goto(0, 0)
ball.dx = 1
ball.dy = -1
# Pen
pen = Turtle()
pen.speed(0)
pen.color("black")
pen.penup()
pen.hideturtle()
pen.goto(0, 330)
pen.write("{}: 0 {}: 0".format(name_1, name_2), align="center", font=("Bebas Neue", 24, "italic"))
# Function
def pad_a_up():
y = pad_a.ycor()
y += 20
pad_a.sety(y)
def pad_a_down():
y = pad_a.ycor()
y -= 20
pad_a.sety(y)
def pad_b_up():
y = pad_b.ycor()
y += 20
pad_b.sety(y)
def pad_b_down():
y = pad_b.ycor()
y -= 20
pad_b.sety(y)
# keyboard binding
windows.listen()
windows.onkeypress(pad_a_up, "w")
windows.onkeypress(pad_a_down, "s")
windows.onkeypress(pad_b_up, "Up")
windows.onkeypress(pad_b_down, "Down")
# Main loop
while score_a < 10 and score_b < 10:
windows.update()
# moving ball
ball.setx(ball.xcor() + ball.dx)
ball.sety(ball.ycor() + ball.dy)
# border checking
# Top and Bottom
if ball.ycor() > 370:
ball.sety(370)
ball.dy *= -1
if ball.ycor() < -370:
ball.sety(-370)
ball.dy *= -1
if ball.xcor() > 610:
ball.goto(0, 0)
ball.dx *= -1
score_a += 1
pen.clear()
pen.write("{}: {} {}: {}".format(name_1, score_a, name_2, score_b), align="center",
font=("Bebas Neue", 24, "italic"))
if ball.xcor() < -610:
ball.goto(0, 0)
ball.dx *= -1
score_b += 1
pen.clear()
pen.write("{}: {} {}: {}".format(name_1, score_a, name_2, score_b), align="center",
font=("Bebas Neue", 24, "italic"))
# paddle and ball collisions
if ball.xcor() > 540 and ball.xcor() < 550 and (
ball.ycor() < pad_b.ycor() + 55 and ball.ycor() > pad_b.ycor() - 55):
ball.setx(540)
ball.dx *= -1
if ball.xcor() < -540 and ball.xcor() > -550 and (
ball.ycor() < pad_a.ycor() + 55 and ball.ycor() > pad_a.ycor() - 55):
ball.setx(-540)
ball.dx *= -1
if score_a == 10:
res = Tk()
pic = PhotoImage(file=r"F:\hassan\winner.png")
picture = Label(res, image=pic).grid(row=0, column=0)
winner = Label(res, In=picture, text=name_1, justify=CENTER).pack(side=BOTTOM)
elif score_b == 10:
res = Tk()
pic = PhotoImage(file=r"F:\hassan\winner.png")
picture = Label(res, image=pic).grid(row=0, column=0)
winner = Label(res, In=picture, text=name_2, justify=CENTER).pack(side=BOTTOM)
Screen().bye()
def twoplayer():
global inputname1
global inputname2
global pl
win.destroy()
pl = Tk()
pl.title("Name Entry")
inputname1 = StringVar()
inputname2 = StringVar()
pl1 = Label(pl, text="Player 1", fg="black", font=("arial", 20), justify=LEFT).grid(row=0, column=0, padx=10, pady=10)
pl2 = Label(pl, text="Player 2", fg="black", font=("arial", 20), justify=LEFT).grid(row=1, column=0, padx=10, pady=10)
name1 = Entry(pl, width=20, font=("bebas neue", 20, "italic"), bg="white", textvariable=inputname1, justify=LEFT)
name1.grid(row=0, column=1, padx=5, pady=10)
name2 = Entry(pl, width=20, font=("bebas neue", 20, "italic"), bg="white", textvariable=inputname2, justify=LEFT)
name2.grid(row=1, column=1, padx=5, pady=10)
start = Button(pl, text="start", fg="white", bg="black", bd=3, font=("bebas neue", 20), cursor="hand2", width=8, height=1, command=double).grid(row=2, column=1, padx=10, pady=10)
pl.mainloop()
def oneplayer():
global inputname
global opl
win.destroy()
opl = Tk()
opl.title("Name Entry")
inputname = StringVar()
pl1 = Label(opl, text="Player 1", fg="black", font=("arial", 20), justify=LEFT).grid(row=0, column=0, padx=10, pady=10)
name1 = Entry(opl, width=20, font=("bebas neue", 20, "italic"), bg="white", textvariable=inputname, justify=LEFT)
name1.grid(row=0, column=1, padx=5, pady=10)
start = Button(opl, text="start", fg="white", bg="black", bd=3, font=("bebas neue", 20), cursor="hand2", width=8, height=1, command=single).grid(row=1, column=1, padx=10, pady=10)
opl.mainloop()
#Defining game start menu
win = Tk()
win.title("Start Menu")
win.geometry("350x500")
img = PhotoImage(file=r"F:\hassan\First year\Programming Fundamentals(PL)\bounce.png")
image = Label(win, image=img).grid(row=0, column=0)
name = Label(win, text="BOUNCE!!", fg="red", font=("arial black", 30, "italic")).grid()
byline = Label(win, text="By TechLord", fg="brown", font=("arial black", 10, "italic")).grid()
one_player = Button(win, text="1 Player", fg="black", bg="blue", font=("calibri", 20, "bold"), cursor="hand2", command=oneplayer).grid(row=3, column=0, rowspan=1, columnspan=1, padx=10, pady=10)
two_player = Button(win, text="2 Player", fg="black", bg="turquoise", font=("calibri", 20, "bold"), cursor="hand2", command=twoplayer).grid(row=4, column=0, rowspan=1, columnspan=1, padx=10, pady=10)
win.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/597 ... s-it-opens
Мой экран черепахи закрывается, как только открывается ⇐ Python
Программы на Python
-
Anonymous
1762751527
Anonymous
Я делаю игру с помощью tkinter и черепаховой графики. Мой режим для двух игроков работает отлично, однако в одиночном режиме экран выключается, как только он открывается. Я попробовал метод exitonclick, но при его использовании моя черепаха не двигается. Еще одна проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы метка внутри изображения показывала победителя, так как я могу это сделать?
from tkinter import *
from turtle import *
#Single Player
def single():
Name_1 = inputname.get().strip()
opl.destroy()
windows = Screen()
windows.title("Bounce Game by TechLord")
windows.bgcolor("white")
windows.setup(width=1200, height=760)
windows.tracer(0)
# Score
score = 0
# paddle a
paddle = Turtle()
paddle.speed(0)
paddle.shape("square")
paddle.color("blue")
paddle.shapesize(stretch_wid=1, stretch_len=5)
paddle.penup()
paddle.goto(0, -330)
# ball
ball = Turtle()
ball.speed(0)
ball.shape("circle")
ball.color("red")
ball.shapesize(stretch_wid=1.2, stretch_len=1.2)
ball.penup()
ball.goto(0, 0)
ball.dx = 1
ball.dy = 1
# Pen
pen = Turtle()
pen.speed(0)
pen.color("black")
pen.penup()
pen.hideturtle()
pen.goto(0, 330)
pen.write("{}: 0".format(Name_1), align="center", font=("Bebas Neue", 24, "italic"))
# Function
def paddle_right():
x = paddle.xcor()
x += 20
paddle.setx(x)
def paddle_left():
x = paddle.xcor()
x -= 20
paddle.setx(x)
# keyboard binding
windows.listen()
windows.onkeypress(paddle_right, "Right")
windows.onkeypress(paddle_left, "Left")
# Main loop
while score < 10:
windows.update()
# moving ball
ball.setx(ball.xcor() + ball.dx)
ball.sety(ball.ycor() + ball.dy)
# border checking
# Top and Side borders
if ball.ycor() > 380:
ball.sety(380)
ball.dy *= -1
if ball.xcor() > 600:
ball.setx(600)
ball.dx *= -1
if ball.xcor() < -600:
ball.setx(-600)
ball.dx *= -1
# paddle and ball collisions
if ball.ycor() < -320 and ball.ycor() > -330 and (ball.xcor() < paddle.xcor() + 55 and ball.xcor() > paddle.xcor() - 55):
ball.setx(-330)
ball.dx *= -1
else:
score += 1
Screen().bye()
#Double Player
def double():
name_1 = inputname1.get().strip()
name_2 = inputname2.get().strip()
pl.destroy()
windows = Screen()
windows.title("Bounce Game by TechLord")
windows.bgcolor("white")
windows.setup(width=1200, height=760)
windows.tracer(0)
# Score
score_a = 0
score_b = 0
# paddle a
pad_a = Turtle()
pad_a.speed(0)
pad_a.shape("square")
pad_a.color("blue")
pad_a.shapesize(stretch_wid=5, stretch_len=1)
pad_a.penup()
pad_a.goto(-550, 0)
# paddle b
pad_b = Turtle()
pad_b.speed(0)
pad_b.shape("square")
pad_b.color("blue")
pad_b.shapesize(stretch_wid=5, stretch_len=1)
pad_b.penup()
pad_b.goto(550, 0)
# ball
ball = Turtle()
ball.speed(0)
ball.shape("circle")
ball.color("red")
ball.shapesize(stretch_wid=1.2, stretch_len=1.2)
ball.penup()
ball.goto(0, 0)
ball.dx = 1
ball.dy = -1
# Pen
pen = Turtle()
pen.speed(0)
pen.color("black")
pen.penup()
pen.hideturtle()
pen.goto(0, 330)
pen.write("{}: 0 {}: 0".format(name_1, name_2), align="center", font=("Bebas Neue", 24, "italic"))
# Function
def pad_a_up():
y = pad_a.ycor()
y += 20
pad_a.sety(y)
def pad_a_down():
y = pad_a.ycor()
y -= 20
pad_a.sety(y)
def pad_b_up():
y = pad_b.ycor()
y += 20
pad_b.sety(y)
def pad_b_down():
y = pad_b.ycor()
y -= 20
pad_b.sety(y)
# keyboard binding
windows.listen()
windows.onkeypress(pad_a_up, "w")
windows.onkeypress(pad_a_down, "s")
windows.onkeypress(pad_b_up, "Up")
windows.onkeypress(pad_b_down, "Down")
# Main loop
while score_a < 10 and score_b < 10:
windows.update()
# moving ball
ball.setx(ball.xcor() + ball.dx)
ball.sety(ball.ycor() + ball.dy)
# border checking
# Top and Bottom
if ball.ycor() > 370:
ball.sety(370)
ball.dy *= -1
if ball.ycor() < -370:
ball.sety(-370)
ball.dy *= -1
if ball.xcor() > 610:
ball.goto(0, 0)
ball.dx *= -1
score_a += 1
pen.clear()
pen.write("{}: {} {}: {}".format(name_1, score_a, name_2, score_b), align="center",
font=("Bebas Neue", 24, "italic"))
if ball.xcor() < -610:
ball.goto(0, 0)
ball.dx *= -1
score_b += 1
pen.clear()
pen.write("{}: {} {}: {}".format(name_1, score_a, name_2, score_b), align="center",
font=("Bebas Neue", 24, "italic"))
# paddle and ball collisions
if ball.xcor() > 540 and ball.xcor() < 550 and (
ball.ycor() < pad_b.ycor() + 55 and ball.ycor() > pad_b.ycor() - 55):
ball.setx(540)
ball.dx *= -1
if ball.xcor() < -540 and ball.xcor() > -550 and (
ball.ycor() < pad_a.ycor() + 55 and ball.ycor() > pad_a.ycor() - 55):
ball.setx(-540)
ball.dx *= -1
if score_a == 10:
res = Tk()
pic = PhotoImage(file=r"F:\hassan\winner.png")
picture = Label(res, image=pic).grid(row=0, column=0)
winner = Label(res, In=picture, text=name_1, justify=CENTER).pack(side=BOTTOM)
elif score_b == 10:
res = Tk()
pic = PhotoImage(file=r"F:\hassan\winner.png")
picture = Label(res, image=pic).grid(row=0, column=0)
winner = Label(res, In=picture, text=name_2, justify=CENTER).pack(side=BOTTOM)
Screen().bye()
def twoplayer():
global inputname1
global inputname2
global pl
win.destroy()
pl = Tk()
pl.title("Name Entry")
inputname1 = StringVar()
inputname2 = StringVar()
pl1 = Label(pl, text="Player 1", fg="black", font=("arial", 20), justify=LEFT).grid(row=0, column=0, padx=10, pady=10)
pl2 = Label(pl, text="Player 2", fg="black", font=("arial", 20), justify=LEFT).grid(row=1, column=0, padx=10, pady=10)
name1 = Entry(pl, width=20, font=("bebas neue", 20, "italic"), bg="white", textvariable=inputname1, justify=LEFT)
name1.grid(row=0, column=1, padx=5, pady=10)
name2 = Entry(pl, width=20, font=("bebas neue", 20, "italic"), bg="white", textvariable=inputname2, justify=LEFT)
name2.grid(row=1, column=1, padx=5, pady=10)
start = Button(pl, text="start", fg="white", bg="black", bd=3, font=("bebas neue", 20), cursor="hand2", width=8, height=1, command=double).grid(row=2, column=1, padx=10, pady=10)
pl.mainloop()
def oneplayer():
global inputname
global opl
win.destroy()
opl = Tk()
opl.title("Name Entry")
inputname = StringVar()
pl1 = Label(opl, text="Player 1", fg="black", font=("arial", 20), justify=LEFT).grid(row=0, column=0, padx=10, pady=10)
name1 = Entry(opl, width=20, font=("bebas neue", 20, "italic"), bg="white", textvariable=inputname, justify=LEFT)
name1.grid(row=0, column=1, padx=5, pady=10)
start = Button(opl, text="start", fg="white", bg="black", bd=3, font=("bebas neue", 20), cursor="hand2", width=8, height=1, command=single).grid(row=1, column=1, padx=10, pady=10)
opl.mainloop()
#Defining game start menu
win = Tk()
win.title("Start Menu")
win.geometry("350x500")
img = PhotoImage(file=r"F:\hassan\First year\Programming Fundamentals(PL)\bounce.png")
image = Label(win, image=img).grid(row=0, column=0)
name = Label(win, text="BOUNCE!!", fg="red", font=("arial black", 30, "italic")).grid()
byline = Label(win, text="By TechLord", fg="brown", font=("arial black", 10, "italic")).grid()
one_player = Button(win, text="1 Player", fg="black", bg="blue", font=("calibri", 20, "bold"), cursor="hand2", command=oneplayer).grid(row=3, column=0, rowspan=1, columnspan=1, padx=10, pady=10)
two_player = Button(win, text="2 Player", fg="black", bg="turquoise", font=("calibri", 20, "bold"), cursor="hand2", command=twoplayer).grid(row=4, column=0, rowspan=1, columnspan=1, padx=10, pady=10)
win.mainloop()
Подробнее здесь: [url]https://stackoverflow.com/questions/59790057/my-turtle-screen-closes-as-soon-as-it-opens[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия