Methoden Spieler zufällig einem Team zuweisen

Lassadar

Mitglied
Hallo, habe mir ein Programm geschrieben. allerdings hab eich noch einen fehler.

Ich möchte gerne den Spielern ein Team zuweisen. Momentan sieht es so aus.

Bei 9 Spielern => 3 Teams.

Spieler 1 geht zu Team 1
Spieler 2 geht zu Team 2
Spieler 3 geht zu Team 3
Spieler 4 geht zu Team 1
Spieler 5 geht zu Team 2
Spieler 6 geht zu Team 3

und so weiter.

ich mcöhte aber das die teams zufällig gemacht werden, aber ich hab echt null plan wie ich das anstellen könnte.

hier meine spieler klasse

Java:
package Klassen;
import javax.swing.*;
import java.util.ArrayList;

public class Spieler {
	String spielername;
	int team;

	public int getTeam() {
		return team;
	}
	
	public void setTeam(int team){
		this.team = team;		
	}
	
	public String getSpielername() {
		return spielername;
	}

	public void setSpielername(String spielername) {
		this.spielername = spielername;
	}

	public Spieler(String spielername) {
		super();
		this.spielername = spielername;
	}
	
	

}

und die main

Java:
package Klassen;
import javax.swing.*;

import java.util.ArrayList;

public class managerMain {
	public static void main(String[] args) {
		
		String s_teilnehmeranzahl; // String zum einlesen der Anzahl von Teilnehmern
		int teilnehmeranzahl = 0; // Anzahl der Mitspieler
		ArrayList<Spieler> teilnehmer = new ArrayList<Spieler>(); //Dynamische ArrayList zum verwalten aller Teilnehmer
		Object[] teamsize = {"1v1","3v3","5v5"}; //JOptionPane-Optionsfeld zur Auswahl des Sppielmodus.
		
		s_teilnehmeranzahl = (JOptionPane.showInputDialog(null, "Wie viele Spieler sollen am Turnier teilnehmen?", "LoL-Turniermanager",JOptionPane.QUESTION_MESSAGE)); //
		teilnehmeranzahl = Integer.parseInt(s_teilnehmeranzahl);  //String wird in einen Int-Wert umgewandelt
		
		for(int i = 0; i < teilnehmeranzahl; i++) { //Schleife fügt so oft spieler hinzu wie sie teilnehmen.
			teilnehmer.add(new Spieler(JOptionPane.showInputDialog(null, "Bitte Spielernamen eingebe","LoL-Turniermanager",JOptionPane.INFORMATION_MESSAGE)));
		}
		
		int auswahl = JOptionPane.showOptionDialog(null, "Bitte geben Sie die Teamgröße an", "LoL-Turniermanager", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, teamsize, teamsize[2]);
		
		if(auswahl == 0){
			JOptionPane.showMessageDialog(null,"Keine Teambildung notwendig","LoL-Turniermanager",JOptionPane.INFORMATION_MESSAGE);
		}
		else if(auswahl == 1){
			if(teilnehmeranzahl%3!=0){
				JOptionPane.showMessageDialog(null,"Keine Teambildung möglich.\nAnzahl der Spieler ist nicht durch drei teilbar","LoL-Turniermanager",JOptionPane.INFORMATION_MESSAGE);
			}
			else{
			int anzahlteams = teilnehmeranzahl/3;
			int teamwechsel = 0;
			for(Spieler z:teilnehmer){
				z.setTeam(teamwechsel%anzahlteams);
				teamwechsel++;
			}
			String blabla = "";
			for(Spieler z:teilnehmer) {
				blabla += "\nSpieler: " + z.getSpielername() + " spielt im Team " + z.getTeam(); 
				//
				}
			JOptionPane.showMessageDialog(null,""+blabla,"LoL-Turniermanager",JOptionPane.INFORMATION_MESSAGE);
			
			}
		}
		else if(auswahl == 2){
			if(teilnehmeranzahl%5!=0){
				JOptionPane.showMessageDialog(null,"Keine Teambildung möglich.\nAnzahl der Spieler ist nicht durch drei teilbar","LoL-Turniermanager",JOptionPane.INFORMATION_MESSAGE);
			}
			else{
				int anzahlteams = teilnehmeranzahl/5;
				int teamwechsel = 0;
				for(Spieler z:teilnehmer){
					z.setTeam(teamwechsel%anzahlteams);
					teamwechsel++;
				}
				for(Spieler z:teilnehmer) {
				JOptionPane.showMessageDialog(null,"Spieler: " + z.getSpielername() + "spielt im Team " + z.getTeam(),"LoL-Turniermanager",JOptionPane.INFORMATION_MESSAGE);
				}
			}
		}
				
				
		}
			
