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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2012, 00:10   #11
Яков_Улан-Удэ
 
Регистрация: 18.12.2010
Сообщений: 9
По умолчанию

Цитата:
Сообщение от ИльназВ Посмотреть сообщение
а можете скинуть похожие примеры? если есть конечно
Рисованные объекты одного класса. Создается объект, помещается в динамический массив. В событии таймера цикл пробегает массив объектов и двигает каждый на определенное расстояние. Столкновения друг с другом нет.
Вложения
Тип файла: zip шары.zip (116.6 Кб, 20 просмотров)
Яков_Улан-Удэ вне форума Ответить с цитированием
Старый 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, но не как не получается. Шары сцепляясь движется немного скачками, а потом разъединяются и опять двигаются ровно
ИльназВ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Каждая буква имеет свой цвет 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