Static Variablen verbieten

Kaffebohne

Mitglied
Ich entwickle gerade ein Strategiespiel, wo es darum gehen soll, das Verhalten der Einheiten im voraus zu programmieren, anstatt sie persönlich zu steuern, das Spiel besteht also aus einer puren Simulation, in die man nicht eingreifen kann. Dabei sind die Einheiten selbstständig, haben ein eigenes Kartenwissen und ein definiertes kleines Gedächtnis und können untereinander kommunizieren. Ihre Entscheidungen müssen sie ca. jede Sekunde neu überdenken, wobei ihnen dafür nur ihr Kartenwissen, das Gedächtnis, und die Objekte in Sichtweite zur Verfügung stehen. Die Entscheidung besteht dann etwa in der Vorgabe einer Laufrichtung oder der Änderung des Gedächtnisses.
Die bequemste und für den "Spieler" wohl praktischste Lösung wäre nun, das Skript in Java schreiben zu lassen (das Spiel selbst ist in Java und Scala geschrieben), allerdings tut sich da das Problem auf, dass es offensichtlich möglich ist und geradezu einladend scheint, globale Variablen (falls man zur Ausführung des Skripts jedes Mal ein neues Objekt erstellt, kommen nur static Variablen infrage, daher der Titel) als unbegrenzten und gemeinsamen Speicher zu verwenden; man könnte also direkt das grundlegende Spielkonzept umgehen.

Gibt es dafür irgendwelche Lösungen, ohne ganz auf Java als Skriptsprache zu verzichten (z.B. etwa eine Klasse zu reinitialisieren)?
Vielen Dank für eure Hilfe!
 

BRoll

Bekanntes Mitglied
Wenn man es gar nicht verhindern kann, könntest du in der eigentlichen Spiellogik beim Einlesen der "srkipte" zumindest über reflection überprüfen ob statische klassenvariablen oder methoden existieren (Und dann entsprechend den spieler als cheater darstellen und die verwendung des skriptes nicht erlauben ^^). Ansonsten fällt mir nur javascript mit entsprechenden scopes oder eine eigene DSL ein.
 

Viktim

Bekanntes Mitglied
Wenn ich das richtig verstanden hab, dann schreibt der Spieler die Logik für die Figuren und beeinflusst dadurch das Spiel, und du möchtest verhindern, das er auf statische Variablen zugreifen kann oder welche anlegen kann, richtig?
 

Kaffebohne

Mitglied
@BRoll
Davon wusste ich noch gar nichts, es sieht auf jeden Fall nach einer akzeptablen Option aus, danke.
Gibt es eine elegantere Möglichkeit, alle vom Spieler geschriebenen Klassen zu ermitteln, als die class-Files durchzugehen?
@Viktim
Genau, nach jedem Denkzyklus (den man kurz gestalten sollte, da währenddessen die Einheit nichts tun kann), soll alles außer dem Gedächtnis und dem Kartenwissen vergessen werden, beim nächsten Zyklus bekommt man dann neue Informationen über die naheliegenden Objekte.
 
Zuletzt bearbeitet:

BRoll

Bekanntes Mitglied
Was meinst du mit elegantere Möglichkeit? Irgendwo musst du die User-Klassen ja in deine Spiellogik einbringen -
und genau dort kannst du diese auch überprüfen auf statische Zugriffe. Und genau für diese Überprüfung ist es IMO am einfachsten
das per Reflection zu lösen - man könnte aber auch einen Parser schreiben der aus einem Quelltext überprüft ob dieser statische Elemente hat oder nicht. Daher finde ich Reflection schon relativ "elegant", da man sich sowas dann sparen würde. Oder meinst du mit elganter einen komplett anderen Ansatz?
 

Kaffebohne

Mitglied
Ich meinte, wie man am besten sieht, welche Klassen sich der Spieler definiert hat, um dann bei jeder einzelnen per Reflection die statischen Variablen zu überprüfen.
Wenn man schon Java zur Verfügung stellt, sollte man auch von der Objektorientierung profitieren können.
 

Kaffebohne

Mitglied
Sehe ich das richtig, dass es dann pro Denkzyklus pro Einheit eine eigene Klasse gibt, die zwar statische Variablen haben kann, die aber nur von dem einen erzeugten Objekt gesehen werden?
 

CSHW89

Bekanntes Mitglied
Wenn du pro Zyklus und pro Einheit die Klasse neu lädst, dann ja. Ich hab das aber bisher noch nicht gemacht, weshalb ich auch nichts zur Performance sagen kann. Wie viele Einheiten gibt es denn so in der Regel? Pro Zyklus, die wie du sagtest eine Sekunde ist, wird kein Problem sein.
 

Kaffebohne

Mitglied
Größenordnung 100 pro Spieler, würde ich sagen.
Kann man eigentlich andere aktive Objekte während der Laufzeit "aufspüren" und ansprechen? Das würde beide Varianten umgehen.
 

InfectedBytes

