Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2017, 20:41   #1
jaha_050
Новичок
Джуниор
 
Регистрация: 27.12.2016
Сообщений: 2
Радость Прыгающие шарики

После запуска приложения на экране отображаются строки, расположенные в хаотическом порядке, а также шарики, двигающиеся по принципу броуновского движения. При столкновении шарика с буквой должен изменятся ее цвет. Выбор цвета определяется случайным образом. Программа должна позволять пользователю вводить строки и изменять размер шрифта строки.


вот сам сделал кое что

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        List<shar> balllist = new List<shar>(); // список экземпляров (шаров)
        int razmer, kolvo;
        Random rand = new Random(DateTime.Now.Millisecond);

        public class shar
        {
            public int X, Y; // Координаты
            public int R; // Радиус (половина размера)
            public int dX, dY; // Путь за 1 тик таймера

            // Заполнение данных о шаре 
            public shar(int Razm, Random rand)
            {
                R = Razm; // Размер шара        
                X = rand.Next(R, 700); // Координаты центра
                Y = rand.Next(R, 300);
                dX = rand.Next(1, 10); // Путь за один tick таймера (в пикселях)
                dY = rand.Next(1, 10);
            }

            // Рисование
            public void drawBall(PaintEventArgs e)
            {
                Graphics rg = e.Graphics;
                Pen pen = new Pen(Color.Red);
                // Отрисовка шаров
                rg.DrawEllipse(pen, X - (R / 2), Y - (R / 2), R, R);
            }

            //рассчет траектории
            public void beginBall(int width, int height, int razm)
            {
                if (X <= (razm / 2)) dX = -dX; // Если координата Х <= 10 то меняем направление движения по оси Х на противоположное
                if (X >= width - (razm / 2)) dX = -dX;
                if (Y <= (razm / 2)) dY = -dY; // Если координата У <= 10 то меняем направление движения по оси У на противоположное
                if (Y >= height - (razm / 2)) dY = -dY;

                // прибавляем к текущей координате изменение пути
                X += dX;
                Y += dY;
            }

            // соударение шаров друг с другом
            public void collisionball(shar ball1, int razmer)
            {
                if ((Math.Pow(X - ball1.X, 2) + Math.Pow(Y - ball1.Y, 2) <= Math.Pow(razmer, 2)))
                {
                    dX = -dX;
                    // dY = -dY;
                }


            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            razmer = Convert.ToInt32(textBox2.Text);
            kolvo = Convert.ToInt32(textBox1.Text);
            balllist.Clear(); // Очищаем список шаров
            for (int i = 0; i < kolvo; i++)
            {
                balllist.Add(new shar(Convert.ToInt32(textBox2.Text), rand)); // Заполнение списка шаров
            }

        }

        private void tick(object sender, EventArgs e)
        {
            // Метод проверки соударения друг с другом
            for (int i = 0; i < balllist.Count; i++)
                for (int j = 0; j < balllist.Count; j++)
                {
                    if (i != j)
                        balllist[i].collisionball(balllist[j], razmer);
                }

            // Метод проверки соударения со стенками
            foreach (shar ball in balllist)
                ball.beginBall(pictureBox1.Width, pictureBox1.Height, razmer);

            pictureBox1.Invalidate(); // Перерисовка
        }

        private void paint(object sender, PaintEventArgs e)
        {
            foreach (shar ball in balllist)
                ball.drawBall(e); // Само рисование
        }
    }
}


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.
Вложения
Тип файла: rar 123.rar (177.0 Кб, 34 просмотров)

Последний раз редактировалось Serge_Bliznykov; 05.12.2017 в 21:49.
jaha_050 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шарики makskovalko Паскаль, Turbo Pascal, PascalABC.NET 1 29.03.2013 20:30
Шарики движутся рывками wint1000 Общие вопросы Delphi 9 28.11.2010 22:21
Шарики sk1p Общие вопросы C/C++ 1 06.04.2010 01:11
Игра "прыгающие лягушки" precison Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 07.10.2009 21:19