gpt4 book ai didi

python - 使其函数在按下 2 次或更多按键时执行

转载 作者:行者123 更新时间:2023-12-01 00:44:12 25 4
gpt4 key购买 nike

我是 Python 新手,我需要一些帮助。如何使函数在按下 2 次或更多按键后执行?我正在尝试使用 turtle 制作一款类似于 Minicraft(2D 自上而下 Action 游戏)的游戏,您可以使用从石头和木材中获得的 Material 来制作各种不同的元素。代码尚未完成。

我需要帮助的代码:

stone = turtle.Turtle()
stone.shape("circle")
stone.color("gray")
stone.penup()
stone.setposition(-220, 180)
stone.shapesize(stretch_wid=2, stretch_len=3)

def stonebreak():
stone = turtle.Turtle ()
stone.shape ("circle")
stone.color ("gray")
stone.penup ()
stone.setposition (-220, 180)
stone.shapesize (stretch_wid=2, stretch_len=3)
stone.speed("slow")
stone.hideturtle()
stone = 0
stone += 9
stonestring = "Stone: %s" % stone
penstone1.write (stonestring, False, align="left", font=("system", 15, "normal"))
penstone1.clear()
penstone1.write (stonestring, False, align="left", font=("system", 15, "normal"))


if isCollision(player, stone):
wn.onkeypress(stonebreak, "space")
stone.hideturtle()

完整代码:

import turtle
import random
import math
import time
turtle.tracer(5)
score = 0

# Turtles

wn = turtle.Screen()
wn.tracer(0)
wn.bgcolor("black")
wn.title("Catcher")
wn.setup(800, 600)


penwood1 = turtle.Turtle()
penwood1.penup()
penwood1.color("white")
penwood1.hideturtle()
penwood1.goto(-280, 275)
wood = 0
woodstring = "Wood: %s" %wood
penwood1.write(woodstring, False, align ="left", font = ("system", 15, "normal"))

penstone1 = turtle.Turtle()
penstone1.penup()
penstone1.color("white")
penstone1.hideturtle()
penstone1.goto(-200, 275)
stone = 0
stonestring = "Stone: %s" %stone
penstone1.write(stonestring, False, align ="left", font = ("system", 15, "normal"))

player = turtle. Turtle()
player.hideturtle()
player.color("white")
player.shape("triangle")
player.penup()
player.setheading(180)
player.setposition(180, 0)
player.showturtle()
player.penup()
player.speed(0)

pen = turtle.Turtle()
pen.color("white")
pen.shape("circle")
pen.hideturtle()
pen.penup()
pen.setposition(360, 275)
pen.pendown()
pen.setposition(360, -275)
pen.setposition(-360, -275)
pen.setposition(-360, 275)
pen.setposition(360, 275)
pen.shapesize(stretch_wid=3, stretch_len=3)


pen1 = turtle.Turtle()
pen1.color("white")
pen1.shape("circle")
pen1.hideturtle()
pen1.penup()
pen1.goto(-360, 275)
scorestring = "Score: %s" %score
pen1.write(scorestring, False, align = "left", font = ("system", 15, "normal"))


tree = turtle.Turtle()
tree.shape("circle")
tree.color("green")
tree.penup()
tree.setposition(200, 140)

stone1 = turtle.Turtle ()
stone1.shape ("circle")
stone1.color ("gray")
stone1.penup ()
stone1.setposition (-200, 140)
stone1.shapesize (stretch_wid=2, stretch_len=3)
stone1.speed ("slow")

stone = turtle.Turtle()
stone.shape("circle")
stone.color("gray")
stone.penup()
stone.setposition(-220, 180)
stone.shapesize(stretch_wid=2, stretch_len=3)

# ______________________________________________________
treedown = turtle.Turtle()
treedown.shape("circle")
treedown.color("green")
treedown.penup()
treedown.setposition(-250, -140)



# Movement features

def pleft():
player.setheading(180)
x = player.xcor()
x -= 20
if x < -360:
x = - 360

player.setx(x)

def pright():
player.setheading(0)
x = player.xcor()
x += 20
if x > 360:
x = + 360

player.setx(x)

