Problem z Listbox

0

Witam otóż postanowiłem spróbować swoich sił i w formie ćwiczenia zrobić jakieś proste makao. Mój problem wygląda tak że przekazuje referencje listboxa do klasy GameController który tworzy obiekt klasy Player i przekazuje referencje listboxa do niego. Problem polega na tym że mogę robić wszystko z tym listboxem który przekazałem lecz gdy chcę z niego wyciągnąć SelectedIndex zwraca wartość -1 tak jak bym nic nie zaznaczył, dodam tylko że sprawdzałem w samym form1 czy zwraca dobre wartosci i zwraca takie jak powinien, a na dodatek parę razy SelectedIndex mi zadziałał w tej klasie tak jak powinien. Macie jakieś pomysły co z tym zrobic lub jak tego użyć?

0

Podstawowa zasada - daj kod. Bez tego to jest raczej zgadywanie, a nie konkretna pomoc.

0

namespace TaliaKart
{
public partial class Form1 : Form
{
GameController gameController;

    public Form1()
    {
        InitializeComponent();
        LoadGame();
    }

    public void LoadGame()
    {
        gameController = new GameController(player1Hand, player2Hand, board, whoHaveTurn); 
    }

    private void drawButton_Click(object sender, EventArgs e)
    {
        gameController.DrawCard();
    }

    private void changeTurn_Click(object sender, EventArgs e)
    {
        player1Hand.Update();
    }

    private void playButton_Click(object sender, EventArgs e)
    {
        gameController.PutCard();
    }
}

}

namespace TaliaKart
{
class GameController
{
private Random random = new Random();
private ListBox board;
private Label whoHaveTurn;
private List<Card> deck = new List<Card>();
private List<Card> cardsOnBoard = new List<Card>();
private Player[] players = new Player[2];
private int playerTurn;

    public GameController(ListBox player1Hand, ListBox player2Hand, ListBox board, Label whoHaveTurn)
    {
        Random random = new Random();
        playerTurn = random.Next(0, 2);
        this.board = board;
        this.whoHaveTurn = whoHaveTurn;
        
        CreateDeck();
        CreatePlayers(player1Hand, player2Hand);
        StartGame();
    }

    //Publiczne metody

    public void DrawCard()
    {
        if (deck.Count > 0)
        {
            AddAndRemoveCard(playerTurn);
        }
        else
        {
            MessageBox.Show("dupa");
        }
    }

    public void ChangeTurn()
    {
        if (playerTurn == 0)
            playerTurn = 1;
        else
            playerTurn = 0;

        SetLabel();
    }
    
    public void PutCard()
    {
        cardsOnBoard.Add(players[playerTurn].PutSelectedCard());
        board.Items.Add(players[playerTurn].PutSelectedCard().Name);
    }

    //Prywatne metody

    private void SetLabel()
    {
        whoHaveTurn.Text = "Tura gracza " + (playerTurn + 1);
    }

    private void CreateDeck()
    {
        CreateAceCards();
        CreateDrawingCards();
        CreateFourCards();
        CreateNormalCards();
        CreateJackCards();
        CreateKingCards();
    }

    private void CreateNormalCards()
    {
        for(int i = 4; i < 10; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                deck.Add(new NormalCard((ColorOfCard)j, (ValueOfCard)i));
            }
        }

        for(int i = 0; i < 4; i++)
        {
            deck.Add(new NormalCard((ColorOfCard)i, ValueOfCard.Queen));
        }

        deck.Add(new NormalCard(ColorOfCard.Clubs, ValueOfCard.King));
        deck.Add(new NormalCard(ColorOfCard.Diamnonds, ValueOfCard.King));
    }

    private void CreateDrawingCards()
    {
        for (int i = 1; i < 3; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                deck.Add(new DrawingCard((ColorOfCard)j, (ValueOfCard)i));
            }
        }
    }

    private void CreateJackCards()
    {
        for (int i = 0; i < 4; i++)
        {
            deck.Add(new JackCard((ColorOfCard)i, ValueOfCard.Jack));
        }
    }

    private void CreateKingCards()
    {
        deck.Add(new KingCard(ColorOfCard.Hearts, ValueOfCard.King));
        deck.Add(new KingCard(ColorOfCard.Spades, ValueOfCard.King));
    }

    private void CreateFourCards()
    {
        for (int i = 0; i < 4; i++)
        {
            deck.Add(new FourCard((ColorOfCard)i, ValueOfCard.Four));
        }
    }

    private void CreateAceCards()
    {
        for(int i = 0; i < 4; i++)
        {
            deck.Add(new AceCard((ColorOfCard)i, ValueOfCard.Ace));
        }
    }

    private void CreatePlayers(ListBox player1Hand, ListBox player2Hand)
    {
        players[0] = new Player(player1Hand);
        players[1] = new Player(player2Hand);
    }

    private void AddAndRemoveCard(int playerTurn)
    {
        int temp = random.Next(0, deck.Count);

        players[playerTurn].DrawCard(deck[temp]);
        deck.Remove(deck[temp]);
    }
    
    private void StartGame()
    {
        for(int i = 0; i < players.Length; i++)
        {
            for(int j = 0; j < 5; j++)
            {
                AddAndRemoveCard(i);
            }
        }

        SetLabel();

        while(true)
        {
            int temp = random.Next(0, deck.Count);

            if (deck[temp] is NormalCard)
            {
                cardsOnBoard.Add(deck[temp]);
                board.Items.Add(deck[temp].Name);
                return;
            }
        }
    }

}

}

namespace TaliaKart
{
class Player
{
private List<Card> hand = new List<Card>();
private ListBox handList;

    public Player(ListBox handList)
    {
        this.handList = handList;
    }

    public void DrawCard(Card card)
    {
        hand.Add(card);
        Update();
    }

    public Card PutSelectedCard()
    {
        Card temp = hand[handList.SelectedIndex]; // tutaj wywala błąd SelectedIndex = -1
        hand.Remove(hand[handList.SelectedIndex]);
        Update();
        return temp;
    }

    private void Update()
    {
        handList.Items.Clear();

        foreach(Card card in hand)
        {
            handList.Items.Add(card.Name);
        }
    }
}

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1