Wie im letzten Post angekündigt kommt jetzt das erste update zu meinem kleinen 2d spiel. Über das Wochenende habe ich die grundlegende Bases für das Projekt geschaffen.
Die Basis ist jedoch noch nicht voll ausgereift. Gerade wenn es um die Ränder des “Spielfeldes” geht muss noch ein Limit eingeführt werden.
Alles in allem Steht jetzt nicht mehr viel im weg um voran zu kommen mit dem Projekt. Die ziele der nächsten Woche sind die Erstellung von Rand Parametern und das erstellen von ersten Objekten und auch Gegnern im spiel. Wenn ich schnell voran komme sind auch schon erste Charaktere und Map “Designs” in Planung doch wie gesagt liegt auf diesen Designs nicht der Fokus.
import tkinter as tk
class MoveCharacter(tk.Canvas):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.dx = 0
self.dy = 0
# Create the box (character)
self.box = self.create_rectangle(50, 50, 60, 60, fill="black")
# Set update interval in milliseconds
self.dt = 100
self.tick()
# Movement handler that gets called every dt milliseconds
def tick(self):
self.move(self.box, self.dx, self.dy)
# Reset the movement after each tick
self.dx = 0
self.dy = 0
# Repeatedly call tick method to continue the movement loop
self.after(self.dt, self.tick)
# Method to change direction of movement
def change_heading(self, dx, dy):
self.dx = dx
self.dy = dy
def main():
# Create the main window
root = tk.Tk()
root.title("2D Game")
root.geometry("1080x720")
root.configure(bg="black")
# Create the MoveCharacter canvas (size 900x900)
character_canvas = MoveCharacter(root, width=900, height=900, bg="lightblue")
character_canvas.pack()
# Define movement step size
ds = 100 # Smaller step for smoother movement
# Bind key presses for movement
root.bind("<KeyPress-a>", lambda _: character_canvas.change_heading(-ds, 0)) # Move left
root.bind("<KeyPress-d>", lambda _: character_canvas.change_heading(ds, 0)) # Move right
root.bind("<KeyPress-w>", lambda _: character_canvas.change_heading(0, -ds)) # Move up
root.bind("<KeyPress-s>", lambda _: character_canvas.change_heading(0, ds)) # Move down
# Start the main loop
root.mainloop()
# Run the program
main()