Spielprojekt - Probleme mit dem ausgeben und sleep()
-
Hallo Leute,
ich möchte ein kleines Spiel machen, doch es treten nun ein paar Probleme auf.
Ich bin sehr interessiert am programmieren doch ich weiß nicht alles.#pragma endregion private: System::Void buydealer_Click(System::Object^ sender, System::EventArgs^ e) { long mo = 50; long de = 1; long ca = 100; int sleep = 1000; std::string status = "Deine Candys sind schlecht!"; //+money -candy while(true) { ++mo; --ca; sleep(//VARIBLE); } //sleep while(true) { if(de == 1) { sleep = 1000; } if(de == 2) { sleep = 900; } if(de == 3) { sleep = 800; } if(de == 4) { sleep = 700; } if(de == 5) { sleep = 600; } if(de == 6) { sleep = 500; } } while(true) { this->candy->Text = ca.ToLong(); this->money->Text = mo.ToLong(); this->dealer->Text = de.ToLong(); this->status->Text = status.ToString(); } } }; }
Ihr fragt euch nun, was ist das Problem. Ja, also erstmal erkläre ich das Spielprinzip:
Man hat 100 Candys und 1 Dealer und 50 Geld.
Je mehr Dealer man hat, desto schneller bekommt man Geld.
Aber desto schneller gehen die Candys leer.
Also muss man auch nachkaufen, per Klick.Meine Probleme:
Ich möchte den Wert in der sleep funktion durch eine variable ersetzen,
damit ich entscheiden kann wie schnell man Candys bekommt. Je nach Dealeranzahl halt.Funkt aber nicht:
Ausdruck ergibt keine Funktion, die 1 Argumente übernimmt
gibt es alternativen?Dann möchte ich die Zahlen ausgeben.
Das wollte ich wieder durch while realisieren.
Funtkioniert aber nicht. wieso?
Fehler: 'ToLong': Ist kein Element von 'System::Int32'
'ToString': Ist kein Element von 'std::basic_string<_Elem,_Traits,_Ax>'Dann: Ist es Ok, wenn ich de qqelltext in die klammern eines buttons geschrieben habe?
Außerdem würde ich gerne ein Technik kennen mit der man praktisch unendlich dealer haben kann. Gibt es sowas?
Ich hoffe, ich habe alles gut erklärt. Ihr könnt mir natürlich auch Rückfragen stellen.
Ich freue mich auf jede Antwort:
LG Jan
-
Hallo Jan,
lies dir als erstes mal Windows Forms und Visual C++ MACHT KEINEN SINN! durch!
Und dann rate ich dir, zuerst einmal die Grundlagen der Programmierung mittels eines Konsolenprogramms zu lernen.
Du scheinst nicht verstanden zu haben, daß man mit einer GUI (WinForms) ereignisorientiert programmiert - mit den while(true)-Schleifen erzeugst du Endlosschleifen (d.h. dein Programm hängt dann)!Deine konkreten Fehler sind:
- du hast die Variable 'sleep' genauso benannt, wie die Funktion sleep()
- 'mo' und 'de' sind jeweils ein int, aber du möchtest Text haben, daher mo.ToString()
- std::string und String^ sind verschiedene Datentypen - entweder konvertieren oder aber die Variable 'status' als String^ deklarierenAber selbst wenn dein Programm dann keine Syntax-Fehler mehr hat, so paßt einfach die gesamte Vorgehensweise nicht.
Du solltest dir nun zuerst einmal überlegen, in welcher Programmiersprache du entwickeln möchtest (und C++/CLI ist als Anfängersprache überhaupt NICHT geeignet), also entweder natives C++ oder aber C# mit dem .NET-Framework).
-
Hallo Th69,
Danke für deine Hilfe.
Ich habe den Beitrag schon längst gelesen, und ich bin schon dran mit C# zu programmieren, aber ich habe erst vor kurzem angefangen mit vs zu programmieren.
Dann muss ich eben nochmal alles ändern.
Aber du und der Beitrag: Windows Forms und Visual C++ MACHT KEINEN SINN!
habt schon recht.
Ich habe mir aber gedacht:
Warum sollte es denn so schwer sein?
Also programmierte ich in C++/cliIch werde versuchen, dieses Programm in c++/cli fertigzustellen und dann mit C#
zu beginnen, ist ja eigentlich ähnlich.Das mit dem hängen versteh ich nicht?
Es soll ja jede x millisekunden den wert ändern.
Wie könnte ich das anders lösen?
Ps. Der Quelltext ist nicht alles, das ist nur der Teil, in dem ich was verändert habe.
Dankeschön für deine Fachkundige Antwort; irgendwie muss ich ja auch Professor werden.
-
Das mit dem hängen versteh ich nicht?
Compiliert dein Code denn jetzt und läuft dein Programm? Dann drücke mal auf den 'buydealer'-Button...
Wenn du in GUI-Programmen zeitgesteuerte Abläufe programmieren willst, dann benötigst du dafür einen Zeitgeber (auf englisch: timer).
Aber soweit scheinst du mir noch nicht zu sein, daher der gute Rat von mir bzgl. des Konsolenprogramms, denn dort kannst du so sequentiell programmieren (aber auch dort macht eine while(true)-Schleife keinen Sinn!).
-
Ja du hast recht, es schmiert ab wenn ich auf den Button klick.
Aber WIE sollte ich denn sonst machen? Mit dem Timer, und dann?
Soll der Timer laufen, und dann kann ich sagen, dass jede x millisekunden etwas passiert, und ich kann den wert dann auch ändern?
Es soll ja so gesehen immer weiterlaufen. Bis ein wert 0 erreicht.Grüße
EDIT: OK. Ich bin wirklich nicht soweit. Ich versuche es jetzt in einer Konsolenanwendung. Da ist mein Problem, dass ich ne Anzeige haben möchte.
Die muss aber da bleiben wo sie ist. Könnte ich vllt versuchen eine Zeile immer wieder auszugeben aber mit abständen und zwischen drin lösche ich den Text.
Müsste doch gehen.Grüße
-
Hallo,
was passt denn jetzt nicht? Ich möchte eine Zahl Zahl eingeben( 1 oder 2 ).
Wenn ich das mache, wird der If teil übersprungen oder was passiert?
Ich glaube die Zahlen werden nicht erkannt, denn der Teil mit dem aussortieren der falschen zahlen funktioniert.
Ich verstehe es nicht. Irgendein dummer Fehler von mir.Ihr könnt den QC auch selber ausprobieren.
Bitte helft mir
#include <iostream> #include <string> #include <cstdlib> #include <windows.h> int main() { long mo = 46; long ca = 104; long de = 1; int cd; while(ca > 0) { mo = mo + de * 4; ca = ca - de * 4; std::cout <<"Geld: " << mo << std::endl; std::cout <<"Candys: " << ca << std::endl; std::cout <<"Dealer: " << de << std::endl; std::cout <<"Möchtest du einen Dealer, oder mehr Candys kaufen?\n"; std::cout <<"Dealer = 1 : Candys = 2\n"; cd = 0; std::cin >> cd; if(cd == 1) //dealer { de = de + 1; mo = mo - 100; } if(cd == 2) //candy { ca = ca + 100; mo = mo - 50; } if(cd != 1, cd != 2) //error dieser Teil sollte alle zahlen { //außer 1,2 aussortieren return 0; } system("cls"); //löscht den text der konsole Sleep(1000); } if(ca = 0) { return 0; } return 0; }
EDIT: Ich habe aus SPAß aus cd, cda gemacht. jetzt funktioniert es??
gibt es schon solch eine int reserviert oder wie?
Kapiere ich nicht.
-
Du benutzt den Komma-Operator (auch Sequenzoperator genannt), so daß nur die rechte Bedingung benutzt wird. Nimm stattdessen den logischen Und-Operator &&:
if(cd != 1 && cd != 2)
PS:
if(ca = 0)
Schau dir mal die Compilerwarnung dazu an (bzw. schalte sie an, wenn du keine Warnung angezeigt bekommst)...
-
Vielen Dank