Jeg har kun lige skimmet, men måske hjælper det at ændre til:
public void sethand (int[] a) {
hand[0] = a[0];
hand[1] = a[1];
}
Du opretter kun ét array. Det ændrer du så lidt i ved hvert gennemløb og tildeler det hver spiller.
temp = new int[2];
Prøv at flyt den linje ind i din løkke :-)
Tak iclemens virker perfekt. Smid et svar :)
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.
Nu oprettes et nyt array til hver spiller.
Udover den konkrete fejl som lclemens har forklaret om, saa tror jeg at din kode med fordel kunne skifte fra arrays til collections.
Har ikke erfaring med collections. Har været inde og læse lidt om det (
http://docs.oracle.com/ (...)). 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 :)
Collections er lidt langsommere end arrays, saa hvis du skal lave milliarder af operationer i minuttet, saa hold dig til array.
Laver du kun nogle faa millioner i minuttet, saa betyder forskellen ikke noget.
Collections (specielt brug af mere specialiserede collections) kan give en mere letlaeselig kode med faerre fejl i.
Eksempel til inspiration:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Stack;
public class CardFun {
private static ArrayList<Card> createDeck() {
ArrayList<Card> res = new ArrayList<Card>();
for(Suit suit : Suit.values()) {
for(Value value : Value.values()) {
res.add(new Card(suit, value));
}
}
return res;
}
private static void shuffle(ArrayList<Card> deck) {
Collections.shuffle(deck);
}
private static Stack<Card> deckToStack(ArrayList<Card> deck) {
Stack<Card> res = new Stack<Card>();
res.addAll(deck);
return res;
}
private static ArrayList<Player> createPlayers(String... names) {
ArrayList<Player> res = new ArrayList<Player>();
for(String name : names) {
res.add(new Player(name));
}
return res;
}
private static void deal(int numberCards, Stack<Card> stack, ArrayList<Player> players) {
for(int i = 0; i < numberCards; i++) {
for(Player player : players) {
player.add(stack.pop());
}
}
}
public static void main(String[] args) {
ArrayList<Card> deck = createDeck();
//System.out.println(deck);
shuffle(deck);
//System.out.println(deck);
Stack<Card> stack = deckToStack(deck);
//System.out.println(stack);
ArrayList<Player> players = createPlayers("Anders", "Boerge", "Christian");
System.out.println(players);
deal(2, stack, players);
System.out.println(players);
}
}
class Player {
private String name;
private ArrayList<Card> cards;
public Player(String name) {
this.name = name;
cards = new ArrayList<Card>();
}
public void add(Card card) {
cards.add(card);
}
@Override
public String toString() {
return name + " : " + cards;
}
}
class Card {
private Suit suit;
private Value value;
public Card(Suit suit, Value value) {
this.suit = suit;
this.value = value;
}
public Suit getSuit() {
return suit;
}
public Value getValue() {
return value;
}
@Override
public String toString() {
return value + " of " + suit;
}
}
enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES }
enum Value { TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE }
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 spiller(String navn,double stack)
{
this.navn = navn;
this.stack = stack;
}
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;
}
}