.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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д