Har brugt en del timer på at finde årsagen til en logisk fejl. Det viser sig at stamme fra denne simple metode.
Den giver hver spiller 2 kort i pokerspillet. Kortene holdes af spillerobjekter. spillerobjekterne er i et array kaldet spillere:
private spiller[] spillere = new spiller[10];
Her er metoden. Overraskende nok ender den med at give alle spillere de kort som spiller 9 har :/ Først giver den spiller 0 de rigtige kort. Så giver den spiller 0 og 1 de kort spiller 1 skulle have Så giver den spiller 0, 1 og 2 de kort spiller 2 skulle have etc.
Her er metoden fra dealer klassen
public final void givkort() { int[] temp = new int[2]; for(int n = 0;n<10;n++)// if(tilstand[n]>1){//Dette udsagn er altid sandt i testfase temp[0] = bunke[5+2*n]; temp[1] = bunke[6+2*n];// Arrays.sort(temp);//det vælges at sortere holekortene spillere[n].sethand(temp); } } Hvordan Søren kan det lade sig gøre når den kun løber gennem løkken 10 gange. Her er metoden sethand() fra spiller klassen.
public class spiller { private int[] hand = new int[2];
Kunne selvfølgelig have lavet det på den hårde måde uden løkken. Forstår simpelthen stadig ikke hvordan metoden kan lave det den gør/gjorde. Så hvis nogen kan forklare det ville det være dejligt.
Hver gang du sender dit array videre til en metode, så er det kun en henvisning til det ene array du har oprettet. Alle spillere får altså tildelt det samme array. Dvs ændres kortene hos én spillere, ændres de hos alle.
Har ikke erfaring med collections. Har været inde og læse lidt om det (http://docs.oracle.com/javase/tutorial/collections/intro/index.html). Kan godt se det giver nogle fordele. Hvad med afviklingshastigheden af kode baseret på collections. Læser det som om udviklingshastigheden er større, men gælder nok ikke for mig, da jeg føler mig godt tilpas med arrays.
Tror jeg vil forsøge at skabe bekendskab med collections. Vil dog ikke ændre i eksisterende kode. Kun hvis det senere viser sig at konvertering til collections kan gøres "nemt" på et næsten færdigt program. Tak for rådet :)
Mange tak for hjælpen. Som sagt er projektet ret fremskredent, så jeg vil holde de gode råd in mente.
En lille update til de eventuelt interesserede (Advarsel: der er ingen spørgsmål!)
Skrev selv en odds calculator som det første. Den tager bordet og udregner en "unikværdi" for alle mulige 2 korts hænder (1=Royal Straight flush, 1610 = 3 esser med konge dame sidekort). Disse værdier bliver skrevet i et dobbelt array 52x52. Den kan blandt andet omsættes til dobbelt array der viser hvor mange hænder man er bagud og foran (tie= mulige-bagud-foran) Den er altså rigtig brugbar til mange ting, men håbløs langsom når der er rigtig mange mulige boards (tidligt i hånden, eller med spiller ranges). Jeg har fået lavet en GUI via netbeans palette som jeg er rigtig godt tilfreds med. Spillets logiske side er også på plads, dog kun standard "pengespil. Resten skal jeg nok få lavet med tiden.
Det jeg for tiden kæmper med, er at implementere en ny og hurtig odds-calculater til visse opgaver. Det anvender lookup list, hvilket åbenbart er det hurtigste. Har ikke brugt "fremmed" kode endnu, så der kommer helt sikkert flere spørgsmål herinde, da det kan være lidt svært at gennemskue. Er dog ret heldig at den anvender int til både kort og håndværdi ligesom min kode (kortene har godt nok andre værdier end mine, men det kan let oversættes, og mine håndværdier er mere "kompakte").
Her er min spiller klasse hvis det har interesse:
public class spiller { private String navn = new String(); private int idnr = 0;//et unik nummer til alle spillere private boolean folded = false; private boolean allin = false; private boolean aktiv = false;//hvorvidt spilleren ønsker kort i den følgende hånd private boolean aktivlast = false;//fik spilleren kort sidste hånd? private boolean betallowed = true;//er der åbnet for et bet eller raise private double bankroll = 0; private double buyin = 0; private double stack; //hvor meget har spilleren foran sig private double stackstart = 1000; //hvor meget havde spilleren foran sig da hånden startede private int seat = 0; private int strategy = 1; private int[] hand = new int[2];
public void sethand (int[] a) { hand = a; } public int[] gethand () { return hand; } public void setfolded (boolean a){ folded = a; } public boolean getfolded () { return folded; } public void setidnr (int a){ idnr = a; } public int getidnr () { return idnr; } public void setallin (boolean a){ allin = a; } public boolean getallin () { return allin; } public void setaktiv (boolean a){ aktiv = a; } public boolean getaktiv () { return aktiv; } public void setaktivlast (boolean a){ aktivlast = a; } public boolean getaktivlast () { return aktivlast; } public void setbetallowed (boolean a){ betallowed = a; } public boolean getbetallowed () { return betallowed; } public void setnavn (String a){//gøres i constructor navn = a; } public String getnavn () { return navn; } public void setbankroll (double a){ bankroll = a; } public double getbankroll () { return bankroll; } public void setstack (double a){ stack = a; } public double getstack () { return stack; } public void stackind (double a){ stack = stack + a; } public void stackud (double a){ stack = stack - a; } public void setstackstart (double a){ stackstart = a; } public double getstackstart () { return stackstart; } public void setbuyin (double a){ buyin = a; } public double getbuyin () { return buyin; } public void setseat (int a){ seat = a; } public int getseat () { return seat; } public void setstrategy (int a){ strategy = a; } public int getstrategy () { return strategy; } }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.