dzielenie bitmapy według rozmiaru tablicy wielowymiarowej i rysowanie na tej bitmapie

0

Dobry wieczór.

Piszę do Państwa ponieważ mam projekt "Gry w życie" do napisania a nie bardzo wiem jak się za to zabrać. Wiem że muszę podzielić bitmapę na małe kwadraciki, siatkę(ilość kwadracików myślę że powinna odpowiadać ilości elementów w tablicy wielowymiarowej). I potem zaznaczać w tych kwadracikach "komórki".

Mój problem to jak podzielić bitmapę na te kwadraciki, siatkę(pola, kto zna aparat komórkowy "gry w życie" myślę że wie o co mi chodzi), i jak spowodować by w tych kwadracikach można było oznaczać te komórki.

Myślałem że to może na zasadzie że jest tablica np. 10x10, i to wyrysuje siatkę na bitmapie na 100 elementów. I gdy klikniemy w jakiś element to w tablicy będzie przypisana jakaś wartość.

Proszę o pomoc, jak rozwiązać ten dylemat.

0

Pomysł nie jest zły.
Masz jakieś konkretne pytanie?

0

Tak jak narysować tą siatkę na bitmapie, i czy da się w dany element kliknąć, zamalowując go, bądź w jakiś sposób zaznaczając go. Jeśli tak to w jaki sposób :)

0

W poprzednim wątku o C# operowałeś już na klasach PictureBox (przyda się zdarzenie MouseClick), Bitmap oraz Graphics. Właśnie za pomocą nich.

0
Kalysto napisał(a):

Tak jak narysować tą siatkę na bitmapie
http://msdn.microsoft.com/en-us/library/aa287563.aspx

Kalysto napisał(a):

i czy da się w dany element kliknąć, zamalowując go, bądź w jakiś sposób zaznaczając go. Jeśli tak to w jaki sposób :)
Obsłużyć zdarzenie Click formy i przeliczyć współrzędne kliknięcia na współrzędne komórki. Zapisać sobie w tablicy, że ta komórka jest żywa i odmalować ekran.

0

I mam w jakiś sposób za pomocą pętli for próbować wyrysować ileś linii poziomo i pionowo(w zależności od wymiarów tablicy) przy pomocy pióra z biblioteki Graphics ? Tak? Czy mylę się? Ale jak to spowodować? Jak tą Bitmapę podzielić na pixele żeby można było w jakiś sposób podzielić np szerokość bitmapy/ilość tych komórek do narysowania = co ile pixeli ma być dana linia ?

Przepraszam za komplikowanie. Nie jestem programistą.

0

Linie, prostokąty, kwadraty, cokolwiek, masz spory wybór.

Jak tą Bitmapę podzielić na pixele żeby można było w jakiś sposób podzielić np szerokość bitmapy/ilość tych komórek do narysowania = co ile pixeli ma być dana linia ?

Normalnie? Podziel szerokość bitmapy przez ilość pól w jednym wierszu i dostaniesz szerokość jednego pola.

Przepraszam za komplikowanie. Nie jestem programistą.

To dlaczego robisz to zadanie?

0
Rev napisał(a):

Przepraszam za komplikowanie. Nie jestem programistą.

To dlaczego robisz to zadanie?

Bo to praca na zaliczenie z przedmiotu na studiach. Pisałem już wcześniej trochę w tym języku. Czytałem parę pdf'ów jednak za programistę się nie uważam.

Edit:

Stworzyłem coś takiego (taki mały mój przykład żeby zobaczyć czy coś z tą siatką mi wyjdzie):

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            CreateBitmap();
        }
        void CreateBitmap()
        {

            int[,] tab = new int[500,500];
            Graphics g = this.CreateGraphics();

            pictureBox1.Width = tab.GetUpperBound(0)+2; //szerokosc
            pictureBox1.Height = tab.GetUpperBound(1)+2; //wysokosc

            Bitmap bit = new Bitmap(pictureBox1.Width, pictureBox1.Height);
           
            pictureBox1.Image = bit;
            g = Graphics.FromImage(bit);
            
            /*linie poziome*/
            
            int wart_poz_str = 0;
            int wart_poz_kon = tab.GetUpperBound(0) + 1;
            Pen nowy = new Pen(Color.Purple);

            for (int x = 0; x < wart_poz_kon; x++)
            {
                if (x % 10 == 0)
                    g.DrawLine(nowy, wart_poz_str, x, wart_poz_kon, x);
            }
            g.DrawLine(nowy, wart_poz_str, wart_poz_kon, wart_poz_kon, wart_poz_kon);

            
            /*linie pionowe*/

            int wart_pion_str = 0;
            int wart_pion_kon = tab.GetUpperBound(1) + 1;
            Pen nowy2 = new Pen(Color.Plum);
            
            
            for (int x = 0; x < wart_pion_kon; x++)
            {
                if (x % 10 == 0)
                    g.DrawLine(nowy2, x, wart_pion_str, x, wart_pion_kon);
            }
            g.DrawLine(nowy2, wart_pion_kon, wart_pion_str, wart_pion_kon, wart_pion_kon);


            g.Dispose();

        }

W sumie to narzuciło mi się pytanie jak przypisać indeksy tablicy poszczególnym kratkom z tej siatki?
I jak teraz spowodować żebym mógł dajmy na to za pomocą kliknięcia zamalować jedną z tych kratek a w tablicy np jakby wszystkie miały wartość domyślną 0, to ta miała wartość 1.

Proszę o pomoc

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