BlaZZ0r 238 Melden Geschrieben 9. März 2012 Wie war das? Ein guter Programmierer sollte doch jedes Jahr eine neue Programmiersprache lernen, oder? Das Soll ich hab ich mit VB.Net bereits erfüllt dieses Jahr. Und ich bin ja kein Einsteiger, PHP und Perl (Webprogrammierung (also auch HTML,CSS,SQL,JS)) kann ich "fließend", C mehr oder weniger gut. Ich hab halt noch nie was mit Desktopprogrammierung außer VB.NET gemacht und erst recht nicht Cross Plattform. Und jetzt muss ich mir beruflich überlegen wie ich das am besten löse. Wenn du dich für C++ entscheidest schau dir Qt an. Damit kannste ziemlich viel anstellen, nicht nur GUI. Und Cross-Platform.
Malarkey 1 Autor Melden Geschrieben 9. März 2012 @Mc_Crowley Was heißt von heute auf morgen? Wollte ich schon immer werden! Nur seit ein paar Wochen tue ich halt erst aktiv etwas dafür! Und irgendwie muss man ja anfangen.
Mc_Crowley 0 Melden Geschrieben 9. März 2012 @Mc_Crowley Was heißt von heute auf morgen? Wollte ich schon immer werden! Nur seit ein paar Wochen tue ich halt erst aktiv etwas dafür! Und irgendwie muss man ja anfangen. Ja, und sitzen denn ALLE Basics nach "ein paar Wochen"? Wie viel hast du denn bereits programmiert? Wie viel Praxis hast du? Welche Projekte, bzw. deren Mitarbeit daran kannst du vorweisen? Das ist nämlich so, als ob ich sage: Ich bin jetzt ein paar Wochen oder bis jetzt gar nicht gelaufen, und ich nehme an einem 50km Marathon teil. Du bist nicht Barney Stinson. Ein paar Wochen C++ reichen meiner Meinung nach nicht aus um einfach so in die (3D-) Spieleprogrammierung einzusteigen. Btw, gehörst du auch zur Sorte Programmierer welche einfach drauf los programmieren? Planung ist das A und O. Normalerweise startet man mit Stift und Papier/Whiteboard bzw. einem Computernotizblock. Schon einmal etwas von Flussdiagrammen, UML-Klassendiagrammen oder Struktogrammen gehört? Zum Programmieren gehört noch mehr als ein paar Zeilen Code zusammenbasteln. Du musst wie gesagt irgendwo anfangen, doch warum steckst du dir nicht für den Anfang kleinere Ziele?
Malarkey 1 Autor Melden Geschrieben 10. März 2012 Hier, was glaubst du eigentlich immer, dass du so einen Krempel schreibst?! Hab ich irgendwo gesagt: "Heyyy... Heute hab ich im Fernsehn einen Programmierer gesehen der sau vie Kohle hatte und nun will ich auch Programierer werden. Was muss ich dafür haben und wie lange dauert es sowas wie BF3 zu programmieren?!" C++ programmiere ich seit einem halben Jahr. Nur simple Konsolenanwendungen. Ein Win32 Projekt bekomm ich auch noch hin, mit ein paar Key-Abfragen, Menü etc... Das wars aber ehrlich gesagt auch schon. Ich will ja auch nicht gleich Spiele programmieren mit OpenGL bzw DirectX. Aber die Basics findet man ja auch nicht einfach so unterm Kopfkissen!
Mc_Crowley 0 Melden Geschrieben 10. März 2012 (bearbeitet) Huhu, Hab ich irgendwo gesagt: "Heyyy... Heute hab ich im Fernsehn einen Programmierer gesehen der sau... Schatzi, habe ich genau das irgendwo behauptet? C++ programmiere ich seit einem halben Jahr. Nur simple Konsolenanwendungen. Ein Win32 Projekt bekomm ich auch noch hin, mit ein paar Key-Abfragen, Menü etc... Das wars aber ehrlich gesagt auch schon. Ich will ja auch nicht gleich Spiele programmieren mit OpenGL bzw DirectX. Aber die Basics findet man ja auch nicht einfach so unterm Kopfkissen! Aha, also ist es jetzt plötzlich ein halbes Jahr aktives Programmieren, anstatt "ein paar Wochen" . Die Kernaussage meines letzten Beitrags war: Lerne und praktiziere C++, bis alles bombenfest sitzt. Erst dann solltest du dich an größeres wagen. Klar kann man irgendwann mit DirectX anfangen, doch nicht erst nach ein paar "simplen Konsolenanwendungen". Mach aber was du willst, ich hindere dich nicht daran. Bearbeitet 10. März 2012 von Mc_Crowley
Buggy McDermit 165 Melden Geschrieben 10. März 2012 Muß ihm aber zustimmen mit den kleinen Schritten...sich nach 1/2 Jahr an Computergrafik zu setzen ist schon (nennen wir es) "äußerst ambitioniert" und ihn anzukarren, dafür das er dir nen (in meinen Augen) guten Tipp gibt, ist nun auch nicht wirklich das Wahre. Aber mußt du wissen...hier findest du Grundlagen zur OpenGL Programmierung. Allerdings auf Englisch zu dem Thema wirst du auch anständige Sachen kaum auf deutsch finden außer du kaufst dir ne Übersetzung von nem O'Reilly Buch zu dem Thema. http://en.wikibooks.org/wiki/OpenGL_Programming
Malarkey 1 Autor Melden Geschrieben 10. März 2012 Ja, war auch nicht so gemeint... Weiß einer von euch, wie ich Folgendes am Besten realisieren kann? Ich möchte eine Art Konsole haben auf der man leicht variable Texte ausgeben kann, auch im Schreibmaschinen-Style (Alle 100ms ein Buchstabe oder so...), welche aber Vollbildmodus ist. Ich hab eine Konsole zwar schon auf fast Vollbild bekommen, jedoch sind immernoch die Scrollbars, der Titel und die Menüleiste von Windows zu sehen. Dass das mit der normalen Konsole nicht klappt, habe ich mittlerweile verstanden. Aber womit realisiert man das? Mit Win32 API muss ich ja jeden einzelnen Text per TextOut schicken, was sich nicht mit dem SchreibmaschinenStyle verträgt... Zudem wüsste ich nicht, wie ich die Texte immer untereinander bekommen sollte... OpenGL ist ja noch 10x komplizierter... Womit geht es denn am Besten? Ich denke mal mit einer anderen Funktion in der Win32 Api, oder?
Buggy McDermit 165 Melden Geschrieben 10. März 2012 z.b. indem du ein neues Fenster erstellst mit der Größe vom "Workspace" und setzt dafür die X&Y "Startkoordinate" auf "links oben" ich kenn mich mit der API nicht so aus aber wahrscheinlich mußt du im Z-Buffer dann noch das Teil nach oben legen, außer das Teil wird als aktives Child automatisch "on-top" gelegt. Bei AS3 lege ich immer per Hand auf die Stage nach Bedarf. Oder es gibt noch (was ich vermute) nen einfacheren Weg über die aufrufende Funktion von dem neuen Fenster schau mal hier rein http://msdn.microsoft.com/en-us/library/dd...v=vs.85%29.aspx
Malarkey 1 Autor Melden Geschrieben 10. März 2012 (bearbeitet) Danke! Guck ich mir morgen mal an! Gleich die nächste Frage (*schäm*): Habe in meinem Programm nun eine Hintergrundmelodie eingebaut (Ja, freie Lizenz und nein kein mp3). Wenn ich jetzt release ist die Datei ja nicht mit in der exe. Wie manage ich dass den, dass das Programm die Lieder quasi in sich trägt und dann in einen Ordner speichert? Weil, wenn ich das Spiel jemandem schicke, wäre es doof, die .wav's alle einzeln zuzuschicken. €: Ich progge btw seit dem Tag, seit dem ich dieses Topic hier eröffnet hab. Ich mir grad eingefallen Aber bisher war der größte Teil just lernen. Anwendungen habe ich noch keine 'nützlichen' geschrieben... €2: Ah, hab schon. Ressource angelegt und die PlaySound verändert. Hätte nicht gedacht, dass das so einfach ist. Bearbeitet 10. März 2012 von Malarkey
aqab0N 207 Melden Geschrieben 10. März 2012 Programmierst du einen KeyGen? Welches Programm hat denn bitte Hintergrundmusik ^^?
Mc_Crowley 0 Melden Geschrieben 10. März 2012 Programmierst du einen KeyGen? Welches Programm hat denn bitte Hintergrundmusik ^^? Ein Spiel, sagt er doch. Und wenn wir schon bei Keygens sind, mir fällt da immer das hier ein. Der geilste Keygen-Song, den ich bis jetzt gehört habe: ">
aqab0N 207 Melden Geschrieben 10. März 2012 ich hatte den Keygen mit dem geilsten Lied immer gespeichert bis er Avira zum Opfer fiel
Malarkey 1 Autor Melden Geschrieben 11. März 2012 Aaargh... Wo steckt der doofe Fehler? Habe ein Programm, welches ein Menü besitzt. Dieses läuft in einer do-While schleife, welche verlassen wird, wenn bool end = true wird. Wenn dies der Fall ist, schmiert das Programm mit folgender Fehlermeldung ab: Unbehandelte Ausnahme bei 0x5aa3ad84 (msvcp100d.dll) in TheVillage.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x0a670b5b. Jetzt hab ich natürlich versucht den Fehler zu finden. Habe immer ein paar Sachen ausgeschlossen, aber Nichts war es. Dann setzt ich den Haltepuntk DIREKT ans Ende. Also an die }-Klammer der main Funktion: Bis dahin geht alles. Also: Der Fehler entsteht beim Verlassen der Main-Funktion? Wodurch kann das entstehen? Den Programm-Code poste ich lieber nicht, der ist seeehr unübersichtlich und vorallem lang... Oder... Na, was solls... Wenn wer durchsteigt: Interessant dürfte nur die Main funktion und die menue() Funktion sein. Der Fehler entsteht, wenn ich nur das Menü betrete und per 0 verlassen will. Den ganzen Rest hab ich nur gepostet, falls ihr da den Fehler vermutet... main.cpp #include <string> #include <iostream> #include "build.h" #include "ic.hpp" #include <fstream> #include <sstream> #include <windows.h> #include <direct.h> #pragma comment( lib, "winmm.lib" ) using namespace ic; using namespace ic::shorties; using namespace std; //FUNKTIONEN// void getRessources(); void setRessources(float gold, float food, float iron, float wood, float stone); int getInhabitants(); void setInhabitants(int inhabitants, bool delete_or_create); void build(int init, int number); buildings initBuildings(int init); bool checkRessources(buildings marketplace); void menue(); void buildingMenue(); void fightMenue(); void earnRessources(int init, int amount); bool save(); bool load(); void dialogs(int dialog, int _event, int _eventinfo); // int dialog -> Häufigkeit des Menüaufrufes) int _event -> Spezielles Event. // GEBÄUDE // buildings marketplace, farm, woodmine, stonemine, ironmine, kaserne; // BOOLS // bool bMarketplace, bIronmine, bWoodmine, bStonemine, bKaserne, bFarm; // INT // float wood = 50; float iron = 50; float stone = 50; float food = 50; float gold = 50; float prestige = 150; float experience = 150; bool ende = false; float xWood = 1, xIron = 1, xStone = 1, xGold = 1, xFood = 1; int inhabitants = 1000; int fighter = 0; int swordfighter, bowfighter, horsefighter, dialogCounter = 0, sessionCounter = 0; void inline dot(string t) { cout << t; for(int i = 0; i<3; i++) { cout <<"."; Sleep(500); } } void inline typewriter(string t, int sleep) { for(int i = 0; i<t.size(); i++) { if(t[i]!='§') { cout << t[i]; Sleep(sleep); } else Sleep(300); } } int main() { SetConsoleTitle( "TheVillage" ); _mkdir("thevillage"); char jn, jn2; maximize(); cout << "Intro ueberspringen? [J]a oder [N]ein?" << endl; cin >> jn2; if( jn2 == 'j' || jn2 == 'J') { } if(cin.fail() || jn2 == 'n' || jn2 == 'N' ) { system("cls"); //PlaySound(MAKEINTRESOURCE(1001), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC | SND_LOOP | SND_NODEFAULT); Sleep(12000); typewriter("Maerz§§.12§§.§1588\n",150); Sleep(3000); typewriter("\nDer Wind weht...",100); Sleep(1000); typewriter("\nAn unseren Klingen klebt Blut",100); Sleep(2000); typewriter("\nDoch wir haben verloren.§§§§§",100); Sleep(2000); typewriter("\nUnsern Besitz!",100); Sleep(2000); typewriter("\nUnsere Ehre! §§§§Und...",100); typewriter("§§§§§§§§§§§ \n\n\n\t\t\t\tUnser Dorf!\n\n\n",150); Sleep(2000); typewriter("Hilf uns, unser Dorf wiederaufzubauen!§§§§§§§ \nHilf uns, unsere Ehre wiederzuer§langen! \nHilf uns,§§§§§ uns zu§§§§ raechen!\n",100); Sleep(3000); typewriter("Wir sind nicht viele... \nDoch wir haben einen Willen.\n\n Und Nichts auf dieser Erde ist staerker als... \n Ein Wille, dessen Zeit gekommen ist... \n Dessen Zeit§§ JETZT ist!",100); typewriter("Folgst du uns auf unserem Weg?",100); Sleep(500); cout << "[J]a / [N]ein" << endl; cin >> jn; if(cin.fail() || jn == 'N' || jn == 'n') exit(0); typewriter("\t\t\t||==============================||\n",50); typewriter("\t\t\t|| ||\n",0); typewriter("\t\t\t|| Herzlich Willkommen ||\n",50); typewriter("\t\t\t|| in ||\n",50); typewriter("\t\t\t|| TheVillage ||\n",50); typewriter("\t\t\t|| ||\n",0); typewriter("\t\t\t||==============================||\n",50); cin.ignore(); } system("cls"); char c_load; // Spielstand laden? // cout << "Letzten Spielstand laden? J = JA" << endl; cin >> c_load; if(c_load == 'j' || c_load == 'J') { if(load()==true) { cout << "Spielstand erfolgreich geladen!" << endl; cin.get();//JA } else { cout << "Spielstand konnte nicht geladen werden!" << endl; // Fehler beim Laden cin.get(); } } do { menue(); }while(ende==false); } void menue() { //PlaySound(MAKEINTRESOURCE(1002), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC | SND_LOOP | SND_NODEFAULT); //++dialogCounter; // Erhöht Variable zum zählen der Menü-Aufrufe. system("cls"); int choice = 0; //////////////// cout << "[1] - Rohstoffe einsehen \t\t||" << endl; cout << "[2] - Baumenue \t\t\t\t||" << endl; cout << "[3] - Holz abbauen \t\t\t||" << endl; cout << "[4] - Stein abbauen \t\t\t||" << endl; cout << "[5] - Eisen abbauen \t\t\t||" << endl; cout << "[6] - Nahrung ernten \t\t\t||" << endl; cout << "[7] - Kampfmenue \t\t\t||" << endl; cout << "[0] - Spiel speichern & verlassen \t||" << endl; ///////////////// //dialogs(dialogCounter,0,0); cin >> choice; if (cin.fail() ) // Wenn falsche Eingabe, bleibe in der do-Schleife! { cin.clear(); cin.sync(); } else // Wenn richtige Eingabe, werte sie aus { switch(choice) { case 0: { int save_or_not; cout << "Spielstand speichern? [1] -> JA" << endl; cin >> save_or_not; if(save_or_not == 1) { if(save() == true) { cout << "Spielstand gespeichert!" << endl; cin.sync(); cin.get(); } else { cout << "Spielstand konnte nicht gespeichert werden!" << endl; cin.sync(); cin.get(); } } ende = true; break; } case 1: { ::getRessources(); cin.get(); break; } case 2: { buildingMenue(); break; } case 3: { if(bWoodmine == true) earnRessources(1,1); else { cout << "Sie muessen erst eine Holzfaellerhuette bauen!" << endl; cin.sync(); cin.get(); } break; } case 4: { if(bStonemine == true) earnRessources(2,1); else { cout << "Sie muessen erst eine Steinmine bauen!" << endl; cin.sync(); cin.get(); } break; } case 5: { if(bIronmine == true) earnRessources(3,1); else { cout << "Sie muessen erst eine Eisenmine bauen!" << endl; cin.sync(); cin.get(); } break; } case 6: { if(bFarm == true) earnRessources(4,1); else { cout << "Sie muessen erst eine Farm bauen!" << endl; cin.sync(); cin.get(); } break; } case 7: { if(bKaserne == true) fightMenue(); else { cout << "Sie muessen erst eine Kaserne bauen!" << endl; cin.sync(); cin.get(); } break; } } } system("cls"); } void buildingMenue() { system("cls"); bool end = false; int choice = 0; do { cout << "[0] - Zurueck zum Obermenue " << endl; cout << "[1] - Marktplatz bauen" << endl; cout << "[2] - Eisenmine bauen" << endl; cout << "[3] - Holzfaellerhuette bauen" << endl; cout << "[4] - Steinmine bauen" << endl; cout << "[5] - Farm bauen" << endl; cout << "[6] - Kaserne bauen " << endl; cin >> choice; if (cin.fail() ) { cin.clear(); cin.sync(); } else { switch (choice) { case 1: { build(1,0); break; } case 2: { build(2,0); break; } case 3: { build(3,0); break; } case 4: { build(4,0); break; } case 5: { build(5,0); break; } case 6: { build(6,0); break; } case 7: { if(wood>15 && stone > 5) { inhabitants+= 10; wood-=15; stone-=5; } else { cout << "Nicht genug Rohstoffe!" << endl; cin.sync(); cin.get(); } break; } case 0: { end = true; break; } } } system("cls"); }while(end == false); } void fightMenue() { system("cls"); bool end = false; int choice; do { system("cls"); cout << "Herzlich Willkommen im Kampfmenue!" << endl; cout << "[0] - Zuruck zum Obermenue " << endl; cout << "[1] - Leute ausbilden! " << endl; cout << "[2] - Rekrutieren! " << endl; cout << "[3] - IN DIE SCHLACHT! " << endl; cout << "[4] - Taktische Besprechung! " << endl; cin.sync(); cin >> choice; if (cin.fail() ) { cout << "Falsche Eingabe!" << endl; cin.clear(); cin.sync(); cin.get(); } else { switch(choice) { case 0: { end = true; break; } case 1: { int t = 0; cout << "Sie haben " << inhabitants << " ausbildbare Einwohner!" << endl; cout << "Wie viele wollen sie ausbilden? (Kosten: 1 Gold & 1 Eisen" << endl; cin >> t; if(t<inhabitants && t*1 < gold && t*1 < iron) { gold -=1*t; iron -=1*t; fighter +=t; inhabitants -=t; } else cout << "Nicht genug Rohstoffe oder Einwohner!" << endl; cin.sync(); cin.get(); break; } case 2: { bool end = false; do { system("cls"); int choice; cout << "=========================" << endl; cout << "|| Kavellerie: " << horsefighter << endl; cout << "|| Schwertkaempfer: " << swordfighter << endl; cout << "|| Bogenschuetzen: " << bowfighter << endl; cout << "=========================\n" << endl; cout << "[0] - Zurueck zum Obermenue " << endl; cout << "[1] - Schwertkaempfer ausbilden! \t \t [3 Eisen & 3 Gold] " << endl; cout << "[2] - Leichte Kavellerie ausbilden! \t \t [7 Eisen & 4 Gold] " << endl; cout << "[3] - Bogenschuetzen ausbilden! \t \t [5 Eisen & 1 Gold] " << endl; cin.sync(); cin >> choice; if (cin.fail() ) { cout << "Falsche Eingabe!" << endl; cin.clear(); cin.sync(); cin.get(); } else { switch(choice) { case 0: { end = true; break; } case 1: { int number; cout << "Anzahl der Einheiten angeben!" << endl; cin >> number; if(number>fighter || 3*number>gold || 3*number > iron) { cout << "Sie haben zu wenige Kaempfer oder Rohstoffe!" << endl; cin.sync(); cin.get(); } else { cout << number << " Schwertkaempfer ausgebildet!" << endl; swordfighter+=number; fighter-=number; gold-=number*3; iron-=number*3; cin.sync(); cin.get(); } break; } case 2: { int number; cout << "Anzahl der Einheiten angeben!" << endl; cin >> number; if(number>fighter || 4*number>gold || 7*number > iron) { cout << "Sie haben zu wenige Kaempfer oder Rohstoffe!" << endl; cin.sync(); cin.get(); } else { cout << number << " Kavellerie ausgebildet!" << endl; horsefighter+=number; fighter-=number; gold-=number*4; iron-=number*7; cin.sync(); cin.get(); } break; } case 3: { int number; cout << "Anzahl der Einheiten angeben!" << endl; cin >> number; if(number>fighter || 1*number>gold || 5*number > iron) { cout << "Sie haben zu wenige Kaempfer oder Rohstoffe!" << endl; cin.sync(); cin.get(); } else { cout << number << " Bogenschuetzen ausgebildet!" << endl; bowfighter+=number; fighter-=number; gold-=number*1; iron-=number*5; cin.sync(); cin.get(); } break; } } } }while(end == false); } case 3: { } } } }while(end==false); } void build(int init, int number) { switch(init) { case 1: { if(bMarketplace == false) { marketplace.InitValues(20,10,20,20,15,0,0,0,0,0,15,"Marktplatz"); bMarketplace = true; } else { marketplace.setKosten(); } if(checkRessources(marketplace) == true) { char bauen; marketplace.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen == 'j') { marketplace.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); marketplace.setLevel(0); cout << "Marktplatz gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); break; } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 2: { if(bIronmine == false) { ironmine.InitValues(10,10,10,10,10,0.0f,1.25f,0.0f,0,0,0,"Eisenmine"); bIronmine = true; } else { ironmine.setKosten(); } if(checkRessources(ironmine) == true) { char bauen; ironmine.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen=='j') { ironmine.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); ironmine.setLevel(0); cout << "Marktplatz gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 3: { if(bWoodmine == false) { woodmine.InitValues(10,10,10,10,10,1.25,0,0,0,0,0,"Holzfaellerhuette"); bWoodmine = true; } else { woodmine.setKosten(); } if(checkRessources(woodmine) == true) { char bauen; woodmine.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen =='J' || bauen == 'j') { woodmine.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); woodmine.setLevel(0); cout << "Holzfaellerhuette gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 4: { if(bStonemine == false) { stonemine.InitValues(10,10,10,10,10,0,0,1.25,0,0,5,"Steinmine"); bStonemine = true; } else { stonemine.setKosten(); } if(checkRessources(stonemine) == true) { char bauen; stonemine.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen=='j') { stonemine.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); stonemine.setLevel(0); cout << "Marktplatz gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 5: { if(bFarm == false) { farm.InitValues(10,10,10,10,10,0,0,0,0,125,10,"Farm"); bFarm = true; } else { farm.setKosten(); } if(checkRessources(farm) == true) { char bauen; farm.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen=='j') { farm.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); farm.setLevel(0); cout << "Farm gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 6: { if(bKaserne == false) { kaserne.InitValues(20,30,50,50,50,0,0,0,0,0,30,"Kaserne"); bKaserne = true; } else { kaserne.setKosten(); } if(checkRessources(kaserne) == true) { char bauen; kaserne.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen == 'j') { kaserne.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); kaserne.setLevel(0); cout << "Kaserne gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } } } void getRessources() { system("cls"); dialogs(0,1,0); ////////////////////// cout << "=========================" << endl; cout << "||" << wood << " Holz" << endl; cout <<"||" << iron << " Eisen" << endl; cout <<"||" << stone << " Stein" << endl; cout <<"||" << food << " Nahrung" << endl; cout <<"||" << gold << " Gold" << endl; cout << "=========================" << endl; cout <<"Unser Dorf hat " << inhabitants << " Einwohner " << endl; cout << "Unser Dorf hat " << fighter << " Kaempfer. " << endl; cout << "Kampfeinheiten findet ihr im Kampfmenue!\n" << endl; //////////////////////// dialogs(0,1,1); cin.get(); } bool checkRessources(buildings building) { if(building.check(wood, iron, stone, gold, food) == true) return true; else return false; } void earnRessources(int init, int amount) { switch(init) { case 1: // Holz abbauen { if(food > 10 && gold > 5) { wood += 10*xWood; food-=10; gold-=5; } else { cout << "Nicht genuegend Rohstoffe zum Abbauen vorhanden!" << endl; cin.get(); } break; } case 2: // Stein abbauen { if(food > 10 && gold > 5) { stone += 10*xStone; food-=10; gold-=5; } else { cout << "Nicht genuegend Rohstoffe zum Abbauen vorhanden!" << endl; cin.get(); } break; } case 3: // Eisen abbauen { if(food > 10 && gold > 5) { food-=10*xFood; gold-=5; iron += 10; } else { cout << "Nicht genuegend Rohstoffe zum Abbauen vorhanden!" << endl; cin.get(); } break; } case 4: // Nahrung abbauen { if(gold > 5) { gold-=5; food += 10; } else { cout << "Nicht genuegend Rohstoffe zum Abbauen vorhanden!" << endl; cin.get(); } break; } } } bool save() { fstream f; f.open("thevillage/spielstand.dat", ios::out | ios::binary); if(f) { f << wood << endl; f << iron << endl; f << stone << endl; f << food << endl; f << gold << endl; f <<experience << endl; f <<prestige << endl; f <<xWood << endl; f <<xStone << endl; f <<xIron << endl; f <<xGold << endl; f <<xFood << endl; f <<inhabitants << endl; f <<::bWoodmine << endl; f <<::bIronmine << endl; f <<::bStonemine << endl; f <<::bFarm << endl; f <<::bMarketplace << endl; f <<::bKaserne << endl; f <<::fighter << endl; f <<::horsefighter << endl; f <<::swordfighter << endl; f <<::bowfighter << endl; f <<::dialogCounter << endl; f.write((char *)&marketplace, sizeof(marketplace)); f.write((char *)&ironmine, sizeof(ironmine)); f.write((char *)&woodmine, sizeof(woodmine)); f.write((char *)&stonemine, sizeof(stonemine)); f.write((char *)&farm, sizeof(farm)); f.write((char *)&kaserne, sizeof(kaserne)); f.close(); return true; } else return false; } bool load() { fstream f; string s; f.open("thevillage/spielstand.dat", ios::in | ios::binary); if(f) { stringstream ss1; getline(f,s); ss1 << s; ss1 >> wood; stringstream ss2; getline(f,s); ss2 << s; ss2 >> iron; stringstream ss3; getline(f,s); ss3 << s; ss3 >> stone; stringstream ss4; getline(f,s); ss4 << s; ss4 >> food; stringstream ss5; getline(f,s); ss5 << s; ss5 >> gold; stringstream ss6; getline(f,s); ss6 << s; ss6 >> experience; stringstream ss7; getline(f,s); ss7 << s; ss7 >> prestige; stringstream ss8; getline(f,s); ss8 << s; ss8 >> xWood; stringstream ss9; getline(f,s); ss9 << s; ss9 >> xStone; stringstream ss10; getline(f,s); ss10 << s; ss10 >> xIron; stringstream ss11; getline(f,s); ss11 << s; ss11 >> xGold; stringstream ss12; getline(f,s); ss12 << s; ss12 >> xFood; stringstream ss13; getline(f,s); ss13 << s; ss13 >> inhabitants; stringstream ss14; getline(f,s); ss14 << s; ss14 >> bWoodmine; stringstream ss15; getline(f,s); ss15 << s; ss15 >> bIronmine; stringstream ss16; getline(f,s); ss16 << s; ss16 >> bStonemine; stringstream ss17; getline(f,s); ss17 << s; ss17 >> bFarm; stringstream ss18; getline(f,s); ss18 << s; ss18 >> bMarketplace; stringstream ss19; getline(f,s); ss19 << s; ss19 >> bKaserne; stringstream ss20; getline(f,s); ss20 << s; ss20 >> fighter; stringstream ss21; getline(f,s); ss21 << s; ss21 >> horsefighter; stringstream ss22; getline(f,s); ss22 << s; ss22 >> swordfighter; stringstream ss23; getline(f,s); ss23 << s; ss23 >> bowfighter; stringstream ss24; getline(f,s); ss24 << s; ss24 >> ::dialogCounter; f.read((char *)&marketplace, sizeof(marketplace)); f.read((char *)&ironmine, sizeof(ironmine)); f.read((char *)&woodmine, sizeof(woodmine)); f.read((char *)&stonemine, sizeof(stonemine)); f.read((char *)&farm, sizeof(farm)); f.read((char *)&kaserne, sizeof(kaserne)); return true; } else return false; } int ::getInhabitants() { return inhabitants; } void ::dialogs(int dialog, int _event, int _eventinfo) { if(dialog!=0) { if(dialog>1&& sessionCounter==0) { typewriter("<Mia> Willkommen zurueck! Wie geht es dir?",100); ::sessionCounter++; } switch(dialog) { case 1: { Sleep(500); typewriter("<Mia>Sei gegruesst, Fremder!\n",100); Sleep(1500); typewriter("<Mia>Sieh dich ruhig um. Viel ist nicht mehr da.",100); typewriter("\n<Mia>Solltest du Fragen haben, sag es mir! §Ich stehe dir zur Verfuegung... ",100); cin.get(); } } } else { switch(_event) { case 1: // GET_Ressources { if(_eventinfo!=1) { typewriter("Wir haben noch \n",100); } if(_eventinfo==1) { if(::wood<100 && ::stone < 100 && ::iron < 100 && ::gold < 100 && ::food < 100) { typewriter("Die Lager sind fast leer!",100); } float resArray[] = {wood, stone, iron, gold, food}; float min = resArray[0]; float max = resArray[0]; for(int i = 0; i<sizeof(resArray); i++) { if(resArray[i]<min) min=resArray[i]; } if(min>0) { string t("Am ehesten braeuchten wir "); if(min==wood) t.append(" Holz."); if(min==stone) t.append(" Stein."); if(min==iron) t.append(" Eisen."); if(min==food) t.append(" etwas zu Essen."); if(min==gold) t.append(" wieder etwas Gold."); typewriter(t,100); } } } } } } /* void war() { string battlefield[15][30]; for(int i = 0; i<15; i++) { for(int j = 0; j<30; j++) { battlefield[i][j] = "#"; cout << battlefield[i][j]; } cout << endl; } cin.sync(); cin.get(); }*/ build.h #include <iostream> #include <string> using namespace std; class buildings { private: float c_wood, c_iron, c_stone, c_food, c_gold; float m_wood, m_iron, m_stone, m_gold, m_food, m_prestige, m_experience; string aName; float level; public: void build(float *wood, float *iron, float *stone, float *gold, float *food, float *m_prestige, float *experience, float *m_wood, float *m_iron, float *m_stone, float *m_gold, float *m_food); buildings(); void setKosten(); void getKosten(); bool check(float wood, float iron, float stone, float gold, float food); float getLevel(); float setLevel(float _level_); void InitValues(float c_wood, float c_iron, float c_stone, float c_food, float c_gold, float m_wood, float m_iron, float m_stone, float m_gold, float m_food, float m_prestige, string aName); }; build.cpp #include "build.h" buildings::buildings() { c_wood = 0; c_iron = 0; c_stone = 0; c_food = 0; c_gold = 0; m_wood = 0; m_iron = 0; m_stone = 0; m_gold = 0; m_food = 0; m_prestige = 0; m_experience = 0; } void buildings::InitValues(float _c_wood, float _c_iron, float _c_stone, float _c_food, float _c_gold, float _m_wood, float _m_iron, float _m_stone, float _m_gold, float _m_food, float _m_prestige, string _name) { this->c_food= _c_food; this->c_gold= _c_gold; this->c_iron= _c_iron; this->c_stone= _c_stone; this->c_wood= _c_wood; this->m_food= _m_food; this->m_gold= _m_gold; this->m_iron= _m_iron; this->m_prestige= _m_prestige; this->m_stone= _m_stone; this->m_wood= _m_wood; this->aName = _name; } void buildings::setKosten() { this->c_food= c_iron*2; this->c_gold= c_gold*2; this->c_iron= c_iron*2; this->c_stone= c_stone*2; this->c_wood= c_wood*2; this->m_food= m_food*2; this->m_gold= m_gold*2; this->m_iron= m_iron*2; this->m_prestige= m_prestige*2; this->m_stone= m_stone*2; this->m_wood= m_wood*2; } float buildings::getLevel() { return this->level; } float buildings::setLevel(float _level_) { if(_level_ = 0) this->level = ++level; else this->level += _level_; return level; } void buildings::build(float *_wood, float *_iron, float *_stone, float *_gold, float *_food, float *_m_prestige, float *_experience, float *_m_wood, float *_m_iron, float *_m_stone, float *_m_gold, float *_m_food) { *_wood -= c_wood; *_iron -= c_iron; *_stone -= c_stone; *_gold -= c_gold; *_food -= c_food; *_experience += m_experience; *_m_prestige += m_prestige; *_m_wood += (1.25f*m_stone*(level/2)); *_m_gold+= (1.25f*m_gold*(level/2)); *_m_iron += (1.25f*m_iron*(level/2)); *_m_wood += (1.25f*m_stone*(level/2)); *_m_stone += (1.25f*m_stone*(level/2)); cin.get(); } bool buildings::check(float kwood, float kiron, float kstone, float kgold, float kfood) { if(kwood > this->m_wood && kiron > this->c_iron && kstone > this->c_stone && kgold > this->c_gold && kfood > this->c_food) return true; else return false; } void buildings::getKosten() { system("cls"); cout << "\nEin(e) " << aName << " kostet: " << endl; cout << "=========================" << endl; cout << "|| Holz " << this->c_wood << endl; cout << "|| Stein " << this->c_stone << endl; cout << "|| Eisen " << this->c_iron << endl; cout << "|| Nahrung " << this->c_food << endl; cout << "|| Gold " << this->c_gold << endl; cout << "=========================" << endl; cout << "\nEin(e)" << this->aName << " steigert die Produktivitaet von " << endl; cout << "=========================" << endl; cout << "|| Holz um das " << this->m_wood << "-fache" << endl; cout << "|| Stein um das " << this->m_stone<< "-fache" << endl; cout << "|| Eisen um das " << this->m_iron<< "-fache" << endl; cout << "|| Nahrung um das " << this->m_food<< "-fache" << endl; cout << "|| Gold um das " << this->m_gold<< "-fache" << endl; cout << "=========================" << endl; cout << "\nEin(e) " << aName << " bringt " << endl; cout << "=========================" << endl; cout << "|| Ruhm: " << this->m_prestige << endl; cout << "|| Erfahrung : " << this->m_experience << endl; cout << "=========================" << endl; }
BlaZZ0r 238 Melden Geschrieben 11. März 2012 Jetzt mal ins blaue geraten. Wird beim Beenden des Menüs etwas gespeichert?
Revo 0 Melden Geschrieben 11. März 2012 Aaargh... Wo steckt der doofe Fehler? Habe ein Programm, welches ein Menü besitzt. Dieses läuft in einer do-While schleife, welche verlassen wird, wenn bool end = true wird. Wenn dies der Fall ist, schmiert das Programm mit folgender Fehlermeldung ab: Unbehandelte Ausnahme bei 0x5aa3ad84 (msvcp100d.dll) in TheVillage.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x0a670b5b. Jetzt hab ich natürlich versucht den Fehler zu finden. Habe immer ein paar Sachen ausgeschlossen, aber Nichts war es. Dann setzt ich den Haltepuntk DIREKT ans Ende. Also an die }-Klammer der main Funktion: Bis dahin geht alles. Also: Der Fehler entsteht beim Verlassen der Main-Funktion? Wodurch kann das entstehen? Den Programm-Code poste ich lieber nicht, der ist seeehr unübersichtlich und vorallem lang... Oder... Na, was solls... Wenn wer durchsteigt: Interessant dürfte nur die Main funktion und die menue() Funktion sein. Der Fehler entsteht, wenn ich nur das Menü betrete und per 0 verlassen will. Den ganzen Rest hab ich nur gepostet, falls ihr da den Fehler vermutet... main.cpp #include <string> #include <iostream> #include "build.h" #include "ic.hpp" #include <fstream> #include <sstream> #include <windows.h> #include <direct.h> #pragma comment( lib, "winmm.lib" ) using namespace ic; using namespace ic::shorties; using namespace std; //FUNKTIONEN// void getRessources(); void setRessources(float gold, float food, float iron, float wood, float stone); int getInhabitants(); void setInhabitants(int inhabitants, bool delete_or_create); void build(int init, int number); buildings initBuildings(int init); bool checkRessources(buildings marketplace); void menue(); void buildingMenue(); void fightMenue(); void earnRessources(int init, int amount); bool save(); bool load(); void dialogs(int dialog, int _event, int _eventinfo); // int dialog -> Häufigkeit des Menüaufrufes) int _event -> Spezielles Event. // GEBÄUDE // buildings marketplace, farm, woodmine, stonemine, ironmine, kaserne; // BOOLS // bool bMarketplace, bIronmine, bWoodmine, bStonemine, bKaserne, bFarm; // INT // float wood = 50; float iron = 50; float stone = 50; float food = 50; float gold = 50; float prestige = 150; float experience = 150; bool ende = false; float xWood = 1, xIron = 1, xStone = 1, xGold = 1, xFood = 1; int inhabitants = 1000; int fighter = 0; int swordfighter, bowfighter, horsefighter, dialogCounter = 0, sessionCounter = 0; void inline dot(string t) { cout << t; for(int i = 0; i<3; i++) { cout <<"."; Sleep(500); } } void inline typewriter(string t, int sleep) { for(int i = 0; i<t.size(); i++) { if(t[i]!='§') { cout << t[i]; Sleep(sleep); } else Sleep(300); } } int main() { SetConsoleTitle( "TheVillage" ); _mkdir("thevillage"); char jn, jn2; maximize(); cout << "Intro ueberspringen? [J]a oder [N]ein?" << endl; cin >> jn2; if( jn2 == 'j' || jn2 == 'J') { } if(cin.fail() || jn2 == 'n' || jn2 == 'N' ) { system("cls"); //PlaySound(MAKEINTRESOURCE(1001), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC | SND_LOOP | SND_NODEFAULT); Sleep(12000); typewriter("Maerz§§.12§§.§1588\n",150); Sleep(3000); typewriter("\nDer Wind weht...",100); Sleep(1000); typewriter("\nAn unseren Klingen klebt Blut",100); Sleep(2000); typewriter("\nDoch wir haben verloren.§§§§§",100); Sleep(2000); typewriter("\nUnsern Besitz!",100); Sleep(2000); typewriter("\nUnsere Ehre! §§§§Und...",100); typewriter("§§§§§§§§§§§ \n\n\n\t\t\t\tUnser Dorf!\n\n\n",150); Sleep(2000); typewriter("Hilf uns, unser Dorf wiederaufzubauen!§§§§§§§ \nHilf uns, unsere Ehre wiederzuer§langen! \nHilf uns,§§§§§ uns zu§§§§ raechen!\n",100); Sleep(3000); typewriter("Wir sind nicht viele... \nDoch wir haben einen Willen.\n\n Und Nichts auf dieser Erde ist staerker als... \n Ein Wille, dessen Zeit gekommen ist... \n Dessen Zeit§§ JETZT ist!",100); typewriter("Folgst du uns auf unserem Weg?",100); Sleep(500); cout << "[J]a / [N]ein" << endl; cin >> jn; if(cin.fail() || jn == 'N' || jn == 'n') exit(0); typewriter("\t\t\t||==============================||\n",50); typewriter("\t\t\t|| ||\n",0); typewriter("\t\t\t|| Herzlich Willkommen ||\n",50); typewriter("\t\t\t|| in ||\n",50); typewriter("\t\t\t|| TheVillage ||\n",50); typewriter("\t\t\t|| ||\n",0); typewriter("\t\t\t||==============================||\n",50); cin.ignore(); } system("cls"); char c_load; // Spielstand laden? // cout << "Letzten Spielstand laden? J = JA" << endl; cin >> c_load; if(c_load == 'j' || c_load == 'J') { if(load()==true) { cout << "Spielstand erfolgreich geladen!" << endl; cin.get();//JA } else { cout << "Spielstand konnte nicht geladen werden!" << endl; // Fehler beim Laden cin.get(); } } do { menue(); }while(ende==false); } void menue() { //PlaySound(MAKEINTRESOURCE(1002), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC | SND_LOOP | SND_NODEFAULT); //++dialogCounter; // Erhöht Variable zum zählen der Menü-Aufrufe. system("cls"); int choice = 0; //////////////// cout << "[1] - Rohstoffe einsehen \t\t||" << endl; cout << "[2] - Baumenue \t\t\t\t||" << endl; cout << "[3] - Holz abbauen \t\t\t||" << endl; cout << "[4] - Stein abbauen \t\t\t||" << endl; cout << "[5] - Eisen abbauen \t\t\t||" << endl; cout << "[6] - Nahrung ernten \t\t\t||" << endl; cout << "[7] - Kampfmenue \t\t\t||" << endl; cout << "[0] - Spiel speichern & verlassen \t||" << endl; ///////////////// //dialogs(dialogCounter,0,0); cin >> choice; if (cin.fail() ) // Wenn falsche Eingabe, bleibe in der do-Schleife! { cin.clear(); cin.sync(); } else // Wenn richtige Eingabe, werte sie aus { switch(choice) { case 0: { int save_or_not; cout << "Spielstand speichern? [1] -> JA" << endl; cin >> save_or_not; if(save_or_not == 1) { if(save() == true) { cout << "Spielstand gespeichert!" << endl; cin.sync(); cin.get(); } else { cout << "Spielstand konnte nicht gespeichert werden!" << endl; cin.sync(); cin.get(); } } ende = true; break; } case 1: { ::getRessources(); cin.get(); break; } case 2: { buildingMenue(); break; } case 3: { if(bWoodmine == true) earnRessources(1,1); else { cout << "Sie muessen erst eine Holzfaellerhuette bauen!" << endl; cin.sync(); cin.get(); } break; } case 4: { if(bStonemine == true) earnRessources(2,1); else { cout << "Sie muessen erst eine Steinmine bauen!" << endl; cin.sync(); cin.get(); } break; } case 5: { if(bIronmine == true) earnRessources(3,1); else { cout << "Sie muessen erst eine Eisenmine bauen!" << endl; cin.sync(); cin.get(); } break; } case 6: { if(bFarm == true) earnRessources(4,1); else { cout << "Sie muessen erst eine Farm bauen!" << endl; cin.sync(); cin.get(); } break; } case 7: { if(bKaserne == true) fightMenue(); else { cout << "Sie muessen erst eine Kaserne bauen!" << endl; cin.sync(); cin.get(); } break; } } } system("cls"); } void buildingMenue() { system("cls"); bool end = false; int choice = 0; do { cout << "[0] - Zurueck zum Obermenue " << endl; cout << "[1] - Marktplatz bauen" << endl; cout << "[2] - Eisenmine bauen" << endl; cout << "[3] - Holzfaellerhuette bauen" << endl; cout << "[4] - Steinmine bauen" << endl; cout << "[5] - Farm bauen" << endl; cout << "[6] - Kaserne bauen " << endl; cin >> choice; if (cin.fail() ) { cin.clear(); cin.sync(); } else { switch (choice) { case 1: { build(1,0); break; } case 2: { build(2,0); break; } case 3: { build(3,0); break; } case 4: { build(4,0); break; } case 5: { build(5,0); break; } case 6: { build(6,0); break; } case 7: { if(wood>15 && stone > 5) { inhabitants+= 10; wood-=15; stone-=5; } else { cout << "Nicht genug Rohstoffe!" << endl; cin.sync(); cin.get(); } break; } case 0: { end = true; break; } } } system("cls"); }while(end == false); } void fightMenue() { system("cls"); bool end = false; int choice; do { system("cls"); cout << "Herzlich Willkommen im Kampfmenue!" << endl; cout << "[0] - Zuruck zum Obermenue " << endl; cout << "[1] - Leute ausbilden! " << endl; cout << "[2] - Rekrutieren! " << endl; cout << "[3] - IN DIE SCHLACHT! " << endl; cout << "[4] - Taktische Besprechung! " << endl; cin.sync(); cin >> choice; if (cin.fail() ) { cout << "Falsche Eingabe!" << endl; cin.clear(); cin.sync(); cin.get(); } else { switch(choice) { case 0: { end = true; break; } case 1: { int t = 0; cout << "Sie haben " << inhabitants << " ausbildbare Einwohner!" << endl; cout << "Wie viele wollen sie ausbilden? (Kosten: 1 Gold & 1 Eisen" << endl; cin >> t; if(t<inhabitants && t*1 < gold && t*1 < iron) { gold -=1*t; iron -=1*t; fighter +=t; inhabitants -=t; } else cout << "Nicht genug Rohstoffe oder Einwohner!" << endl; cin.sync(); cin.get(); break; } case 2: { bool end = false; do { system("cls"); int choice; cout << "=========================" << endl; cout << "|| Kavellerie: " << horsefighter << endl; cout << "|| Schwertkaempfer: " << swordfighter << endl; cout << "|| Bogenschuetzen: " << bowfighter << endl; cout << "=========================\n" << endl; cout << "[0] - Zurueck zum Obermenue " << endl; cout << "[1] - Schwertkaempfer ausbilden! \t \t [3 Eisen & 3 Gold] " << endl; cout << "[2] - Leichte Kavellerie ausbilden! \t \t [7 Eisen & 4 Gold] " << endl; cout << "[3] - Bogenschuetzen ausbilden! \t \t [5 Eisen & 1 Gold] " << endl; cin.sync(); cin >> choice; if (cin.fail() ) { cout << "Falsche Eingabe!" << endl; cin.clear(); cin.sync(); cin.get(); } else { switch(choice) { case 0: { end = true; break; } case 1: { int number; cout << "Anzahl der Einheiten angeben!" << endl; cin >> number; if(number>fighter || 3*number>gold || 3*number > iron) { cout << "Sie haben zu wenige Kaempfer oder Rohstoffe!" << endl; cin.sync(); cin.get(); } else { cout << number << " Schwertkaempfer ausgebildet!" << endl; swordfighter+=number; fighter-=number; gold-=number*3; iron-=number*3; cin.sync(); cin.get(); } break; } case 2: { int number; cout << "Anzahl der Einheiten angeben!" << endl; cin >> number; if(number>fighter || 4*number>gold || 7*number > iron) { cout << "Sie haben zu wenige Kaempfer oder Rohstoffe!" << endl; cin.sync(); cin.get(); } else { cout << number << " Kavellerie ausgebildet!" << endl; horsefighter+=number; fighter-=number; gold-=number*4; iron-=number*7; cin.sync(); cin.get(); } break; } case 3: { int number; cout << "Anzahl der Einheiten angeben!" << endl; cin >> number; if(number>fighter || 1*number>gold || 5*number > iron) { cout << "Sie haben zu wenige Kaempfer oder Rohstoffe!" << endl; cin.sync(); cin.get(); } else { cout << number << " Bogenschuetzen ausgebildet!" << endl; bowfighter+=number; fighter-=number; gold-=number*1; iron-=number*5; cin.sync(); cin.get(); } break; } } } }while(end == false); } case 3: { } } } }while(end==false); } void build(int init, int number) { switch(init) { case 1: { if(bMarketplace == false) { marketplace.InitValues(20,10,20,20,15,0,0,0,0,0,15,"Marktplatz"); bMarketplace = true; } else { marketplace.setKosten(); } if(checkRessources(marketplace) == true) { char bauen; marketplace.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen == 'j') { marketplace.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); marketplace.setLevel(0); cout << "Marktplatz gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); break; } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 2: { if(bIronmine == false) { ironmine.InitValues(10,10,10,10,10,0.0f,1.25f,0.0f,0,0,0,"Eisenmine"); bIronmine = true; } else { ironmine.setKosten(); } if(checkRessources(ironmine) == true) { char bauen; ironmine.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen=='j') { ironmine.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); ironmine.setLevel(0); cout << "Marktplatz gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 3: { if(bWoodmine == false) { woodmine.InitValues(10,10,10,10,10,1.25,0,0,0,0,0,"Holzfaellerhuette"); bWoodmine = true; } else { woodmine.setKosten(); } if(checkRessources(woodmine) == true) { char bauen; woodmine.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen =='J' || bauen == 'j') { woodmine.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); woodmine.setLevel(0); cout << "Holzfaellerhuette gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 4: { if(bStonemine == false) { stonemine.InitValues(10,10,10,10,10,0,0,1.25,0,0,5,"Steinmine"); bStonemine = true; } else { stonemine.setKosten(); } if(checkRessources(stonemine) == true) { char bauen; stonemine.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen=='j') { stonemine.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); stonemine.setLevel(0); cout << "Marktplatz gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 5: { if(bFarm == false) { farm.InitValues(10,10,10,10,10,0,0,0,0,125,10,"Farm"); bFarm = true; } else { farm.setKosten(); } if(checkRessources(farm) == true) { char bauen; farm.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen=='j') { farm.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); farm.setLevel(0); cout << "Farm gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } case 6: { if(bKaserne == false) { kaserne.InitValues(20,30,50,50,50,0,0,0,0,0,30,"Kaserne"); bKaserne = true; } else { kaserne.setKosten(); } if(checkRessources(kaserne) == true) { char bauen; kaserne.getKosten(); cout << "Wollen sie wirklich bauen?" << endl; cin >> bauen; if(bauen=='J' || bauen == 'j') { kaserne.build(&wood, &iron, &stone, &gold, &food, &prestige, &experience, &xWood, &xIron, &xStone, &xGold, &xFood); kaserne.setLevel(0); cout << "Kaserne gebaut!" << endl; } else cout << "Es wurde nicht gebaut!" << endl; cin.get(); } else { cout << "Nicht genuegend Rohstoffe verfuegbar!" << endl; cin.get(); } break; } } } void getRessources() { system("cls"); dialogs(0,1,0); ////////////////////// cout << "=========================" << endl; cout << "||" << wood << " Holz" << endl; cout <<"||" << iron << " Eisen" << endl; cout <<"||" << stone << " Stein" << endl; cout <<"||" << food << " Nahrung" << endl; cout <<"||" << gold << " Gold" << endl; cout << "=========================" << endl; cout <<"Unser Dorf hat " << inhabitants << " Einwohner " << endl; cout << "Unser Dorf hat " << fighter << " Kaempfer. " << endl; cout << "Kampfeinheiten findet ihr im Kampfmenue!\n" << endl; //////////////////////// dialogs(0,1,1); cin.get(); } bool checkRessources(buildings building) { if(building.check(wood, iron, stone, gold, food) == true) return true; else return false; } void earnRessources(int init, int amount) { switch(init) { case 1: // Holz abbauen { if(food > 10 && gold > 5) { wood += 10*xWood; food-=10; gold-=5; } else { cout << "Nicht genuegend Rohstoffe zum Abbauen vorhanden!" << endl; cin.get(); } break; } case 2: // Stein abbauen { if(food > 10 && gold > 5) { stone += 10*xStone; food-=10; gold-=5; } else { cout << "Nicht genuegend Rohstoffe zum Abbauen vorhanden!" << endl; cin.get(); } break; } case 3: // Eisen abbauen { if(food > 10 && gold > 5) { food-=10*xFood; gold-=5; iron += 10; } else { cout << "Nicht genuegend Rohstoffe zum Abbauen vorhanden!" << endl; cin.get(); } break; } case 4: // Nahrung abbauen { if(gold > 5) { gold-=5; food += 10; } else { cout << "Nicht genuegend Rohstoffe zum Abbauen vorhanden!" << endl; cin.get(); } break; } } } bool save() { fstream f; f.open("thevillage/spielstand.dat", ios::out | ios::binary); if(f) { f << wood << endl; f << iron << endl; f << stone << endl; f << food << endl; f << gold << endl; f <<experience << endl; f <<prestige << endl; f <<xWood << endl; f <<xStone << endl; f <<xIron << endl; f <<xGold << endl; f <<xFood << endl; f <<inhabitants << endl; f <<::bWoodmine << endl; f <<::bIronmine << endl; f <<::bStonemine << endl; f <<::bFarm << endl; f <<::bMarketplace << endl; f <<::bKaserne << endl; f <<::fighter << endl; f <<::horsefighter << endl; f <<::swordfighter << endl; f <<::bowfighter << endl; f <<::dialogCounter << endl; f.write((char *)&marketplace, sizeof(marketplace)); f.write((char *)&ironmine, sizeof(ironmine)); f.write((char *)&woodmine, sizeof(woodmine)); f.write((char *)&stonemine, sizeof(stonemine)); f.write((char *)&farm, sizeof(farm)); f.write((char *)&kaserne, sizeof(kaserne)); f.close(); return true; } else return false; } bool load() { fstream f; string s; f.open("thevillage/spielstand.dat", ios::in | ios::binary); if(f) { stringstream ss1; getline(f,s); ss1 << s; ss1 >> wood; stringstream ss2; getline(f,s); ss2 << s; ss2 >> iron; stringstream ss3; getline(f,s); ss3 << s; ss3 >> stone; stringstream ss4; getline(f,s); ss4 << s; ss4 >> food; stringstream ss5; getline(f,s); ss5 << s; ss5 >> gold; stringstream ss6; getline(f,s); ss6 << s; ss6 >> experience; stringstream ss7; getline(f,s); ss7 << s; ss7 >> prestige; stringstream ss8; getline(f,s); ss8 << s; ss8 >> xWood; stringstream ss9; getline(f,s); ss9 << s; ss9 >> xStone; stringstream ss10; getline(f,s); ss10 << s; ss10 >> xIron; stringstream ss11; getline(f,s); ss11 << s; ss11 >> xGold; stringstream ss12; getline(f,s); ss12 << s; ss12 >> xFood; stringstream ss13; getline(f,s); ss13 << s; ss13 >> inhabitants; stringstream ss14; getline(f,s); ss14 << s; ss14 >> bWoodmine; stringstream ss15; getline(f,s); ss15 << s; ss15 >> bIronmine; stringstream ss16; getline(f,s); ss16 << s; ss16 >> bStonemine; stringstream ss17; getline(f,s); ss17 << s; ss17 >> bFarm; stringstream ss18; getline(f,s); ss18 << s; ss18 >> bMarketplace; stringstream ss19; getline(f,s); ss19 << s; ss19 >> bKaserne; stringstream ss20; getline(f,s); ss20 << s; ss20 >> fighter; stringstream ss21; getline(f,s); ss21 << s; ss21 >> horsefighter; stringstream ss22; getline(f,s); ss22 << s; ss22 >> swordfighter; stringstream ss23; getline(f,s); ss23 << s; ss23 >> bowfighter; stringstream ss24; getline(f,s); ss24 << s; ss24 >> ::dialogCounter; f.read((char *)&marketplace, sizeof(marketplace)); f.read((char *)&ironmine, sizeof(ironmine)); f.read((char *)&woodmine, sizeof(woodmine)); f.read((char *)&stonemine, sizeof(stonemine)); f.read((char *)&farm, sizeof(farm)); f.read((char *)&kaserne, sizeof(kaserne)); return true; } else return false; } int ::getInhabitants() { return inhabitants; } void ::dialogs(int dialog, int _event, int _eventinfo) { if(dialog!=0) { if(dialog>1&& sessionCounter==0) { typewriter("<Mia> Willkommen zurueck! Wie geht es dir?",100); ::sessionCounter++; } switch(dialog) { case 1: { Sleep(500); typewriter("<Mia>Sei gegruesst, Fremder!\n",100); Sleep(1500); typewriter("<Mia>Sieh dich ruhig um. Viel ist nicht mehr da.",100); typewriter("\n<Mia>Solltest du Fragen haben, sag es mir! §Ich stehe dir zur Verfuegung... ",100); cin.get(); } } } else { switch(_event) { case 1: // GET_Ressources { if(_eventinfo!=1) { typewriter("Wir haben noch \n",100); } if(_eventinfo==1) { if(::wood<100 && ::stone < 100 && ::iron < 100 && ::gold < 100 && ::food < 100) { typewriter("Die Lager sind fast leer!",100); } float resArray[] = {wood, stone, iron, gold, food}; float min = resArray[0]; float max = resArray[0]; for(int i = 0; i<sizeof(resArray); i++) { if(resArray[i]<min) min=resArray[i]; } if(min>0) { string t("Am ehesten braeuchten wir "); if(min==wood) t.append(" Holz."); if(min==stone) t.append(" Stein."); if(min==iron) t.append(" Eisen."); if(min==food) t.append(" etwas zu Essen."); if(min==gold) t.append(" wieder etwas Gold."); typewriter(t,100); } } } } } } /* void war() { string battlefield[15][30]; for(int i = 0; i<15; i++) { for(int j = 0; j<30; j++) { battlefield[i][j] = "#"; cout << battlefield[i][j]; } cout << endl; } cin.sync(); cin.get(); }*/ build.h #include <iostream> #include <string> using namespace std; class buildings { private: float c_wood, c_iron, c_stone, c_food, c_gold; float m_wood, m_iron, m_stone, m_gold, m_food, m_prestige, m_experience; string aName; float level; public: void build(float *wood, float *iron, float *stone, float *gold, float *food, float *m_prestige, float *experience, float *m_wood, float *m_iron, float *m_stone, float *m_gold, float *m_food); buildings(); void setKosten(); void getKosten(); bool check(float wood, float iron, float stone, float gold, float food); float getLevel(); float setLevel(float _level_); void InitValues(float c_wood, float c_iron, float c_stone, float c_food, float c_gold, float m_wood, float m_iron, float m_stone, float m_gold, float m_food, float m_prestige, string aName); }; build.cpp #include "build.h" buildings::buildings() { c_wood = 0; c_iron = 0; c_stone = 0; c_food = 0; c_gold = 0; m_wood = 0; m_iron = 0; m_stone = 0; m_gold = 0; m_food = 0; m_prestige = 0; m_experience = 0; } void buildings::InitValues(float _c_wood, float _c_iron, float _c_stone, float _c_food, float _c_gold, float _m_wood, float _m_iron, float _m_stone, float _m_gold, float _m_food, float _m_prestige, string _name) { this->c_food= _c_food; this->c_gold= _c_gold; this->c_iron= _c_iron; this->c_stone= _c_stone; this->c_wood= _c_wood; this->m_food= _m_food; this->m_gold= _m_gold; this->m_iron= _m_iron; this->m_prestige= _m_prestige; this->m_stone= _m_stone; this->m_wood= _m_wood; this->aName = _name; } void buildings::setKosten() { this->c_food= c_iron*2; this->c_gold= c_gold*2; this->c_iron= c_iron*2; this->c_stone= c_stone*2; this->c_wood= c_wood*2; this->m_food= m_food*2; this->m_gold= m_gold*2; this->m_iron= m_iron*2; this->m_prestige= m_prestige*2; this->m_stone= m_stone*2; this->m_wood= m_wood*2; } float buildings::getLevel() { return this->level; } float buildings::setLevel(float _level_) { if(_level_ = 0) this->level = ++level; else this->level += _level_; return level; } void buildings::build(float *_wood, float *_iron, float *_stone, float *_gold, float *_food, float *_m_prestige, float *_experience, float *_m_wood, float *_m_iron, float *_m_stone, float *_m_gold, float *_m_food) { *_wood -= c_wood; *_iron -= c_iron; *_stone -= c_stone; *_gold -= c_gold; *_food -= c_food; *_experience += m_experience; *_m_prestige += m_prestige; *_m_wood += (1.25f*m_stone*(level/2)); *_m_gold+= (1.25f*m_gold*(level/2)); *_m_iron += (1.25f*m_iron*(level/2)); *_m_wood += (1.25f*m_stone*(level/2)); *_m_stone += (1.25f*m_stone*(level/2)); cin.get(); } bool buildings::check(float kwood, float kiron, float kstone, float kgold, float kfood) { if(kwood > this->m_wood && kiron > this->c_iron && kstone > this->c_stone && kgold > this->c_gold && kfood > this->c_food) return true; else return false; } void buildings::getKosten() { system("cls"); cout << "\nEin(e) " << aName << " kostet: " << endl; cout << "=========================" << endl; cout << "|| Holz " << this->c_wood << endl; cout << "|| Stein " << this->c_stone << endl; cout << "|| Eisen " << this->c_iron << endl; cout << "|| Nahrung " << this->c_food << endl; cout << "|| Gold " << this->c_gold << endl; cout << "=========================" << endl; cout << "\nEin(e)" << this->aName << " steigert die Produktivitaet von " << endl; cout << "=========================" << endl; cout << "|| Holz um das " << this->m_wood << "-fache" << endl; cout << "|| Stein um das " << this->m_stone<< "-fache" << endl; cout << "|| Eisen um das " << this->m_iron<< "-fache" << endl; cout << "|| Nahrung um das " << this->m_food<< "-fache" << endl; cout << "|| Gold um das " << this->m_gold<< "-fache" << endl; cout << "=========================" << endl; cout << "\nEin(e) " << aName << " bringt " << endl; cout << "=========================" << endl; cout << "|| Ruhm: " << this->m_prestige << endl; cout << "|| Erfahrung : " << this->m_experience << endl; cout << "=========================" << endl; } Du gibst am Ende der main Methode nichts zurück. Versuchs mal mit return 0; am Ende der Methode.