Предмет:
Тип роботи:
Курсова робота
К-сть сторінок:
38
Мова:
Українська
(верхняя грань)
_angle = _angle + (180 - 2 * _angle);
if (CheckCollision()) //Если столкновение с одной из ракеток
{
ChangeAngle(); //меняем угол
ChangeDirection(); //меняем направление
}
ChangeBallPoint(); //Изменить координаты шарика
if (_ball.X >= RightBorder) //если мяч коснулся правого края
{
_ball.LeftResult += 1; //Левому игроку +1 очко
GameReset(); //Перезапуск игры
}
if (_ball.X <= LeftBorder) //Коснулся левого края
{
_ball.RightResult += 1; //Правому игроку +1
GameReset();
}
if ((_ball.RightResult == gameEndScore) || (_ball.LeftResult == gameEndScore))
{GameEnd();}}
Метод для перемалювання м’яча:
private void ChangeBallPoint() //перерисовка шарика
{
double radians = (Math.PI / 180) * _angle; //радианы
//Vector - структура. Представляет смещение в двухмерном пространстве.
Vector vector = new Vector
{
X = Math.Sin(radians),
Y = -Math.Cos(radians)
};
//Перерисовка
_ball.X += vector.X * SpeedOfBall;
_ball.Y += vector.Y * SpeedOfBall;
}
Метод запуску наступного раунду:
private void GameReset() //Мячик в начальное положение
{
if (!Podacha) //если подача не тру то шарик ставим к правой ракетке
{
leftActive = false; //левая не тру
_ball.Y = _rightPad.YPosition + 25; //ставим координаты шарика
_ball.X = 760;
Podacha = true; // меняем подачу
timer.Stop(); //останавливаем таймер, чтобы можно было двигать ракетку с шариком
_IsEnabled = false; // и тут в не тру, чтобы о
}
else //иначе левая ракетка
{
leftActive = true;
_ball.Y = _leftPad.YPosition+25;
_ball.X = 20;
Podacha =false;
timer.Stop();
_IsEnabled = false;
}}
Методи, необхідні для перевірки зіткнень, зміни вугла та напрямку польоту м’ячика:
private void ChangeAngle() //изменение угла шара
{
if (_ball.MovingRight == true) //если двиг. вправо истина
_angle = 270 - ((_ball.Y + 10) - (_rightPad.YPosition + 40));
else //если влево
_angle = 90 + ((_ball.Y + 10) - (_leftPad.YPosition + 40));}
private void ChangeDirection() //изменение направления
{
if (_ball.MovingRight) // если истина
_ball.MovingRight = false; //устанавливаем false
else //если false
_ball.MovingRight = true; //ставим в true
}
private bool CheckCollision() //проверка коллизий
{bool collisionResult = false; //результат проверки
if (_ball.MovingRight) //если мяч двигается вправо
collisionResult = _ball.X >= 760 && (_ball.Y > _rightPad.YPosition - 20 && _ball.Y < _rightPad.YPosition + 80); //проверка с правой ракеткой
else
collisionResult = _ball.X <= 20 && (_ball.Y > _leftPad.YPosition - 20 && _ball.Y < _leftPad.YPosition + 80); //проверка с левой ракеткой
return collisionResult;}
Вікно «Результати» містить інформацію про результати гри і викликається, якщо один із гравців набере зазначену кількість очків (Рис. 2.4)
Рисунок 2.4 Вікно «Результати», вкладника «Результати»
Код XAML:
<Window x:Class="PongGame.Results"
Title="Результаты!" Height="411.508" Width="643.761" ResizeMode="NoResize" Loaded="Window_Loaded_1" WindowStartupLocation="CenterScreen"> <Grid Margin="0,0,4,7" >
<TabControl>
<TabItem Header="Результаты" Foreground="#FF56009E">
<Grid Height="385" Background="#FF9BC0FF" >
<Label x:Name="lbl2" Content="Победитель:" HorizontalAlignment="Left" Margin="86,235,0,0" VerticalAlignment="Top" FontSize="24" FontFamily="Times New Roman" FontStyle="Italic" Foreground="#FF001ABD" Panel.ZIndex="5"/>
<Label x:Name="lblWinner" Content=""Ник победителя"" HorizontalAlignment="Left" Margin="242,235,0,0" VerticalAlignment="Top" FontSize="28" Height="32" Width="342" Background="{x:Null}" Foreground="#FFDA0063" Panel.ZIndex="5"/>
<Label Content="vs" HorizontalAlignment="Left" Margin="303,115,0,0" VerticalAlignment="Top" FontSize="25" Background="#FF3E5DAE" Foreground="#FF002C9E" FontStyle="Italic"/>
<Menu HorizontalAlignment="Left" Height="36" VerticalAlignment="Top" Width="624">
<Menu.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="White" Offset="0.003"/>
<GradientStop Color="#FF91C8FF" Offset="1"/>
</LinearGradientBrush>