Я кодирую игру Pong в C #, и, кажется, что-то не так с несколькими строками кода.Эти строки в коде, чтобы убедиться, что мяч отскакивает в противоположном направлении.Но это на самом деле не работает.Он подпрыгивает, но проходит через края весла.Кроме того, существует проблема, когда мой мяч попадает в правую стену примерно на полпути, прежде чем отскочить в правильном направлении.
if (ball.Location.X > player1.Location.X
&& ball.Location.X + ball.width < player1.Location.X + player1.Width
&& ball.Location.Y + ball.Height > player1.Location.Y)
Это должно обеспечить отскок мяча назад от весла, но, как было сказано ранее;это не подпрыгивает на всем весле.Мяч будет проходить прямо через край весла из-за неправильного кодирования в этом предложении, но у меня есть подсказка, как это исправить.Он должен что-то делать с правильным перекрывающимся кодом, когда мяч отскакивает по всей длине весла.
if (ball.Location.X > player2.Location.X
&& ball.Location.X + ball.Width < player2.Location.X + player2.Width
&& ball.Location.Y < player2.Location.Y + player2.Height)
Это то же самое с этим предложением.Это проходит через края, что означает, что что-то не так с перекрытием.Что должно произойти из-за некоторых X
и Y
(включая некоторые Width
и Height
где-то).
Наконец, что не менее важно, есть точка где-то, где мой мяч проходит на полпути в левой стене,Но я не понимаю, почему это так взаимодействует.
if (ball.Location.X + ball.Width > this.Width)
Это должно быть следствием того, что левое местоположение шара (включая его Width
) не должно идти дальше всей ширины экрана.где игра ведется в ...
В любом случае, спасибо за чтение.Надеюсь, кто-нибудь сможет мне помочь с этой проблемой.
Это в основном весь мой код
namespace Pong_2
{
public partial class Form1 : Form
{
int playerSpeed = 7;
int p1Vel;
int p2Vel;
int bVelX = 1;
int bVelY = 1;
int scorePlayer1Int;
int scorePlayer2Int;
bool pause = false;
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (!pause)
{
ball.Location = new Point(ball.Location.X + bVelX, ball.Location.Y + bVelY);
player1.Location = new Point(player1.Location.X + p1Vel, player1.Location.Y);
player2.Location = new Point(player2.Location.X + p2Vel, player2.Location.Y);
}
if (ball.Location.Y < 0)
{
scorePlayer1Int++;
ball.Location = new Point(this.Width / 2, this.Height / 2);
}
if (ball.Location.Y > this.Height)
{
scorePlayer2Int++;
ball.Location = new Point(this.Width / 2, this.Height / 2);
}
if (ball.Location.X > player1.Location.X && ball.Location.X + ball.Width < player1.Location.X + player1.Width && ball.Location.Y + ball.Height > player1.Location.Y)
{
bVelY *= -1;
}
if (ball.Location.X > player2.Location.X && ball.Location.X + ball.Width < player2.Location.X + player2.Width && ball.Location.Y < player2.Location.Y + player2.Height)
{
bVelY *= -1;
}
if (ball.Location.X < 0)
{
bVelX *= -1;
}
if (ball.Location.X + ball.Width > 984)
{
bVelX *= -1;
}
scorePlayer1.Text = scorePlayer1Int.ToString();
scorePlayer2.Text = scorePlayer2Int.ToString();
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
p1Vel = 0;
}
else if (e.KeyCode == Keys.Left)
{
p1Vel = 0;
}
else if (e.KeyCode == Keys.D)
{
p2Vel = 0;
}
else if (e.KeyCode == Keys.A)
{
p2Vel = 0;
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
p1Vel = playerSpeed;
}
else if (e.KeyCode == Keys.Left)
{
p1Vel = -playerSpeed;
}
else if (e.KeyCode == Keys.D)
{
p2Vel = playerSpeed;
}
else if (e.KeyCode == Keys.A)
{
p2Vel = -playerSpeed;
}
else if (e.KeyCode == Keys.P)
{
if (!pause)
{
pause = true;
}
else if (pause)
{
pause = false;
}
}
}
}
}