帮我用python的tkinter写一个2d版我的世界游戏中有五个方块分别是草块泥土石头基岩橡木木头并且可以用左键销毁方块右键添加方块玩家可以用1、2、3、456这6个键切换方块游戏开始时有一个球这个球就是玩家角色玩家可以用方向键操控这个球而且还可以生成随机地形
以下是一个简单的示例代码,实现了你提到的功能:
import tkinter as tk
import random
# 游戏界面的尺寸
WIDTH = 800
HEIGHT = 600
# 方块的尺寸
BLOCK_SIZE = 40
# 方块类型
BLOCK_TYPES = ['Grass', 'Dirt', 'Stone', 'Bedrock', 'Wood', 'Log']
# 玩家角色
PLAYER_COLOR = 'red'
PLAYER_SIZE = 20
# 地图大小
MAP_WIDTH = WIDTH // BLOCK_SIZE
MAP_HEIGHT = HEIGHT // BLOCK_SIZE
class Game:
def __init__(self):
# 创建游戏窗口
self.window = tk.Tk()
self.window.title("2D Minecraft")
self.canvas = tk.Canvas(self.window, width=WIDTH, height=HEIGHT, bg='white')
self.canvas.pack()
# 初始化地图
self.map_data = [[None] * MAP_WIDTH for _ in range(MAP_HEIGHT)]
self.generate_random_map()
# 初始化玩家角色位置
self.player_x = 0
self.player_y = 0
# 初始化当前选中的方块类型
self.current_block = BLOCK_TYPES[0]
# 绑定鼠标事件
self.canvas.bind("<Button-1>", self.destroy_block)
self.canvas.bind("<Button-3>", self.add_block)
# 绑定键盘事件
self.canvas.bind("<KeyPress>", self.move_player)
self.canvas.focus_set()
# 主循环
self.update()
def generate_random_map(self):
for i in range(MAP_HEIGHT):
for j in range(MAP_WIDTH):
block_type = random.choice(BLOCK_TYPES)
self.map_data[i][j] = block_type
def draw_map(self):
self.canvas.delete("all")
for i in range(MAP_HEIGHT):
for j in range(MAP_WIDTH):
if self.map_data[i][j] is not None:
x1 = j * BLOCK_SIZE
y1 = i * BLOCK_SIZE
x2 = x1 + BLOCK_SIZE
y2 = y1 + BLOCK_SIZE
self.canvas.create_rectangle(x1, y1, x2, y2, fill=self.map_data[i][j])
def destroy_block(self, event):
x = event.x // BLOCK_SIZE
y = event.y // BLOCK_SIZE
if 0 <= x < MAP_WIDTH and 0 <= y < MAP_HEIGHT:
self.map_data[y][x] = None
self.draw_map()
def add_block(self, event):
x = event.x // BLOCK_SIZE
y = event.y // BLOCK_SIZE
if 0 <= x < MAP_WIDTH and 0 <= y < MAP_HEIGHT:
self.map_data[y][x] = self.current_block
self.draw_map()
def move_player(self, event):
if event.keysym == 'Up':
self.player_y -= 1
elif event.keysym == 'Down':
self.player_y += 1
elif event.keysym == 'Left':
self.player_x -= 1
elif event.keysym == 'Right':
self.player_x += 1
self.draw_map()
self.canvas.create_oval(self.player_x, self.player_y,
self.player_x + PLAYER_SIZE, self.player_y + PLAYER_SIZE,
fill=PLAYER_COLOR)
def update(self):
self.draw_map()
self.canvas.create_oval(self.player_x, self.player_y,
self.player_x + PLAYER_SIZE, self.player_y + PLAYER_SIZE,
fill=PLAYER_COLOR)
self.window.after(100, self.update)
if __name__ == '__main__':
game = Game()
tk.mainloop()
你可以根据需要进行扩展和修改,添加更多的方块类型和功能。希望对你有帮助
原文地址: https://www.cveoy.top/t/topic/h63X 著作权归作者所有。请勿转载和采集!