Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » wann funktionen?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.04.2005, 13:41 Uhr
HOwTnTEd



hi bin ziemlich neu in dem gebiet programmieren. Also nen jahr spiele ich schon mit c/c++ in der konsole rum. Bin jetzt am 2 kleinen konsolen spiel. Hmm sone art snake mit story und kämpfen... naja worum es eigentlich geht:
bei meinem ersten spiel habe ich leider durch meinen code am ende nicht mehr ganz durchgeblickt.es hat zwar alles funktioniert, aber es war alles so verworren, dass es schwer zu erklären war, was die zeilen code jetzt eigentlich machen.
Naja ich will nun bei meinem neuen spiel dies möglich vermeiden.
Habe mir schon viele skizzen gemacht, und paar funtionen aufgeschrieben, die ich wohl benötigen werde. Hierbei die frage: Wann nutz ich am besten Funktionen und wann lass ich sie weg. Ich habe bei meinem letzten code gemerkt (bestand nur aus funktionen), dass es wohl auch nicht besser ist als alles in die main zu schreiben. Tja wo macht man abstriche wo brauch man welche? würde auch gerne mal von euch so paar erfahrungen hören.
ein beispiel mal noch. Wenn man ein menue hat und hat ne funktion menue(); und eine regeln();
dann ist es sehr schwer dies unter einen hut zu bekommen.

man is im menue();
und darin wählt man, dass man zu den regeln will. ok das klappt ja, das regeln() im code über menue steht().... ok aber nun zurück?! man kann ja nicht wieder menue() aufrufen denn es steht ja unter regeln()

weiß nicht ob das klar geworden ist.Ich weiß, dass man dieses problem mit ner schleife löst. aber ist es denn nicht sinnvoller einfach die regeln() mit in menue() unterzubringen? also das man sie garnicht aufruft, sondern halt nen längeren menue()-code hat....

naja ich seh schon ich glaub ihr werdet meinen text net raffen... bin selber wieder voll verplant.
naja an alle die es verstanden haben: würde mich über nen paar sätze freuen!

cu euer Howtnted

hotte + owned -> howtnted!
--
Hotte + oWned = HowTnTEd
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.04.2005, 17:39 Uhr
virtual
Sexiest Bit alive
(Operator)


Eine Gute vorgehensweise ist in der Regel die Methode, das gesamte Programme erstmal in grobe Teilprobleme zu zerlegen, wobei diese Teilprobleme dann Funktionen bilden könnten:
Danach kann man die Teilprobleme wiederum zerlegen und in weitere Funktionen zerlegen.

Bei der Wahl, was eine Funktion ist und was nicht, gibt es im wesentlichen zwei Kritieren, die dazu führen, daß ein Block einer vorhandenen Funktion (oder eben main) zu einer eigenständigen Funktion wird:

1. der Block kommt häufiger (mehr als einmal) an verschiedenen Stellen vor, dh die Funktion ist vor allem deshalb da, um Coderedundanzen zu vermeiden.

2. der Block kommt zwar nicht häufiger vor, aber ist bestandteil einer recht großen Funktion. Eine eigenständige Funktion kann helfen, den Code übersichtlicher zu gestalten, dh einerseits wird die umgebende Funktion übersichtlicher, andererseits wird bei der ausgelagerten Funktion deutlich, von welchen Parametern und damit Einflußgrößen der Programmablauf abhängt.

Man kann die unter (1) und (2) genannten Kriterien sicherlich theoretsich unbegrenzt rekursiv anwenden, so daß man lauter Funktionen ohne "echten" Code hat. Dh man sollte es nicht übertreiben.

Während die untergrenze einer Funktion recht schwer zu bestimmen ist, ist es bei der Obergrenze recht einach: Funktionen, die mehr als 3 Verschachtelungsebenen von Blöcken haben tendieren dazu, schwer verstanden zu werden und es sollte geprüft werden, inwieweit man innere Blöcke auslagern kann (in eigenständige Funktionen).

