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

Podobne dokumenty