hey leute, ich habe mithilfe von der autoitbot community etwas meiner meinung nach nicht schlechtes geschaffen. bei dem winhttp teil half mir simon1602.
ich machs kurz. viele werden von euch das spiel worms kennen. es basiert von der physik her auf der wurfparabel und dem stokeschen satz. (=flugbahn in abhängigkeit von wind)
ich habe also x,y koordinaten der spieler ermittelt und aufgrund der entfernung von spieler 1 zu spieler 2 unter winkel 45° ausgerechnet wie stark man schießen muss. was mir in der formel fehlt ist der gegenwind bzw wind mit dem das geschoss beschleunigt wird und ich habe keine ahnung wie ich das hinkriegen kann.
es handelt sich um das facebookspiel ddtank.
ihr könnt gerne auch den source leechen weil da paar nette sachen drin sind, aber wäre auch nett wenn mir da wer helfen könnte.
die momentane formel sieht so aus: Vo=Sqrt(g*(x*x)/((2*cos(45)*(sin(45)*x-cos(45)*y)))
ich muss da irgendwie wind reinkriegen. kann mir wer vll noch sagen wie ich die erdanziehung ermitteln könnte im spiel? momentan verwende ich einen wert den ich nach gefühl gewählt habe.
hier mal der source für alle leecher&helfer
Code:
#NoTrayIcon
#include <Misc.au3>
#include <String.au3>
#include <Array.au3>
#include <GUIConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinHTTP.au3>
Global $aLink,$i=25, $Winpos
Opt("WinTitleMatchMode", 3)
$width = 1000
$height = 700
HotKeySet("x", "self")
HotKeySet("{esc}", "ende")
HotKeySet("<", "save")
HotKeySet("y", "wurfweite")
$mail2 = InputBox("FB Login", "Enter your email.", "")
$pass2 = InputBox("FB Login", "Enter your password.", "", "*")
_getFlashFile($mail2,$pass2)
If IsArray($aLink) = True Then
$movie ="http://s1.ddt.facebookmmo.com/" & $aLink[0]
$filey = FileOpen("pagelink.txt", 1)
FileWrite($filey,$movie)
GUICreate("DDTank", $width, $height, (@DesktopWidth/2)-200, (@DesktopHeight/2)-200)
GUISetBkColor(0x000000)
$flash = ObjCreate("ShockwaveFlash.ShockwaveFlash.1")
GUICtrlCreateObj($flash, 0, 0, 1000, 600)
$Label1 = GUICtrlCreateLabel("Choosen Power:", 16, 648, 240, 41)
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFFFFFF)
$Label3 = GUICtrlCreateLabel("PO", 256, 648, 50, 41)
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
$Label4 = GUICtrlCreateLabel("Recommended Power:", 320, 648, 327, 41)
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFFFFFF)
$Label5 = GUICtrlCreateLabel("NA", 648, 648, 51, 41)
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
$Label6 = GUICtrlCreateLabel("DDT Buddy v1.0", 904, 672, 84, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
Else
MsgBox(48, "Achtung!", "Login nicht erfolgreich, entweder ist das Password falsch oder DDTank ist noch nicht als App hinzugefügt!")
EndIf
With $flash
.Movie =$movie
.ScaleMode = 0;0 showall, 1 noborder, 2 exactFit, 3 noscale
.bgcolor = "#000000"
.Loop = True
.wmode = "Opaque"
EndWith
GUISetState()
While 1
if _IsPressed ("6B") then
Sleep (100)
$i += 1
GUICtrlSetData($label3,$i)
EndIf
if _IsPressed ("6D") Then
Sleep (100)
$i -= 1
GUICtrlSetData($Label3, $i)
EndIf
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _getFlashFile($sEmail,$sPasswort)
$hOpen = _WinHttpOpen("Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5")
$hConnect = _WinHttpConnect($hOpen, "www.facebook.com")
$sHTML = _WinHTTPRequest($hConnect, '/login.php?api_key=42495f32cc7f1f6e6fe6102600c721a6&v=1.0&next=http%3A%2F%2Fddt.facebookmmo.com%2Fs1.php&req_perms=publish_stream%2Cemail')
$aLSD = StringRegExp($sHTML, '"lsd" value="(.+?)"', 3)
$sHTML = _WinHTTPRequest($hConnect, '/login.php?login_attempt=1', 'charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&lsd=' & $aLSD[0] & '&next=http%3A%2F%2Fddt.facebookmmo.com%2Fs1.php&api_key=42495f32cc7f1f6e6fe6102600c721a6&return_session=0&req_perms=publish_stream%2Cemail&legacy_return=1&display=&session_key_only=0&trynum=1&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&lsd=' & $aLSD[0] & '&email=' & $sEmail & '&pass=' & $sPasswort & '&persistent=1&default_persistent=1&login=Anmelden', '', '', True, True, 1)
_WinHttpCloseHandle($hConnect)
$aLocation = StringRegExp($sHTML, 'Location: http://ddt.facebookmmo.com/(.*)', 3)
If Not IsArray($aLocation) Then Return False
$hConnect = _WinHttpConnect($hOpen, "ddt.facebookmmo.com")
$sHTML = _WinHTTPRequest($hConnect, $aLocation[0])
_WinHttpCloseHandle($hConnect)
$aIframe = StringRegExp($sHTML, 'src="http://s1.ddt.facebookmmo.com/(.+?)"', 3)
If Not IsArray($aLocation) Then Return False
$hConnect = _WinHttpConnect($hOpen, 's1.ddt.facebookmmo.com')
$sHTML = _WinHTTPRequest($hConnect, $aIframe[0])
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)
If Not IsArray($aLocation) Then Return False
$aLink = StringRegExp($sHTML, "value='(Loading\.swf.+?)'", 3)
EndFunc
Func _WinHTTPRequest($hConnect, $sSite, $sPost = "", $sReferer = "", $sExtraHeaders = "", $bUseHTTPS = False, $bIsBinary = False, $iGetHeaderOnly = 0)
;|---------------------_WinHTTPRequest by Simon---------------------|
;| |
;| Parameter für $iGetHeaderOnly: |
;| |
;| 0 = Body zurückgeben |
;| 1 = Header zurückgeben |
;| 2 = Header und Body zurückgeben |
;|------------------------------------------------------------------|
Local $hRequest, $sData, $sMode = "GET", $sOptional = $WINHTTP_NO_REQUEST_DATA, $sHeaders = $WINHTTP_NO_ADDITIONAL_HEADERS, _
$iFlags = $WINHTTP_FLAG_ESCAPE_DISABLE, $sReferers = $WINHTTP_NO_REFERER
If $sPost <> "" Then
$sMode = "POST"
$sPost = StringReplace($sPost, "ä", "%C3%A4")
$sPost = StringReplace($sPost, "ö", "%C3%B6")
$sPost = StringReplace($sPost, "ü", "%C3%BC")
$sPost = StringReplace($sPost, "Ä", "%C3%84")
$sPost = StringReplace($sPost, "Ö", "%C3%96")
$sPost = StringReplace($sPost, "Ü", "%C3%9C")
$sPost = StringReplace($sPost, "É", "%C3%89")
$sPost = StringReplace($sPost, "é", "%C3%A9")
$sPost = StringReplace($sPost, "ß", "%C3%9F")
$sPost = StringReplace($sPost, "@", "%40")
$sOptional = $sPost
$sHeaders = "Content-Type: application/x-www-form-urlencoded" & @CRLF
EndIf
If $sReferer Then $sReferers = $sReferer
If $bUseHTTPS Then $iFlags = $WINHTTP_FLAG_SECURE
If $sExtraHeaders Then $sHeaders &= $sExtraHeaders
$hRequest = _WinHttpOpenRequest($hConnect, $sMode, $sSite, "HTTP/1.1", $sReferers, $WINHTTP_DEFAULT_ACCEPT_TYPES, $iFlags) ; Anfrage an die Seite stellen
_WinHttpSendRequest($hRequest, $sHeaders, $sOptional) ; Anfrage senden.
_WinHttpReceiveResponse($hRequest) ; Warte auf Antwort des Servers
If _WinHttpQueryDataAvailable($hRequest) Then
If $iGetHeaderOnly Then $sData = _WinHttpQueryHeaders($hRequest)
If $iGetHeaderOnly == 1 Then Return $sData
If $bIsBinary Then
$sData &= "0x"
While 1
$sTempData = _WinHttpReadData($hRequest, 2)
If @error Then ExitLoop
$sData &= StringTrimLeft($sTempData, 2)
WEnd
_WinHttpCloseHandle($hRequest)
Else
Do
$sData &= _WinHttpReadData($hRequest) ; Antwort aus dem Buffer lesen.
Until @error ; bis ein fehler auftritt (übertragung abgeschlossen)
_WinHttpCloseHandle($hRequest)
EndIf
Return $sData
EndIf
EndFunc ;==>_WinHTTPRequest
Func wurfweite()
$g = 3
$pi = 3.14159265358979
$degToRad = $pi / 180
$x0 = FileReadLine("coords.txt", 1)
$y0 = FileReadLine("coords.txt", 2)
$x1 = FileReadLine("coords.txt", 3)
$y1 = FileReadLine("coords.txt", 4)
$xdelta = $x1-$x0
$x = Sqrt($xdelta*$xdelta)*5.7
$ydelta = $y1-$y0
$y = Sqrt($ydelta*$ydelta)*5.7
$staerke = Sqrt($g*($x*$x)/((2*cos(45*$degToRad))*(sin(45*$degToRad)*$x-cos(45*$degToRad)*$y)))
$zeit = $staerke*40
Send ("{SPACE down}")
Sleep ($zeit)
Send ("{SPACE UP}")
FileDelete("coords.txt")
EndFunc
Func ende() ; logischerweise: Ende xD
FileDelete("coords.txt")
Exit
EndFunc
Func save() ;speichert die Koordinaten
$file = FileOpen("coords.txt", 1)
If $file = -1 Then Exit MsgBox(0, 'Maus-Koordinaten', 'Datei konnte nicht geöffnet werden!') ;überprüft ob die Datei schon vorhanden ist
$WinPos = WinGetPos("DDTank")
$pos = PixelSearch( $WinPos[0]+750, $WinPos[1], $WinPos[0]+1000, $WinPos[1]+200, 0xFF0000 )
if IsArray($pos) then
FileWrite($file, $pos[0] & @CRLF & $pos[1] & @CRLF)
Else
MsgBox(0,"RED","was not found.")
EndIf
$pos = PixelSearch( $WinPos[0]+750, $WinPos[1], $WinPos[0]+1000, $WinPos[1]+200, 0x0033CC)
if IsArray($pos) then
FileWrite($file, $pos[0] & @CRLF & $pos[1] & @CRLF)
Else
MsgBox(0,"BLUE","was not found.")
EndIf
If IsArray($pos) = True Then
$g = 3
$pi = 3.14159265358979
$degToRad = $pi / 180
$x0 = FileReadLine("coords.txt", 1)
$y0 = FileReadLine("coords.txt", 2)
$x1 = FileReadLine("coords.txt", 3)
$y1 = FileReadLine("coords.txt", 4)
$xdelta = $x1-$x0
$x = Sqrt($xdelta*$xdelta)*5.7
$ydelta = $y1-$y0
$y = Sqrt($ydelta*$ydelta)*5.7
$staerke = Sqrt($g*($x*$x)/((2*cos(45*$degToRad))*(sin(45*$degToRad)*$x-cos(45*$degToRad)*$y)))
GUICtrlSetData($Label5,$staerke)
Else
MsgBox(4096,"OOPS","There is no active challenge / something gone wrong. Before scanning get into a game.")
EndIf
sleep(1000)
FileClose($file)
EndFunc ;==>save
Func self()
$zeit1 = $i*40
Send ("{SPACE down}")
Sleep ($zeit1)
Send ("{SPACE UP}")
EndFunc
Die erdanziehung g= 9,81 m/s². Diese Kraft wirkt senkrecht nach unten und bremst dein projektil bis zum Scheitelpunkt der Parabel ab, danach wirkt sie beschleunigend. Die Kraft des Windes wirkt parallel zum erdboden, je nach richtung wird dein projektil beschleunigt oder abgebremst. Die Einheit des Windes sollte auch in m/s² gewählt werden. Jetzt musst du nurnoch herrausfinden mit welcher Kraft dein Projektil abgefeuert wird und welche Masse es besitzt. Damit kannst du auf die Geschwindigkeit des Projektils zum Zeitpunkt des abfeuerns schließen. Davon rechnest du dann die oben aufgeführten Beschleunigungs und Abbremskräfte mit ihrer ausrichtung ein. Keine Ahnung ob die Programmierer des Spiels auch die Reibung des Projektils an den Luftteilchen mit einberechnet haben, wenn ja musst du das auch noch mit beachten.
Ist alles nur so ein Gedankenspiel, vom Prinzip her müsste es aber funktionieren, einfach rumprobieren.
v(t) wird durch den Wind beeinflusst bzw. v(s). V0 sollte deine Startgeschwindigkeit sein und damit konstant. Aus V0 kannst du dann v(t) bzw. v(s) iterativ berechnen. Zum Thema Luftwiderstand:
Nun könntest du einfach einen konstanten Wert a einführen, um den v(t)/v(s) erhöht verringert wird. Z.B. pro Meter um 1m/s² beschleunigt. Das wäre sicherlich das einfachste. Natürlich kannst du jetzt auch den Winkel mit einrechnen, wenn der Wind nicht 100%tig von vorne bzw. von hinten kommt:
100% Beschleunigung in Flugrichtung (negativ+positiv) = 0° Abweichung von der Windrichtung
0% Beschleunigung in Flugrichtung(negativ+positiv)= -90° und +90° Abweichung von der Windirchtung
-> pro Grad abweichung ((1/90)*100)% Weniger Beschleunigung (negativ+positiv)
Damit ergibt sich:
alpha = Abweichwinkel des Flugobjekts von der Windrichtung
t = Zeitpunkt
a = Beschleunigung (positiv/negativ)
v(t2) = ((( 1 - |alpha| * (1/90) ) * a ) * t ) + v(t1)
Ist natürlich komplex und es können sich bei meinen Ausführungen Fehler eingeschlichen haben. Hab das nur mal eben im Kopf gerechnet/mir überlegt.
so wie ich das verstehe wird im endeffekt durch den wind v0 erhöht oder vermindert
Ja, das einfachste wäre wohl wenn du bei einem Windstillen match die Zielgenauigkeit perfektionierst. Und dann bei wind einfach in folgender Zeile:
Code:
$zeit = $staerke*40
die Windstärke subtrahierst (bei Rückenwind), bzw addierst (bei gegenwind). Hat dann aber weniger was mit präziser Mathemathik zu tun, eher eine Sache des ausprobierens und verfeinerns.
DU wirst gesucht! Schauspieler werden gesucht! 02/13/2011 - Alliance of Valiant Arms - 23 Replies Huhu ihr lieben,
wegen Zeitmangel zurzeit bitte nicht an mich wenden.
Vielen Dank,
DuBistGut. ;)
TitelChange unter DiamondCore gesucht! (Titel.DBC gesucht) 03/07/2010 - World of Warcraft - 0 Replies Hallo, ich habe bereits gelesen das man die title.dbc öffnen muss etc. pp...
allerdings ist in meinem DBC ordner keine title.dbc zu finden -.-
Benutze DiamondCore!
Hilfe wäre nice.