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
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);
}
}
}
}