1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

eigenschaften nach priorität erhöhen

  • Shavari
  • 2. August 2010 um 09:46
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Shavari
    Punkte
    90
    Beiträge
    16
    • 2. August 2010 um 09:46
    • #1

    Ein herzliches Hallo an alle

    Ich habe ein Problem mit meinem Programm das ich grad schreibe. Mein Problem dabei ist der Lösungsweg. Wie stelle ich das an?? Ich habe mir jetzt Tagelang das Hirn darüber zermartert wie es gehen könnte aber das einzige was dabei herausgekommen ist sind Gehirnknoten. Was ich nämlich tun will ist folgendes:

    Ich brauche eine Methode die ein Integer-Array mit 17 Stellen zurückgibt.
    Ich habe 16 verschiedene Eigenschaften die die Integer 0 - 15 im Array bilden (diese haben im gesamten Programm immer die selbe Reihenfolge):

    • [0] = Kontaktwurf
    • [1] = Fernwurf
    • [2] = PSI-Wurf
    • [3] = Kraft
    • [4] = Geschicklichkeit
    • [5] = Schnelligkeit
    • [6] = Widerstandskraft
    • [7] = Kommunikation
    • [8] = Technik
    • [9] = Wissen
    • [10] = Soziale Kompetenz
    • [11] = Lebensenergie
    • [12] = PSI-Potenz
    • [13] = Mentale Energie
    • [14] = Belastbarkeit
    • [15] = Ausdauer


    Array Nummer 16 ist die Anzahl an Erfahrungspunkten die überbleibt.

    Ich habe ein weiteres Array das die Priorität einer jeden Eigenschaft enthält (die Prioritäten sind jedesmal anders vergeben), also z.B. Kontaktwurf hat Priorität 7. Das wäre dann im Array ungefähr so: eigenschaften[0] /*[0] = Kontaktwurf*/ hat Priorität prioritaet[0] /*den Wert davon*/

    Code
    public static int[] eigenschaftenSystem(Object ausbildung, int stufe, int erfahrungspunkte)
    {
         int[] eigenschaften = new int[17];
         erfahrungspunkte += Operationen.Tabellen.TabellenDatenbankAuslesen.erfahrungspunkte(stufe);
         int[] prioritaet = Operationen.Tabellen.TabellenDatenbankAuslesen.eigenschaftspriorität(ausbildung);
    
    
         eigenschaften[16] = erfahrungspunkte;
         return eigenschaften
    }

    die Eigenschaften müssen jetzt zu 4 Werten in je 4 Gruppen unterteilt werden wo per Randomzahl von 1 - 4 in jeder Gruppe eine einzelne Eigenschaft ausgewählt wird und einmal um 1 erhöht wird. Allerdings müssen sie so in die 4 Gruppen unterteilt werden, dass die Eigenschaften mit den Prioritäten 1 - 4 in Gruppe 1 sind, die mit 5 - 8 in Gruppe 2,..., dabei muss am Ende bei der rückgabe aber die Reihenfolge wieder die selbe sein, also: [0] = Kontaktwurf, [1] = Fernwurf,...
    Was am Ende also dabei rauskommt ist ein Array mit 17 Werten wovon der letzte die Erfahrungspunkte sind und wo 4 der 16 übrigen Werte den Wert 1 besitzen, die restlichen alle 0.

    Da ihr vielleicht verstehen könnt, dass mir dabei das Hirn raucht, könntet ihr mir dabei vielleicht helfen?
    bin für jeden Vorschlag offen, danke schonmal im vorraus

    Einmal editiert, zuletzt von Shavari (2. August 2010 um 09:58)

  • Shavari
    Punkte
    90
    Beiträge
    16
    • 2. August 2010 um 11:00
    • #2

    Ich glaube die Lösung gerade gefunden zu haben. Bin mir aber nicht sicher, ich probiere das mal schnell aus...

  • Plantschkuh!
    Punkte
    6.173
    Beiträge
    1.181
    • 2. August 2010 um 11:21
    • #3

    [Hier stand vorher eine Teillösung, weil ich die Problembeschreibung nicht völlig verstanden hab. Tu ich noch immer nicht, aber...]

    Pack deine ganzen Daten in Strukturen (structs, classes, wie immer man sie in C# nennt) mit zwei Feldern: Nummer der Eigenschaft und Prioritätswert. Sortiere nach Prioritätswert. Wähle in dieser sortierten Liste aus Blöcken von je vier benachbarten Elementen eines aus. Erhöhe die Eigenschaft mit der Eigenschaftsnummer im ausgewählten Element.

    2 Mal editiert, zuletzt von Plantschkuh! (2. August 2010 um 11:28)

  • Shavari
    Punkte
    90
    Beiträge
    16
    • 2. August 2010 um 12:17
    • #4

    @plantschkuh Danke für die schnelle Hilfe aber ich bin vorhin selber auf die Lösung gestoßen, wäre aber eine gute Idee mit den Feldern.

    Ich schreibe meine Lösung der Methode hier rein, vielleicht hilft sie ja später noch jemandem (bezweifle ich aber).
    Ich habe keine Kommentare hingeschrieben, weil ich einen Geistesblitz hatte und den so schnell wie möglich umsetzen wollte. Das mit den Erfahrungspunkten hab ich vorher vergessen, hier ist es jetzt schon dabei. Ich könnte jetzt auch nicht mehr genau erklären wie das jetzt funktioniert aber es geht glaube ich. Falls jemandem Fehler oder Sachen die man kürzer lösen könnte auffallen aber trotzdem in dieser einen Methode zu lösen sind, bin ich offen für Verbesserungen :)

    Code
    public static int[] eigenschaftenSystem(Object ausbildung, Object volk, int stufe, int erfahrungspunkte, int[] eigenschaften)
            {
                int[] rueckgabe = new int[17];
                int[] prioritaet = Operationen.Tabellen.TabellenDatenbankAuslesen.eigenschaftspriorität(ausbildung);
                int[] eigenschaftenNeu = new int[16];
                erfahrungspunkte += Operationen.Tabellen.TabellenDatenbankAuslesen.erfahrungspunkte(stufe);
                int zahl = 0;
                int volkZahl = 0;
                if ("Terraner".Equals(volk))
                    volkZahl = 1;
                for (int i = 0, j = 0; i < 4; i++)
                {
                    zahl = zufallZahl.Next(j, j +4);
                    if (Operationen.Tabellen.TabellenDatenbankAuslesen.aufstiegsKosten(eigenschaften[zahl])[volkZahl] >= erfahrungspunkte)
                    {
                        eigenschaftenNeu[zahl] += 1;
                        erfahrungspunkte -= Operationen.Tabellen.TabellenDatenbankAuslesen.aufstiegsKosten(eigenschaften[zahl])[volkZahl];
                    }
                    j += 4;
                }
                for (int i = 0; i < 16; i++)
                {
                    eigenschaften[i] = eigenschaftenNeu[prioritaet[i] -1];
                }
    
    
                rueckgabe[16] = erfahrungspunkte;
                return rueckgabe;
            }
    Alles anzeigen

    Einmal editiert, zuletzt von Shavari (4. August 2010 um 09:57)

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum