用python写一个代码,输出一个小人能在窗口界面上移动,有血条,从高处掉落会掉血,被打会掉血
时间: 2024-03-27 14:39:20 浏览: 21
好的,这个需要使用Python的GUI库来实现。我选择使用Tkinter库,以下是代码示例:
```python
import tkinter as tk
import random
class Game:
def __init__(self, master):
self.master = master
self.master.title("小人游戏")
self.master.geometry("600x400")
self.canvas = tk.Canvas(self.master, bg="white")
self.canvas.pack(fill=tk.BOTH, expand=True)
self.canvas.bind("<Button-1>", self.on_click)
self.score = 100
self.score_label = tk.Label(self.master, text="血量:" + str(self.score))
self.score_label.pack()
self.player = self.canvas.create_oval(50, 50, 70, 70, fill="blue")
self.canvas.move(self.player, 250, 300)
self.canvas.bind("<Left>", self.move_left)
self.canvas.bind("<Right>", self.move_right)
self.master.after(1000, self.drop_ball)
def move_left(self, event):
self.canvas.move(self.player, -10, 0)
def move_right(self, event):
self.canvas.move(self.player, 10, 0)
def on_click(self, event):
x, y = event.x, event.y
overlaps = self.canvas.find_overlapping(x, y, x, y)
if len(overlaps) > 0 and overlaps[0] == self.player:
self.score -= 10
self.score_label.config(text="血量:" + str(self.score))
def drop_ball(self):
x = random.randint(0, 500)
ball = self.canvas.create_oval(x, 0, x+50, 50, fill="red")
while True:
self.canvas.move(ball, 0, 10)
if self.canvas.coords(ball)[3] >= 300:
self.canvas.delete(ball)
self.score -= 20
self.score_label.config(text="血量:" + str(self.score))
break
elif self.canvas.find_overlapping(*self.canvas.coords(ball)):
self.canvas.delete(ball)
break
self.master.update()
self.master.after(50, self.drop_ball)
if __name__ == "__main__":
root = tk.Tk()
game = Game(root)
root.mainloop()
```
这个程序实现了一个窗口界面,有一个可以移动的小人,可以用鼠标点击小人来减少血量,还有从上方掉落的红色球,碰到小人会减少血量。程序中使用了计时器来实现红色球不断下落的效果。你可以自己运行一下看看效果。