SpiffyGif – 1 nicer Ladeanimationen-Generator [Türchen 5]

Heute steckt hinter meinem Pseudo-Adventskalender-Türchen eine weitere Website-Empfehlung für alle, die Spiele oder Apps produzieren. Oftmals wird man ja mit dem Problem konfrontiert, dass man einen Ladebanner braucht, einen sogenannten „Spinner“. Und deshalb lautet meine Empfehlung, wenn man einen Spinner braucht greift man am besten zu Donald Trump oder zu Seite http://spiffygif.com . Hier kann man sich ganz einfach einen Ladebanner nach belieben zusammenstellen, und dann entqweder als GIF oder als png-Spriteshet exportieren. Verschiedene Farben und Hintergründe runden das ganze ab.

Batch: Variablenwert aus Datei einlesen [1. Türchen]

Hallöle!

Heute zeige ich in aller kürze, wie man in Batch eine Variable aus einer Datei ausliest. Ich weiß, manche arbeiten da mit dem „<„-Zeichen in Verbindung mit dem Type-Befehl. Das ist aber meiner Meinung nach nicht sehr effektiv. Viel einfacher arbeitet es sich mit dem for-Befehl:

for /f "Delims=" %%a in (variablendatei.txt) do (

set Variable=%%a

)

Ganz kurz zu dem was hier passiert. Wir laden unsere variablendatei.txt in die for-Schleife und sagen, es soll am Delimeter „“ geteilt werden. Es gibt also keinen Trenner, deshalb wird der ganze Wert eingelesen. Wir sagen, dass die Information in die tempöräre Variable %%a geladen werden soll und setzen anschließend in der Klammer nur noch unsere eigentliche Variable dem Wert der temporären Variable gleich. Wichtig zu beachten ist, dass man, wenn man mehrere Variablen auf diese Weise lesen möchte immer einen neuen Buchstaben verwenden sollte, um die nächste Variable einzulesen. (Also %%b, %%c, %%d…  und so weiter)

Möchte man nur eine Datei zum Auslesen vieler Variablen verwenden, so kann man aber auch einfach einen Trenner benutzen, und dann alle Variablen mit einem neuen Buchstaben zu indexieren.

In etwa so:


for /f "Delims=," %%a in (daten.txt) do (


set Variable=%%a
set AndereVariable=%%b
set NochAndere=%%c
set EineVierte=%%d
)

 

HD44780-Displays und Arduino: Individuelle Zeichen erzeugen

20161003_220723.jpg

Ach ja, es war einer der ersten Beiträge auf wiefreak.de: Jener Beitrag, in dem ich beschrieb, wie man ein HD44780-Display an einen Raspberry anschließt. Was ist seitdem passiert? Naja, mit dem Design des Blogs nicht viel, die Qualität ist… äh…. gleichbleibend mittelmäßig geblieben. Es kommen nach wie vor nur sehr selten Beiträge, und die meisten Beiträge sind nur sehr kurz und haben nur wenig von der sogenannten persönlichen Tiefe, die ich immer wieder vergeblich versuche in die Artikel einzubringen. (Sagte nicht mal jemand als Student hat man haufenweise Zeit?)
Egal, genug des Selbstmitleids. Heute geht es darum, wie man sich eigene Symbole und Zeichen auf einem solchen Display erzeugen und anzeigen lassen kann.
Und, wie so oft bei den Arduino-kompatiblen Bauteilen ist dies deutlich einfacher als erwartet.
Das Ganze unterteilt sich in 3 Teile: Die eigenen Zeichen definieren, sie in den Speicher des Displays laden, die Zeichen anzeigen.
Dabei ist der erste Schritt zugleich der komplizierteste. Wir definieren einen Array aus 8 5-Bittrigen Bytes (ich hab keine Ahnung ob man das wirklich so schreibt…), in den wir dann die 8 Zeilen des Displays laden.

byte lol[8] = {
0b11000,
0b10001,
0b00001,
0b00100,
0b00010,
0b00000,
0b00000,
0b10001}

Wichtig hierbei ist, dass jedes „1“-Bit später „hervorgehoben“ wird. So Zeichnet man sich Stück für Stück seine Form.
Da das sehr umständlich und schlecht vorzustellen ist, habe ich schnell mit C++ ein Progrämmchen zusammengehämmert, mit dem sich diese Formen viel schneller und besser erstellen lassen.

costum_char_ad
Am Ende lässt man sich den Code generieren und fügt ihn über der setup()-Schleife ein.

Das kleine Progrämmchen kann man sich hier runterladen.

So! Jetzt aber genug werbefinanzierter Clickbait. Zurück zum Display.

In der Setup()-Schleife fügt man dannn für jeden Char die Zeile

lcd.createChar(1, besterName);

ein. Natürlich jeweils mit der Bezeichnung, die ihr oben vergeben habt. Die Zahl steht für den jeweiligen Byte. Also bei mir ist es der erste.

Wichtig beim Aufrufen ist, dass ihr nicht print() verwenden dürft, es muss write() sein. Wenn es dann immer noch nicht geht, setzt die Zahl in ein byte(Zahl). das muss bei manchen gemacht werden.

Arduino: Macht es niemals ohne delay! 

Heute mal wieder eine Story aus der Kategorie: Ich habe einen Fehler gemacht und nun erzähle ich euch davon, damit ihr nicht den gleichen macht. 

Mein heutiger Tipp lautet: Screibt niemals einen Arduino-Code, der über Serial Data kommuniziert, ohne einen delay einzubauen. Sonst ist es möglich, dass ihr euren Arduino nicht mehr umprogrammieren könnt, da die Serial Data Schnittstelle dauerhaft belegt ist. 

Tasker: HTTP-POST-Daten ohne Inhaltstyp richtig formatieren

Jede Programmierumgebung hat so ihre eigene Weise, wie sie gerne HTTP-Post-Daten bekommen möchte, um diese korrekt an das PHP-Script zu übergeben.
Jetzt ist die Frage: Wie macht man es Tasker recht?
Hier die Antwort:
wie man es macht hängt natürlich oft davon ab, wie das PHP Script das ganze verarbeitet. Deshalb muss ja klar gestellt sein dass ich von ganz simplen PHP Scripts rede, die keinen bestimmten Inhaltstyp fordern sondern die Daten einfach wie folgt aus dem Headern ablesen:

image

Ganz einfach also. Allerdings hat Tasker hier auch eine eigene Weise, wie es die Daten gerne formatiert haben möchte. Das ist nicht schwer, die muss man einfach kennen.
Wichtig ist, den Inhaltstyp leer zu lassen.

image

Dann können wir die Daten einfach formatieren. Ein Wert pro Zeile, Schlüssel und Wert durch ein Gleichheitszeichen getrennt.

image

So einfach ist das.

[#WLANHACKDING] MACHT BACKUPS!

Wie es für Bastelprojekte allá Wieland üblich ist, ist mir eine SD-Karte kaputt gegangen. Bei dem Versuch, mich nicht mehr einloggen zu müssen, da ich an diesem Zeitpunkt noch nicht auf die virtuelle Tastatur zurückgreifen kann, und deswegen theoretisch immer eine echte mitschleppen müsste, ist mir die SD-Karte kaputt gegangen. Nachdem rumschreiben in diversen Konfigurationsdateien, deren Veränderung nichts genützt hat, bitte meinen raspberry auf einmal neu, und sagte mir, ich befinde mich im Notfall Modus und meine SD-Karte sei kaputt. Das war natürlich nervig. Ich musste also Kali neu auf eine SD Karte brennen, alle packages und Abhängigkeiten neu installieren, neue Updates und Upgrades ausführen, alles so Sachen, die ich bei meiner Internetleitung eigentlich nicht machen möchte.
Demzufolge lautet mein heiliger Tipp heute: macht am besten regelmäßig Backups von eurer SD-Karte. Nutzt dazu den win32diskimager und klickt auf read statt write. Dann wird das, was sich derzeit auf eurer SD-Karte befindet, in ein Image geschrieben, dass ihr im Zweifelsfall einfach ganz normal auf eine Ersatz SD-Karte brennen könnt.

[#WLANHACKDING] Wow, dass hat gut funktioniert

Heyhey! Ich muss sagen, ich bin begeistert. Normalerweise verzweifle ich regelrecht an all dem imagen der verschiedenen SD-Karten. Immer wieder bricklen sie mir, und sind darauf hin völlig unverwendbar.
Aber diesmal – nichts. Wow. Keinerlei Probleme. Einfach mal schell das Kali Image heruntergeladen, die SD-Karte zur sicherheit nochmal auf NTFS formatiert und fertig. Alles funktionierte auf anhieb.

image

Jetzt ist es nur das Stundenlange herunterladen von allerlei Kali-Linux-Metapackages, was viel Zeit in anspruch nimmt.
sudo apt-get install kali-linux-wireless
und so weiter. Und dann immer noch diese ewigen abfragen, die das ganze geschehen aufhalten, meist, ohne dass man davon etwas merkt. Naja, aber mittlerweile funktioniert ja alles und das WLAN Hack Ding ist theoretisch einsatzbereit – theoretisch.

[#WLANHACKDING] Also, mechanisch gesehen…

Immerhin. Vom mechanischen her gesehen ist das WLAN-Hack-Ding fertig. Trotz der immerwiederwährenden Abstürze, vorallem weil ich mich nicht beherrschen kann und beim festschrauben des Raspberrys auf dem Bildschirm immer wieder auch wichtige Bauteile berührte und damit Kurzschlüsse verursache. 🙄

image

Aber naja. Irgendwann hatte ich dann alles angeschlossen. Und zu meiner großen freude funktionierte das Display, obwohl das upgrade nie wirklich abgeschlossen wurde und noch 106 Packages fehlten. Ich muss sagen, dass das OnBoard-WLAN mir wirklich viel Arbeit erspart hat. Einfach beim ersten Start von Raspbian anklicken, Code eingeben und Fertig. Und seitdem das Display funktioniert, brauche ich auch keinen Fernseher mehr an mein Ding anstöpseln, das funktioniert jetzt alles tragbar.
Auf jeden Fall läuft es jetzt. Touch und Screen funktionieren super und auf anhieb – nur ein OnScreen-Keyboard konnte ich noch nicht installieren.

image

Ach ja – und auf dem Kopf ist es noch 😜
Aber das wird auch noch. Jetzt mache ich mich an die mobile Stromversorgung, die zweite WLAN-Antenne und natürlich die Installation von Kali Linux.

[#WLANHACKDING] Auspacken! Anschließen!

Es ist da, es ist da, es ist dadadadada! Mein Packet mit den Grundteilen des WLAN-Hack-Ding ist soeben angekommen. Natürlich sofort ausgepackt halte ich nun einen Raspberry Pi 3 und das Offizielle Raspberry Pi Touchscreen-Display in Händen.
Auch dabei waren eine Hülle für die beiden Dinger, wobei ich sagen muss, dass die Verarbeitung der Hülle für meine Begriffe doch etwas zu wünschen übrig ließ.
Aber zum Glück nur an Stellen, die man nachher eh nicht mehr sieht. Puh. Auch die Mitgelieferte Micro-SD-Karte samt Adapter war mir sehr Hilfreich, da ich so direkt loslegen konnte. Nun lasse ich mit
sudo apt-get update && apt-get upgrade
den Pi Updaten, danach soll er laut raspberrypi.org das Display selbstständig erkennen.

[#WLANHACKDING] – Wieland baut ein Kali Tablet

Ich habe natürlich mal wieder viel zu viel Geld übrig, weswegen ich mich jetzt mal an den Bau eines Kali Linux Tablet machen möchte. Und natürlich werde ich wie jeder zweitklassige Betreiber eines Blogs, meine Arbeitsschritte hier dokumentieren inklusive Fotos und und einem billigen Hashtag und allem was dazu gehört. Ah! Kawaaai! Ich habe damit angefangen, mir zur Feier meiner letzten Abiturprüfung das basis-kit für mein Projekt zu holen. Bei reichelt.de habe ich daraufhin ein Kit gefunden, das genau das enthält, was ich brauche.
image

Es beinhaltet einen 7 Zoll Touchscreen und einen Raspberry Pi 3. Das alles kommt zusammen mit einer Hülle, in die das alles auch noch perfekt reinpasst. Kabellage und alles was dazu gehört ist natürlich auch inklusive. Beiliegend ist zum Beispiel auch eine SD-Karte auf der schon raspbian installiert ist, aber ich werde mir ja sowieso eine neue holen müssen, da ich ja Kali installieren will.
Den nächsten Artikel gibt’s, wenn das Paket mit den Teilen angekommen ist. 😍
image

Python: Farbige Outputs in der Konsole

Ich mag ja Konsolenanwendungen unter Linux. Diese sind besonders dann schön anzusehen, wenn sie farblich unterschiedlich dargestellt werden. Das ganze ist einfacher als man denkt.
Der einfachheit halber definieren wir zuerst ein paar Variablen, die die Farben halten.

W = ‚\033[0m‘ ➡ Weiß
R = ‚\033[31m‘ ➡ Rot
G = ‚\033[32m‘ ➡ Grün
O = ‚\033[33m‘ ➡ Orange
B = ‚\033[34m‘ ➡ Blau
P = ‚\033[35m‘ ➡ Lila
C = ‚\033[36m‘ ➡ Hellblau
GR = ‚\033[37m‘ ➡ Grau

Und jetzt ist es im Prinzip ganz einfach. Lässt man eine dieser Variablen in einem print Text erscheinen, werden alle Schriftzeichen nach der Variable in der entsprechenden Farbe gedruckt. Der Text, der in der Variable steht, ist nämlich praktisch die Anweisung für die Konsole „schreibe ab hier in dieser Farbe“. Dadurch muss man aber auch immer wieder weiß anweisen, damit das Gros des Konsolen outputs auch in der richtigen Farbe erscheint.
Als Beispiel:
print(R+“[ ! ] „+W+“Wir konnten diese „+G+“ Anweisung „+W+“leider nicht verarbeiten.“)

Batch-Dateien verschlüsseln

Wenn man mal zwei Minuten Googlelt fällt einem auf, das ist im Internet kein Tool gibt, mit dem man Batch Dateien also Stapelverarbeitungsdateien für Windows so verschlüsseln kann, dass sie immer noch funktionieren, aber man sie als normaler Nutzer nicht mehr erkennen kann. Diese Methode benutzt zum Beispiel der Ersteller der Ransomware Locky.
Weiterlesen

Die deutsche Bahn stellt Daten zu Fahrplan und Zügen zur Verfügung

Die Bahn möchte wieder attraktiver werden, deshalb haben sie eine Digitalisierungsoffensive ins Leben gerufen, über die sie ihr Angebot und ihre Daten zur Verfügung stellen wollen, damit jeder es oder kleine Programme programmieren kann, die mit dem Server interagieren. Das ganze ist quelloffen und verfügbar unter der Creative-Commons-Lizenz. Man kann sich per E-Mail einen API Schlüssel zusenden lassen, um dann auf Fahrpläne Parkmöglichkeiten und vieles mehr zugreifen zu können.

image

image

Die Antwort gibt es entweder in XML oder JSON. Es ist aber Vorsicht geboten, man merkt wenn man sich mal die Antwort aus den http-daten an sieht ganz klar, dass ich das ganze noch in der Beta befindet, da viele Daten noch nicht da oder einfach leer sind. Man sollte also für das erste wirklich nur zum Testen übergehen, aber noch keine App in den Produktionsstatus überführen.

image

Einen API-Key bekommt ihr, indem Ihr den Leuten von DBOpenData einfach eine Mail schickt.

Killing Floor 2 Server erstellen LAN/Internet

Killing Floor 2 ist der Grafisch aufgemotzte Nachfolger von Killing Floor. Wer hätte das gedacht… Das Spiel befindet sich jedoch noch in der Entwicklung und ist daher noch nicht mit einem einfachen LAN-Multiplayer-Menüpunkt aufgestattet.
Aber nur da es diesen Punkt nicht gibt, heißt das noch lange nicht, dass es nicht möglich ist über LAN oder sogar im ganzen Internet ein eigenes Spiel zu erstellen.


 

Wieso einen eigenen Server erstellen wenn es doch schon so viele im Internet gibt, über die man problemlos online spielen kann? Ganz Einfach! Zum einen wäre da der Ping, der teilweise schon dazu führt, dass man vom Server oder Mitspielern gekickt wird. Zum anderen will man als sozialscheues Wesen vielleicht auch mal nur mit Freunden spielen ohne, dass irgendwelche 10-Jährigen Kinder den Server betreten, nur um dann ständig in das Mikrofon zu singen und alle zu beleidigen.

Der grundlegende Wunsch nach einer Möglichkeit ohne diese Probleme zu spielen, besteht also zweifellos.

Nun zum Fachlichen:
Killing Floor läuft über Steam und das macht solche Geschichten mit DIY oft schwerer als gedacht. In diesem Fall allerdings überhaupt nicht! Es macht es sogar ziemlich einfach.
Eine Grundvorraussetzung für den Server ist das Tool „SteamCMD“, da der Server von Killing Floor 2 nicht in der Bibliothek oder im Shop zum Download angeboten wird. Wie der Name schon sagt, ist dieses Tool für die Kommandozeile. Das Programm sollte man einfach herunterladen können. Wenn man das ZIP-Archiv heruntergeladen hat, muss man es in einen Ordner entpacken, der später noch zu finden ist, denn SteamCMD wird für die Aktualisierung des Servers benötigt.
In meinem Fall heißt der Ordner SteamCMD.
Die einzige Datei, die nach dem Entpacken vorzufinden ist, ist eine Anwendung. Diese ist das eigentliche SteamCMD. Man muss es zum Starten einfach anklicken. Schon öffnet sich das Kommandozeilenfenster und man sieht wie sich SteamCMD installiert und Aktualisiert.
In die Kommandozeile muss man nun folgende Befehle eingeben um den KF2Server herunter zu laden:

1. login anonymous
2. force_install_dir ..\kf2server\
3. app_update 232130 validate
4. exit

Was zum Geier macht das?

  1. Du meldest dich an. ACHTUNG! NICHT mit deinen Steam Daten anmelden, sonst kannst du nachher nicht selber auf deinem Server spielen sondern nur andere. Melde dich stattdessen mit „anonymous“ an wie es dort steht.

  2. mit diesem Befehl wird der Ordner ausgewählt in dem der Server installiert werden soll. In meinem Fall ist dieser Ordner „neben“ dem SteamCMD Ordner (..\kf2server\).

  3. Nun wird die Installation gestartet. Die App-ID vom KF2Server ist 212330 und das validate sorgt dafür, dass alles Komplett installiert wird. Das validate muss auch dahinter, wenn man auf eine neue KF2 Version updaten will. Der Vorgang dauert etwas. Man kann den Fortschritt an der Zahl erkennen, die eine Kommastelle hat. Das ist der Fortschritt in %.

  4. SteamCMD wird verlassen.

Jetzt dürfte neben dem SteamCMD-Ordner der „kf2server“-Ordner erschienen sein. In diesem Ordner findet man eine BATCH-Datei. Zum starten des Servers muss diese einfach gestartet werden. In der Batchdatei steht folgendes:
„start .\Binaries\win64\kfserver kf-bioticslab?adminpassword=123“
Hier sieht man die Einstellungen mit denen der Server gestartet wird.
Zuerst wird der Server gestartet: „start .\Binaries\win64\kfserver“,
dann wird die Karte angegeben: „kf-biotislab“
und dann werden spezielle Parameter in URL-Form mitgegeben:
z.B. „?adminpassword=123“ das Adminpasswort für diesen Server ist also 123.
man kann natürlich auch andere Dinge einstellen:
„?difficulty=2?maxplayers=6?adminname=horst?adminpassword=gulaschkanone“
Die Schwierigkeit ist 2 (0-Normal, 1-Hard, 2-Suicidal, 3-Hell on Earth)
Maximal können 6 Spieler den Server betreten.
Das webadmin-Passwort ist „gulschkanone“
und der webadmin-Name ist „horst“.

Webadmin ist nochmal ein besseres Interface zum ändern der Optionen des Servers.
Um WebAdmin nutzen zu können muss man folgendes tun:
Öffne „\KFGame\Config\KFWeb.ini“ mit dem normalen Texteditor.
In der Zeile wo „bEnabled=false“ steht, ändere das „false“ zu „true“.
Hier findest du auch weitere Einstellungen für WebAdmin.

Wenn der Server gestartet ist und du in deinem Browser die IP-Adresse deines Rechners und den Port 8080 eingibst,
z.B. so „192.168.178.12:8080„, kommst du zum Server Interface. Hier kannst du alles Einstellen in schöner, grafischer Form und du kannst auch mit Spielern auf dem Server chatten und sie bannen oder kicken.

Du kannst dir auch ein Batch-Skript schreiben um den Server automatisch mit den richtigen Einstellungen starten zu lassen.
Benenne es aber um, denn KFServer.bat wird bei Updates überschrieben.
Um die Updates automatisch, ohne ständiges eingeben bei SteamCMD, installieren zu lassen, schreibe die Befehle von oben in eine Textdatei und erstelle eine Batch-Datei, in der steht: „steamcmd.exe +runscript updatescriptkf2server.txt“.

Hier heißt die Textdatei „updatescriptkf2server.txt“. Du kannst sie auch umbenennen solange du das in der Batch-Datei auch geändert wird.

Eine txt-Datei zum Updaten könnte z.B. so aussehen:

// updatescriptkf2server.txt
//
login anonymous
force_install_dir ..\kf2server\
app_update 232130 validate
exit

Wie du siehst, sind das einfach nur nochmal die Befehle von oben.

Viel Spaß mit deinem KF2Server!

Android-Wear-Benachrichtigungen mit AppInventor senden

Mit IFTTT kann man auch mit AppInventor, der normalerweise keinerlei Benachrichtigungen senden kann, zumindest Android-Wear-Benachichtigungen senden. Dazu bedient man sich dem Maker-Channel. Dazu erstellen wir zunächst ein IF-Rezept, welches 2 per Maker-Channel übergebene Variablen an die Android-Wear übergibt. Dies ist zum einen der Text, der Angezeigt werden soll, und die URL zu einem Foto, welches als Benachrichtigungsbild verwendet wird. Dafür kann man entweder das hier eingeblendete Rezept benutzen, oder selber eins erstellen.

IFTTT Recipe: Show Notifications on Android Wear with #AppInventor connects maker to android-wear

Das war der einfache Teil. Jetzt müssen wir nur noch in AppInventor eine Funktion erstellen, die mit dem Maker-Channel kommuniziert. Die Maker-Variablen werden mittels HTTP-POST übergeben, und das in JSON-Form. Deshalb bauen wir uns eine kleine Routine, die zwei übergebene Variablen an den Maker-Channel sendet.

So sieht meine Lösung aus:

weargetter

Natürlich müsst ihr statt des großen schwarzen Zensurbalkens euren Secret-Key einfügen. Dann sollte alles funktionieren. 🙂

Intelligentes Zielen bei Spielen

In vielen Spielen sieht man Geschütztürme oder NPCs, die anscheinend sehr gut Zielen gelernt haben. Darum soll es in diesem Beitrag gehen, wie man auch am Titel unschwer erkennen kann.
Ich habe mich schon immer gefragt: Wie geht das? Wie kann man das als Algorithmus formulieren? Und kann ich das selber auch machen? In der letzten Woche bin ich nun auf eine Lösung gestoßen. Ich hatte mich an diesem Thema festgebissen, wollte es aber nicht Googlen, sondern selber herausfinden. Meine Idee bekam ich durch… naja… Mathe :/. Leider ist der Unterricht dich zu etwas nütze und das muss man sich erstmal eingestehen. Da ich so überaus intelligent bin, gehe ich an ein Gymnasium und dort gibt es nunmal auch diesen sagenumwobenen „Mathematik Unterricht“. Als Thema hatten wir Vektorrechnung und das kann man für das Programmieren grafischer Anwendungen sehr sehr sehr sehr sehr sehr sehr gut gebrauchen!
Meine Idee war es eine Flak (also für alle Nicht-N24-Gucker: ein Luftabwehrgeschütz.) so auf meinen Mauszeiger schießen zu lassen, dass sie ihn trifft, wenn das Projektil an der Maus ankommt. Sie musste also vor das Ziel schießen und dieses Vorziehlen wollte ich als Algorithmus fassen. Nach einigen Überlegungen kam ich auf folgenden Ansatz:

Die Kugel hat eine festgelegte Geschwindigkeit: in meinem Fall 10 Pixel/Einheiten pro Frame
Das Geschütz ist in der Mitte des Fensters, welches eine Abmessung von 800 mal 600 Pixeln hat.
Die Maus ist das Ziel und hat auch eine Gesschwindigkeit:
Diese lässt sich aus der Änderung der Koordinaten der Maus zwischen zwei Frames ausrechnen.

MausX-MausX_Vorher=AbstandX
MausY-Mausy_Vorher=AbstandY

Die Länge dieses Vektors, also die Geschwindigkeit ergibt sich dann so:
Geschwindigkeit²=AbstandX²+AbstandY2 (Für alle Angehörigen des Bildungsbürgertums: Das ist der Satz des Pythagoras.)
Die Wurzel aus Geschwindigkeit² ist logischer Weise die Geschwindigkeit.

Als nächstes Überlegte ich mir folgendes:
Vereinfacht gesehen, bewegt sich das Ziel (die Maus) auf einer Geraden, solange sie nicht ihre Richtung ändert oder der Nutzer die Geschwindigkeit der Mausbewegung ändert.
Nun wird jedes Pixel auf der Geraden, welches vor der Maus liegt, kontrolliert:
Der Abstand zu dem ausgewählten Pixel geteilt durch die Geschwindigkeit der Maus ergibt einen Wert.
Der Abstand zwischen Geschützturm und dem Pixel geteilt durch die Geschwindigkeit der Kugel (10) muss den gleichen Wert ergeben.
Hier nochmal als Skizze:
Skizze

Wie man sieht, passen die jeweiligen Geschwindigkeiten vier mal in den jeweiligen Abstand zum Vorhaltepunkt. Dieser Punkt wird also von der Maus und dem Projektil in vier Frames erreicht.

Ich habe mein Programm in Python geschrieben und es funktioniert gut. ABER nicht perfekt und das liegt daran:

-Die unendlich vielen Punkte der geraden können nicht alle durchgecheckt werden also lasse ich in meinem Programm insgesamt rund 100 Pixel vor der Maus kontrollieren. Deswegen schießt das Geschütz nicht immer sondern bleibt einfach stehen, wenn die Werte nicht genau übereinstimmen. Erst nach einer erneuten Bewegung der Maus findet das Geschütz wieder einen Punkt an den geschossen werden soll.

-Zwischen den einzelnen kontrollierten Punkten der Geraden könnten weitere passende Vorzielpunkte liegen, die aber übersprungen werden, da mein Check-Algorithmus nicht sehr viele Stellen nach dem Komma beachtet sondern immer eine Pixel-Einheit weiter springt.

-Das ganze Ding ist eine ungenaue Kiste, da ich kein Matheprofessor bin.

Insgesamt ist das Programm aber sehr gut gelungen und ich bin sehr zufrieden damit, denn es macht genau das was es soll: Treffen! Die meiste Zeit trifft es die Maus wirklich!
Man kann dann z.B. noch kleine Spielereien hinzufügen wie einen Lebensbalken der Maus oder die Munition des Turms begrenzen.

So sieht mein Endresultat aus:

preview

Oben ist ein Lebensbalken für die Leben des Spielers. Die Maus ist ein Ufo und in der Mitte ein einfach angedeuteter Geschützturm, der sich passend ausrichtet und dreht.

Ren’py: Spieldateien verschlüsseln

In den meisten Fällen will man bei einem Ren’Py Spiel, das für die Öffentlichkeit gedacht ist, nicht, dass Spieler einfach so in den Spieldateien rumwurschteln können. Zum einen würde es dem Spiel die Magie nehmen, wenn man jedes einzelne Asset von anfang an sehen könnte, man will aber vielleicht auch nicht, dass Leute das Werk verändern oder die Assets in ihren eigenen Spielen verwenden. Dafür bietet Ren’Py ein Tool an, mit dem sich die einzelnen Dateien in Archiven zusammenfassen lassen. Das Komandozeilentool archiver.exe wird leider mit den neueren Versionen von Ren’Py nicht mehr mitgeliefert. Um das Programm zu bekommen muss man sich also eine ältere Version, wie zum Beispiel die Version 5.0 von der Entwicklerwebsite herunterladen. Hier befinden sich im Hauptverzeichnis die Dateien archiver.exe und archiver.py.

image

Da neben der Datei Python23.dll auch eine komplette Python-Installation in einem abhängigen Verzeichnis benötigt wird, funktioniert das Programm meist nicht mehr, wenn man es aus dem  Ordner rausnimmt. Deshalb bietet es sich an, die zu archiverenden Dateien in den game-Ordner zu packen, wo sie dann archiviert werden können.
Das Programm archiver.exe wird über die Kommandozeile bedient. Der Aufruf erfolgt nach dem Syntax
archiver.exe Archivname Datei1 Datei2 Datei3 [Datein]
Der Archivname ist nur ein Bezeichner ohne Dateiendung, wie zum Beispiel images , bei der Angabe der Dateien können Auswahlparameter wie zum Beispiel .png , .jpg verwendet werden. Damit die Dateien auch vom Ren’Py-Spiel verwendet werden können, muss im init:-Block die Zeile
archives = [‚archivname‘,’archivname2′]
hinzugefügt werden. Die Script-Dateien müssen nicht individuell Kompiliert werden, beim Testen des Projekts werden die script.rpy-Dateien, die sich mit jedem Editor öffnen lassen, zu script.rpyc-Dateien kompiliert, die sich nicht mehr so einfach öffnen lassen. Ist alles erledigt, können alle Assets, und alle .rpy-Dateien gelöscht werden, woraufhin das Spiel fertig zum veröffentlichen ist. Zum Schluss sei noch erwähnt, dass die .rpyc-Dateien wirklich kompiliert sind, während die .rpa- und .rpi-Dateien wirklich nur Archive sind, die sich mit wenig Arbeit öffnen lassen. Allerdings schützt diese Methode wesentlich gegen das „casual browsing“ der Spieldateien durch Nutzer.

Prefetching in die eigene Seite integrieren

Was ist eigentlich Prefetching?
Prefetching bezeichnet das Vorabladen einer Website, die man eventuell gleich aufrufen will oder wird. Ist das Laden der aktuell aufgerufenen Seite beendet, werden im Hintergrund die Seiten/Ressourcen geladen, die man sich (vielleicht) gleich ansehen will. Zur Zeit unterstützt nur der Firefox diese Funktion, aber andere Browser werden bestimmt bald folgen.

Wie intergriere ich Prefetching in meine Seite?

Prefetching ist relativ einfach einzubauen. Es reicht eine Zeile.

<link rel=“prefetch“ href=“http://www.wiefreak.de“>

reicht, um eine Seite vorab laden zu lassen. Das ganze kann man natürlich auch mit einzelnen Ressourcen, wie zum Beispiel Bildern oder Videos.