.NET 4.x Игра типа Pong - C#
Формулировка задачи:
Короче заступорился на этапе отбиве ракетками мячика.
Ввиду моего плохого умения оперировать графикой,я использовал неактивные текстбоксы в качестве объектов.
Проблема состоит в том,что сторона делиться на два и одна из них отбивает мяч полностью,а вторая работает правильно.Пока про траэкторию не думал,мяч просто двигаеться влево-вправо по прямой линии.
Я специально не добавил "||",так как при проверке оно использует именно первое написанное,а при "&&" не работает правильно.
Помогите определить границы текстбокса так,чтобы весь текстбокс отбивал мяч,а не один верх и конец.
Скрин с расстановкой:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
string K = e.KeyChar.ToString();
if (K == "W")
{
player1.Top = player1.Top - 10;
}
if (K == "S")
{
player1.Top = player1.Top + 10;
}
if (K == "I")
{
player2.Top = player2.Top - 10;
}
if (K == "K")
{
player2.Top = player2.Top + 10;
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void dot_TextChanged(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
int score11 = 0;
dot.Left = dot.Left - 10;
if (dot.Left == 0)
{
score11 = score11 + 1;
score1.Text = score11.ToString();
}
if ((dot.Left <= 20) && (dot.Top >= player1.Top))
{
timer1.Enabled = false; ;
}
}
private void dott_Tick(object sender, EventArgs e)
{
int score12 = 0;
if (dot.Left == 0)
{
score12 = score12 + 1;
score2.Text = score12.ToString();
}
if (timer1.Enabled == false)
{
dot.Left = dot.Left + 10;
if ((dot.Left >= 465) && (dot.Top >= player2.Top))
{
timer1.Enabled = true;
dott.Enabled = false;
}
}
}
о! починил
Как лучше сделать траэкторию движения шарика? Через if и random? Или можно как-то менее по-индусски?
Решение задачи: «.NET 4.x Игра типа Pong»
textual
Листинг программы
private void timer1_Tick(object sender, EventArgs e)
{
int score11 = 0;
int score12 = 0;
if (dot.Left == 500)
{
score11 = score11 + 1;
score1.Text = score11.ToString();
}
if (dot.Left <= 0)
{
score12 = score12 + 1;
score2.Text = score12.ToString();
}
if ((dot.Left <= 20) && (dot.Top <= player1.Top + 100) && (dot.Top >= player1.Top))
{
double normalvetcx = player1.Left + 30 - player1.Left;
double normalvetcy = player1.Top;
double normalvetc = Math.Sqrt(normalvetcx*normalvetcx + normalvetcy*normalvetcy);
double dotvectx = dot.Left+30 - dot.Left;
double dotvecty = dot.Top - dot.Top-20;
double dotvect = Math.Sqrt(dotvectx * dotvectx + dotvecty * dotvecty);
double r;
r = dotvect - 2 * normalvetc * dotvect*normalvetc/normalvetc*normalvetc;
int rr = Convert.ToInt32(r);
dot.Left = rr;
}