?bungsaufgabe für (Java-)Programmierer

    • denodoro
      denodoro
      Bronze
      Dabei seit: 02.03.2005 Beiträge: 67
      Hallo!
      Ganz kurz ausgeholt: Ich spiel jetzt seit über einem halben Jahr Pokern, mit anderthalbmonatiger Pause zwischendurch (ausgerechnet kurz nach dem Wechsel zu PP an den Beginnerstischen), und habe drei "Downswings" gehabt, die nicht nur mit Pech zu begründen sind. Einmal von 330$ innerhalb kurzer Zeit auf etwa 100$. Beim zweiten mal von 300$ auf 66$. Nach ner Woche Pause habe ich 3 Wochen!!! konstant bergauf gespielt, war auf 490$ und bin innerhalb von 4 Tagen auf 100$ gewesen und kurz später auf 23$. Nach 3 Wochen Pause wieder angefangen, 7Tage durchgängig bergauf auf 160$, jetzt 5 Tage später bei 60$. So, ich will mein Spiel jetzt mal etwas besser analysieren und finde es sehr anstrengend mir immer die richtigen Hände rauszusuchen, ich will besonders schauen, was ich in den Downswings gemacht habe.
      Da ich Preflop nach den charts spiele, wird/werden meine Leaks postflop zu suchen sein Ich hätte gern ein Programm, das mir aus einer txt.-Datei, in dem die Hände ja auf meiner Festplatte gespeichert werden, die nicht gespielten Hände löscht. Das heißt, ich will nur noch die Hände dort sehen, an denen ich den Flop zumindest gesehen habe. Mein Kumpel hat mir solch ein Programm geschrieben (innerhalb etwa einer Stunde), dieses hat allerdings einen Fehler, da ab und zu (nicht immer...) die ganze Datei gelöscht wird. Vielleicht war ja auch mein Algorithmus zu schlecht. Der Kumpel hat im Moment keine Zeit, diesen Fehler zu beheben.
      Wer hat Lust, dies sozusagen als ßbung oder auch aus dem ßrmel geschüttelt mal eben zu übernehmen und das Programm dann hier zu posten als Quelltext, möglichst mit Kommentaren (ich selbst bin absoluter autodidaktischer Javaanfänger)? So etwas wie class DeleteNonplayed.

      Dann habe ich noch eine Frage? Kann ich die Hände auch irgendwie für word konvertieren, sodass sie so aussehen wie im Forum? Oder kann dafür auch noch jemand ein Programm schreiben?

      Das wäre sooooooooooooo cool, wenn das jemand machen würde! Und vielen Dank im Voraus! :-)
      denodoro
  • 18 Antworten
    • normanfreak
      normanfreak
      Bronze
      Dabei seit: 03.04.2005 Beiträge: 427
      wäre es net einfacher du postest das programm von deinem kumpel und man sucht nur den fehler...ansonsten is des doch nur doppelte tipparbeit.

      nachtrag: es wäre wohl auch geschickter die hände nicht zu löschen sondern nur die interessanten in eine zweite datei zu schreiben...so bleiben alle hände erhalten...für einen späteren einsatz von zb. PT (was die geforderte aufgabe eh implizit ermöglicht)
    • stone4ge
      stone4ge
      Bronze
      Dabei seit: 22.01.2006 Beiträge: 276
      Dürfte nicht allzu schwer sein, Textfiles auszulesen und auf ein Muster zu überprüfen.

      code:
      while != dealing flop && hero == fold --> hand löschen
    • denodoro
      denodoro
      Bronze
      Dabei seit: 02.03.2005 Beiträge: 67
      Das Programm sah bis jetzt so aus: (Das is allerdings auch umständlich programmiert und eventuell auch besser wenn man es gleich ganz neu schreibt) (Dass denodoroo im Programm mit zwei o geschrieben ist, ist kein Fehler.)


      import java.io.*;


      public class Delete {

      /**
      * @param args
      */
      public static void main(String[] args) {
      String test = "";
      String hand = "";
      String all = "";
      String input = "";
      int flag = 0;
      int flag2 = 0;
      boolean write = false;
      System.out.print("So denodoroo! Name der Quelldatei:");
      BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
      try {
      input = brIn.readLine();
      } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
      }
      try {
      BufferedReader br = new BufferedReader( new FileReader(input));
      while(true) {
      if(flag2 == 1 ) {
      break;
      }
      while(true) {
      test = br.readLine();
      if( test == null ) {
      flag2 = 1;
      break;
      }
      if(test.equals("")) {
      break;
      }
      if( test.equals("** Dealing down cards **")) {
      flag = 1;
      }
      if( flag == 1 ) {
      if(test.startsWith("denodoroo raises") || test.startsWith("denodoroo calls") || test.startsWith("denodoroo checks")) {
      write = true;
      }
      if(test.startsWith("** Dealing Flop **")) {
      flag = 0;
      }
      }
      hand += test + "\n";
      }
      if(write) {
      all += hand + "\n\n";
      hand = "";
      flag = 0;
      write = false;
      }
      else {
      hand = "";
      flag = 0;
      write = false;
      }
      }
      } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      try {
      BufferedWriter brOut = new BufferedWriter(new FileWriter(input));
      brOut.write(all);
      } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      }



      }




      Jo, das mit dem gleich in eine andere Datei schreiben wäre natürlich optimal, das wäre ganz optimal wenn diese Datei sogar automatisch erstellt werden würde.
      Bis dann, denodoro
    • stone4ge
      stone4ge
      Bronze
      Dabei seit: 22.01.2006 Beiträge: 276
      Hm, wenn ich nicht gerade Ferien hätte würde ich das sofort machen.

      Wieso sucht er nicht einfach nach "Denodoroo folds" anstatt die drei anderen Varianten abzufragen?
    • denodoro
      denodoro
      Bronze
      Dabei seit: 02.03.2005 Beiträge: 67
      weil ich in anderen Händen ja auch folde. Manchmal am Turn manchmal am River.
    • normanfreak
      normanfreak
      Bronze
      Dabei seit: 03.04.2005 Beiträge: 427
      hi!

      so spontan seh ich jetzt keinen fehler (werd mich dem ding heut abend oder am WE mal annehmen). HH bei denen es fehlschlägt hast du wohl net mehr ?
    • denodoro
      denodoro
      Bronze
      Dabei seit: 02.03.2005 Beiträge: 67
      die sind ja weg ;-)
      aber ich kann es nochmal mit anderen versuchen. Vielleicht hat da der Algorithmus nicht funktioniert.
    • romanempire
      romanempire
      Bronze
      Dabei seit: 03.08.2006 Beiträge: 561
      Hallo,

      hab es mal umgebaut.

      import java.io.*;

      public class Delete {

      public static void main(String[] args) {

      final String playername = "denodoroo";
      final String path = "C:\\Programme\\PartyGaming\\PartyPoker\\HandHistory\\";

      String line = ""; // inputline
      StringBuffer hand = new StringBuffer(); // text of hand
      StringBuffer playedHands = new StringBuffer(); // text of all played
      // hands
      String filename = "";
      String date = ""; // date the hands were played
      String tablenumber = "";

      boolean isPreflop = false;
      boolean folded = false;

      BufferedReader lineReader = new BufferedReader(new
      InputStreamReader(System.in));
      try {
      System.out.print("Nummer des Tisches: ");
      tablenumber = lineReader.readLine();

      System.out.print("Datum: ");
      date = lineReader.readLine();

      } catch (IOException e) {
      System.out.println("Fehler bei der Eingabe!");
      System.out.println(e.getMessage());
      return;
      }

      try {
      filename = path + playername + "\\" + date + "\\" + "Beginners #"
      + tablenumber;
      BufferedReader fileReader = new BufferedReader(new FileReader(
      filename + ".txt"));

      while ((line = fileReader.readLine()) != null) {

      if (line.startsWith("Game #")) {
      // start of new hand
      if (!folded)
      playedHands.append(hand); // save last hand
      hand.setLength(0); // clear hand
      folded = false;
      isPreflop = true;
      }

      hand.append(line + "\n"); // save current line

      // unnötig
      //if (line.equals("** Dealing down cards **")) {
      // isPreflop = true;
      //}

      if (isPreflop) {
      if (line.startsWith(playername + " folds")) {
      folded = true;
      }
      if (line.startsWith("** Dealing Flop **")) {
      isPreflop = false;
      }
      }
      }

      fileReader.close();

      } catch (IOException e) {
      System.out.println("Fehler beim Einlesen der Daten!");
      System.out.println(e.getMessage());
      return;
      }

      try {
      BufferedWriter fileWriter = new BufferedWriter(new FileWriter(
      filename + ".del.txt"));
      fileWriter.write(playedHands.toString());
      fileWriter.close();
      } catch (IOException e) {
      System.out.println("Fehler beim Speichern der Daten!");
      System.out.println(e.getMessage());
      return;
      }

      }
      }

      Musst nur noch das Datum ( z.B. 20060813) und die Tischnummer eingeben, den Pfad an dein System anpassen und ggfls. das "Beginners" ändern.

      Hoffe, es funzt, habe es nur kurz getestet.

      Gruss,
      Roman
    • Goaranga
      Goaranga
      Bronze
      Dabei seit: 02.02.2006 Beiträge: 1.666
      ey, das ist aber schnittig programmiert!! - cool
    • romanempire
      romanempire
      Bronze
      Dabei seit: 03.08.2006 Beiträge: 561
      Hi,

      hab den Test auf "Dealing Down Cards" auskommentiert, der war unnötig.

      Gruß,
      Roman
    • hazz
      hazz
      Black
      Dabei seit: 13.02.2006 Beiträge: 4.771
      uhm, warum nciht einfach in PT den filter anmachen, dass nur haende angezeigt werden, wo du den flop gesehen hast?
    • denodoro
      denodoro
      Bronze
      Dabei seit: 02.03.2005 Beiträge: 67
      voll cool! danke! probier es gleich mal aus.
    • denodoro
      denodoro
      Bronze
      Dabei seit: 02.03.2005 Beiträge: 67
      ach da gibt es einen filter?
      aber ich brauch die anderen ja für die ganzen stats. hm, muss ich mich wohl nochmal eingehender mit pt beschäftigen.
      :-)
    • dasgelb
      dasgelb
      Global
      Dabei seit: 22.07.2005 Beiträge: 40
      ;) Einfach ein gutes Buch lesen. Mit deiner Erfahrung würde ich "middle limit holdem von Bob Ciaffone und Jim Brier" lesen.

      Viele sagen man verfällt zu stark in weaknes, aber die haben wohl das Vorwort nicht gelesen.

      Hinten hast du auch noch einen Artikel über low limit.

      Wenn du das Buch liest, wirst du danach dein Programm und die folgende preflop-chart-Analyse in die Mülltonne treten.

      Du setzt deinen Hebel schon in der Kacke an, also versprich dir keinen Erfolg nach deiner vielen Arbeit.

      Nach chart spielen heißt schlechten Poker spielen, vor allem der SHC v3.0.

      Der open raise chart ist gut, aber auch nicht immer, kommt halt wieder mal auf den Gegner drauf an, den du ja im nachhinein überhaupt nicht mehr berurteilen kannst, anhand deiner Analyse.

      Weg vom chart, Poker besser verstehen lernen und du spielst stabiler und hast nicht mehr solche Hämmer von Schwankungen in deiner BR.

      Wenn du stark mathematisch analysieren willst, dann hol dir Werte von winning players und vergleich diese mit deinen, dann wirst du feststellen, daß du diese Werte nie mit chart-play erreichen wirst. Dann wird dir deine Intelligenz, wo von du anscheinend einige besitzt, sagen "Warum sollte ich spielen nach chart mit viel Aufwand versuchen zu analysieren, wenn das Problem doch wo anderst liegt?"

      Naja egal, alle Wege füren nach Rom, du machst das schon.

      War nur ein Tipp und ein Lösungsvorschlag wie Alexander und der Knoten ;) ,
      hab das Gefühl du verwurschtelst dich da in was, und das wäre Schade, denn du hast ja echt viel Energie für das Spiel. Setze sie doch nur effektiver ein.

      Wünsche dir die besten flops in deinem Leben :D

      reinhaun und sers
    • dasgelb
      dasgelb
      Global
      Dabei seit: 22.07.2005 Beiträge: 40
      ach so, bin ja hier nur gelandet, weil ich mal so lesen wollte was der azzerul0r hazz so schreibt. ;)
    • uTz84
      uTz84
      Bronze
      Dabei seit: 20.04.2006 Beiträge: 2.336
      Argh alles in die Main Methode gepackt. Da brauchste dann auch kein Java nehmen, wenn du die Objektorientierung eh nicht brauchst. ^^
    • romanempire
      romanempire
      Bronze
      Dabei seit: 03.08.2006 Beiträge: 561
      fand ich auch grausam, aber für nen fixen hack. das original sah sehr nach C aus, die Flags als int ?(
    • uTz84
      uTz84
      Bronze
      Dabei seit: 20.04.2006 Beiträge: 2.336
      Original von romanempire
      fand ich auch grausam, aber für nen fixen hack. das original sah sehr nach C aus, die Flags als int ?(
      Jo klar. Aber sowas machen meist die ex C Progger. Kenn das von nem Studienkollegen. xD