Top Contributor
Alternativ könntest du auch einfach eine Scriptsprache benutzen. Da würde sich beispielsweise Lua anbieten, welches auch etwas einfacher zu lernen ist als Java. Lua ist allgemein sehr verbreitet, insbesondere um Spiellogik auszulagern
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P static Blocks und variablen Allgemeine Java-Themen 41
A JSP & static-Variablen Allgemeine Java-Themen 3
E Methoden abstract static Methode Allgemeine Java-Themen 8
N nicht static und auch nicht new Allgemeine Java-Themen 3
Kirby.exe Cannot make a static reference to the non-static field rimWidth Allgemeine Java-Themen 12
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
C Generic collections und static typing Allgemeine Java-Themen 4
M Warum nicht static ? Allgemeine Java-Themen 10
M Eine static-Methode verlassen Allgemeine Java-Themen 2
B Schlüsselworte [ERLEDIGT] static { } - Was ist das und wofür kann ich das brauchen? Allgemeine Java-Themen 1
J private static final String variable Allgemeine Java-Themen 8
L Non-static-Variables in Enumerationen Allgemeine Java-Themen 2
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
T Enumeration/Static Final/Bitfield Allgemeine Java-Themen 6
T Static kann nicht verändert werden Allgemeine Java-Themen 3
W Threads Cannot make a static reference.. Allgemeine Java-Themen 13
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
N Static oder andere Lösung Allgemeine Java-Themen 5
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
M Wo hin mit static factory methods? Allgemeine Java-Themen 40
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
S Cannot make a static reference to the non-static field MySecondClass.Points Allgemeine Java-Themen 3
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
S auf public void Methode zugreifen ohne static Allgemeine Java-Themen 11
K Static - Problem Allgemeine Java-Themen 10
M Variablen Variablenzugriff aus static void Allgemeine Java-Themen 21
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
S static methoden Allgemeine Java-Themen 9
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
B static Variable / Unterklasse Allgemeine Java-Themen 2
I Was macht static { ... } ? Allgemeine Java-Themen 8
G static inner Klassen Allgemeine Java-Themen 7
G static und dynamic linking? Allgemeine Java-Themen 32
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
J Verständnisfrage - nested static classes Allgemeine Java-Themen 11
G static- Methoden überschreiben Allgemeine Java-Themen 10
E Geschwindigkeit static Allgemeine Java-Themen 6
V Static oder wie? Allgemeine Java-Themen 61
I reflection get inner static classes Allgemeine Java-Themen 2
L static main - Spezifikation? Allgemeine Java-Themen 7
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
D static Allgemeine Java-Themen 46
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
oliver1974 "(.) should be accessed in a static way" Falsche W Allgemeine Java-Themen 6
P static Klassenvariable Allgemeine Java-Themen 15
B JPasswordField klassenübergreifend auslesen->static Probl Allgemeine Java-Themen 4
F Methoden: static vs. instance Allgemeine Java-Themen 24
MQue static Methoden/Klassen Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
G Java-Befehle Native und Static Allgemeine Java-Themen 2
conan2 static-Block in Klassen Allgemeine Java-Themen 6
M JNI, static.a mit load.Library laden? Allgemeine Java-Themen 2
K Static Members von Superklasse für JEDEN Erben Allgemeine Java-Themen 6
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
M static-Methode vorschreiben Allgemeine Java-Themen 5
S singleton vs. static Allgemeine Java-Themen 7
G Object mit static Feldern speichern Allgemeine Java-Themen 9
J Warum heißt es eig. "public static void main" ? Allgemeine Java-Themen 4
conan2 "Cannot make a static reference to the non-static field Allgemeine Java-Themen 8
P Singleton vs static Allgemeine Java-Themen 19
J parameterized und static fields Allgemeine Java-Themen 4
A Static reference to non-static field Allgemeine Java-Themen 10
S static umgehen Allgemeine Java-Themen 5
G static oder nicht Allgemeine Java-Themen 4
J Problem mit static/non-static Allgemeine Java-Themen 2
G getAppletContext() in static Methode Allgemeine Java-Themen 3
m@nu Programm-Models in Static-Objekten speichern Allgemeine Java-Themen 5
J Nicht-static variable in static variable kopieren - wie? Allgemeine Java-Themen 14
O does not declare a static final serialVersionUID field of . Allgemeine Java-Themen 6
G static vor einem array Allgemeine Java-Themen 2
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
B Static Import: Syntaxfrage Allgemeine Java-Themen 2
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
Z auf static Methode aus anderen Package zugreifen? Allgemeine Java-Themen 7
N this im public static void Allgemeine Java-Themen 3
C Communication zwischen zwei Projekte - static objects Allgemeine Java-Themen 4
S static mit abstract und in interface Allgemeine Java-Themen 10
C Erste Schritte Variablen in abhängigkeit von Git branch Allgemeine Java-Themen 7
Fabiator Variablen Variablen Zählen Allgemeine Java-Themen 3
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Fehler bei Variablen Allgemeine Java-Themen 2
N File Path mit Variablen angeben Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
D BlueJ, Variablen die mehrfach vorkommen gleichzeitig umbenennen Allgemeine Java-Themen 3
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22

Ähnliche Java Themen

Neue Themen


Oben