Visual Basic 2008 Express Edition Zajęcia 6, r. ak. 2013/2014
Transkrypt
Visual Basic 2008 Express Edition Zajęcia 6, r. ak. 2013/2014
Visual Basic 2008 Express Edition Zajęcia 6, r. ak. 2013/2014 Animacja wektorowa – lądowanie samolotu Zagadnienia: Układ współrzędnych formularza. Obiekt Point i reprezentująca go zmienna. Kształty typu LineShape, RectangleShape i OvalShape oraz punkty charakterystyczne określające ich położenie na formularzu. Programowa zmiana lokalizacji kształtów na formularzu. Formant NumericUpDown. Deklarowanie zmiennych na poziomie formularza. Public Class frmAnimacja Dim pktSam, pktSam0 As Point Dim DXSam, DYSam As Integer ' punkt ruchomy i nieruchomy ' przyrosty współrzędnych w kroku animacji Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load ' ' Ustawienie punktu nieruchomego pktSam0 i punktu ruchomego pktSam ' zgodnie z początkową lokalizacją samolotu na formularzu. ' Odczytanie i zapisanie do zmiennych początkowych wartości ' przyrostów współrzędnych X i Y w jednym kroku animacji. pktSam0 = shpSamolot.Location pktSam = pktSam0 ' DXSam = nudDX.Value DYSam = nudDY.Value End Sub Private Sub btnLadowanie_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnLadowanie.Click ' ' Uruchomienie timera - samolot zacznie się poruszać ' przy pierwszym zdarzeniu Tick timTimer.Enabled = True End Sub Private Sub btnStop_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnStop.Click ' ' Zatrzymanie timera - przerwanie animacji timTimer.Enabled = False End Sub 1 Private Sub btnPowrot_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnPowrot.Click ' ' Skokowy powrót punktu ruchomego i samolotu do położenia początkowego pktSam = pktSam0 shpSamolot.Location = pktSam End Sub Private Sub nudDX_ValueChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles nudDX.ValueChanged ' ' Zmiana wartości przyrostu współrzędnej X w kroku animacji DXSam = nudDX.Value End Sub Private Sub nudDY_ValueChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles nudDY.ValueChanged ' ' Zmiana wartości przyrostu współrzędnej Y w kroku animacji DYSam = nudDY.Value End Sub Private Sub timTimer_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles timTimer.Tick ' ' Oprogramowanie zachowania samolotu w kroku animacji ' z uwzględnieniem ograniczeń możliwości ruchu ' ********************************************************************** ' Wersja pierwotna - ruch bez ograniczeń ' pktSam.X = pktSam.X + DXSam ' pktSam.Y = pktSam.Y + DYSam ' shpSamolot.Location = pktSam ' ********************************************************************** ' ' Sprawdzenie, czy przód samolotu po wykonaniu kroku animacji ' będzie jeszcze ciągle na lewo od hangaru If pktSam.X + shpSamolot.Width + DXSam < shpHangar.Location.X Then ' ' Sprawdzenie, czy samolot po wykonaniu kroku animacji ' będzie jeszcze ciągle powyżej pasa startowego If pktSam.Y + shpSamolot.Height + DYSam < shpPas.Y1 Then pktSam.Y = pktSam.Y + DYSam ' dalsze zniżanie Else pktSam.Y = shpPas.Y1 - shpSamolot.Height ' przyziemienie End If pktSam.X = pktSam.X + DXSam ' przesunięcie w poziomie shpSamolot.Location = pktSam ' nowe położenie samolotu Else ' przód samolotu będzie po kroku już na prawo od hangaru ' ' Sprawdzenie, czy samolot jest już na pasie startowym i wykonuje dobieg If pktSam.Y = shpPas.Y1 - shpSamolot.Height Then ' dobieg po pasie ' miejsce zatrzymania przed hangarem pktSam.X = shpHangar.Location.X - shpSamolot.Width - 5 shpSamolot.Location = pktSam ' położenie samolotu po końcu dobiegu timTimer.Enabled = False ' wyłączenie timera MessageBox.Show("Lądowanie prawidłowe", "Koniec animacji", _ MessageBoxButtons.OK, MessageBoxIcon.Information) ElseIf pktSam.Y + shpSamolot.Height + DYSam < shpHangar.Location.Y Then pktSam.X = pktSam.X + DXSam ' po kroku nadal nad hangarem pktSam.Y = pktSam.Y + DYSam shpSamolot.Location = pktSam ' nowe położenie samolotu If shpSamolot.Location.X > shpPas.X2 Then timTimer.Enabled = False MessageBox.Show("Przelot nad hangarem", "Lądowanie nieudane", _ MessageBoxButtons.OK, MessageBoxIcon.Warning) End If ' 2 ' Samolot jest poniżej dachu hangaru (ostatnia z testowanych ' możliwości, nie trzeba tego sprawdzać), zderzenie nie nastąpi ' tylko wówczas, gdy ogon samolotu będzie już na prawo od hangaru ' ElseIf shpSamolot.Location.X < shpHangar.Location.X + shpHangar.Width Then pktSam.X = pktSam.X + DXSam pktSam.Y = pktSam.Y + DYSam shpSamolot.Location = pktSam ' nowe położenie samolotu timTimer.Enabled = False MessageBox.Show("Zderzenie z hangarem", "Wypadek przy lądowaniu", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End Sub End Class 3