Tykki joka ampuu ammuksen suht aidosti. Vasemmalla hiiren napilla ei pyyhi ammusta, oikealla pyyhkii.
Const pi = 3.14159265358979 'pii
Const g = 9.81 ' painovoima
Private TykkiX, TykkiY, ampumassa 'tykki x ja y, ampumassa on sitä varten ettei voisi ampua uudelleen jos ammus lentää jo
Private Sub Form_Load()
ScaleMode = 3 'scalemode pixeleiksi, paljon kivempaa
DrawWidth = 2 'selkeämpää
TykkiX = ScaleWidth / 2 'liikutetaan tykki keskelle
TykkiY = ScaleHeight / 2 '...
PiirräTykki 'nimestäkin selviää mitä tehdään :D
End Sub
Private Sub PiirräTykki()
Line (TykkiX, TykkiY)-(TykkiX - 10, TykkiY + 20) 'piirretään tykki
Line (TykkiX, TykkiY)-(TykkiX + 10, TykkiY + 20) '...
Line (TykkiX - 10, TykkiY + 20)-(TykkiX + 10, TykkiY + 20) '...
End Sub
Sub ammu(StartX, StartY, kulma, vauhti, suunta, pyyhikö)
kohta = 0
Do
kohta = kohta + suunta 'liikutetaan ammusta
X = vauhti * Cos(kulma * pi / 180) * kohta 'x-kohta
Y = -1 * (vauhti * Sin(kulma * pi / 180) * kohta - 0.5 * g * (kohta * kohta)) 'ja y-kohta
PSet (X + StartX, Y + StartY) 'piirretään ammus
s = Timer: Do: DoEvents: Loop Until s + 0.03 < Timer 'ootetaan vähän
If pyyhikö Then PSet (X + StartX, Y + StartY), BackColor 'jos pyyhitään niin pyyhitään
Loop Until (Y + StartY > ScaleHeight) Or (X + StartX > ScaleWidth) Or (X + StartX < 0) 'luupataan kunnes ammus menee yli reunojen
End Sub
Private Sub Form_Mouseup(Button As Integer, Shift As Integer, X As Single, Y As Single)
If ampumassa Then Exit Sub 'ettei voi ampua jos ammus lentää jo
ampumassa = True
Cls
PiirräTykki
a = Y - TykkiY 'yjutsku
If a > 0 Then a = 0 'ettei voi ampua alaspäin
b = X - TykkiX 'xjutsku
c = Sqr(b ^ 2 + a ^ 2) 'lasketaan pituus
If b = 0 Then 'ammutaan ylös?
ang = 90 'kulma suoraan ylös
Else 'muualle ku ylös
ang = -180 / pi * Atn(a / b) 'kulma
End If
pow = c / 3 'ampumispoweri
suunta = 1
If b < 0 Then suunta = -1 'ammutaanko oikeelle?
Caption = "Kulma: " & ang & ", voima: " & pow 'infoo
ammu TykkiX, TykkiY, ang, pow, suunta, Button - 1 'ja ammutaan.
ampumassa = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
End 'jotta varmana loppuisi jos vaikka ammutaan välillä niin ei sulkeudu kun se looppaa.
End SubAihe on jo aika vanha, joten et voi enää vastata siihen.