Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]

1. Zuallererst

Ich gehöre zu einem Verein, der Spiele an der Universität macht. Da die Anzahl der Personen, die die Spezifikationen des Game Launcher kennen (im Folgenden wird der Game Launcher manchmal als Launcher bezeichnet), der seit vielen Jahren zum Anzeigen von Spielen auf dem Schulfest verwendet wird, abnimmt, habe ich versucht, ihn von Grund auf neu zu erstellen. Es war. Es gibt verschiedene Dinge, die ich nicht rechtzeitig machen konnte, aber ich würde gerne darüber sprechen, weil es Gestalt angenommen hat.   Dieser Artikel berührt nicht wirklich die Design-Seite des Launchers. ** Wir werden hauptsächlich über das automatische Laden, die Ordnerstruktur von Daten und die Schwierigkeiten sprechen. ** Ich wünschte, ich könnte es auf leicht verständliche Weise erklären, auch wenn die Sprache, die ich erstellen möchte, nicht Java ist.

スクリーンショット 2019-11-11 22.01.36.png スクリーンショット 2019-11-11 22.01.44.png ~~ An diesem Tag wurde ein schöner Header in den leeren Teil eingefügt, aber aus irgendeinem Grund werde ich ihn ausblenden ;; ~~

2. Dinge, die Sie berücksichtigen und vorbereiten müssen, bevor Sie mit dem Erstellen eines Launchers beginnen

・ Für Java

-IDEs wie Eclipse -Java Ausführungsumgebung In Java wird eine Jar-Datei erstellt, wenn eine ausführbare Jar-Datei für die Anwendung generiert wird. Die neueste Ausführungsumgebung (jdk oder jre) muss festgelegt werden, um die Jar-Datei zu starten. Dies ist problematisch, da die Einstellung auch auf dem Computer erforderlich ist, auf dem der Launcher gestartet wird. Verwenden Sie auch ein Framework, um Ihr Design sauber zu halten! Weitere Informationen finden Sie unter: https://www.sejuku.net/blog/60411

・ Für andere Sprachen

Es ist im Grunde das gleiche wie Java. Integrierte Entwicklungsumgebung IDE und Ausführungsumgebung für seine Sprache. Und Sie müssen im Voraus prüfen, ob es auf einem Computer funktioniert, der ordnungsgemäß funktioniert, wenn er zum Launcher wird. Außerdem müssen Sie im Programm überprüfen, ob die exe-Datei usw. ordnungsgemäß funktioniert. Suchen Sie nach "OOO GUI" usw., um zu sehen, ob Sie das gewünschte Design erstellen können.

3. Um einen guten Launcher zu machen

Lassen Sie uns im Voraus über die notwendigen Funktionen nachdenken. Zum Beispiel bei meinem Launcher ・ Wie Funktion ・ Feste Phrasenfunktion ・ Eine Funktion zum bevorzugten Anzeigen von Werken, die noch nicht viel gespielt wurden ・ Automatische Ladefunktion für Spiele usw. (Tatsächlich werden auch Videos usw. unterstützt.) Insbesondere für den letzten Teil wollte ich den Launcher aktualisieren können, indem ich mir die Spezifikationen ansah, nicht nur mich.

4. Ordnerstruktur & Lesevorbereitung

Ich werde die Ordnerstruktur meines Launchers vorstellen. Lassen Sie uns richtig darüber nachdenken, denn es ist ein Starter der automatischen Ladefunktion.

project  ├src  ├data │ └ Bilder (Bilder, die für den Launcher usw. verwendet werden) │ └ Protokolle (Ordner zum Speichern der Anzahl der Likes und der Spielzeit der Werke)  └ExhibitionDatas    └Games │ └ Spieldaten    └Graphics └ Videodaten usw.

スクリーンショット 2019-11-16 8.24.35.png

In meinem Launcher habe ich eine Datei namens launcher_config.ini (Eigenschaftendatei in Java) verwendet, um die Arbeit am Launcher und dessen Bedienung zu erklären. Im Einzelnen sieht es wie folgt aus.

スクリーンショット 2019-11-16 8.21.44.png スクリーンショット 2019-11-14 4.42.59.png

