Versionsverwaltungssysteme wie Git arbeiten meistens mit Branches, also "Zweigen", die verschiedene Versionen des Projektes beinhalten.

Wenn du zum Beispiel eine Änderung vornehmen willst, möchtest du das nicht direkt im Hauptzweig (meistens "master"-Branch oder "develop"-Branch) machen, sondern dir einen eigenen Branch erstellen, wo du ganz sicher mit dem Programmcode herumspielen kannst (egal, ob was kaputt wird oder nicht, die Hauptversion gibt es ja noch im anderen Zweig).

Sollte deine Änderung nun fertig sein, kannst du einen Pull Request erstellen. Das ist quasi eine Anfrage, deinen neuen Branch mit einem anderen Branch zu vereinen ("mergen").
Der Reviewer sieht dabei ganz genau die Änderungen, die du gemacht hast, und kann sich dann entscheiden, die Zweige zusammenzuführen, sodass deine Änderungen in den anderen Branch kommen.

Beim Zusammenführen kann es dann natürlich auch Konflikte geben, wenn in beiden Zweigen Änderungen am selben Code-Fragment vorgenommen wurden. Derjenige, der das Mergen übernimmt, muss dann entscheiden, welche Änderung er nun beibehalten will.

...zur Antwort

The Holy Waffle TS3 Java API Events?

Hallöchen alle zusammen.

Ich hab folgendes Problem.

Ich bastel gerade einen Bot für TS. Der soll bei einem bestimmten Befehl dem User eine festgelegte Servergruppe verpassen.

Das ganze versuch ich mit den Events die die API bietet.

Das wäre dann das

ClientJoinEvent

und das

TextMessageEvent

Im Client Join Event hab ich die Möglichgeit mit getClientDatabaseId die Datenbank ID des Clienten ab zu rufen, der die Nachricht an den Bot geschickt hat. Diese brauch ich auch um dem Clienten die Servergruppe zu zu ordnen.

Jetzt hab ich das Problem, dass es diese Möglichkeit im TextMessageEvent nicht gibt.

Kennt einer eine Möglichkeit, wie ich jetzt auf das getClientDatabaseId aus dem ClientJoinEvent in dem TextMessageEvent zugreifen kann?

Hier mal noch der Code, der einzelnen Events:

TextMessageEvent:

            @Override
            public void onTextMessage(TextMessageEvent e) {
                
                for(Client c : api.getClients())
                
                if(e.getMessage().equalsIgnoreCase("!de")) {
                        api.addClientToServerGroup(20, );
                        api.sendPrivateMessage(c.getId(), "Deine Sprache wurde auf Deutsch gesetzt.");
                        
                        
                } else if (e.getMessage().equalsIgnoreCase("!en")) {
                        api.addClientToServerGroup(21, api.whoAmI().getDatabaseId());
                        api.sendPrivateMessage(api.whoAmI().getDatabaseId(), "Your language was set to english.");
                        
                }
                
            }

ClientJoinEvent

                        @Override
            public void onClientJoin(ClientJoinEvent e) {
                    
                    if(e.getClientServerGroups().equals("7")){
                        api.sendPrivateMessage(e.getClientId(), "Bitte wähle deine Sprache. Antworte mit '!de' für deutsch.");
                        api.sendPrivateMessage(e.getClientId(), "Please choose your favorite language. Answer with '!en' for english.");
                        
                        
                        
                    } else if(e.getClientServerGroups().equals("7")){
                        api.sendPrivateMessage(e.getClientId(), "test");
                        
                    } else if (e.getClientServerGroups().equals("21")){
                        api.sendPrivateMessage(e.getClientId(), "test");
                        
                    }
                
                    
            }
...zur Frage

Du kannst ja die Servergroups vom Client direkt abrufen.

http://theholywaffle.github.io/TeamSpeak-3-Java-API/1.0.13/

client.getServerGroups();
...zur Antwort

jQuery: An- und Ausschalter programmieren mit einer Variablen Programmieren?

Ich muss folgende Aufgabe lösen:

