Python Tkinter 飞机大战游戏教程:简单易懂的代码示例
用一个简单的飞机大战游戏例子来学习如何使用 Python 3.11 的 Tkinter 库构建游戏。这个游戏包含玩家飞机、敌人飞机、弹击弹击和碰撞检测等功能。
import tkinter as tk
class Game:
def __init__(self, root):
self.root = root
self.canvas = tk.Canvas(root, width=600, height=600)
self.canvas.pack()
self.canvas.bind('<KeyPress>', self.on_key_press)
self.canvas.bind('<KeyRelease>', self.on_key_release)
self.canvas.focus_set()
self.player = self.canvas.create_rectangle(275, 500, 325, 550, fill='blue')
self.player_speed = 5
self.player_direction = 0
self.canvas.bind('<Button-1>', self.fire_bullet)
self.bullets = []
self.enemy = self.canvas.create_rectangle(275, 50, 325, 100, fill='red')
self.enemy_speed = 2
self.enemy_direction = 1
self.game_over = False
self.update()
def update(self):
if not self.game_over:
self.move_player()
self.move_bullets()
self.move_enemy()
self.check_collision()
self.root.after(10, self.update)
def move_player(self):
x1, y1, x2, y2 = self.canvas.coords(self.player)
if self.player_direction == 1 and x1 > 0:
self.canvas.move(self.player, -self.player_speed, 0)
elif self.player_direction == 2 and x2 < 600:
self.canvas.move(self.player, self.player_speed, 0)
def on_key_press(self, event):
if event.keysym == 'Left':
self.player_direction = 1
elif event.keysym == 'Right':
self.player_direction = 2
def on_key_release(self, event):
if event.keysym in ['Left', 'Right']:
self.player_direction = 0
def fire_bullet(self, event):
x1, y1, x2, y2 = self.canvas.coords(self.player)
bullet = self.canvas.create_rectangle(x1 + 25, y1 - 10, x2 - 25, y2 - 10, fill='yellow')
self.bullets.append(bullet)
def move_bullets(self):
new_bullets = []
for bullet in self.bullets:
self.canvas.move(bullet, 0, -5)
x1, y1, x2, y2 = self.canvas.coords(bullet)
if y1 < 0:
self.canvas.delete(bullet)
else:
new_bullets.append(bullet)
self.bullets = new_bullets
def move_enemy(self):
x1, y1, x2, y2 = self.canvas.coords(self.enemy)
if x1 <= 0 or x2 >= 600:
self.enemy_direction *= -1
self.canvas.move(self.enemy, self.enemy_speed * self.enemy_direction, 0)
def check_collision(self):
for bullet in self.bullets:
if self.canvas.coords(bullet) in self.canvas.find_overlapping(*self.canvas.coords(self.enemy)):
self.canvas.delete(bullet)
self.canvas.delete(self.enemy)
self.game_over = True
self.canvas.create_text(300, 300, text='Game Over', font=('Arial', 30), fill='red')
root = tk.Tk()
game = Game(root)
root.mainloop()
这个游戏界面的大小为 600x600,玩家飞机是蓝色的矩形,敌人飞机是红色的矩形。玩家可以使用左右初箭来控制飞机的移动,按下鼠标左键可以弹击弹击。弹击向上移动并在画布的顶部消失。敌人飞机在水平方向上移动,当到达画布的边缘时会改变方向。如果玩家的弹击打到敌人飞机,游戏结束,并在画布中心显示“Game Over”的文字。
希望对你有助。
原文地址: https://www.cveoy.top/t/topic/pPUI 著作权归作者所有。请勿转载和采集!