Bubble Physics Devlog #1

Hallo,
Ich habe lange nichts mehr geschrieben, also habt ihr natürlich ein bisschen etwas verpasst. Mittlerweile habe ich so einige Updates zu Bubble Phyiscs gemacht und es gibt nun sogar eine PC Version! Dar ich momentan große Probleme mit der Performance der Mobile-Version habe, ist die PC-Version viel neuer und hat 1 Map mehr. Solltet ihr Bubble Physics auf dem PC ausprobieren wollen, habe ich hier den Link zu meiner itch.io Seite. Itch.io ist eine Platform, auf der Spieleentwickler ihre Arbeit veröffentlichen können.

Ein Game in 2½ Stunden

Hallo Leute,
Vor drei Tagen habe ich versucht mit Unity ein Mobile-Spiel in 2 ½ Stunden zu entwickeln. Vorher hatte ich mir schon ein simples Spielkonzept überlegt.Der Spieler sollte mit einem Joystick eine langgezogene Kugel steuern. Mit dem anderen Joystick sollte er die Kugel und damit den an ihr befestigten Gewehrlauf( nur ein Zylinder ) drehen können. Außerdem sollte der Gewehrlauf kleine Kugeln schießen, wenn man den 2. Joystick benutzt.

Zuerst schrieb ich ein simples Movement-Script für den ersten Joystick. Für die Joysticks benutzte ich Joystick-Pack aus dem Unity-Assetstore. Dann erstellte ich das das Drehen bzw. Schießen des Spielers. Das war dann schon schwieriger. Vom Joystick-Pack habe ich die Daten als Richtungsvektor und Horizontale bzw. Vertikale Achse. Ich musste erst mal ein bisschen herumsuchen wie ich einen Richtungsvektor als Rotation für ein Objekt angebe. Schließlich schaffte ich es aber mit Quaternion.LookRotation.

Dann fragte ich danach ab, ob der Vektor nicht 0 beträgt und instanziere wenn ja eine kleine Kugel (mit Rigidbody-Komponente) am Lauf der Waffe und gebe ihr einen Schub nach vorn.

Die Kraftausübung hat leider irgendwie nicht funktioniert. Deshalb fallen die Kugeln einfach auf den Boden oder prallen aufeinander und erhalten dadurch eine leichte Kraft in beliebige Richtung.

Nun brauchte ich noch eine Map. Ich modellierte sie in Blender, indem ich einen Würfel nahm, seine Faces extrudierte, LoopCuts setzte und die neu entstandenen Faces wieder extrudierte. Dadurch entstand eine Art sehr offenen Labyrinth. Dann noch eine Fläche als Boden darunter und fertig.

Ich importierte die Map in Blender und ließ ein NavMesh erstellen. Dann nahm ich mir einen Zylinder und bereitete ihn als NavMeshAgent vor. Ich schrieb ein Script, das den Gegner einfach immer dem Spieler hinterherlaufen ließ.

Nun blieben mir noch 20 Minuten, inden ich das Sterben der Gegner und des Spielers sowie das Spawnen der Gegner entwickeln musste.

Zuerst schrieb ich ein Script, dass überprüft, ob ein Gegner den Spieler berührt. Wenn das der Fall ist, wird ein GameOverScreen angezeigt, auf dem der Spieler das Spiel neustarten kann.

Dann war das Spawnerscript an der Reihe. Dieses sollte auf leeren Objekten in der Szene arbeiten und alle 15 Sekunden einen Gegner instanzieren. Dabei wird nach jedem Spawn die Zekt bis zum nächsten Spawnen um eine Sekunde verkürzt. Später hatte ich das Problem, dass der original Gegner wenn vom Spieler beseitigt wurde, nicht mehr instanziert werden konnte. Dafür hätte man sicherlich eine schöne Lösung finden können ( zBs. mit Prefabs) aber dar ich unter Zeitdruck war erstellte ich einfach einen Würfel unter der Map und Stellte das Original darauf. Nach einer Weile kam das Problem wieder, weil scheinbar ein paar Kugeln durch den Boden rutschen. Also setzte ich noch einen Würfel über das Original und das Problem war gelöst. Dar ich es in 2 ½ Stunden nicht mehr geschafft habe den Spieler anzufangen, wenn er von der Map fällt, kann man das Original unter der Map immer noch sehen, wenn man herunter fällt.

Das Sterben der Gegner war eine schwierige Angelegenheit, denn ich musste überprüfen ob irgendeine Kugel mit irgendeinem Gegner kollidiert. Dafür müsste ich eigentlich eine Liste mit allen Kugeln oder mit allen Gegnern machen. Ich stand aber unter starkem Zeitdruck. Ich 3Minuten würde ich das nie schaffen. Dann fiel mir auf, dass alle instanzierten Kugeln Bullet Clone heißen. Ich fügte dem Gegnerscript das eine Methode hinzu, die alle Kollisionen durchgeht und guckt, ob der Name des kollidierenden Objekts Bullet enthält. Wenn ja zerstört sich der Gegner selbst.

Leider funktionierte die Selbstzerstörung nicht. Unity Objekten liegt scheinbar nicht viel am Tod. Ich löste das Problem, indem ich im Bulletscript abfragte, ob ein Objekt berührt wird, das Enemy im Namen trägt und gegebenenfalls auch die Zerstörung des Gegners übernimmt.

Endlich wieder Visual Studio

