Strona 1 z 1

wyswietlenie 3x3

: 17 sty 2010, o 11:14
autor: pool
Witam, poniższy kod generuje 9 pól które są wyświetlone w jednej linii, jak wyświetlić je w 3 kolumnach po 3 (3x3)??

Kod: Zaznacz cały

   for (k=0; k<9; k++) {
      obrazki[k] = new SpecObraz(this);
      obrazki[k]->Parent = this;

      obrazki[k]->Left = 300 + k*80;
      obrazki[k]->Top = 200;

      obrazki[k]->Width = 60;
      obrazki[k]->Height = 60;

      obrazki[k]->Visible = true;
      obrazki[k]->Stretch = true;
      obrazki[k]->Picture->LoadFromFile("puste.bmp");
      obrazki[k]->OnClick = Gracz;

      for (i=0; i<3; i++)
      for (j=0; j<3; j++)
         if (cyfry[i][j] == k+1) {
            obrazki[k]->i = i;
            obrazki[k]->j = j;
         }
   }

}

wyswietlenie 3x3

: 17 sty 2010, o 11:32
autor: infty
Może tak?
Pętlę:

Kod: Zaznacz cały

for(k=0; k<9; k++){
...
}
rozbijemy na:

Kod: Zaznacz cały

for(k=0; k<3; k++){
   for(k'=0; k'<3; k'++){
      obrazki[k*3+k']=...
   }
   a tu wstawić łamanie wiersza
}

wyswietlenie 3x3

: 17 sty 2010, o 12:16
autor: matshadow
nie można nazwać zmiennej k'. Zmień sobie k' np. na j

wyswietlenie 3x3

: 17 sty 2010, o 14:34
autor: pool
cos mi nie wychodzi:/ mogłbys mi to rozpisac? byłbym wdzieczny

wyswietlenie 3x3

: 17 sty 2010, o 16:19
autor: Delwing
Najprościej:

Kod: Zaznacz cały

for (k=0; k<9; k++) {
	obrazki[k] = new SpecObraz(this);
	obrazki[k]->Parent = this;

	obrazki[k]->Left = 300 + k*80;
	obrazki[k]->Top = 200;

	obrazki[k]->Width = 60;
	obrazki[k]->Height = 60;

	obrazki[k]->Visible = true;
	obrazki[k]->Stretch = true;
	obrazki[k]->Picture->LoadFromFile("puste.bmp");
	obrazki[k]->OnClick = Gracz;

	for (i=0; i<3; i++) {
		for (j=0; j<3; j++) {
			if (cyfry[i][j] == k+1) {
				obrazki[k]->i = i;
				obrazki[k]->j = j;
			}
		}
	}
	if(k % 3 == 0) {
		znak łamania linii
	}
}

wyswietlenie 3x3

: 17 sty 2010, o 21:20
autor: pool
działa Ci to bo mi nie :/ ?

wyswietlenie 3x3

: 17 sty 2010, o 23:07
autor: kamillys
jedno pytanie: czy w miejscu "znak łamania linii" dałeś (nie określiłeś czy to język C, czy C++, czy co innego, przyjmuje że jest to C++) cout << endl, albo jakiś inny kod, który robi coś podobnego czy nie zmieniłeś tego i się dziwisz czemu nie działa?

wyswietlenie 3x3

: 18 sty 2010, o 17:01
autor: infty
Kopiuj-wklej:

Kod: Zaznacz cały

for (k=0; k<9; k++) {
   obrazki[k] = new SpecObraz(this);
   obrazki[k]->Parent = this;

   obrazki[k]->Left = 300 + k*80;
   obrazki[k]->Top = 200;

   obrazki[k]->Width = 60;
   obrazki[k]->Height = 60;

   obrazki[k]->Visible = true;
   obrazki[k]->Stretch = true;
   obrazki[k]->Picture->LoadFromFile("puste.bmp");
   obrazki[k]->OnClick = Gracz;

   for (i=0; i<3; i++) {
      for (j=0; j<3; j++) {
         if (cyfry[i][j] == k+1) {
            obrazki[k]->i = i;
            obrazki[k]->j = j;
         }
      }
   }
   if(k % 2 == 0) {
      cout << endl;
   }
}
Modulo 2, ponieważ k jest od 0 do 9, więc po k=2,5,8 należy wstawić łamanie wiersza.

wyswietlenie 3x3

: 24 sty 2010, o 14:32
autor: pool
działa, wyświetla się 3x3 tylko właściwie nie tak to muszę zrobić
oto mój kod:

Kod: Zaznacz cały

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   int i,j,k;
   // inicjalizacja generatora liczb losowych
   randomize();

   graWToku = 1;    // gra w toku
   liczbaRuchow = 0;

   Komunikat->Visible = false;
   // w tablicy same zera
   for (i=0; i<3; i++)
   for (j=0; j<3; j++)
      kod[i][j] = 0;

   // wypełnienie tablicy cyfry
   cyfry[0][0] = 4;
   cyfry[0][1] = 9;
   cyfry[0][2] = 2;

   cyfry[1][0] = 3;
   cyfry[1][1] = 5;
   cyfry[1][2] = 7;

   cyfry[2][0] = 8;
   cyfry[2][1] = 1;
   cyfry[2][2] = 6;


   // utworzenie 9 obrazków
   for (k=0; k<9; k++) {
      obrazki[k] = new SpecObraz(this);
      obrazki[k]->Parent = this;

      obrazki[k]->Left = 50 + k*60;
      obrazki[k]->Top = 200;

      obrazki[k]->Width = 30;
      obrazki[k]->Height = 30;

      obrazki[k]->Visible = true;
      obrazki[k]->Stretch = true;

      // załadowanie obrazka
      obrazki[k]->Picture->LoadFromFile("puste.bmp");

      // podanie nazwy metody wykonywanej po zajsciu
      // zdarzenia OnClick
      obrazki[k]->OnClick = Gracz;

      // nadanie wartosci własnosciom i,j
      for (i=0; i<3; i++)
      for (j=0; j<3; j++)
         if (cyfry[i][j] == k+1) {
            obrazki[k]->i = i;
            obrazki[k]->j = j;
         }
}
   // wyswietlenie cyfr w odpowiednim miejscu na formularzu
   Label1->Left = 60;
   Label1->Top = 165;

   Label2->Left = 120;
   Label2->Top = 165;

   Label3->Left = 180;
   Label3->Top = 165;

   Label4->Left = 240;
   Label4->Top = 165;

   Label5->Left = 295;
   Label5->Top = 165;

   Label6->Left = 355;
   Label6->Top = 165;

   Label7->Left = 415;
   Label7->Top = 165;

   Label8->Left = 475;
   Label8->Top = 165;

   Label9->Left = 535;
   Label9->Top = 165;
}
poprzednio wyświetlanie było : 1 2 3 4 5 6 7 8 9
gdy suma 3 X lub O była równa 15 dany symbol wygrywał

jak wyświetlić to w formie:
4 9 2
3 5 7
8 1 6

??-- 24 stycznia 2010, 16:12 --już po problemie:), post do kosza.