Eine weitere Kunst ist es, zu den Funktionen die korrekten Parameterlisten zu bestimmten.
Es bringt dir in der Regel nix, eine super flexible Funktion zu irgend einem Problem zu haben, aber die Funktion braucht 16 parameter oder so... Das wäre ein gutes Zeichen dafür, daß die Funktion willkürlich erstellt wurde und sich niemand gedanken dazu gemacht hat, was sie eigentlich wirklich gut können soll.

Das ist jetzt alles nur meine persönliche Meinung, kein gesetz.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.04.2005, 19:39 Uhr
HOwTnTEd



Wow thx für diese riesiege Antwort. Echt nett von dir. Habs gemerkt mit dem rekursiven programmieren. Ein riesen code und man hat vor lauter funnktionen kein plan mehr wo was steht. Naja ok. Werde mir das mal zu Herzen nehmen, meine Programme in Zukunft besser zu planen.Ich bin mir trotzdem noch nicht ganz so sicher, wie ich mein Spiel aufbauen soll.

hmm in: steuerung();
grafik();

also dass ich abfrage was für ne taste usw gedrückt wurde und die berechnungen dort ausführe und dann alles in der grafik ausgeben lasse?die frage ist nur dann wie mach ich dann das ganze spiel da rein? Oo lol voll doof... oder lässt man die 2 weg und nimmt echt nur dass als funktion was sich wiederholt?
--
Hotte + oWned = HowTnTEd
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.04.2005, 10:59 Uhr
Th



Versuche generell dein Programm zu unterteilen, d.h. in
- Logik
- Grafik
- Steuerung
- Hilfsklassen und -funktionen etc

Dann baust du dir ein Hauptprogramm, daß dann alle Teile instanziiert und verwendet.
So kannst du schnell mal einzelne Teile austauschen bzw testen, z.b. die Logik getrennt laufen lassen.

Da ein Programm im Laufe der Zeit immer größer wird, wirst du die Vorteile automatisch merken, auch wenn am Anfang etwas mehr Denk- und Schreibarbeit nötig ist.
Ferner empfielt es sich, die einzelnen Dateien auch noch in gesonderte Unterordner aufzuteilen.

Die letzten Programme (Spiele), die wir bei uns in der Firma entwickelt haben, bestanden aus ca. 400-600 Source-Dateien (OHNE die DLLs z.B. für die Engine gerechnet).

Ohne Struktur baut man sonst sein Programm dauernd um, und das ist sehr nervig und zeitraubend und führt meistens zum Abbruch eines Projektes...

Dieser Post wurde am 29.04.2005 um 11:00 Uhr von Th editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.05.2005, 12:00 Uhr
HOwTnTEd



genau sowas hab ich gesucht thx ihr 2!
Ich mach mich dann mal ans progn
hoffe ich bekomme das auch hin. Grundkonzept ist fertig und auch einzelne gedanken hab ich schon auf papier. Nun noch der code. Wird schon klappen!!

Thx noch nen schönen 1.Mai
p.s: net so viel saufen!
--
Hotte + oWned = HowTnTEd
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.05.2005, 14:40 Uhr
HOwTnTEd



ach noch was... sry wegen doppelpost.(zeitlimit zum editieren überschritten)
deine Logik (die funktion) da kommt die KI rein oder?
oder was genau meinst du mit Logik?
--
Hotte + oWned = HowTnTEd
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.05.2005, 14:55 Uhr
RedEagle



Hab die Antworten nur grob überflogen, da ich mom keine zeit habe, aber es hört sich so an, als würdes du ohne Prototypen arbeiten

mach das am besten so:


C++:
//Prototypen
//Ab hier sind ALLE verwendeten Funktionen bekannt
void menu();
void regeln();

//MAIN-Funktion
int main()
{
menu();

return 0;
}

//menu-funktion
void menu()
{
//...
if(antwort == 1) regeln();
//...
}

//regeln-funktion
void regeln()
{
//...
system("PAUSE");
menu();
}


--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: