帮我用python的tkinter写一个2d版我的世界游戏中有五个方块分别是草块泥土石头基岩橡木并且可以用左键销毁方块右键添加方块玩家可以用1、2、3、45这5个键切换方块游戏开始时有一个球这个球就是玩家角色玩家可以用方向键操控这个球而且还可以生成随机地形
下面是一个用Python的tkinter模块编写的2D版"我的世界"游戏的示例代码:
import tkinter as tk
import random
# 游戏窗口大小
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
# 方块大小
BLOCK_SIZE = 40
# 方块类型
BLOCK_TYPES = ["Grass", "Dirt", "Stone", "Bedrock", "Wood"]
# 随机地形生成概率
RANDOM_BLOCK_PROB = {
"Grass": 0.4,
"Dirt": 0.3,
"Stone": 0.2,
"Bedrock": 0.1,
"Wood": 0.0
}
class Game(tk.Tk):
def __init__(self):
super().__init__()
self.canvas = tk.Canvas(self, width=WINDOW_WIDTH, height=WINDOW_HEIGHT)
self.canvas.pack()
self.blocks = []
self.current_block = 0
self.ball = None
self.generate_terrain()
self.bind("<KeyPress>", self.on_key_press)
self.bind("<Button-1>", self.on_left_click)
self.bind("<Button-3>", self.on_right_click)
self.canvas.focus_set()
self.mainloop()
def generate_terrain(self):
for i in range(WINDOW_WIDTH // BLOCK_SIZE):
for j in range(WINDOW_HEIGHT // BLOCK_SIZE):
block_type = random.choices(list(RANDOM_BLOCK_PROB.keys()), list(RANDOM_BLOCK_PROB.values()))[0]
self.blocks.append(Block(i * BLOCK_SIZE, j * BLOCK_SIZE, block_type))
def on_key_press(self, event):
if event.keysym == "1":
self.current_block = 0
elif event.keysym == "2":
self.current_block = 1
elif event.keysym == "3":
self.current_block = 2
elif event.keysym == "4":
self.current_block = 3
elif event.keysym == "5":
self.current_block = 4
def on_left_click(self, event):
x = event.x // BLOCK_SIZE * BLOCK_SIZE
y = event.y // BLOCK_SIZE * BLOCK_SIZE
for block in self.blocks:
if block.x == x and block.y == y:
self.blocks.remove(block)
break
def on_right_click(self, event):
x = event.x // BLOCK_SIZE * BLOCK_SIZE
y = event.y // BLOCK_SIZE * BLOCK_SIZE
block_type = BLOCK_TYPES[self.current_block]
self.blocks.append(Block(x, y, block_type))
class Block:
def __init__(self, x, y, block_type):
self.x = x
self.y = y
self.block_type = block_type
if self.block_type == "Grass":
self.color = "green"
elif self.block_type == "Dirt":
self.color = "brown"
elif self.block_type == "Stone":
self.color = "gray"
elif self.block_type == "Bedrock":
self.color = "black"
elif self.block_type == "Wood":
self.color = "brown"
self.draw()
def draw(self):
x1 = self.x
y1 = self.y
x2 = self.x + BLOCK_SIZE
y2 = self.y + BLOCK_SIZE
Game.canvas.create_rectangle(x1, y1, x2, y2, fill=self.color)
class Ball:
def __init__(self, x, y):
self.x = x
self.y = y
self.radius = 10
self.color = "red"
self.draw()
def draw(self):
x1 = self.x - self.radius
y1 = self.y - self.radius
x2 = self.x + self.radius
y2 = self.y + self.radius
Game.canvas.create_oval(x1, y1, x2, y2, fill=self.color)
game = Game()
这个示例代码使用了tkinter模块创建了一个游戏窗口,并实现了方块的添加和销毁功能。玩家可以使用1、2、3、4、5键切换方块类型,使用左键销毁方块,使用右键添加方块。游戏开始时会生成随机地形。玩家角色为一个红色的球,可以使用方向键控制球的移动。
请注意,这只是一个简单的示例代码,还有很多功能可以进一步完善和扩展
原文地址: https://www.cveoy.top/t/topic/h63e 著作权归作者所有。请勿转载和采集!