Online Highscore (für Online Spiele)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

HI!

WAS?
Der Skript erzeugt einen kleinen Highscore mit 10 Platzierungen. Die ersten drei sind in Gold-Silber und Bronze gefärbt.

WO ZU?
Den Skript kann man in Online Spielen einstzen.

WOHER
Die Daten für die Platzierungen kommen von:
http://pc-tutos.de/test.hsd

Code: Alles auswählen

import urllib
from Tkinter import *
nr = 0
nr1 = 0
nr2 = 1
nr3 = 0
nr4 = 1
nr5 = 0
data = urllib.urlopen("http://pc-tutos.de/test.hsd")
data1 = data.read()
data2 = data1.split(" ")
liste = [["#FFD800","1."],["#A5A5A5","2."],["#C65C00","3."],["black","4."],["black","5."],["black","6."],["black","7."],["black","8."],["black","9."],["black","10."]]
fenster = Tk()
fenster.title("HighScore")
fenster.geometry("170x350")
for i in range(10):
  lab = Label(fenster,text=liste[nr5][nr4] + data2[nr],fg=liste[nr5][nr3],font = ("arial",19,"bold"))
  lab.place(x=3,y=nr1)
  nr = nr + 1
  nr1 = nr1 + 34
  nr5 = nr5 + 1
fenster.mainloop()
Ich hab den Skript schnell geschrieben und deswegen hat er vieleicht ein paar Fehler, wer will kann Ihn verbessern. :wink:
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

Wie wäre es mit Punktanzeige dahinter?
Und bitte pack das ganze doch in eine/mehrere Funktionen,
denn Code auf Modulebene ist doof!
Desweiteren ist deine `liste` um einiges zu lang (>80 Zeichen).
Ansonsten denke ich keine schlechte Idee,
aber bei der Umsetzung haperts doch noch...
Lg, Jonas 8)
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

Und bitte pack das ganze doch in eine/mehrere Funktionen,
denn Code auf Modulebene ist doof!
Lesen!!! :wink:
Ich hab den Skript schnell geschrieben und deswegen hat er vieleicht ein paar Fehler, wer will kann Ihn verbessern.
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

Und in meinem Skript gehts darum das ein von einem Server stammender Highscore gelesen wird und dann auch richtig verarbeitet wird.
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

krisi12345 hat geschrieben:
Und bitte pack das ganze doch in eine/mehrere Funktionen,
denn Code auf Modulebene ist doof!
Lesen!!! :wink:
Ich hab den Skript schnell geschrieben und deswegen hat er vieleicht ein paar Fehler, wer will kann Ihn verbessern.
Hä? Das war doch ein vernünftiger Verbesserungsvorschlag. Oder meinst du mit "verbessern": "Macht die Verbesserung gleich selbst" ?
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

O.K. entschuldigung, hab seine Antwort wohl falsch gelesen. :oops:
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
BlackJack

Mein Verbesserungsvoraschlag wäre: Wegwerfen und neu schreiben.

• Ohne ""durchnummerierte" Namen,
• ohne statische Daten, die sich ganz einfach berechnen lassen, wie die Platznummern,
• mit vernüftigen Namen, bei denen man auch erahnen kann, was die Bedeutung der daran gebundenen Objekte ist,
• ohne vorgegebene Fenstergrösse,
• und ohne `place()`,
• ohne unnötige Indexzugriffe auf Listen.
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

ohne vorgegebene Fenstergrösse,
Der Skript ist absichtlich für 10 Platzierungen gedacht.
Wenns mehr sind könnte man ja mehrere Seiten einbauen.
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Auch wenn's vermutlich Perlen vor die Säue werfen ist (Dir wurde schon oft das Tutorial empfohlen ;-) ):

nr, nr1, ... ist doch eine schlechte Idee! Wieso keine Liste oder Tupel?

Code: Alles auswählen

nr = (0, 0, 1, 0, 1, 0)
Aber dieses Konstrukt ist eh überflüssig (s.u.)

Das hier ...

Code: Alles auswählen

data = urllib.urlopen("http://pc-tutos.de/test.hsd")
data1 = data.read()
data2 = data1.split(" ")
... kann man zusammenfassen:

Code: Alles auswählen

data = urllib.urlopen("http://pc-tutos.de/test.hsd").read().split()
Auch hier ist ein data1, data2 sinnfrei (zumal du die Zwischenschritte dann ja wegwirfst).

Deine Liste zur Farbbestimmung ist nicht unbedingt die beste Wahl imho. Da wäre wohl ein dict besser:

Code: Alles auswählen

color_map = {
    1: "#FFD800",
    2: "#A5A5A5",
    3: "#C65C00"
}
Damit kannst Du dann leicht die Farben abfragen:

Code: Alles auswählen

In [4]: color_map.get(1, "black")
Out[4]: '#FFD800'

In [5]: color_map.get(2, "black")
Out[5]: '#A5A5A5'

In [6]: color_map.get(5, "black")
Out[6]: 'black'
Wenn im dict nichts zu finden ist, kannst Du Dir eben einen Alternativ-Wert angeben; in diesem Falle eben "black".

Die Label kannst Du dann wie folgt eintragen:

Code: Alles auswählen

In [50]: players = ["Christian", "Leo", "Michi", "Daniel", "Andi"]

In [53]: for index, player in enumerate(players, 1):
    print index, player, color_map.get(index, "black")
   ....:
1 Christian #FFD800
2 Leo #A5A5A5
3 Michi #C65C00
4 Daniel black
5 Andi black

Wie gesagt, sind alles Dinge, die man aus dem Tutorial lernen kann. Es ist schon wichtig, sich mit den grundlegenden Datenstrukturen auszukennen. Dazu gehören eben Listen und Dictionaries; und dazu natürlich die Methoden und Operationen, die damit möglich sind.
BlackJack

@krisi12345: Für wieviele Einträge das Fenster gedacht ist, ist völlig egal, man sollte die Grösse nicht fest vorgeben. Wenn man kein `place()` verwendet, sondern einen ordenlichen Layout-Manager, dann passt sich die Fenstergrösse automatisch dem Inhalt an.

Code: Alles auswählen

#!/usr/bin/env python
import Tkinter as tk
import urllib
from itertools import chain, count, izip, repeat

HIGHSCORE_URL = 'http://pc-tutos.de/test.hsd'

def main():
    colors = chain(['#FFD800', '#A5A5A5', '#C65C00'], repeat('black'))
    names = urllib.urlopen(HIGHSCORE_URL).read().split()
    root = tk.Tk()
    root.title('HighScore')
    for place, color, name in izip(count(1), colors, names):
        tk.Label(root,
                 text='%2d. %s' % (place, name),
                 foreground=color,
                 font=('arial', 19, 'bold')).pack(anchor=tk.W)
    root.mainloop()

if __name__ == '__main__':
    main()
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Code: Alles auswählen

colors = chain(['#FFD800', '#A5A5A5', '#C65C00'], repeat('black')) 
Hey, über so was hatte ich auch nachgedacht - auf so etwas geniales bin ich nicht gekommen. Muss ich mir mal merken :-)
Antworten