Die antwort von xin hatte ich noch nicht gesehn als ich das hier getippt hab
danke dafür auf jeden fall
Dazu noch als ich die rechenoperationen in struct reingeschrieben habe habe ich das auch erstmal getestet und habe die richtigen Werte geliefert bekommen. gehört das so oder ist da was verkehrt
Ok schonmal danke für den Hinweis mit dem Großschreiben.
Das mit dem Präprozessor war mir relativ klar es ging nur darum deutlich zu machen was ich für einen befehl brauche(auch wenn das nicht wircklich funktioniert hat^^) und mir fiel nichts besseres als vergleich ein als define.
Großgeschrieben habe das ich einfach nur um alles was ich mit struct gemacht habe etwas hervorzuheben.
Hier der ganze code den ich bisher geschrieben habe:
Code: Alles auswählen
#include <stdio.h>
struct Ressi
{
int MOMENTAN;
};
struct Gebaeude
{
int STUFE;
int GOLDKOSTEN;
int STEINKOSTEN;
int ARBEITSAUFWAND;
int PRESTIGE;
int PUNKTE;
};
int main()
{
int i, rundenzahl, bestaetiger, punkte;
char spielername[15];
struct Ressi GOLD;
struct Ressi STEIN;
struct Ressi ARBEITER;
struct Ressi PRESTIGE;
GOLD.MOMENTAN = 500;
STEIN.MOMENTAN = 1000;
ARBEITER.MOMENTAN = 10;
PRESTIGE.MOMENTAN = 100;
/* es gibt6 gebäudearten:
(0:Alee),(1:Gärten),(2:Mauern),
(3:Haupthaus),(4:Wohnflügel),
(5:Prunkflügel) */
struct Gebaeude ALEE =
{
0,//Stufe
10*(ALEE.STUFE+1),//Goldkosten
10*(ALEE.STUFE+1),//Steinkosten
20*(ALEE.STUFE+1),//Arbeitsaufwand
10*(5*(ALEE.STUFE+1)),//Prestige
ALEE.PRESTIGE/10//Punkte
};
struct Gebaeude GAERTEN =
{
0,//Stufe
50*(GAERTEN.STUFE+1)+200,//Goldkosten
5*(GAERTEN.STUFE+1),//Steinkosten
10*(GAERTEN.STUFE+1),//Arbeitsaufwand
8*(5*(GAERTEN.STUFE+1)),//Prestige
GAERTEN.PRESTIGE/10//Punkte
};
struct Gebaeude MAUERN =
{
0,//Stufe
0*(MAUERN.STUFE+1),//Goldkosten
50*(MAUERN.STUFE+1),//Steinkosten
25*(MAUERN.STUFE+1),//Arbeitsaufwand
30*(5*(MAUERN.STUFE+1)),//Prestige
MAUERN.PRESTIGE/10//Punkte
};
struct Gebaeude HAUPTHAUS =
{
0,//Stufe
1000*(HAUPTHAUS.STUFE+1),//Goldkosten
1000*(HAUPTHAUS.STUFE+1),//Steinkosten
100*(HAUPTHAUS.STUFE+1),//Arbeitsaufwand
425*(5*(HAUPTHAUS.STUFE+1))-125,//Prestige
HAUPTHAUS.PRESTIGE/10//Punkte
};
struct Gebaeude WOHNFLUEGEL =
{
0,//Stufe
500*(WOHNFLUEGEL.STUFE+1),//Goldkosten
2000*(WOHNFLUEGEL.STUFE+1),//Steinkosten
80*(WOHNFLUEGEL.STUFE+1),//Arbeitsaufwand
300*(5*(WOHNFLUEGEL.STUFE+1)),//Prestige
WOHNFLUEGEL.PRESTIGE/10//Punkte
};
struct Gebaeude PRUNKFLUEGEL =
{
0,//Stufe
2500*(PRUNKFLUEGEL.STUFE+1),//Goldkosten
500*(PRUNKFLUEGEL.STUFE+1),//Steinkosten
75*(PRUNKFLUEGEL.STUFE+1),//Arbeitsaufwand
325*(5*(PRUNKFLUEGEL.STUFE+1)),//Prestige
PRUNKFLUEGEL.PRESTIGE/10//Punkte
};
printf("In diesem Spiel ist man ein Architekt\nder mit einem anderen um den Bau eines Palastes konkuriert.\nEine ausfuehrliche Beschreibung folgt spaeter.\n");
for (i=0;i==0;i++)
{
printf("\nWie ist Euer Name? ");
scanf("%s",&spielername);
printf("\nIst Euer Name : %s?",spielername);
printf("\nDruecke 0 fuer Nein und 1 fuer Ja\n");
scanf("%d",&bestaetiger);
switch (bestaetiger)
{
case 0: --i;
case 1: break;
}
}
printf("\nWieveile Runden wollt ihr spielen?: ");
scanf("%d",&rundenzahl);
printf("\nIhr spielt %d Runden",rundenzahl);
for (i=0;i<rundenzahl;i++)
{
printf("\n\nWas wollt ihr tun?");
printf("\n0: Rohstoffe verwalten\n1: Palast ausbauen\n2: Steinbrueche ausbauen/verwalten\n3: Arbeiter einstellen\n4: Prestiege in Gold umwandeln\n");
scanf("%d",&bestaetiger);
switch (bestaetiger)
{
case 0: printf("\nGold: %d\nSteine: %d\nArbeiter: %d\nPrestige: %d\n", GOLD.MOMENTAN, STEIN.MOMENTAN, ARBEITER.MOMENTAN, PRESTIGE.MOMENTAN);
--i;
break;
case 1: printf("\nIhr koennt folgende Gebauede Bauen:");
printf("\nAlee Stufe: %d ausbauen (0)\nGaerten Stufe: %d ausbauen(1)\nMauern Stufe: %d ausbauen (2)\nHaupthaus Stufe: %d ausbauen (3)\nWohnfluegel Stufe %d ausbauen (4)\nPrunkfluegel Stufe %d ausbauen (5)", ALEE.STUFE, GAERTEN.STUFE, MAUERN.STUFE, HAUPTHAUS.STUFE, WOHNFLUEGEL.STUFE, PRUNKFLUEGEL.STUFE);
printf("\nWas wollt ihr bauen? ");
scanf("%d",&bestaetiger);
switch (bestaetiger)
{
case 0: printf("\nIhr wollt die [color=#FF0000]Alee[/color] bauen.");
printf("\nDas kostet %d Gold und %d Stein", [color=#FF0000]ALEE[/color].GOLDKOSTEN,[color=#FF0000]ALEE[/color].STEINKOSTEN);
printf("\nEs wuerde %d Prestige einbringen", [color=#FF0000]ALEE[/color].PRESTIGE);
printf("\nbestaetigen ? 0 fuer nein 1 fuer ja");
scanf("%d",&bestaetiger);
switch (bestaetiger)
{
case 0: --i;
break;
case 1: break;
}
}
break;
default: printf("\nUngueltige Eingabe!");
--i;
break;
}
}
printf("Das spiel ist zu ende Eure Punktzahl ist: %f",punkte);
return 0;
}
SO jetzt nochmal. Die unterste switch anweisung wird noch um mehrere cases erweitert, und zwar bis case 5
dabei bleibt der inhalt jedes cases gleich bis auf die dinge die ich versucht habe rot einzufärben(geht leider nicht weil sie im code sind aber ich hoffe das es trozdem deutlich genug ist).
Ginge es nur darum das noch 4 mal etwas abgewandelt zu kopieren würde ich hier nicht so einen tertz machen und das einfach kopieren und ersetzen. Jedes case wird aber noch wohl um ein par sachen erweitert werden in denen es wieder nur um minimale änderungen geben wird (ähnlichen dennen die ich beschrieben hab(aus MAUER eird GAERTEN)).
Außerdem würde ich auch gerne aus prinzip wissen ob man einen Teil des namens einer Variable, in einem bestimten bereich ersetzen kann, ich kann mir vorstellen das mir das noch öfter nützen könnte

wenn sowas denn geht .
Vielleicht wird es so deutlicher
Ich brauche einen befehl der folgendes macht:
Ersetzte
MAUER durch
GAERTEN
{
MAUER.KOSTEN = 1;
MAUER.HÖHE = 1;
}
und rauskommen soll:
GAERTEN.KOSTEN = 1;
GAERTEN.HÖHE = 1;
das beispiel ist jetzt vllt nicht ganz so super aber ich hoffe es macht das ganze etwas verständlicher
Jeder andere Lösungsvorschlag der eleganter ist ist mir auch sehr willkomen.