habe problem mit Referenzen!
-
T0bi schrieb:
hmmm ic hhab gerade ueberhaupt keine ahnung, ok die hatte ich glaube ich noch nie...
Du brauchst jetzt aber nicht anfangen dich runter zu machen. Wir haben alle einmal angefangen.
T0bi schrieb:
aber mit ball_richtung, wollte ich die ball pos mit den schläger pos vergleichen und je nach dem wo der ball auf den schlaeger trifft in welche richtung er sich dann bewegen soll
Ich fürchte das ist zu komplex. Da müsstest du außer den Positionen auch noch die Geschwindigkeit des Balles und des bewegten Schlägers berücksichtigen. Ich denke das lohnt sich ohne Grafischer oberfläche nicht. Wäre es ein Kompromiss, den Ball von Wänden und vom Schläger in einem 90°-Winkel abprallen zu lassen?
T0bi schrieb:
mit return weiss ich nicht wie man das macht
Dein größtes Manko ist wohl, dass du dich immer so "schwammig" ausdrückst. Du weißt nicht, wi man was mit return macht?
T0bi schrieb:
ich weiss nur das ich immer ne warnung bekomme das die funktion was zurückgeben soll also hab ich einfach reurn 1 genommen
Hast du eine Funktion, die einen anderen Rückgabetyp als void hat, muss sie etwas zurückgeben. Das machst du mit return.
zB:int main( ) { // sollte das return 0; // nicht dastehen, so bekommst du in diesem Falle aber keinen Error / Warnung, // weil im C++ Standard definiert ist, dass int main( ) } // <== hier 0 (Null) zurückliefert, wenn das return 0; davor fehlen würde. // Hier jedoch int foo( ) { return 42; // _muss_ die Funktion etwas zurückgeben. } // willst du jedoch nichts zurückgeben, so änderst du int foo( ) in void foo( ) { }
Kannst du das nachvollziehen?
T0bi schrieb:
und das mit der keyboard abfrage ist schoen und gut das dus mir noch mal hin gepostet hast aber was die macht weiß ich immer noch nicht
Ich geh's mal Step-by-Step mit dir durch:
Swordfish schrieb:
// wir definieren eine Funktion Keyboard // mit den Parametern // // "Referenz auf int" pos_y1 // // und // // "Referenz auf int" pos_y2 // // welche einen boolean zurückliefert. // // Wird die Taste ESC (VK_ESCAPE) gedrückt, // so liefert Keyboard false, ansonsten true. // bool Keyboard( int &pos_y1, int &pos_y2 ) { // Wir definieren ein Array aus 256 bools "state": bool state[ 256 ]; // in diesem Array speichern wir den Zustand aller Tasten - // und zwar ob gedrückt ( = true ) oder nicht ( = false ) for( int i = 0; i < 256; i++ ) { // short GetAsyncKeyState( int virtual_key_code ); *1) // // liefert den Status der mit virtual_key_code bezeichneten // Taste zurück. MSDN: // If the function succeeds, the return value specifies // whether the key was pressed since the last call to // GetAsyncKeyState, and whether the key is currently // up or down. If the most significant bit is set, the key // is down, and if the least significant bit is set, the key // was pressed after the previous call to GetAsyncKeyState. // However, you should not rely on this last behavior; // Das ist uns jedoch egal. Wir gehen davon aus, das die Taste // gedrückt ist, wenn irgendein Bit der niedrigeren 2 Bytes des // zurückgegebenen shorts gesetzt sind. // Beispiel: // 0000 0000 1000 0001 : Das Ergebnis von GetAsyncKeyState verknüpfen wir // & 0000 0000 1111 1111 : mit einem logischen und mit einem Wert, dessen Bits // --------------------- : der nidrigeren 2 Bytes alle gesetzt sind, und wir // 0000 0000 1000 0001 : <- bekommen. Wenn wir dieses Ergebnis auf die // : ungleichheit gegen 0 Prüfen, bekommen wir bei // 0000 0000 1000 0001 != 0 : true bei gedrückter und false bei nicht gedrückter // : Taste. Dies machen wir jetzt für alle 256 virtual // : Key-Codes *2). state[ i ] = ( GetAsyncKeyState( i ) & 0xFFFF ) != 0; } // an stelle 'Q' ( = 81 ) des Arrays state finden wir den Status der Taste Q. // wenn state[ 'Q' ] true und pos_y1 > 5 ist, können wir pos_y1 dekrementieren. if( state[ 'Q' ] && ( pos_y1 > 5 ) ) --pos_y1; // analog: if( state[ 'A' ] && ( pos_y1 < 17 ) ) ++pos_y1; // analog: if( state[ 'O' ] && ( pos_y2 > 5 ) ) --pos_y2; // analog: if( state[ 'L' ] && ( pos_y2 < 17 ) ) ++pos_y2; // analog: if( state[ 'P' ] ) { gotoxy( 34, 12 ); printf( "[ P A U S E ]" ); while( getch( ) != 0x0D ); gotoxy( 34, 12 ); printf( " " ); } // Hier sezten wir statt eines Characters eine Konstante ein: if( state[ VK_ESCAPE ] ) return false; // Bei gedrückter Escape-Taste geben wir false rurück, return true; // ansonst true. }
*1)
GetAsyncKeyState( )
*2)Virtual Key Codes
Ich hoffe das war ausführlich genug. gib Feedback!
T0bi schrieb:
hab ich jetzt noch was vergessen?
Ja:
Swordfish schrieb:
Könntest du bitte die in meinen Kommentaren gestellten Fragen u. Anmerkungen in deinem nächsten Post behandeln?
Greetz, Swordfish
-
hi swordfish, also am besten ich fang noch mal ganz von vorne an....
-eine referenz kann mit ner variable belegt werden... das macht man um mit dieser referenz eine definierte variable zu aendern, also zum bsp. ich habe meine ypos des schlägers die ist 10 nun kann ich eine referenz auf diese variable packen um diesen wert in einer funktion zu aendern, richtig?-eine int funktion verwende ich dann wenn ich zB werte geaendert habe und die durch return zurück geben moechte, andern falls wenn ich den geaenderten wert nicht zurueck geben will sondern mit dem weiter rumhandtieren moechte also posY soll weiter veraendert werden, benutze ich void. und wenn ich auf ereignisse warte also zB bis etwas nicht so ist wie es sein soll, also ball geht ins aus... benutze ich boolsche ausdruecke(true,flase[1,0])
-das mit der keyboard abfrage, hab ich noch nicht ganz gecheckt glaube ich, also du legst ein array an in dem du 256tasten druecke speichern kannst, oder wie, heisst das den nicht das nach dem 256 tastendruck sense ist?
soweit erst mal zu deinen fragen, und nenfeedback fuer deine beschreibung.... jo ich muss sagen ist wirklich gelungen ich habs noch nicht ganz kappiert da ich mich mit GetAsyncKeyState und virtual_key_code noch nicht beschaeftigt habe werd ich dann aber gleich tuen. solltest lehrer werden oO wenn dus net schon bist *g*.
also ich werde jetzt erst mal noch nen bissel weter dran rum basteln an pong und werd mich dann noch mal melden und du kannst ja dann mal schauen obs ok ist...
vieleicht noch ein anderes anliegen. wenn dus gestattest wuerde ich dir gern nen anderes prog an deine main senden bei dem ich hilfe brauche, ich weiss man sollte erst mal eins fertig machen eh man mit dem naechsten beginnt aber damals wollte mir hier ja nie wirklich wer helfen deshalb hatte ich es in den hintergrund gestellt, hmpf.....
trotzdem erst mal nen DANKE
!!!
-
T0bi schrieb:
- eine Referenz kann mit einer Variable belegt werden. Das macht man um mit dieser referenz eine definierte variable zu ändern, also zB meine pos_y1 des schlägers die ist 10 nun kann ich eine Referenz auf diese variable packen um diesen Wert in einer funktion zu aendern, richtig?
nicht notwendigerweise um den Wert in einer Funktion zu ändern, aber ja, um ihn zu ändern:
#include <iostream> using namespace std; void call_by_value ( int x ) { x = 42; cout << " in call_by_value: x = " << x << endl; } void call_by_reference ( int &x ) { x = 42; cout << " in call_by_reference: x = " << x << endl; } void call_by_reference_pointer ( int *x ) { *x = 42; cout << " in call_by_reference_pointer: *x = " << *x << endl; } int main( ) { int var = 1; cout << "before call_by_value: var = " << var << endl; call_by_value( var ); cout << " after call_by_value: var = " << var << endl << endl; var = 1; cout << "before call_by_reference: var = " << var << endl; call_by_reference( var ); cout << " after call_by_reference: var = " << var << endl << endl; var = 1; cout << "before call_by_reference_pointer: var = " << var << endl; call_by_reference_pointer( &var ); cout << " after call_by_reference_pointer: var = " << var << endl << endl; }
T0bi schrieb:
- Eine int-Funktion verwende ich dann wenn ich zB Werte geändert habe und die durch return zurück geben möchte **1), andernfalls, wenn ich den geänderten Wert nicht zurück geben will sondern mit ihm weiter rumhandtieren möchte [...] benutze ich void **2). Wenn ich auf Ereignisse warte. also zB bis etwas nicht so ist wie es sein soll, also zB ball geht ins aus, benutze ich boolsche Ausdrücke *3) ( true, flase [ 1, 0 ] ).
- Du kannst mit return nur einen Wert eines fundamentalen Typs pro Funktion zurückgeben.
- Denk' nicht so kompliziert. Soll deine Funktion keinen Wert zurückgeben, so sieht sie schlichtweg so aus:
void funktionsname( [ parametertyp parametername [,...] ] ) { }
- Du Verwendest bool'sche Ausdrücke immer dann, wenn es gilt, Bedingungen zu prüfen.
T0bi schrieb:
- Das mit der Keyboardabfrage hab ich noch nicht ganz gecheckt glaube ich. Also du legst ein Array an in dem du 256 Tastendrücke speichern kannst, oder wie? Heisst das den nicht das nach dem 256. Tastendruck sense ist?
Ja, ich lege ein Array für 256 Werte an. Aber nicht einen pro Tastendruck sondern einen pro Taste. Wunder dich bitte nicht, warum du auf deiner Tastatur keine 256 Tasten hast... Windows kennt zB die linke Maustaste auch als Virtual Key, nämlich VK_LBUTTON. Mit:
bool state[ 256 ]; for( int i = 0; i < 256; i++ ) { state[ i ] = ( GetAsyncKeyState( i ) & 0xFFFF ) != 0; // ^ ^ // frage ich | hier jeden der 256 möglichen Tasten ab // und konvertiere den Rückgabewert von GetAsyncKeyState( i ) // nach bool. Führ näheres schaust du bitte in die MSDN. // Ein Link dazu findet sich in meinem letzten Post. }
T0bi schrieb:
solltest lehrer werden oO wenn dus net schon bist *g*.
Ne, nie im Leben.
T0bi schrieb:
also ich werde jetzt erst mal noch nen bissel weter dran rum basteln an pong und werd mich dann noch mal melden und du kannst ja dann mal schauen obs ok ist...
Ok.
T0bi schrieb:
vieleicht noch ein anderes anliegen. wenn dus gestattest wuerde ich dir gern nen anderes prog an deine main senden bei dem ich hilfe brauche [...]
Hast denn meine E-Mail Adresse?
Greetz, Swordfish
-
hi swordfish, jetzt hab ichs kapiert mit den keyboard hehe
nur so ne frage was hast du dann fuer ein beruf IT-Master *g*, ne scherz. also ich habe deine eMail net waer nett wenn du sie mir gibst, thx.
und vieleicht noch was gibts irgendwo nen patch wo ich mein boarland builder 6 auf deutsch patchen kann? also die fehlermeldungen, oder gibts auch die komplette MSDN auf deutch?????
-
T0bi schrieb:
hi swordfish, jetzt hab ichs kapiert mit den keyboard hehe
nur so ne frage was hast du dann fuer ein beruf IT-Master
ja, swordfish gehört schon zu den absoluten krachern hier
-
oO kann man wohl so sagen... wann habt ihr eigentlich so angefangen mit programmieren???
-
T0bi schrieb:
oO kann man wohl so sagen... wann habt ihr eigentlich so angefangen mit programmieren???
uff, lange her. ich bin jetzt 30... vor 12 jahren etwa
-
also mit 18 hm oki ich bin och bald 18 *freu*, wie lange hats den so im schnitt gedauert bis man sich in c++ eingearbeitet hat?
-
T0bi schrieb:
nur so ne frage was hast du dann fuer ein beruf IT-Master *g*, ne scherz.
Ne, im moment warte ich auf den Zivildienst (Österreich)
net schrieb:
T0bi schrieb:
hi swordfish, jetzt hab ichs kapiert mit den keyboard hehe
nur so ne frage was hast du dann fuer ein beruf IT-Master
ja, swordfish gehört schon zu den absoluten krachern hier
Danke für die Blumen.
T0bi schrieb:
und vieleicht noch was gibts irgendwo nen patch wo ich mein boarland builder 6 auf deutsch patchen kann? also die fehlermeldungen
Da bemüh' doch entweder Google oder ein anderes Forum.
Tobi schrieb:
oder gibts auch die komplette MSDN auf deutch?????
Bei meinem Microsoft Visual Studio 2003 .net hab' ich ein Paar deutsche Einträge in meiner lokal installierten MSDN. Wo man die im www findet weiß ich leider nicht.
T0bi schrieb:
wann habt ihr eigentlich so angefangen mit programmieren???
Mit 11 Jahren, bin jetzt 20.
T0bi schrieb:
wie lange hats den so im schnitt gedauert bis man sich in c++ eingearbeitet hat?
Na ja, ich hab zu meinen Anfängerzeiten viel Zeit mit QBasic vergeudet. Das war damals auf einem Intel 80386 SX, 16 MB RAM, 500 MB HDD. Leider hatte ich nur DOS und Windows 3.1 zur verfügung, da ich damals noch nix von Linux wusste. Irgendwann mit 14 oder 15 Jahren hab' ich mit die Borland C/C++ IDE in der Version 3.1 (!!!) geholt und wurde Glücklich.
T0bi schrieb:
wie lange hats den so im schnitt gedauert bis man sich in c++ eingearbeitet hat?
Was verstehst du unter "Einarbeitung"? Der Lernfortschritt ist natürlich für jeden anders, hängt von der vorhandenen Zeit ab und davon, wie sehr man sich bemüht. Ich weiß daß ich, was C++ bis jetzt nur ein bisschen mehr als an der Oberfläche gekratzt habe.
Greetz, Swordfish
PS: reiter.e AT gmx.net
-
hm.. oki so werd dir dann mal mein anderes prog per mail geben und das "fertige" pong.