Results 1 to 4 of 4
Thread: Èãðàòà íà æèâîòà. C# ñ GUI
Hybrid View
-
3rd November 2013 23:25 #1
Èãðàòà íà æèâîòà. 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; } } }
-
4th November 2013 00:45 #2
Ðèñóâàé â äðóã/íîâ ìàñèâ/Bitmap grid
Have no fear ike iz here.
CPU Cx486DLC@40MHz, RAM 4MB, VGA Trident 512KB, HDD Conner 160MB, Monitor 14" Color
-
4th November 2013 10:30 #3
Âåðîÿòíî íåùî â àëãîðèòúìà òè êóöà. Îïèòàé ñå äà îòäåëèø ñàìèÿ àëãîðèòúì îò òåçè, êîèòî ñè âèäÿë â èíòåðíåò. Îò òàì íàòàòúê äàëè 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.
-
4th November 2013 14:30 #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 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; } } }






Reply With Quote
Lenovo ThinkPad 15 èëè IdeaPad 15
5th May 2023, 22:16 in Ìîáèëíè êîìïþòðè