Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [c#] posizione nella matrice
Forum - C# / VB.NET - [c#] posizione nella matrice

Avatar
el borto (Normal User)
Rookie


Messaggi: 47
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 18:45
Martedì, 12/01/2010
ciao a tutti mi ritrovo ancora qua a chiedere aiuto perchè propio non ce la faccio ad andarcene fuori...
dunque : sto ricreando in c# il gioco degli scacchi e per farlo ho utilizzato una matrice di pictureBox , riesco a generarla e anche a posizionare i vari pezzi.
ora mi ritrovo con tutta la scacchiera posizionata e dovrei assegnare a ogni pictureBox (in tutto sono 64) una funzione che mi restituisca la posizione di quest'ultima all'interno della matrice faccio un esempio per spiegarmi se clicco sulla pictureBox[0,6] dovrebbe restituirmi 0 e 6  avete qualche suggerimento?  
grazie mille in anticipo a chiunque riesca a darmi una mano

Ultima modifica effettuata da el borto il 12/01/2010 alle 19:02
PM Quote
Avatar
Mte90 (Member)
Guru


Messaggi: 1144
Iscritto: 25/03/2008

Segnala al moderatore
Postato alle 21:45
Martedì, 12/01/2010
potresti dare ad ogni picturebox un tag corrispondente agli indici o altrimenti dargli un numero tipo picture16.
non mi ricordo se il campo si chiama tag ma permette di mettere tipo note o proprio un tag richiamabile da codice.


http://www.mte90.net/
Kde, Debian e Programmazione web/Desktop!


Linux Counter.li #482442
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 23:56
Martedì, 12/01/2010
ciao secondo me sbagli devi ragionare sul problema partendo dal presupposto che la tua interfaccia non esista quindi per cominciare a gestire unicamente i dati
prova a usare un DataTable per gestire le coordinate oppure un oggetto di tipo List che contiene la tua ipotetica scacchiera...sicuramente ti semplifichi la vita
per i pezzi puoi crearti oggetti analoghi e posizionarli sulla scacchiera
dentro l'oggetto del pezzo in oltre puoi magari definirne il comportamento specificando quali mosse può fare....

Ultima modifica effettuata da Gianluca87 il 13/01/2010 alle 0:34


a domanda precisa, risposta precisa...
a domanda generica, risposta generica...
PM Quote
Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 15:12
Mercoledì, 13/01/2010
Condivido in parte il discorso di Gianluca: anche io penso che non sia il modo migliore di gestire la tua applicazione. Tuttavia, se proprio vuoi proseguire sulla tua linea, potresti utilizzare questo codice; l'ho scritto con uno schema ben preciso della scacchiera.

Codice sorgente - presumibilmente C++

  1. public partial class Form1 : Form
  2.     {
  3.         public Form1()
  4.         {
  5.             InitializeComponent();
  6.         }
  7.  
  8.         //L'array delle PictureBox
  9.         PictureBox[] arrPictBox = null;
  10.  
  11.         private void Form1_Load(object sender, EventArgs e)
  12.         {
  13.             //Inizializzi l'array
  14.             arrPictBox = new PictureBox[64];
  15.             for (int i = 0; i < arrPictBox.Length; i++)
  16.             {
  17.                 arrPictBox[i] = new PictureBox();
  18.                 arrPictBox[i].Click += new EventHandler(this.PictureBox_Click);
  19.                 //Assegni tutte le proprietà delle PictureBox
  20.                 this.Controls.Add(arrPictBox[i]);
  21.             }
  22.         }
  23.  
  24.         protected void PictureBox_Click(object sender, EventArgs e)
  25.         {
  26.             //Restituisce la posizione nell'array della PictureBox cliccata
  27.             int index = Array.IndexOf(arrPictBox, (PictureBox)sender);
  28.             int row = 0; //La riga della scacchiera
  29.             int position = 0; //La posizione all'interno della riga
  30.  
  31.             //A seconda dell'indice della PictureBox, stabilisci la riga e la posizione
  32.             if (index >= 0 && index < 8)
  33.             {
  34.                 row = 0;
  35.                 position = index;
  36.             }
  37.             else if (index >= 8 && index < 16)
  38.             {
  39.                 row = 1;
  40.                 position = index - 8;
  41.             }
  42.             else if (index >= 16 && index < 24)
  43.             {
  44.                 row = 2;
  45.                 position = index - 16;
  46.             }
  47.             else if (index >= 24 && index < 32)
  48.             {
  49.                 row = 3;
  50.                 position = index - 24;
  51.             }
  52.             else if (index >= 32 && index < 40)
  53.             {
  54.                 row = 4;
  55.                 position = index - 32;
  56.             }
  57.             else if (index >= 40 && index < 48)
  58.             {
  59.                 row = 5;
  60.                 position = index - 40;
  61.             }
  62.             else if (index >= 48 && index < 56)
  63.             {
  64.                 row = 6;
  65.                 position = index - 48;
  66.             }
  67.             else if (index >= 56 && index < 64)
  68.             {
  69.                 row = 7;
  70.                 position = index - 56;
  71.             }
  72.  
  73.             //Visualizzi la riga e la posizione della PictureBox
  74.             MessageBox.Show("Riga: " + row + "\nPosizione: " + position);
  75.         }
  76.     }



Importante è ricordare, ma più importante è dimenticare.
(Rainer Maria Rilke)
PM Quote
Avatar
el borto (Normal User)
Rookie


Messaggi: 47
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 16:23
Mercoledì, 13/01/2010
ringrazio tutti per le risposte ma sono riuscito poi a risolvere grazie ad un calcolo sulla posizione (x e y ) della picture box
per balto : non sarei riuscito comunque ad utilizzare il tuo codice perchè io la scacchiera l'ho impostata come una matrice e non come array monodimensionale perchè mi risulta più facile riuscire a calcolare la mosse possibili ( per esempio per il cavallo che può muoversi solo ad L se le coordinate di partenza sono [5,5] le mosse possibili sono [3,6] vale a dire [x-2,y+1], [3,4] [7,4][7,6] ecc)

PM Quote
Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 16:40
Mercoledì, 13/01/2010
Ah okok, sono contento che abbia risolto =)


Importante è ricordare, ma più importante è dimenticare.
(Rainer Maria Rilke)
PM Quote