def pdown():
player.setheading(270)
y = player.ycor()
y -= 20
if y < -275:
y = - 275

player.sety(y)

def pup():
player.setheading(90)
y = player.ycor()
y += 20
if y > 275:
y = + 275

player.sety(y)


wn.listen()
wn.onkeypress(pleft, "Left")
wn.onkeypress(pright, "Right")
wn.onkeypress(pup, "Up")
wn.onkeypress(pdown, "Down")



while True:
wn.update()


def treebreak():
tree.speed("slow")
tree.hideturtle()
wood = 0
wood += 2
woodstring = "Wood: %s" % wood
penwood1.write (woodstring, False, align="left", font=("system", 15, "normal"))
penwood1.clear()
penwood1.write (woodstring, False, align="left", font=("system", 15, "normal"))

def treebbreak():
treedown.speed ("slow")
treedown.hideturtle ()
wood = 2
wood += 3
woodstring = "Wood: %s" % wood
penwood1.write (woodstring, False, align="left", font=("system", 15, "normal"))
penwood1.clear ()
penwood1.write (woodstring, False, align="left", font=("system", 15, "normal"))

if player.xcor () == -240 and player.ycor () == -140:
wn.onkeypress (treebbreak, "space")


if player.xcor() == 180 and player.ycor() == 140:
wn.onkeypress(treebreak, "space")

if player.xcor() == 200 and player.ycor() == 120:
wn.onkeypress(treebreak, "space")

if player.xcor() == 200 and player.ycor() == 160:
wn.onkeypress(treebreak, "space")

if player.xcor() == 221 and player.ycor() == 141:
wn.onkeypress(treebreak, "space")

def isCollision(t1, t2):
distance = math.sqrt(math.pow(t1.xcor()-t2.xcor(),2)+math.pow(t1.ycor()-t2.ycor(),2))
if distance < 25:
return True
else:
return False

def stonebreak():
stone = turtle.Turtle ()
stone.shape ("circle")
stone.color ("gray")
stone.penup ()
stone.setposition (-220, 180)
stone.shapesize (stretch_wid=2, stretch_len=3)
stone.speed("slow")
stone.hideturtle()
stone = 0
stone += 9
stonestring = "Stone: %s" % stone
penstone1.write (stonestring, False, align="left", font=("system", 15, "normal"))
penstone1.clear()
penstone1.write (stonestring, False, align="left", font=("system", 15, "normal"))


if isCollision(player, stone):
wn.onkeypress(stonebreak, "space")
stone.hideturtle()

def stone1break():
stone1 = turtle.Turtle ()
stone1.shape ("circle")
stone1.color ("gray")
stone1.penup ()
stone1.setposition (-200, 140)
stone1.shapesize (stretch_wid=2, stretch_len=3)
stone1.speed("slow")
stone1.hideturtle()
stone = 0
stone += 9
stonestring = "Stone: %s" % stone
penstone1.write (stonestring, False, align="left", font=("system", 15, "normal"))
penstone1.clear()
penstone1.write (stonestring, False, align="left", font=("system", 15, "normal"))


if isCollision(player, stone1):
wn.onkeypress(stone1break, "space")
stone1.hideturtle()



wn.mainloop()

我正在努力做到这一点,以便您在击中目标2次或以上后获得 Material 。

最佳答案

首先,您不应该在每次发生碰撞时都设置 onkeypress() 事件处理程序。尝试用其他方式处理:

def checkCollisions():
if isCollision(player, stone1):
stone1break()
if isCollision(player, stone2):
stone2break()
...

wn.onkeypress(checkCollisions, "space")

此代码和所有函数定义应放在主 (while True:) 循环之前。

然后,您将需要游戏对象的某些状态。简单的方法是添加变量stone1strength=2,stone2strength=2,...,并在相应的stonebreak()函数中减少它们,在石头强度低于1后清除石头。

我非常喜欢你的努力。它让我想起了我的第一个游戏编程步骤。 :)

下一步可能是重写代码,将石头对象存储到列表中并迭代它们,而不是处理数十个stoneX变量...

关于python - 使其函数在按下 2 次或更多按键时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57113444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com