Seite 104 von 271 ErsteErste ... 45494100101102103104105106107108114154204 ... LetzteLetzte
Ergebnis 1.546 bis 1.560 von 4063

Thema: Der Pythonthread

  1. #1546
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Ich glaub die Distanz zwischen zwei Feldern kannst du nur entweder A: per Pythagoras ausrechnen oder B: Mit einem selbstgeschriebenen Pfadfindungsalgorithmus abfragen.

  2. #1547
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Zitat Zitat von The_J Beitrag anzeigen
    Gamecore, wat, wo ?
    Naja, die Dateien links sind doch die aus dem CvGameCoreDLL Ordner, folglich nötig für das erstellen der .dll. Es sind fast nur die mit Python interagierenden Dateien, folglich vermute ich mal, dass da die Befehle 'gespeichert' sind, oder bin ich da völlig auf dem Holzweg???
    Zitat Zitat von The_J Beitrag anzeigen
    Das wiederum verstehe ich jetzt nicht .
    War mehr ein Witz.
    Zitat Zitat von The_J Beitrag anzeigen
    Gib' mal ein konkretes Problem, was du genau meinst.
    Nunja, nehmen wir mal das Beispiel von vorhin, ich möchte jetzt auf ein bestimmtes Geländefeld eine Einheit setzen, wo finde ich jetzt den entsprechenden Befehl dazu, und baue ich den dann ein.
    Übrigens, vielen Dank für die Hilfe.

  3. #1548
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Wieso denn Pythogoras o_O?

    Wenn es wirklich nur um den direkten Unterschied an Feldern geht, dann ist es max(UnterschiedXWert, UnterschiedYWert).

    Edit: Das ging an VK.
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  4. #1549
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Zitat Zitat von [VK] Beitrag anzeigen
    Ich glaub die Distanz zwischen zwei Feldern kannst du nur entweder A: per Pythagoras ausrechnen oder B: Mit einem selbstgeschriebenen Pfadfindungsalgorithmus abfragen.

    CyMap

    INT calculatePathDistance (CyPlot pSource, CyPlot pDest)
    finds the shortest passable path between two CyPlots and returns its length, or returns -1 if no such path exists. Note: the path must be all-land or all-water
    Zitat aus dieser API. Aber wie baue ich des jetzt ein.

  5. #1550
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Zitat Zitat von The_J Beitrag anzeigen
    Wieso denn Pythogoras o_O?

    Wenn es wirklich nur um den direkten Unterschied an Feldern geht, dann ist es max(UnterschiedXWert, UnterschiedYWert).

    Edit: Das ging an VK.
    Also wenn man nur über Eck Distanzen ausrechnen möchte, dann ginge das, käme nur kein Integer-Wert raus...
    PS: Ich glaube wir posten hier gerade ziemlich aneinander vorbei.

  6. #1551
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Muss mal eine Frage vorne ran hängen: Kannst du eigentlich programmieren?

    Zitat Zitat von deepwater Beitrag anzeigen
    Naja, die Dateien links sind doch die aus dem CvGameCoreDLL Ordner, folglich nötig für das erstellen der .dll. Es sind fast nur die mit Python interagierenden Dateien, folglich vermute ich mal, dass da die Befehle 'gespeichert' sind, oder bin ich da völlig auf dem Holzweg???
    Uiuiui Verwirrung.

    Mal ganz von vorne:
    Mit den Python-Befehlen löst du Aktionen aus, die an die .dll gehen.
    Wo diese Befehle dann ausgelöst werden, steht in den .cpp-Dateien.
    Die .cpp-Dateien heißen so wie die Klassen, die in ihnen definiert sind.
    Die Python-Klassen heißen genauso, dass ist, was du in der Anzeige links siehst.
    Links gibt es eine Klasse CyPlayer. Die heißt in Python so. Die heißt auch in C++ so. Und so heißt dann auch die entspr. cpp-Datei.

    Zitat Zitat von deepwater Beitrag anzeigen
    Nunja, nehmen wir mal das Beispiel von vorhin, ich möchte jetzt auf ein bestimmtes Geländefeld eine Einheit setzen, wo finde ich jetzt den entsprechenden Befehl dazu, und baue ich den dann ein.
    Übrigens, vielen Dank für die Hilfe.
    Unter CyPlayer gibt es den Befehl initUnit, den dürftest du suchen.
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  7. #1552
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Zitat Zitat von The_J Beitrag anzeigen
    Muss mal eine Frage vorne ran hängen: Kannst du eigentlich programmieren?
    Nun ja, ich bin auf dem Wege es zu lernen, habe die Woche ein Buch angeschafft, und bin noch bei den Variablen. Man sieht ja, wieweit ich bin.
    Zitat Zitat von The_J Beitrag anzeigen
    Mal ganz von vorne:
    Mit den Python-Befehlen löst du Aktionen aus, die an die .dll gehen.
    Wo diese Befehle dann ausgelöst werden, steht in den .cpp-Dateien.
    Die .cpp-Dateien heißen so wie die Klassen, die in ihnen definiert sind.
    Die Python-Klassen heißen genauso, dass ist, was du in der Anzeige links siehst.
    Links gibt es eine Klasse CyPlayer. Die heißt in Python so. Die heißt auch in C++ so. Und so heißt dann auch die entspr. cpp-Datei.
    Den Groschen muss man förmlich noch in New York fallen gehört haben, bitte entschuldigt meine Naivität. Mit Klassen bin ich leider noch nicht so vertraut. Kommt noch, hoffentlich.

  8. #1553
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Zitat Zitat von The_J Beitrag anzeigen
    Wieso denn Pythogoras o_O?

    Wenn es wirklich nur um den direkten Unterschied an Feldern geht, dann ist es max(UnterschiedXWert, UnterschiedYWert).

    Edit: Das ging an VK.
    Die Karte ist ja ein Koordinatensystem. Du Hast 2 X und 2 Y Wert. Start und Ziel. Aus beiden kannst du ein Rechtwinkliges Dreieck konstruieren wenn du einen X Wert und den Y Wert vom Anderen nimmst. Über dieses Rechtwinklige Dreieck kannst du nun die Distanz über den Pythagoras errechnen. Es ist zwar eine falsche Entfernung dürfte wohl aber für 90% der Fälle reichen.

    Zitat Zitat von deepwater Beitrag anzeigen

    Zitat aus dieser API. Aber wie baue ich des jetzt ein.
    Kommt drauf an wo du ihn einbauen willst. Dürfte aber sowas wie CyMap.getShortestDistance(X , Y) sein

  9. #1554
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Zitat Zitat von deepwater Beitrag anzeigen
    Nun ja, ich bin auf dem Wege es zu lernen, habe die Woche ein Buch angeschafft, und bin noch bei den Variablen. Man sieht ja, wieweit ich bin. Den Groschen muss man förmlich noch in New York fallen gehört haben, bitte entschuldigt meine Naivität. Mit Klassen bin ich leider noch nicht so vertraut. Kommt noch, hoffentlich.
    Dann geben wir mal einfach mal eine ultra-kurze Einführung:
    Okay, du weißt, was Variablen sind, richtig? Eine Variable ist ein Platzhalter, der einen Wert hat, z.B. ich sage d = 5, dann ist meine Variable d, die hat den Wert 5, oder sName = [VK], dann hat die Variable sName den Wert [VK], und die Werte kann man jederzeit ändern, wenn ich jetzt sage sName = The_J, dann steht da nicht mehr [VK] drin.
    Was aber, wenn ich schwierigere Sachen speichern will, z.B. die Daten einer Person, oder...ein Auto (Auto-Beispiele sind sehr beliebt ), und da auch mal größere Änderungen vornehmen will? Dann brauche ich eine Klasse.
    Eine Klasse kann nicht wie eine Variable einen Wert haben, sondern die ist eine Ansammlung aus Variablen.
    Ich kann z.B. sagen (achtung, weder C++ noch Python-Code, sondern sogenannter Pseudo-Code):
    PHP-Code:
    Klasse Person
      Person
    .Name X
      Person
    .Addresse Y
      Person
    .TelefonNummer 0190-ABC 
    Damit habe ich alle Sachen an einen Ort, und nicht in 3 verschiedenen Variablen, sondern in einer "Super-Variablen" sozusagen.
    Klassen können dann auch noch Funktionen haben.
    Funktionen sind Code-Teile, die man über einen Namen aufruft.
    z.B. wenn ich oben jetzt Name, Addresse und TelefonNummer ändern will, kann ich das natürlich händig jedesmal abändern.
    Muss ich aber nicht, ich kann mir eine Funktion schreiben, z.B.

    PHP-Code:
    Person.ändereDetails(neuerName,neueAddresse,neueTelefonnummer)
      
    Person.Name neuerName
      Person
    .Addresse neueAddresse
      Person
    .TelefonnUmmer neueTelefonnummer 
    Dann sage ich Person.ändereDetails(The_J, civforum.de,123456), und spare mir damit die 3 Zeilen, die ich oben hingeschrieben habe.

    Um das jetzt mal auf das Beispiel-Befehl, denn du eben gebracht hast, und ich nicht gesehen habe, umzubiegen:
    PHP-Code:
    CyMap

    INT calculatePathDistance 
    (CyPlot pSourceCyPlot pDest
    CyMap ist die Klasse der Karte. Wenn du CyMap() in dem Python-Skript machst, hast du all die Details der aktuellen Karte zur Verfügung.
    Die Klasse CyMap hat jetzt die Funktion calculatePathDistance. Diese Funktion wird dir einen Ganz-Zahl-Wert (integer, oder kurz INT) zurückgeben, wenn du ihr 2 Klassen des Types CyPlot (also die ganzen Felder) übergibst, wobei das erste das Start-Feld, das 2. das End-Feld wäre.
    Das wäre dann z.B. in Python:
    PHP-Code:
    plot1 CyMap().plot(1,1###also jetzt das Feld ganz links unten
    plot2 CyMap().plot(3,4###das Feld an der Position 3,4
    dieDistanz CyMap().calculatePathDistance(plot1plot2
    Ich hoffe mal, das war halbwegs verständlich (hab's nicht so mit dem erklären ).

    Zitat Zitat von [VK] Beitrag anzeigen
    Die Karte ist ja ein Koordinatensystem. Du Hast 2 X und 2 Y Wert. Start und Ziel. Aus beiden kannst du ein Rechtwinkliges Dreieck konstruieren wenn du einen X Wert und den Y Wert vom Anderen nimmst. Über dieses Rechtwinklige Dreieck kannst du nun die Distanz über den Pythagoras errechnen. Es ist zwar eine falsche Entfernung dürfte wohl aber für 90% der Fälle reichen.
    Das wäre die Manhattan-Distanz, aber ich denke doch eher, dass wir vom direkten Weg wählen, und der geht ja auch Diagonal .
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  10. #1555
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580

    Cool

    Zitat Zitat von The_J Beitrag anzeigen
    Ich hoffe mal, das war halbwegs verständlich (hab's nicht so mit dem erklären ).
    Das soll wohl ein Witz sein. Supi, vielen Dank, super Erklärung. Das bringt mich wieder einen Schritt weiter (mehrere(!)). Bisher hab ich mir halt irgendwie alles zusammengesucht, geklaut und ein bisschen mehr oder weniger planlos rumprobiert.
    So langsam versteh ich des glaub ich auch mit der/die/das(?) API.

  11. #1556
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Zitat Zitat von The_J Beitrag anzeigen
    Das wäre die Manhattan-Distanz, aber ich denke doch eher, dass wir vom direkten Weg wählen, und der geht ja auch Diagonal .
    Manhattan Distanz?

    Direkter Weg ist ja Pythagoras :fft:

  12. #1557
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    Zitat Zitat von deepwater Beitrag anzeigen
    Das soll wohl ein Witz sein. Supi, vielen Dank, super Erklärung. Das bringt mich wieder einen Schritt weiter (mehrere(!)). Bisher hab ich mir halt irgendwie alles zusammengesucht, geklaut und ein bisschen mehr oder weniger planlos rumprobiert.
    So langsam versteh ich des glaub ich auch mit der/die/das(?) API.
    Dann mal nur weiter so .
    Und "das" API, Application Programming Interface

    Zitat Zitat von [VK] Beitrag anzeigen
    Manhattan Distanz?
    Schande über dich, und das als Informatiker .
    http://de.wikipedia.org/wiki/Manhattan-Metrik

    Zitat Zitat von [VK] Beitrag anzeigen
    Direkter Weg ist ja Pythagoras :fft:
    ups, natürlich.
    Geht trotzdem einfacher, da ja der diagonale Abstand nicht kürzer ist als der horizontale oder vertikale .
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  13. #1558
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Großartige Hilfe, ich wüsste gar nicht, was ich ohne das Forum machen sollte...
    Frage: Was bekommt man bei getNearestWaterPlot? Das müssten doch eigentlich zwei Variablen, eine für den X und eine für den Y-Wert sein, oder nicht. Dann müsste doch das so machbar sein:
    PHP-Code:
    iX = [x]
    iY = [y]
    pPlot1 CyMap().pPlot(iXiY)
    pPlot2.getNearestWaterPlot ()
    if 
    CyMap().calculatePathDistance(plot1plot2) = 1:
       
    set Unitirgendwas on Plot pPlot2 
    Ziel davon ist es auf dem nächsten Wasserfeld, solange es nicht weiter als eins entfernt ist ein Arbeitsboot zu setzen. Die letzte Zeile ist so natürlich noch nicht richtig. Wobei iX und iY halt schon gegeben sind.

  14. #1559
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Der Vorteil von Klassen im Gegensatz zu Algorithmischen Proggen ist halt das es einfach ist eine dieser Klassen wiederzuverwenden.

    Um mal bei Autobeispiel zu bleiben

    Nehmen wir mal an du hast eine Klasse geschrieben
    PHP-Code:
    BMW
    int PS;
    int Preis
    Dann ist das im Grunde nur ein Bauplan für einen BMW. Du kannst also leichter verschiedene BMWs erstellen. Einer mit zbw 20PS und der andere mit 180PS.
    PHP-Code:
    M3 = new BMW(PS 20Preis 5000€);
    M5 = new BMW(PS 180Preis 5000€); 
    Nun kannst du ganz einfach auf den Dreier zugreifen oder auf den Fünfer.

    Nehmen wir mal an du willst jetzt auch noch einen Audi machen, dann kannst du im Grunde die BMW Klasse genau gleich übernehmen, deshalb nennt man seine Klassen normalerweise möglichst Allgemein , Auto wäre deshalb besser. Du siehst jetzt das du die BMW(Auto Klasse) auch für Audi benutzen kannst.

    Klassen haben noch andere interessante Effekte.

    Nehmen wir mal an wir haben ein Rennspiel programmiert und wollen jetzt auch noch Motorräder reinbringen. In wie fern unterscheiden sich Motorräder von Autos? Klar sie haben nur 2Räder. Jetzt könnte man natürlich der Autoklasse noch eine Variable "Räder" geben. Aber ist ein Motorrad ein Auto? Nein, also wäre es wohl sinnvoller eine Motorradklasse zu schreiben. Aber wenn wir eine MR Klasse schreiben müssen wir ja wieder alles kopieren, den so stark unterscheidet sich ja das Auto vom Motorrad nicht. Die Lösung nennt sich Vererbung:

    Wir schreiben uns also eine Fahrzeugklasse, die alles enthält was MR und Auto gemeinsam haben(PS, Preis, Farbe) und nennen sie Fahrzeug. Motorrad und Auto können jetzt von dieser Klasse erben und zählen beide als Fahrzeug, dh sie können alles was Fahrzeug kann. In der Auto klasse führen wir jetzt eine Variabel Räder = 4 ein, gleiches machen wir bei MR. Der Große Vorteil von Vererbung ist jetzt das MR und Auto als Fahrzeug gelten. Wir müssen jetzt also bei einer Funktion verschrotten() nicht mehr zwischen Auto und MR unterscheiden.

    Und so weiter. Frag mich bitte nicht warum ich das jetzt schreibe

  15. #1560
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Zitat Zitat von deepwater Beitrag anzeigen
    Großartige Hilfe, ich wüsste gar nicht, was ich ohne das Forum machen sollte...
    Frage: Was bekommt man bei getNearestWaterPlot? Das müssten doch eigentlich zwei Variablen, eine für den X und eine für den Y-Wert sein, oder nicht. Dann müsste doch das so machbar sein:
    PHP-Code:
    iX = [x]
    iY = [y]
    pPlot1 pPlot(iXiY)
    pPlot2.getNearestWaterPlot ()
    if 
    CyMap().calculatePathDistance(plot1plot2) = 1:
       
    set Unitirgendwas on Plot pPlot2 
    Ziel davon ist es auf dem nächsten Wasserfeld, solange es nicht weiter als eins entfernt ist ein Arbeitsboot zu setzen. Die letzte Zeile ist so natürlich noch nicht richtig. Wobei iX und iY halt schon gegeben sind.
    getnearestWaterplot() gibt dir einen plot. d.h Du müsstest x und y über x = plot.getX(), y = plot.getY() extrahieren.

Seite 104 von 271 ErsteErste ... 45494100101102103104105106107108114154204 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •