none
Как построить звёздное небо на C# Visual Studio 2008 в Приложение Windows Forms RRS feed

  • Вопрос

  • Нужно сделать звездное небо. Количество звезд вводится с клавиатуры и звезды должны появится в разбросе и разного размера. Звезды могут выглядить как "*" или "+".

    • Перемещено Abolmasov Dmitry 18 июня 2012 г. 7:35 (От:Работа в среде Visual Studio)
    17 июня 2012 г. 11:47

Ответы

  • using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WinFormStars
    {
        public partial class Form1 : Form
        {
            NumericUpDown numericUpDown;
            Panel skyPanel;
            Random random;
    
            const int width = 250;
            const int height = 250;
            const string star = "\u2606"; // "*"
    
            public Form1()
            {
                InitializeComponent();
    
                numericUpDown = new NumericUpDown { Parent = this, Minimum = 10, Maximum = 50 };
                skyPanel = new Panel { Parent = this, Top = 25, BackColor = Color.Black, Width = width, Height = height };
                random = new Random();
    
                skyPanel.Paint += skyPanel_Paint;
                numericUpDown.ValueChanged += numericUpDown_ValueChanged;
                this.SizeChanged += Form1_SizeChanged;
            }
    
            void skyPanel_Paint(object sender, PaintEventArgs e)
            {
                for (int i = 0; i < numericUpDown.Value; ++i)
                {
                    var x = (float)random.NextDouble() * width;
                    var y = (float)random.NextDouble() * height;
    
                    var size = (float)random.NextDouble() * 15 + 1;
                    var font = new Font(skyPanel.Font.FontFamily, size);
    
                    e.Graphics.DrawString(star, font, Brushes.White, x, y);
                }
            }
    
            void numericUpDown_ValueChanged(object sender, EventArgs e)
            {
                skyPanel.Refresh();
            }
    
            void Form1_SizeChanged(object sender, EventArgs e)
            {
                skyPanel.Refresh();
            }
        }
    }
    

    Совет на будущее: халявщиков нигде не любят. Хотите, чтобы вам помогли - покажите, что уже сделали, свой код. Поясните, что удалось сделать, а что не получается.
    • Предложено в качестве ответа Abolmasov Dmitry 18 июня 2012 г. 7:34
    • Помечено в качестве ответа Abolmasov Dmitry 22 июня 2012 г. 12:57
    17 июня 2012 г. 12:52

Все ответы

  • using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WinFormStars
    {
        public partial class Form1 : Form
        {
            NumericUpDown numericUpDown;
            Panel skyPanel;
            Random random;
    
            const int width = 250;
            const int height = 250;
            const string star = "\u2606"; // "*"
    
            public Form1()
            {
                InitializeComponent();
    
                numericUpDown = new NumericUpDown { Parent = this, Minimum = 10, Maximum = 50 };
                skyPanel = new Panel { Parent = this, Top = 25, BackColor = Color.Black, Width = width, Height = height };
                random = new Random();
    
                skyPanel.Paint += skyPanel_Paint;
                numericUpDown.ValueChanged += numericUpDown_ValueChanged;
                this.SizeChanged += Form1_SizeChanged;
            }
    
            void skyPanel_Paint(object sender, PaintEventArgs e)
            {
                for (int i = 0; i < numericUpDown.Value; ++i)
                {
                    var x = (float)random.NextDouble() * width;
                    var y = (float)random.NextDouble() * height;
    
                    var size = (float)random.NextDouble() * 15 + 1;
                    var font = new Font(skyPanel.Font.FontFamily, size);
    
                    e.Graphics.DrawString(star, font, Brushes.White, x, y);
                }
            }
    
            void numericUpDown_ValueChanged(object sender, EventArgs e)
            {
                skyPanel.Refresh();
            }
    
            void Form1_SizeChanged(object sender, EventArgs e)
            {
                skyPanel.Refresh();
            }
        }
    }
    

    Совет на будущее: халявщиков нигде не любят. Хотите, чтобы вам помогли - покажите, что уже сделали, свой код. Поясните, что удалось сделать, а что не получается.
    • Предложено в качестве ответа Abolmasov Dmitry 18 июня 2012 г. 7:34
    • Помечено в качестве ответа Abolmasov Dmitry 22 июня 2012 г. 12:57
    17 июня 2012 г. 12:52
  • Не забывайте отмечать ответ, если он решает вашу проблему. Спасибо.

    Для связи [mail]

    18 июня 2012 г. 7:35