Hallo Leute,
Vor Monaten habe ich ja begonnen mit Visual-Basic zu programmieren. In letzter Zeit habe ich zu VB allerdings nichts mehr veröffentlicht. Das lag daran, dass Visual Studio mir erklärte, dass mein 30Tage Testzugang nun vorbei ware und ich ab nun ein Microsoft Konto brauche. Ich habe mich dann dazu entschieden KEIN Microsoft Konto anzulegen ( Aus Datenschutzgründen ) Das war eine schwere Entscheidung, da Visual Studio mit seinem ganzen Unter-Die-Arme-Greifen unglaublich praktisch ist. Somit hatte ich lange keinen Kontakt mit Visual-Studio.

Im Sommer bin ich auf das Gymnasium gekommen. Dieses Gymnasium nutzt Microsoft 365 für alle Schüler und Lehrer. Grundsätzlich ist das extrem praktisch, dar somit jeder an jedem Smartboard oder PC seine Daten abrufen kann.

Nun habe ich einfach mal probiert mich in Visual Studio mit meinem Schullkonto einzuloggen. Es hat funktioniert! Wow, was für eine Erleichterung. Nebenbei habe ich jetzt auch noch den perfekten Code-Editor für Unity.

Mit VB werde ich wahrscheinlich trotzdem nichts mehr machen, weil ich jetzt einfach aus der Übung bin und mit C# viel besser umgehen kann.

Unnoticed

Nach meinem letzten Unity Projekt wollte ich mich mal an etwas größeres wagen. Ich war schon Immer von Stealth-Spielen fasziniert also beschloss ich selbst eines zu entwickeln. Ich öffnete Blender und modellierte eine kleine Map.

Nach vielen Stunden der Verzweiflung und ein paar Momenten der Erleuchtung hatte ich einen Gegner programmiert, der eine Patrouille auf der Map abgeht und sobald der Spieler in seinem Sichtfeld ist beginnt ihn zu verfolgen. Dann bräuchte ich nur noch ein paar Zeilen C# um den Spieler eine Kiste auf der Map klauen zu lassen und schon hatte ich die Grundlogik fertig.

Momentan ist es allerdings noch sehr einfach, denn wenn der Gegner den Spieler sieht wird dieser zwar verfolgt aber er kann trotzdem ganz entspannt seine Mission ausführen, denn der Gegner kann dem Spieler momentan noch kein Haar krümmen.

Ich beschloss das Spiel Unnoticed eng. für Unbemerkt zu nennen. Ihr könnt das Spiel auch schon austesten.

Pygame

Hallo Leute,

Gestern waren meine Eltern einkaufen und Papa hat mir eine Python T mitgebracht. Da stehen allerhand interessante Sachen drin. Zum Beispiel auch ein Pygame Einsteiger Artikel. Den habe ich mir durchgelesen und gemerkt, dass Pygame gar nicht so schwer zu sein scheint wie ich das in Erinnerung hatte. Deshalb werde ich mein Python Online Spiel in Pygame schreiben.

Python Sockets

Hallo Leute,

Heute habe ich mal wieder ein bisschen recherchiert und habe eine Lösung für die Datenübertragung meines Python Online Spiels gefunden. Sie nennt sich Socket. Für die Socket-Technologie gibt es eine gleichnamige Python-Bibliothek mit der man scheinbar sowohl Clients als auch Server für Onlinespiele entwickeln kann. Allerdings scheinen Sockets eine sehr komplexe Angelegenheit zu sein. Naja, mal gucken ob ich das irgendwann mal schaffe.

Schwieriger als gedacht

Hallo Leute, Das onlinespiel ist gar nicht so einfach. Dar man regelmäßig die Positionen der anderen abfragen muss kann man das nicht mit http requests lösen. Der Server würde diese vielen Anfragen als Denial_of_Service Attacke erkennen und abblocken. Ich brauche also ein anderes Protokoll.

Erste Version

Hallo Leute,
Hier ist schon mal die erste Version meines Online Spiels. Momentan kann man allerdings nur im Singleplayer Modus Spielen.

from tkinter import *
w = 10
x = 40
y = 40
def rechts(event):
   global x
   x = x + w
   c.move(ich, w, 0)
def links(event):
   global x
   x = x - w
   c.move(ich, int("-" + str(w)), 0)
def unten(event):
   global y
   y = y + w
   c.move(ich, 0, w)
def oben(event):
   global y
   y = y - w
   c.move(ich, 0, int("-" + str(w)))
   #print(str(x) + "  " + str(y)) kordinaten output
root = Tk()
root.title("Zenos MultiplayerSpiel")
c = Canvas(root, height=500, width=700)
c.pack()
ich = c.create_oval(40, 40, 60, 60, fill="black")
c.bind_all('<Right>', rechts)
c.bind_all('<Left>', links)
c.bind_all('<Up>', oben)
c.bind_all('<Down>', unten)
mainloop()

Python Mail versenden

Hallo Leute,
Ich habe heute endlich mal
herausgefunden wie man mit
Python eine Mail versendet :

import smtplib
from email.mime.text import MIMEText

msg = MIMEText("Nachricht")
msg['Subject'] = "Betreff"

s = smtplib.SMTP_SSL('host:port')
s.login('Benutzername','passwort')
s.sendmail('absenderadresse','zieladresse', msg.as_string())
s.quit()

Sollte der Code bei euch nicht funktionieren
könnte es daran liegen das ihr einen anderen Port habt.
Auf jeden Fall funktionieren  tut es mit dem Port 465.