    public static int createRandom(int randomzahl) {
	    return  (int) ((Math.random()*randomzahl)+1);
    }

}
 
[ohne den Code angeschaut zu haben]

Spieler 1-6 in eine Liste stecken, diese Liste einfach zufällig durchmischen (bietet sich Collections.shuffle an oder eben selbst implementieren) und dann eben einfach immer dreier Gruppen bilden
Die ersten drei = Gruppe1
die nächsten drei = Gruppe 2
und die letzten drei = Gruppe x
 
Zuletzt bearbeitet:
Hallo,

ich hatte Collections.Shuffle in der Uni noch nicht, wäre daher eigentlich ne ungemochte Lösung.^^

So, also ich mach Collections.shuffle, dann mische ich die ArrayList der Spieler durch.

Zb.

import java.util.Collections;

public static void shuffle(ALTELISTE<?> NEUELISTE)

und dann statt

for(Spieler z:teilnehmer){
z.setTeam(teamwechsel%anzahlteams);
teamwechsel++;
}

mach ich

for(Spieler z:NEUELISTE){
z.setTeam(teamwechsel%anzahlteams);
teamwechsel++;
}

Edit: Ach, jetzt hab ichs hinbekommen.

Einfach Collections.shuffle(teilnehmer);

Gut, jetzt hab ich noch ein weiteres Problem. Und zwar soll sortiert werden.
Momentan wird ja für jeden Spieler das Team ausgegeben, ich möchte es aber umgekehrt machen.

Und zwar will ich das die Ausgabe folgendermaßen aussieht

Team1: NAME, NAME, NAME
Team3: NAME, NAME, NAME

etc.
 
Zuletzt bearbeitet:
@darkeye2
den falschen Button getroffen? 😉

Einfach Collections.shuffle(teilnehmer);

Gut, jetzt hab ich noch ein weiteres Problem. Und zwar soll sortiert werden.
Momentan wird ja für jeden Spieler das Team ausgegeben, ich möchte es aber umgekehrt machen.

Und zwar will ich das die Ausgabe folgendermaßen aussieht

Team1: NAME, NAME, NAME
Team3: NAME, NAME, NAME
Du könntest eine Klasse Team erstellen die eine Liste von Spielern hat.
Oder du lässt dein Design wie es jetzt ist und sammelst die Teams vor der ausgabe z.b. in einer Map.
Wenn alles gefüllt ist gibst du die Map dann entsprechend aus.
 
Du meinst HashMaps etc? Das wäre wieder zu weit hergeholt, möchte ungern vorarbeiten. Ne Klasse Spieler habe ich schon erstellt. Die habe ich oben schon angegeben. Kann ich das irgendwie so machen?

Java:
for (int i = 0; i < anzahlteams; i++){
    for(Spieler x:teilneher) {
        if(x.getTeam() == i) {
        team1.add(x)
}
}
    for(Spieler x:teilneher) {
        if(x.getTeam() == i {
        team2.add(x)
    for(Spieler x:teilneher) {
        if(x.getTeam() == i) {
        team3.add(x)
    for(Spieler x:teilneher) {
        if(x.getTeam() == i) {
        team4.add(x)


}
 

Neue Themen


Zurück
Oben