|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.11.2012, 00:10 | #11 |
Регистрация: 18.12.2010
Сообщений: 9
|
Рисованные объекты одного класса. Создается объект, помещается в динамический массив. В событии таймера цикл пробегает массив объектов и двигает каждый на определенное расстояние. Столкновения друг с другом нет.
|
02.11.2012, 18:00 | #12 |
Регистрация: 18.03.2012
Сообщений: 9
|
По примеру написал часть программы, но что то не могу понять как сделать чтобы при нажатии на кнопку сразу появлялось случайное число шаров и рассчитать расстояние между шарами чтобы дальше описать волнообразное движение
using System; using System.Drawing; using System.Windows.Forms; using System.Threading; using System.Collections; using System.Collections.Generic; using System.Text; namespace rgr1 { delegate void delEv(); class Ball { public event delEv ev; private int x, y; private int w, h; private int dx, dy; private Thread t; private bool life; public int X { get { return x; } } public int Y { get { return y; } } public Ball(int X, int Y, int Dx, int Dy, int W, int H) { w = W; h = H; x = X; y = Y; dx = Dx; dy = Dy; life = true; t = new Thread(new ThreadStart(BallFunc)); t.Start(); } public void Finish() { life = false; t.Join(); } void BallFunc() { while (life) { x += dx; y += dy; if (x > w || x < 0) { dx = -dx; } if (y > h || y < 0) { dy = -dy; } if (ev != null) { ev(); } Thread.Sleep(100); } } } class Wind : Form { Button butAdd; ArrayList aL; Random r; public Wind() { aL = new ArrayList(); r = new Random(); butAdd = new Button(); butAdd.Location = new Point(100, 24); butAdd.Size = new Size(32, 24); butAdd.Text = "Add"; butAdd.Click += new EventHandler(OnButAdd); Controls.Add(butAdd); } void OnButAdd(object obj, EventArgs arg) { Ball b = new Ball(r.Next(this.Width), r.Next(this.Height), r.Next(5, 10), r.Next(5, 15), this.ClientSize.Width, this.ClientSize.Height); b.ev += new delEv(HandlerEv); aL.Add(b); } protected override void OnPaint(PaintEventArgs arg) { for (int i = 0; i < aL.Count; i++) { Ball b = (Ball)aL[i]; arg.Graphics.DrawEllipse(new Pen(Color.Blue), b.X, b.Y, 20, 20); } } void HandlerEv() { Invalidate(); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); for (int i = 0; i < aL.Count; i++) { Ball b = (Ball)aL[i]; b.Finish(); } } static void Main(string[] args) { Wind w = new Wind(); Application.Run(w); } } } |
17.11.2012, 16:19 | #13 |
Регистрация: 18.03.2012
Сообщений: 9
|
вот прога моя: шарики появляются и при встрече отталкиваются друг от друга, а вот как их волнообразно пустить не знаю
using System; using System.Drawing; using System.Windows.Forms; using System.Threading; using System.Collections; using System.Collections.Generic; using System.Text; namespace rgr1 { delegate void delEv(); class Ball { public event delEv ev; private int x, y; private int w, h; private int dx, dy; private Thread t; public bool life; public int X { get { return x; } } public int Y { get { return y; } } public Ball(int X, int Y, int Dx, int Dy, int W, int H) { w = W; h = H; x = X; y = Y; dx = Dx; dy = Dy; life = true; t = new Thread(new ThreadStart(BallFunc)); t.Start(); } public void Finish() { life = false; t.Join(); } public void Trans() { dx = -dx; dy = -dy; } void BallFunc() { while (life) { x += dx; y += dy; if (x > w || x < 0) { dx = -dx; } if (y > h || y < 0) { dy = -dy; } if (ev != null) { ev(); } Thread.Sleep(100); } } } class Wind : Form { Button butAdd; ArrayList aL, aL2; Random r; public Pen pen = new Pen(Color.Blue); public Wind() { aL = new ArrayList(); aL2 = new ArrayList(); r = new Random(); butAdd = new Button(); butAdd.Location = new Point(100, 24); butAdd.Size = new Size(32, 24); butAdd.Text = "Add"; butAdd.Click += new EventHandler(OnButAdd); Controls.Add(butAdd); } void OnButAdd(object obj, EventArgs arg) { int g = 0, col = 0; while (g < r.Next(1, 2)) { Ball b = new Ball(r.Next(this.Width), r.Next(this.Height), 10, 10, this.ClientSize.Width, this.ClientSize.Height); b.ev += new delEv(HandlerEv); aL.Add(b); aL2.Add(col); g++; } } public int Proverka(int count) { Ball a = (Ball)aL[count]; return a.Y; } public int Proverka2(int count) { Ball a = (Ball)aL[count]; return a.X; } public int ALCount() { return aL.Count; } protected override void OnPaint(PaintEventArgs arg) { int counter = ALCount(); for (int i = 0; i < counter; i++) { for (int i2 = 0; i2 < counter; i2++) { if (i != i2) { int iks = Proverka2(i); int igrek = Proverka(i); if (((Proverka2(i2) < iks + 30) && (Proverka2(i2) > iks)) && ((Proverka(i2) < igrek + 30) && (Proverka(i2) > igrek))) { Ball b = (Ball)aL[i]; b.Trans(); b = (Ball)aL[i2]; b.Trans(); } } } } for (int i = 0; i < aL.Count; i++) { Ball b = (Ball)aL[i]; Pen pen2 = new Pen(Color.Red); arg.Graphics.DrawEllipse(pen2, b.X, b.Y, 20, 20); } } void HandlerEv() { Invalidate(); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); for (int i = 0; i < aL.Count; i++) { Ball b = (Ball)aL[i]; b.Finish(); } } static void Main(string[] args) { Wind w = new Wind(); Application.Run(w); } } } |
22.11.2012, 19:00 | #14 |
Регистрация: 18.03.2012
Сообщений: 9
|
можно описать волнообразное движение изменяя dx, dy используя Random, но не как не получается. Шары сцепляясь движется немного скачками, а потом разъединяются и опять двигаются ровно
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Каждая буква имеет свой цвет | BigDa | Общие вопросы Delphi | 3 | 01.04.2012 12:45 |
Как указать в динамическом окне линк на объект другого динамич окна?? | delphicoding | Общие вопросы Delphi | 5 | 25.12.2011 17:32 |
CppWEbBrowser. Запрет на открытие нового окна, и открытие его в том же окне | Askar_g | Общие вопросы C/C++ | 4 | 25.06.2011 20:00 |
Пусть группа состоит из N человек. В ней каждый имеет (N/2) друзей и не больше K врагов. | koshka669 | Помощь студентам | 3 | 26.05.2011 18:15 |
Как при скрытом чужом окне сделать его дочерние окна(сообщения) видимыми ? | Starwarrior | Win Api | 1 | 20.03.2007 09:51 |