Die INI-Datei ist grundsätzlich im Textformat "Name" = Wert Es ist, als würde man es wie eine Textdatei schreiben. Mit dieser Funktion können Sie die Ausgabe auf dem Launcher bearbeiten, indem Sie diesen Text optimieren, ohne sich mit dem Inhalt des Launcher herumschlagen zu müssen. Wenn Sie jemanden, der Spiele in den Launcher stellen möchte, bitten, diese INI-Datei zu erstellen, können Sie Spiele auf dem Launcher spielen!

スクリーンショット 2019-11-14 4.58.52.png

5. Fließen Sie, bis der Launcher das Spiel ausführen kann

Zuallererst die vorbereitete Klasse ・ Spieldatenklasse (Klasse, die den Inhalt der INI-Datei fast so speichert, wie er ist) ・ Spieldatenmanager-Klasse (Klasse, die alle Spieldatenklassen verwaltet) Erforderliche Funktionen usw. ・ Funktion zum Lesen der INI-Datei Referenz: https://qiita.com/motoki1990/items/2b643ea854624b09712c ・ Dateisuchfunktion ist.

qiita.java


private ArrayList<String> fileSearch(String path, String fileName){
        File dir = new File(path);
        File files[] = dir.listFiles();
        for(int i=0; i<files.length; i++){
            if(files[i].isDirectory()){  //Wenn es sich um ein Verzeichnis handelt, führen Sie eine Wiederholung durch
                fileSearch(path+"/"+files[i].getName(), fileName);
            }else{
                if(file_name.equals(fileName)){  //Ausgabe, wenn die angegebene Datei gefunden wird
                	resultPaths.add(dir.getAbsolutePath()+"/");
                }
            }
        }
        return resultPaths;
    }

Übergeben Sie zunächst den Ordner, der von der Dateisuchfunktion (ExhibitionData, da wir diesmal die Spieldaten lesen möchten) und den Namen der INI-Datei (in meinem Fall launcher_config.ini) an die Dateisuchfunktion. ↓ Der Pfad zur INI-Datei wird zurückgegeben und von der Game Data Manager-Klasse verwendet. Fügen Sie die Daten der erhaltenen Pfaddatei in alle Spieldatenklassen ein. Verwenden Sie zu diesem Zeitpunkt die Funktion, um die INI-Datei zu lesen ↓ Launcher gestartet ↓ Wenn die Aktion zum Starten des Spiels abgeschlossen ist, wird der Spieldatenmanager dies tun Lesen Sie den Pfad zur Ausführungsdatei der Spieldatenklasse des zu startenden Spiels und führen Sie ihn aus ↓ Launcher wird nicht ausgeführt, während das Spiel ausgeführt wird

Ist der Hauptfluss. Möglicherweise können Sie die ausführbare Datei mit Java auf verschiedene Arten ausführen Im Fall von I, Ich habe eine Standard-Java-Bibliothek namens ProcessingBuilder verwendet. Kurz gesagt, Sie können mit cmd tun, was Sie können. Daher können Sie es ausführen, indem Sie den Pfad der Spielausführungsdatei als Argument damit übergeben. Da ProcessingBuilder immer verwaltet, ob es ausgeführt wird oder nicht, können Sie den Launcher so einstellen, dass er während dieser Zeit nicht funktioniert (praktisch!).

6. Wo es stecken bleibt

Zuerst gab es einige, die mit Processing Builder durchgeführt werden konnten, andere nicht. Ich kannte die Ursache nicht, aber wenn Sie nur den Pfad zur Ausführungsdatei eingeben, können Sie ihn mit cmd ausführen Wenn Sie in processBuilder zuerst zu der Datei wechseln, in der die ausführbare Datei vorhanden ist, und dann den Namen der ausführbaren Datei eingeben Es scheint, dass es ausgeführt werden kann. Speziell $ asdf / test / hogehoge / game.exe (← Builder-Fehler verarbeiten) ↓ $ cd asdf/test/hogehoge $ game.exe Es ist wie es ist. Wenn jemand den gleichen Inhalt hat, versuchen Sie es bitte.

7. Schließlich

das ist alles, Es war der erste Beitrag. Ab dem nächsten Mal werde ich mein Bestes geben, um es etwas prägnanter zu schreiben. Wenn Sie Fragen haben, tun Sie dies bitte.

Websites, die sehr hilfreich waren: https://qiita.com/massoumen/items/66d26b08333aeae1c0ea

