Seite 2 von 2

Re: Pacman MapEditor

Verfasst: Samstag 27. August 2011, 19:39
von Py-Prog
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()

Re: Pacman MapEditor

Verfasst: Samstag 27. August 2011, 19:59
von gkuhl
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.

Re: Pacman MapEditor

Verfasst: Sonntag 28. August 2011, 20:03
von Py-Prog
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.

Re: Pacman MapEditor

Verfasst: Montag 5. September 2011, 19:15
von Py-Prog
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.

Re: Pacman MapEditor

Verfasst: Montag 5. September 2011, 19:59
von Py-Prog
Sch****, bei liste 7 geht der RAM aus...