"Beim Überfahren des großen Bildes wird die Grafik „bild1.jpg“ gegen die Grafik „bild2.jpg“ ausgetauscht – beim Verlassen des Bildes wird die ursprüngliche Grafik wieder angezeigt.

Dieses Austauschen funktioniert aber nur, wenn zuvor der Ausschalter mit einem Klick „angeschaltet“ wurde – Grafiktausch mit Datei „schalterein.png“. Wird der Schalter wieder ausgeschaltet, dann geht auch die Mouseover-Funktionalität nicht mehr. Wichtig: Arbeiten Sie mit einer Variablen namens schalter."

Bei dem Schalter handelt es sich um ein Image und keinen Button.

Der erste Teil der Aufgabe - der Grafiktausch beim Hovern - ist kein Problem.

Den Schalter bekomme ich aber nicht programmiert. In anderen Aufgaben haben wir immer einen separaten An- und Ausschalter programmiert, bisher nicht beides zusammen und ich komme einfach nicht auf eine Lösung.

Bisher habe ich nur den Anschalter programmiert (kann natürlich falsch sein):

var Schalter=0;

$("img:eq(2)").click(function (){ Schalter=1; $("img:eq(2)").attr("src","schalterein.png"); })

Wenn man wieder auf das Schalter img klickt soll der Schalter=0 werden, das Bild soll sich wieder ändern & somit wäre er ausgeschaltet.

Ob der Schalter auf 0 oder 1 steht dient zur Abfrage um den Hover Effekt/ Grafiktausch zu aktivieren bzw. deaktivieren.

Kann auch sein, dass mein Ansatz total falsch ist. Ich hoffe jemand kann mir hier weiterhelfen.

...zur Frage

Die Variable schalter sollte ein boolscher Ausdruck sein (true oder false), der angibt, ob der Schalter ein (true) oder aus (false) ist.

Beim Klick auf irgendein Objekt (vermutlich ein Bild) mit der Klasse "schalter" änderst du dann die Variable schalter auf entweder true oder false (je nachdem, was es vorher war). Außerdem ändert sich das Bild auf "schalterein.png".

Dann fügst du beim Bild (hier mit der Klasse "image") noch einen hover Handler hinzu, der Funktionen beim mouse-enter und mouse-leave ausführt.

Wenn ihr noch ein Bild für den ausgeschalteten Schalter habt (geht nicht aus der Angabe hervor), dann musst du das beim Klick auf "schalter" noch einbauen.


var schalter = false;

$("#schalter").click(
function() {
schalter = !schalter;
$("#schalter").attr("src", "schalterein.png");
}
);

$("#image").hover(
function() {
if (schalter) {
$("#image").attr("src", "bild2.png");
}
},
function() {
if (schalter) {
$("#image").attr("src", "bild1.png");
}
}
);



...zur Antwort

Für die Spieleentwicklung würde ich dir auf jeden Fall empfehlen, eine vorhandene Spieleengine (Unity, CryEngine, ...) zu verwenden.

Prinzipiell bestehen aufwendigere Spiele aus Grafikengine, Physikengine und KI-Engine. Alle drei dieser Engines sind eine Wissenschaft für sich und nur sehr schwer selbst umzusetzen. Ich musste selbst schon für Unikurse (vereinfachte) Engines in diesen drei Bereichen schreiben und der Spaß hielt sich dabei in Grenzen. Es macht viel mehr Sinn, Grafik, Physik und KI von bereits fertigen Engines zu verwenden und den eigenen Fokus auf die Spielelogik selbst zu setzen.

Diese Demo habe ich beispielsweise mit der Grafikengine "Ogre" und der Physikengine "Bullet" in C++ programmiert:

https://youtube.com/watch?v=6u1VUinIFQE

Mit den genannten Komplettlösungen (Unity, CryEngine, ...) erzielst du aber weitaus schneller und einfacher bessere Ergebnisse.

...zur Antwort

Du hast dir diese Frage doch schon selbst beantwortet.

i² = -1

Also ist i die Wurzel aus  -1.

...zur Antwort