VB mit Scratch verbinden

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von EIKI.

    VB mit Scratch verbinden

    Hallo,

    in der Schule müssen wir uns mit Scratch beschäftigen. Da es mir irgendwann einfach zu eintönig geworden ist, habe ich mal nach Erweiterungen für Scratch geschaut. Da wir als Aufgabe haben, ein Spiel mit einem Heli zu "Scratchen" habe ich mir gedacht, dass es doch keine blöde Idee wäre, diesen Heli mit einem Joystick zu steuern. Gesucht, gefunden. Ich bin auf das Programm JoyTail gestoßen, welches eine Verbindung zwischen Scratch und einem Joystick herstellt. Da ich dieses Programm irgendwie nicht Downloaden kann, habe ich mir überlegt, da ich bei weiterer Rechere auf den TCP Zugang zu Scratch gestoßen bin, dass ich doch mit VB ein Programm schreiben kann, dass mittels TCP mit Scratch spricht und auch die Joystick(so ein Atari ähnliches Ding) eingaben an Scratch schicken kann. Ich habe mich dann heute daran gesetzt und bin schon an der Aufgabe VB mit Scratch zu verbinden gescheitert. Ich habe TCP schonmal erfolgreich verwendet finde mich hier aber nicht so wirklich mit der Verbindung zu recht.

    So meine eigentliche Frage ist:

    Gibt es irgendwelche Besonderheiten, auf die ich achten muss?
    Hat jemand vielleicht eine Lösung zu dem Problem?

    Das war es erstmal. Ich bedanke mich schonmal für die Antworten im Voraus.


    MFG EIKI
    Ich bin nicht grade sehr sicher mit meiner Antwort, aber wenn du eine Verbindung mit einem Joystick / Programm herstllen willst, dann brauchst du Interfaces, die dir bereit gestellt werden müssen.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Ich hab mir das grad mal angeguckt. Damit sollt ihr "programmieren". Ich würde mich wohl eher erschießen!

    @Topic:
    Wenn du DirectX zur Verfügung hast, kannst du mit DirectInput die Daten vom Joystick holen.
    Mit freundlichen Grüßen,
    Thunderbolt
    Zu der Verbindung mit dem Joystick zum PC hab ich mir noch nicht so viele Gedanken gemacht. Das ist ein einfach USB Joystick mit 4 knöpfen.

    Es geht bei meiner Frage hauptsächlich darum wie ich BB damit verbinden kann. Das mit dem Joystick bekomme ich schon irgendwie hin oder Frage auch nochmal hier wenn es Probleme geben sollte auf die ich keine Antwort finde.

    Das man das nicht programmieren nennen kann sollte jedem bewusst sein. Wer gute spiele und sonstiges damit macht hat einfach viel Geduld und bisschen Übung damit. Und gerade deshalb weil mir das auch zu ode geworden ist wollte ich ja VB mit einbauen so als neue Schwierigkeit.


    MFG EIKI
    Wie schaut dein bisheriger Code denn aus? Wenn du weißt, wie man eine TCP-Verbindung mit Scratch zu einem Server herstellt, musst du dir nurnoch den Multiserver aus dem Showroom hier schnappen und dort die Daten verarbeiten + verschicken. Auf der Seite von Scratch musst du dann eben die Daten empfangen und so die Position deiner Spielfigur setzen. Ob das tatsächlich funktioniert, kann ich dir nicht sagen.
    Mein bisheriger code waren alle möglichen TCP client Beispiele die ich hatte oder auch den einen aus dem ausführlichen TCP tutorial. Scratch selbst stellt ja den lokalen TCP Server und ich habe dann versucht mit einem TCP client mich an den Server zu verbinden, aber auch das ist schief gelaufen.
    Weißt du, dass ich den multi Server brauche, und sich dan scratch mit dem Server verbindet?

    MFG EIKI
    Das ist mein Code mit dem ich aktuell versuche eine Verbindung zu Scratch aufzubauen.

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.IO
    3. Public Class Form1
    4. 'Variablen:
    5. Dim stream As NetworkStream
    6. Dim streamw As StreamWriter
    7. Dim streamr As StreamReader
    8. Dim Client As New TcpClient
    9. Dim IP As String = "127.0.0.1"
    10. Dim Port As Integer = 42001
    11. Sub client_send(ByVal text As String)
    12. streamw.WriteLine(text)
    13. streamw.Flush()
    14. End Sub
    15. Function client_recieve() As String
    16. client_recieve = streamr.ReadLine
    17. End Function
    18. Sub Send_irgendwas()
    19. client_send(TextBox1.Text)
    20. If client_recieve() = "Auch wieder irgendwas..." Then
    21. '.....
    22. Else
    23. '....
    24. End If
    25. ' Und soo weiter...
    26. ' Und wenn man die verbidnugn schliesen will, dann einfach:
    27. Client.Close()
    28. ' Nichts einfacher als das!^^
    29. End Sub
    30. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    31. 'Button1 wird geclickt
    32. Client.Connect(IP, Port)
    33. If Client.Connected Then
    34. stream = Client.GetStream ' Stream wird auf Client verwiesen
    35. streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
    36. streamr = New StreamReader(stream) ' Stream zum Empfangen wird deklariert
    37. Else
    38. MsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!")
    39. End If
    40. End Sub
    41. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    42. Send_irgendwas()
    43. End Sub
    44. End Class


    Das ist der Code aus dem TCP Tutorial leicht abgeändert.
    Wenn ich jetzt eine Verbindung aufbauen will, dann sagt mir VB, dass der Zielcomputer die Verbindung verweigert. Liegt das jetzt an Scratch oder VB?


    MFG EIKI
    Sorry, dass ich mich so lange nicht gemeldet habe.
    Ich habe das Problem mit der Verbindung gelöst, es war ganz einfach die falsche IP aber naja egal.

    Ich bedankte mich bei allen, die mir geholfen haben.

    Ich könnte je nachdem aber nochmal eure Hilfe gebrauchen und zwar muss ich was in base256 konvertieren. Bei VB habe ich schon die base64 Funktion gefunden aber auch nur die. Könnte mir vielleicht auch jemand kurz erklären was genau base256 ist und wie ich einen string darin konvertierte oder ob ich das irgendwie wenn es nicht direkt geht auf Umwegen lösen kann?


    MFG EIKI
    Hallo,

    vlt. meinst du nicht Base256 sondern AES256.

    Und es wäre nett, für was du "Base256" brauchst?
    Um die Daten, die geschickt werden sollen, zu verschlüsseln?

    Und könntest du dann den fertigen Code zeigen oder mir den Code
    per PN schicken? :P Danke.

    Hoffe, ich konnte dir helfen.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D

    EIKI schrieb:

    in base256 konvertieren

    VB.NET-Quellcode

    1. Function ConvertToBase256(ByVal SourceString as String)
    2. Return SourceString
    3. End Function
    :D
    Base64 ist die Methode, Bytes in Teile zu 6 Bit zu zerstückeln.
    Also ist Base256 die Zerstückelung in 8 Bits.
    Bytes in 8 Bit-Stücke zu splitten ist relativ einfach: man lässt sie wie sie sind.

    Das wird wohl der Grund sein, weshalb dieses Verfahren keiner kennt.
    Es ist Blödsinn.

    Gelegentlich habe ich schon gelesen, dass Leute unter Base256 die Darstellung eines Bytes in Hex-Codierung verstehen, also 255="FF" oder 65535 = "FF FF".
    Das kann ToString.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Also. Danke schonmal für die Antworten.
    Ich verlinke euch mal das Thema in dem Scratch Forum in dem ich gefragt habe. scratch.mit.edu/discuss/topic/18089/
    Falls mann keine anderen Foren verlinken darf bitte löschen. Danke.

    Vielleicht könnt ihr mehr mit dem ganzen Anfangen als ich. Ich versuche im Moment nach und nach den Post 10 abzuarbeiten, bin aber wie gesagt an dem Base 256 hängen geblieben. Auch den Tip von dem anderen User habe ich ausprobiert mit dem Ergebnis das immer die eingegebene Zahl die ist die kodiert wieder rauskommt, also fast so wie das was petaod beschrieben hat. Da ich mich mit der umwandlung und den kompletten Möglichkeiten von Bit zu Byte und umgekehrt noch nicht so wirklich auskenne, könntet ihr mir ja vielleicht weiterhelfen, wenn ihr versteht was die Leute aus dem anderen Forum mir erklären wollen.


    MFG EIKI
    Was ich in deinem verlinkten Post verstanden habe, ist, dass du einen 4-Byte-Header mit der Länge deines Strings voranstellen sollst.
    Die dort beschriebenen Konvertierungen in Integer und zurück erledigt ToString.

    VB.NET-Quellcode

    1. Dim MyString = "abcde"
    2. MyString = MyString.Length.ToString("0000") & MyString
    Die dort beschriebenen Konvertierungen in Integer und zurück erledigt ToString.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    So hier bin ich wieder.

    Ich habe aus einem anderen Forum Thread, diesen Code von einem netten Herren bekommen, weiß aber nicht genau was das "*mem" ist oder darstellen soll.
    Zur Sicherheit hier nochmal der Link zu dem Thread.
    scratch.mit.edu/discuss/topic/18076/?page=3

    Quellcode

    1. Structure SendArray
    2. length.a[4]
    3. command.a[0]
    4. EndStructure
    5. cmd.s ="hallo'"
    6. n = Len(cmd)
    7. *mem.SendArray = AllocateMemory(SizeOf(SendArray) + 3*n)
    8. If *mem
    9. *mem\length[0] = (n >> 24) & $FF
    10. *mem\length[1] = (n >> 16) & $FF
    11. *mem\length[2] = (n >> 8) & $FF
    12. *mem\length[3] = (n ) & $FF
    13. length = PokeS(@*mem\command[0],cmd,-1,#PB_UTF8)
    14. length + 4
    15. ShowMemoryViewer(*mem,length)
    16. ;SendNetworkData(clientID, *mem, length)
    17. FreeMemory(*mem)
    18. EndIf


    Hoffe ihr wisst mehr damit anzufangen als ich.
    Vielen Dank schonmal für die Antworten im vor raus.


    MFG EIKI
    ich verstehe das als memorystream bin mir da aber auch nicht sicher.

    Das lese ich nur aus dem Thread.

    Was man damit machen kann weiß ich nciht ... hab ich mich noch nicht mit beschäftigt.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."