Recommended Posts

Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Die Geschichte von dto, dao-like mit Java, SQLite
Die Geschichte der Erstellung einer Task-Management-Anwendung mit Swing, Java
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Die Geschichte eines Othello-Spiels vom Kommunikationstyp mit Scala.
Die Geschichte eines gewöhnlichen Othello in Java
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
[Java Edition] Geschichte der Serialisierung
Die Geschichte des Erstellens einer Java-Version des Minecraft-Servers mit GCP (und dem Festlegen einer weißen Liste)
Die Geschichte des Refactorings mit einem selbstgemachten Helfer zum ersten Mal in einer Rails-App
Eine Geschichte, die mit der Einführung von Web Apple Pay zu kämpfen hatte
[Illustration] Finden der Summe von Münzen mit einer rekursiven Funktion [Ruby]
Die Geschichte des Schreibens von Java in Emacs
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Lassen Sie uns das Ergebnis der Analyse von Java-Bytecode in einem Klassendiagramm ausdrücken
Die Geschichte, ein Projekt zu bauen, das Maven mit Ant gebaut hat
Eine Geschichte, der ich mit der automatischen Starteinstellung von Tomcat 8 unter CentOS 8 zweimal verfallen war
Eine Geschichte, die ich mit der Stream-API von Java8 einem Prozess schreiben wollte, der einer while-Anweisung entspricht
Die Geschichte des einfachen String-Vergleichs in Java
Eine Geschichte über das JDK in der Java 11-Ära
Die Geschichte des Lernens von Java in der ersten Programmierung
Eine Geschichte darüber, wie eine vorhandene Docker-Datei mit der GPU kompatibel gemacht werden kann
Messen Sie die Größe eines Ordners mit Java
Die Geschichte der Optimierung der Android-App mit libGDX
Eine Geschichte über das Erstellen eines Builders, der den Builder erbt
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Eine Geschichte, die die Implementierung der SendGrid-Java-Bibliothek bestätigt, wenn die E-Mail-Zustellung fehlschlägt
Überprüfen Sie das ID-Token eines von AWS Cognito in Java authentifizierten Benutzers
[Jackson] Eine Geschichte über das Konvertieren des Rückgabewerts des Big Decimal-Typs mit einem benutzerdefinierten Serializer.
Schreiben Sie einen Test, indem Sie die Geschichte von Mr. Nabeats in der Welt mit Rubin umsetzen
Implementieren wir eine Funktion, um die Anzahl der Zugriffe auf die API mit SpringBoot + Redis zu begrenzen
[Java] Schneiden Sie einen Teil der Zeichenfolge mit Matcher und regulären Ausdrücken aus
CI die Architektur von Java / Kotlin-Anwendungen mit ArchUnit
[Anfänger] Erstellen Sie ein wettbewerbsfähiges Spiel mit grundlegenden Java-Kenntnissen
Überwachen Sie den internen Status von Java-Programmen mit Kubernetes
Überprüfen Sie das Verhalten von Java Intrinsic Locks mit bpftrace
[Java] Beim Schreiben der Quelle ... Memorandum ①
Eine Geschichte über die Entwicklung von ROS namens Rosjava mit Java
Die Geschichte, Dr. Orchid mit LINE BOT zu machen
Eine Übersicht über das native Java-Framework Quarkus von Kubernetes
Eine Geschichte darüber, wie catkin_make von Rosjava offline kompatibel gemacht wird
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
Die Geschichte, wie ein Docker-Container mit GitHub-Aktionen in die GitHub-Paketregistrierung und den Docker-Hub verschoben wird
Eine kurze Erklärung der fünf Arten von Java Static
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
20190803_Java & k8s on Azure Die Geschichte vom Festivalbesuch
Überprüfen Sie die Funktion von zwei Rollen mit einer Chat-Anwendung
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ein Hinweis zum Seed-Feature von Ruby on Rails
[Java] Vereinfachen Sie die Implementierung der Datenverlaufsverwaltung mit Reladomo
Implementierung eines mathematischen Syntaxanalysators durch rekursive absteigende Syntaxanalysemethode (Java)
Eine Geschichte, die von String () von Interface abhängig ist und von JdkDynamicAopProxy vertreten wird
Erläutern Sie die Vorzüge des staatlichen Musters anhand des Bewertungsurteils des Films
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Die Geschichte, Java mithilfe der BitBucket-Pipeline nach Heroku zu bringen
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen
[Automatischer Handel mit Bitcoin] Eine Geschichte über den Betrieb mit Docker unter AWS mit ON / OFF- und Line-Benachrichtigung mit 1 TAP von Apple Watch für unterwegs