Pacman MapEditor

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Ich hoffe das ist jetzt kein Spagetti Code:

Code: Alles auswählen

import tkinter

class Map_Editor(object):
    def __init__(self, x, y):
        self.editorwindow = tkinter.Tk()
        self.editorwindow.title('Pacman MapEditor')
        self.entrys = {}
        
        for y_coord in range(y):
            for x_coord in range(x):
                name = ''.join(('y', str(y_coord), 'x', str(x_coord)))
                self.entrys[name] = tkinter.Entry(self.editorwindow, width=1)
                self.entrys[name].grid(row=y_coord, column=x_coord)

editor = Map_Editor(21, 7)
tkinter.mainloop()
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Als Schlüssel sich eine Zeichenkette aus X und Y zu basteln ist ziemlich unnötig, da man als Schlüssel auch folgendes Tupel (X,Y) nehmen kann. Darauf kann man später auch einfacher drauf zugreifen ohne jedes Mal die Zeichenkette zu basteln.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Gut, ich hoffe ihr habt nichts dagegen wenn ich diese Änderung nicht poste.
Ich schreib es in den nächsten Tagen fertig. Blöder weise muss ich noch eine Funktion schreiben die einen Exel Ausschnitt einlesen kann, copy&paste.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Ich hab's jetzt doch geschafft, bin vorher an einer Stelle Hängen geblieben.

Code: Alles auswählen

import tkinter
import tkinter.messagebox as messagebox
import tkinter.simpledialog as simpledialog

class Map_Editor(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.MAP_CHARS = {'': '1', ' ': '1', '#': '2', 'X': '2', 'K': '3', 'D': '4'}
        
        self.editorwindow = tkinter.Tk()
        self.editorwindow.title('Pacman MapEditor')
        self.arrow_up = tkinter.PhotoImage(file='pfeil_rauf.gif')
        self.arrow_down = tkinter.PhotoImage(file='pfeil_runter.gif')
        self.entrys = {}
        
        for y_coord in range(y):
            for x_coord in range(x):
                self.entrys[(x_coord,y_coord)] = tkinter.Entry(self.editorwindow, width=1)
                self.entrys[(x_coord,y_coord)].grid(row=y_coord, column=x_coord)

        tkinter.Button(self.editorwindow, image=self.arrow_down, command=self.generate_mapcode).grid(row=y+1, column=0, \
                                                                                             columnspan=x//2, rowspan=2, sticky='nesw')
        tkinter.Button(self.editorwindow, image=self.arrow_up, command=self.regenerate_mapcode).grid(row=y+1, column=(x//2)+1, \
                                                                                             columnspan=x//2, rowspan=2, sticky='nesw')
        self.mapcodeentry = tkinter.Entry(self.editorwindow)
        self.mapcodeentry.grid(row=y+3, column=0, columnspan=x, sticky='nesw')
        tkinter.Button(self.editorwindow, text='Löschen', command=self.delete_map).grid(row=y+4, column=0, columnspan=x, sticky='nesw')


    def generate_mapcode(self):
        listnumber = simpledialog.askstring('MapEditor', 'Bitte die Listen nummer eingeben:')
        mapcode = '{'
        for y_coord in range(self.y):
            for x_coord in range(self.x):
                try:
                    field_content = self.entrys[(x_coord,y_coord)].get().upper()
                    if len(field_content) != 0:
                        field_content = field_content[0]
                    mapcode += ''.join((self.MAP_CHARS[field_content], ','))
                except KeyError:
                    mapcode += '1,'
        
        mapcode = mapcode[:-1]    #Löscht das überflüssige Komma
        mapcode += ''.join(('}->List ', listnumber)) 
        self.mapcodeentry.delete(0, 'end')
        self.mapcodeentry.insert(0, mapcode)

    def regenerate_mapcode(self):
        pass

    def delete_map(self):
        for entry in self.entrys:
            self.entrys[entry].delete(0, 'end')

editor = Map_Editor(21, 7)
tkinter.mainloop()
Sieht dann so aus:
(Der Löschbutton fehlt noch.)
Bild
Und das Beste, jetzt sind die Größeren Maps sogar noch schneller als vorher die kleinste. Aber leider auf kosten der Render Geschwindigkeit. Aber das kann man verschmerzen bei einem Taschenrechner...

Aber jetzt würde mich interessieren wie ihr den Style bewertet.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Sch****, bei liste 7 geht der RAM aus...
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Antworten