Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Розробка програмного додатку "Гра Пінг-Понг"

Тип роботи: 
Курсова робота
К-сть сторінок: 
38
Мова: 
Українська
Оцінка: 

  <GradientStop Color="White" Offset="1"/>

                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
 
    </Grid>
</Window>
Це вікно є головним вікном гри, яке містить всю основну логіку. Основні поля класу, необхідні для ігрової логіки:
public DispatcherTimer timer = new DispatcherTimer(); //таймер
private double _angle = 155;                          //угол отбиения шара
private double SpeedOfBall = 5;                            //скорость шарика
private int SpeedOfPad = 5;                           //скорость ракеток
private const int RightBorder = 790;                  // правая граница
private const int LeftBorder = 5;                       //левая граница
//начальная позиция для шарика по иксу (слева)
private const int BeginPosForBall_X1 = 20;
// начальная позиция для шарика по иксу (справа)
private const int BeginPosForBall_X2 = 760;
// начальная позиция для шарика по Y
private const int BeginPosForBall_Y = 105;
// переменная для отслеживания запущен ли мячик (в полёте), чтобы не было сдвига при управлении ракетками
private bool _IsEnabled = false;
//какой противник подаёт (поочереди)
private bool Podacha = false;
//переменная для отслеживания на какой ракетке находится шарик (чтобы при сдвиге только одной ракетки двигался шарик)
private bool leftActive = true;
//число, при котором игра заканчивается
private  int gameEndScore = 12;
public string leftPlayerName = string.Empty;
public string rightPlayerName = string.Empty;
string img_ball_path = @"..\..\Textures\ball3.png";
//Если объявление поля содержит модификатор readonly,
//присвоение значений таким полям может происходить только как часть объявления или в конструкторе в том же классе.
readonly Ball _ball = new Ball             //создание обьекта шарика
{
X = BeginPosForBall_X1,               //начальные координаты по X
Y = BeginPosForBall_Y,                //нач. коорд. по Y
MovingRight = true      //движение вправо
};
readonly Pad _leftPad = new Pad //левая ракетка
{
YPosition = 70              //стартовая позиция по Y
};
readonly Pad _rightPad = new Pad //правая ракетка
{
YPosition = 70
   };
Гра починається при натисканні кнопки «Пробіл». Обробник старту гри:
private void MainWindow_OnKeyDown(object sender, KeyboardEventArgs e)
{
if (PauseMenuPanel.Visibility == System.Windows.Visibility.Hidden) //Если заткрыто меню паузы тогда проверяем всё по логике работы
{
if (_IsEnabled == false) //запущен ли мячик (в полёте), чтобы не было сдвига при управлении ракетками
{
if (leftActive) // если сейчас управляем левой ракеткой и шарик слева
{
CheckBordersForRockets(true, true); //метод, который создаёт ограничение для ракеток на выход из игрового поля. Значение true указывает на сдвиг мячика
if (Keyboard.IsKeyDown(Key.LeftShift)) //если нажата клавиша W
{
_leftPad.YPosition -= SpeedOfPad; //меняем позицию левой ракетки (координаты) на скорость ракетки
_ball.Y -= SpeedOfPad;            //и шарик на скорость ракетки
}
if (Keyboard.IsKeyDown(Key.LeftCtrl))
{
_leftPad.YPosition += SpeedOfPad;
_ball.Y += SpeedOfPad;}}
else // правая сторона активная
{
CheckBordersForRockets(true, false);
if (Keyboard.IsKeyDown(Key.Up))
{
_rightPad.YPosition -= SpeedOfPad;
_ball.Y -= SpeedOfPad;
}
if (Keyboard.IsKeyDown(Key.Down))
{
_rightPad.YPosition += SpeedOfPad;
_ball.Y += SpeedOfPad;
}
}
if (Keyboard.IsKeyDown(Key.Space)) //если пробел
{
_IsEnabled = true;               //следующий раз глянет другую ветку ифа, без проверки на сдвиг шарика
timer.Start();                  //запускаем  таймер
}}
else{
CheckBordersForRockets(false, true); //метод, который создаёт ограничение для ракеток на выход из игрового поля.false - шарик в полёте
CheckBordersForRockets(false, false);
if (Keyboard.IsKeyDown(Key.LeftShift))
_leftPad.YPosition -= SpeedOfPad;
if (Keyboard.IsKeyDown(Key.LeftCtrl))
_leftPad.YPosition += SpeedOfPad;
if (Keyboard.IsKeyDown(Key.Up))
_rightPad.YPosition -= SpeedOfPad;
if (Keyboard.IsKeyDown(Key.Down))
_rightPad.YPosition += SpeedOfPad;
}
if (Keyboard.IsKeyDown(Key.Escape))
{
PauseMenuPanel.Visibility = System.Windows.Visibility.Visible;
timer.Stop();}}
else //если окно паузы открыто, проверяем только клавишу Esc
{if (Keyboard.IsKeyDown(Key.Escape))
{ToClosePauseMenu();}}}
Метод польоту м’ячика, який відбувається за таймером:
void _timer_Tick(object sender, EventArgs e) //при тике таймера
{
if (_ball.Y <= 0)         //если положение мячика по Y <=0 то меняем угол (столкновение с нижней гранью)
_angle = _angle + (180 - 2 * _angle);
if (_ball.Y >= MainCanvas.ActualHeight - 20)    //если положение по Y мяча >= значению высоты главной канвы - высота мячика
Фото Капча