Results 1 to 4 of 4

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User kukov's Avatar
    Join Date: Feb:2007
    Location: Âåëèêî Òúðíîâî
    Posts: 1,531

    Èãðàòà íà æèâîòà. C# ñ GUI

    Çäðàâåéòå õîðà.
    Ïèøà âè ñ îãðîìíà ìîëáà. Èìàì çàäà÷à äà íàïðàâÿ èçâåñòíàòà èãðà íà æèâîòà íà Êîíóåé, íî ñ ãðàôè÷åí èíòåðôåéñ. Çà öåëòà ñúì èçáðàë äà èçïîëçâàì áèòìàï è âñåêè ïèêñåë äà èãðàå ðîëÿòà íà êëåòêà. Ðàçáèðàì ÷å òîâà íå å ìíîãî äîáúð âàðèàíò, íî çàñåãà ùå ìè ñâðúøè ðàáîòà. Òîâà, êîåòî ïðàâÿ å ñëåäíîòî - Çà âñåêè ïèêñåë îò áèòìàï-à, ïðîâåðÿâàì äàëè èìà ÷åðíè ïèêñåëè äî íåãî(æèâè êëåòêè). Àêî èìà 2 èëè 3, îöâåòÿâàì òîçè ïèêñåë ÷åðåí. Àêî ñà ïî-ìàëêî îò 2 èëè ïîâå÷å îò 4, ãî îöâåòÿâàì â áÿëî. Ïðîáëåìà å òàì, ÷å êàêâîòî è íà÷àëî äà èçáåðà, âèíàãè ñå ïîëó÷àâà åäèí è ñúù ðåçóëòàò.  íåòà íàìèðàì äîñòà ðåøåíèÿ, íî íå ìè ïîìàãàò îñîáåíî, ãëàâíî çàùîòî ñà ñàìî ñ êîíçîëåí èíòåðôåéñ. Êîäà ìè å ñëåäíèÿ:

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication5
    {
        public partial class Form1 : Form
        {
            public Bitmap grid = new Bitmap(100, 100);  
            
            public Form1()
            {
                InitializeComponent();
                
                    //acorn starting possition
                    //   0100000
                    //   0001000
                    //   1100111
                        grid.SetPixel(50, 50, Color.Black);
                        grid.SetPixel(48, 49, Color.Black);
                        grid.SetPixel(47, 51, Color.Black);
                        grid.SetPixel(48, 51, Color.Black);
                        grid.SetPixel(51, 51, Color.Black);
                        grid.SetPixel(52, 51, Color.Black);
                        grid.SetPixel(53, 51, Color.Black); 
                    
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                this.Paint += Form1_Paint;
            }
    
            void Form1_Paint(object sender, PaintEventArgs e)
            {
                //number of generations
                for (int k = 0; k < 3; k++)
                {
                    for (int x = 0; x <= grid.Width - 1; x++)
                    {                    
                        for (int y = 0; y <= grid.Height - 1; y++)
                        {
                            if (nextState(grid, x, y) == 2 || nextState(grid, x, y) == 3) { grid.SetPixel(x, y, Color.Black); }
                            if (nextState(grid, x, y) < 2) { grid.SetPixel(x, y, Color.White); }
                            if (nextState(grid, x, y) > 4) { grid.SetPixel(x, y, Color.White); }
                        }
                    }
                    e.Graphics.DrawImage(grid, 0, 0, grid.Width, grid.Height);
                }
            }
    
            public int nextState(Bitmap grid, int x, int y)
            {
    
                int numNeigh = 0;
                //check for x-1 and y-1
                if (x > 0 && y > 0)
                {
                    Color pixColor = grid.GetPixel(x - 1, y - 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x and y-1
                if (y > 0)
                {
                    Color pixColor = grid.GetPixel(x, y - 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x+1 and y-1
                if (x < grid.Width - 1 && y > 0)
                {
                    Color pixColor = grid.GetPixel(x + 1, y - 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x-1 and y
                if (x > 0)
                {
                    Color pixColor = grid.GetPixel(x - 1, y);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x+1 and y
                if (x < grid.Width - 1)
                {
                    Color pixColor = grid.GetPixel(x + 1, y);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                // check for x-1 and y+1
                if (x > 0 && y < grid.Height - 1)
                {
                    Color pixColor = grid.GetPixel(x - 1, y + 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x and y+1
                if (y < grid.Height - 1)
                {
                    Color pixColor = grid.GetPixel(x, y + 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x+1 and y+1
                if (x < grid.Width - 1 && y < grid.Height - 1)
                {
                    Color pixColor = grid.GetPixel(x + 1, y + 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
    
                }
                return numNeigh;
            }
        }
    }
    Ùå ñå ðàäâàì íà âñÿêàêâè íàñîêè, ìàëêè èëè ãîëåìè. Áëàãîäàðÿ âè.
    Quote Originally Posted by Fear View Post
    Moæå íà òåá äà òè å ïðèÿòíî ãàäæåòî òè äà å â .jpeg/.avi ôîðìàò, íî àç ñúì ñòàðîìîäåí.

  2. #2
    Registered abUser ike's Avatar
    Join Date: Jul:2004
    Location: sofiÿ
    Posts: 4,965
    Ðèñóâàé â äðóã/íîâ ìàñèâ/Bitmap grid
    Have no fear ike iz here.
    CPU Cx486DLC@40MHz, RAM 4MB, VGA Trident 512KB, HDD Conner 160MB, Monitor 14" Color

  3. #3
    Registered User wp7guy's Avatar
    Join Date: Jan:2011
    Location: Sofia
    Posts: 1,264
    Âåðîÿòíî íåùî â àëãîðèòúìà òè êóöà. Îïèòàé ñå äà îòäåëèø ñàìèÿ àëãîðèòúì îò òåçè, êîèòî ñè âèäÿë â èíòåðíåò. Îò òàì íàòàòúê äàëè console, win èëè web íÿìà çíà÷åíèå.

    Edit: Çàìåíè Bitmap-a ñ äâóìåðåí ìàñèâ îò int (çà ïî-ëåñíî), ñëàãàé 0 è 1 çà æèâè è ìúðòâè è debug-íè äà âèäèø êàêâî, êàê è êúäå ñå îáúðêâà.
    "The only way to discover the limits of the possible is to go beyond them into the impossible." - Arthur C. Clarke's second low.

  4. #4
    Registered User kukov's Avatar
    Join Date: Feb:2007
    Location: Âåëèêî Òúðíîâî
    Posts: 1,531
    Áëàãîäàðÿ, óñïÿõ äà ãî äîêàðàì äî ðàáîòåùî íèâî. Åòî è êîäà, çà âñè÷êè, êîèòî ìèñëÿò ÷å ùå èì å ïîëåçåí.
    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication5
    {
        public partial class Form1 : Form
        {
            public Bitmap grid = new Bitmap(100, 100);
            public Bitmap newGrid = new Bitmap(100, 100);
           
            public int generations = 0;
    
            public Form1()
            {
                InitializeComponent();
    
                //acorn starting possition
                //   0100000
                //   0001000
                //   1100111
                    grid.SetPixel(50, 50, Color.Black);
                    grid.SetPixel(48, 49, Color.Black);
                    grid.SetPixel(47, 51, Color.Black);
                    grid.SetPixel(48, 51, Color.Black);
                    grid.SetPixel(51, 51, Color.Black);
                    grid.SetPixel(52, 51, Color.Black);
                    grid.SetPixel(53, 51, Color.Black); 
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                this.Paint += Form1_Paint;
    
            }
    
            void Form1_Paint(object sender, PaintEventArgs e)
            {
                //number of generations
                for (int k = 0; k < 10; k++)
                {   
                    for (int x = 0; x <= grid.Width - 1; x++)
                    {
                        for (int y = 0; y <= grid.Height - 1; y++)
                        {
                            if (nextState(grid, x, y) == 3 || nextState(grid, x, y) == 2)
                            {
                                newGrid.SetPixel(x, y, Color.Black);
                            }
                            if (nextState(grid, x, y) > 4)
                            {
                                newGrid.SetPixel(x, y, Color.White);
                            }
                            if (nextState(grid, x, y) < 2)
                            {
                               newGrid.SetPixel(x, y, Color.White);
                            }
                        }
                    }
    
                    e.Graphics.DrawImage(newGrid, 0, 0, grid.Width, grid.Height);
                    grid = new Bitmap(newGrid);
                }
            }
    
    
            public int nextState(Bitmap grid, int x, int y)
            {
    
                int numNeigh = 0;
                //check for x-1 and y-1
                if (x > 0 && y > 0)
                {
                    Color pixColor = grid.GetPixel(x - 1, y - 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x and y-1
                if (y > 0)
                {
                    Color pixColor = grid.GetPixel(x, y - 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x+1 and y-1
                if (x < grid.Width - 1 && y > 0)
                {
                    Color pixColor = grid.GetPixel(x + 1, y - 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x-1 and y
                if (x > 0)
                {
                    Color pixColor = grid.GetPixel(x - 1, y);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x+1 and y
                if (x < grid.Width - 1)
                {
                    Color pixColor = grid.GetPixel(x + 1, y);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                // check for x-1 and y+1
                if (x > 0 && y < grid.Height - 1)
                {
                    Color pixColor = grid.GetPixel(x - 1, y + 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x and y+1
                if (y < grid.Height - 1)
                {
                    Color pixColor = grid.GetPixel(x, y + 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
                }
                //check for x+1 and y+1
                if (x < grid.Width - 1 && y < grid.Height - 1)
                {
                    Color pixColor = grid.GetPixel(x + 1, y + 1);
                    if (pixColor.ToArgb() == Color.Black.ToArgb()) { numNeigh++; }
    
                }
                
                return numNeigh;
            }
    
        }
    }
    Quote Originally Posted by Fear View Post
    Moæå íà òåá äà òè å ïðèÿòíî ãàäæåòî òè äà å â .jpeg/.avi ôîðìàò, íî àç ñúì ñòàðîìîäåí.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Copyright © 1999-2011 Õàðäóåð ÁÃ. Âúçìîæíî å ñúäúðæàíèåòî íà òàçè ñòðàíèöà äà å îáåêò íà àâòîðñêè ïðàâà.
iskamPC.com | mobility.BG | Bloody's Techblog | Êðèïòîâàëóòè è ìàéíèíã | 3D Vision Blog | Ìàãàçèí çà åëåêòðîííè öèãàðè