Algorithmisches Denken & Jump n Run

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
0Dev
Beiträge: 2
Registriert: 06.08.2013, 23:00

Algorithmisches Denken & Jump n Run

Beitrag von 0Dev »

Guten Tag ZFX/Developia Community,

Ich lerne seit rund 2 Monaten C++ und mache gute Fortschritte :)
Jedoch habe ich drei Fragen die ich gerne hier an die Experten stellen möchte, falls gestattet.

1.Ist es möglich Algorithmisches Denken zu trainieren ?

Laut diversen Quellen habe ich Erfahren, dass dies größten teils zu 80% angeboren ist und nur zu einem bestimmten Maße trainiert werden kann?
In der Programmierung ist ja Problem-Solving dass A und O und deswegen würde mich es interessieren wie eure Erfahrungen hierbei sind?
Muss man ein Mathe Crack sein um effizient Programmieren zu können ?

2. Wie kann man effektiv Programmieren üben?

Gibt es hierzu spezielle Methoden zum üben? ( Welche auch das algorithmisches Denken trainieren, sowie Programmierung im Allgemeinen)

3.Wie lange würde es dauern genug Erfahrung zu haben um ein Jump and Run im "Megaman X" - Stil zu programmieren?

Dies ist jetzt eine vage Frage was natürlich jeden Inviduell betrifft, jedoch könntet ihr auch hier eure Erfahrungen schildern ?
Ich weiß man soll nicht direkt mit großen Projekten anfangen und dies habe ich auch (noch) nicht vor.
Jedoch ist es mein zukünftiges Ziel wenn es auch zurzeit in weiter Ferne liegt.
Ich weiß dass C++ nicht eine gute Wahl für Anfänger ist ,wenn es auch etwas simplere wie C# gibt jedoch habe ich mit C++ angefangen und werde damit weiter programmieren.

Bedanke mich fürs lesen und hoffe , dass ihr mir Tipps und Anregungen geben könnt und eure Erfahrungen mit mir teilt.

Mit freundlichen Grüßen
Sascha, (17)
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Algorithmisches Denken & Jump n Run

Beitrag von Jonathan »

Von einer spezielle Methode habe ich noch nichts gehört, und bezweifle auch, dass sie existiert. Was hilft, ist viel lesen, üben und Feedback von anderen einholen (d.h. die Lösung vorstellen und fragen, was man besser hätte machen können).

Wie lange du für ein J'n'R brauchst, ist nicht so ganz leicht zu beantworten, es hängt auch sicherlich davon ab, welche Bibliotheken du z.B. für die Grafikausgabe benutzt. Anfangen solltest du damit aber nicht, bist du nicht C++ halbwegs im Griff hast. Also am besten Textkonsolenprogramme schreiben die diverse Dinge tun (irgendetwas ausrechnen, Objekthierarchien anlegen, usw.). Danach kannst du dich an Grafikanwendungen wagen. Erwarte aber bitte nicht, dass dein erster Versuch etwas wird, ein Spiel ist etwas sehr komplexes und du wirst mit ziemlicher Sicherheit früher oder später in eine Sackgasse geraten, weil dein Programmcode viel zu verworren ist. Aber dann fängt man mit dem neu erworbenen Wissen neu an und beim zweiten mal wird es schon viel besser.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Sternmull
Establishment
Beiträge: 264
Registriert: 27.04.2007, 00:30
Echter Name: Til
Wohnort: Dresden

Re: Algorithmisches Denken & Jump n Run

Beitrag von Sternmull »

Algorithmisches Denken kann man mit Sicherheit trainieren, "Veranlagung" (bzw. bereits verinnerlichte Grundlagen) hilft einem sicherlich, lässt sich aber garantiert nachträglich aneignen (ist dann natürlich mühsamer, aber da muss man sich halt durchbeißen). Wenn man das erste mal damit konfrontiert wird, kommt man sich wahrscheinlich sehr verloren vor. Aber nachdem man ein paar Grundlagen verinnerlicht hat geht es einem schon wesentlich besser.

Als Training würden sich einfache Standard-Algorithmen anbieten:
  • Reihenfolge von Array-Elementen umdrehen
  • Sortieren (es gibt diverse Algorithmen, kann nichts schaden zumindest die einfachen mal verstanden zu haben)
  • Pfadsuche (z.B. A*)
  • ...
Ansonsten kann ich dir nur ganz dringend ans Herz legen dich mit dem Debugger vertraut zu machen. Der ist das Ultimative Mittel um zu vertsehen was in deinem Code passiert. Am Anfang ist das (nachdem man es endlich geschafft hat den Code so zu schreiben das der Compiler ihn auch akzeptiert :) ) sehr oft nicht ganz das was du dir eigentlich vorgestellt hast. Statt dann herumzuraten was denn nun wieder schief geht, kannst du dir die Sache mit dem Debugger genauer angucken und sehen was tatsächlich abgeht.

C++ ist zwar sehr komplex, für einen ausreichend zähen Anfänger sollte es aber nach einer Weile verdaubar sein. Ich hab damals mit QBasic angefangen und bin dann auch schnell auf C++ gewechselt. Allerdings hatte ich den Vorteil das ich mich regelmäßig mit jemandem getroffen hab der mir das Stück für Stück beigebracht hat. Nach einiger "Übungszeit" war mein erstes Projekt dann übrigens auch ein Jump&Run (...dessen Code es heute leider nicht mehr gibt).

Was bei C/C++ wichtig ist: Die Toolchain verstehen. D.h. du solltest wissen wie Präprozessor, Compiler und Linker arbeiten. Das sind nämlich drei Ebenen auf denen du Fehlermeldungen begegnen wirst. Wenn dir nicht klar ist was wo einzuordnen ist, dann wird das sehr frustrierend.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Algorithmisches Denken & Jump n Run

Beitrag von Schrompf »

Moin Sascha!

Willkommen im Forum. Eigentlich ist schon alles gesagt, aber ich will diesen einen Punkt hier nochmal hervorheben:
0Dev hat geschrieben: 1.Ist es möglich Algorithmisches Denken zu trainieren ?
2. Wie kann man effektiv Programmieren üben?
Du tust es bereits :-) Bücher, Tutorials und Internet-Erfahrungsberichte können Dich inspirieren, Dir neue Herangehensweisen zeigen, Dir mathematisches Basiswissen zeigen. Aber das A und O bleibt nunmal: machen! Also übst Du jetzt bereits das Algorithmische Denken und das Programmieren, weil Du jetzt bereits programmierst und mit dem Code herumspielst.

Sei neugierig! Bleib hartnäckig! Probiere Dinge aus, die Dir Spaß machen! Und Du bist auf einem guten Weg.

Bye, Thomas
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Sternmull
Establishment
Beiträge: 264
Registriert: 27.04.2007, 00:30
Echter Name: Til
Wohnort: Dresden

Re: Algorithmisches Denken & Jump n Run

Beitrag von Sternmull »

Achso, eine Kleinigkeit hatte ich noch vergessen zu erwähnen: Ein guter Mathematiker ist nicht unbedingt ein guter Programmierer und eine guter Programmierer kann durchaus Probleme mit Mathematik haben.
In meiner Ausbildung war einer dabei der SPS-Programme mühelos und in einem Bruchteil der Zeit vor allen anderen der Klasse fetiggestellt hat. Im Studium war einer dabei der mühelos Programmstrukturen verstehen und einem daraufhin die Abläufe der Funktionsaufrufe herunterbeten konnte. Beide waren in Mathe aber eher unterdurchschnittlich.
Andersrum sträuben sich mir nur die Haare wenn ich Code sehe der von Mathematikern stammt. Beruflich "darf" ich mich momentan mit den Scilab-Eingeweiden auseinandersetzen... ich hab noch nie so schlechten Code gesehen der produktiv eingesetzt wird.
Mathematische und Progammiertechnische Fähigkeiten sind also meiner Meinung nach keinesfalls gleichzusetzen. Klar, man braucht bei beidem Variablen und Zahlen... aber es sind trotzdem zwei recht verschiedene Sachen die scheinbar auch über unterschiedliche Denkansätze realisiert werden können.
Specialist
Establishment
Beiträge: 135
Registriert: 29.08.2003, 14:22
Kontaktdaten:

Re: Algorithmisches Denken & Jump n Run

Beitrag von Specialist »

Code: Alles auswählen

Muss man ein Mathe Crack sein um effizient Programmieren zu können ?
Defitinitiv nein! Aber du wirst um grundlegende Mathematik nicht drumherumkommen.
In der Regel beschränkt es sich auf die vier Grundrechenarten.

Sobald es in Richtung Grafikprogrammierung geht, wirst du allerdings sehr schnell auf etwas komplexere Sachen stoßen, wie Matrizen, Vektoren, Ableitungen, Winkelfunktionen etc.
Das ist aber alles nichts, was man sich nicht selbst aneignen könnte. Das meiste lernt man eh schon in der Schule, zumindest auf dem Gymnasium.

Edit: Jetzt war Sternmull tatsächlich einen Augenblick schneller mit der Antwort ;)
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: Algorithmisches Denken & Jump n Run

Beitrag von BeRsErKeR »

0Dev hat geschrieben:1.Ist es möglich Algorithmisches Denken zu trainieren ?

Laut diversen Quellen habe ich Erfahren, dass dies größten teils zu 80% angeboren ist und nur zu einem bestimmten Maße trainiert werden kann?
In der Programmierung ist ja Problem-Solving dass A und O und deswegen würde mich es interessieren wie eure Erfahrungen hierbei sind?
Muss man ein Mathe Crack sein um effizient Programmieren zu können ?
Um ehrlich zu sein denke ich, dass das kaum Veranlagung ist. Meiner Meinung nach ist die Veranlagung das "Interesse" dafür. Man lernt Dinge immer leichter und schneller, wenn sie einen interessieren bzw. wenn man sich als Kind schon dafür interessiert, dann übt man als Kind schon und kann es dann später besser. Man kann es aber jederzeit lernen denke ich. Und da du Interesse daran zu haben scheinst, wird das sicher klappen.

0Dev hat geschrieben:2. Wie kann man effektiv Programmieren üben?

Gibt es hierzu spezielle Methoden zum üben? ( Welche auch das algorithmisches Denken trainieren, sowie Programmierung im Allgemeinen)
Wie Schrompf schon sagte, einfach machen. Du hast ja selbst gesagt, dass Problem-Solving wichtig ist. Probleme treten auf, wenn man programmiert. Also programmiere. Dann löse die Probleme. Du wirst Erfahrungen sammeln, dir neue Techniken und Herangehensweisen aneignen oder kennenlernen. Das alles geht von ganz alleine. EInfach machen.

0Dev hat geschrieben:3.Wie lange würde es dauern genug Erfahrung zu haben um ein Jump and Run im "Megaman X" - Stil zu programmieren?
Das kommt drauf an, wie sehr du dich reinhängst, wieviel Zeit du hast und wie stark du dich dafür interessierst. Und auch wie qualitativ das ganze sein soll/wird. Ein simples Jump&Run kann man mit viel Engagement eventuell schon nach 1 Jahr auf die Beine stellen. Es ist natürlich entscheidend ob du wirklich alles selber machst oder eine vorhandene Engine oder sogar ein GameStudio nutzt. Dann verkürzt sich natürlich die Zeit. Wenn es qualitativ so wie Megaman X sein soll und du das meiste selbst machen willst, wird das schon eine Weile brauchen. Leider kann ich das ehrlich gesagt nicht mehr so gut einschätzen, da ich schon sehr lange programmiere und nicht mehr weiß wann ich welches "Stadium" erreicht habe bzw. was ich zu jener Zeit für Projekte gemacht habe.
Ohne Input kein Output.
joeydee
Establishment
Beiträge: 1039
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Algorithmisches Denken & Jump n Run

Beitrag von joeydee »

BeRsErKeR hat geschrieben:Um ehrlich zu sein denke ich, dass das kaum Veranlagung ist. Meiner Meinung nach ist die Veranlagung das "Interesse" dafür. Man lernt Dinge immer leichter und schneller, wenn sie einen interessieren
Das kann ich in meinem persönlichen Fall sowohl vom Programmieren als auch vom Zeichnen bestätigen; wobei man letzterem ja noch mehr die Veranlagung hiterhersagt. Tatsächlich ist es aber zum allergrößten Teil das stetige Interesse und Auseinandersetzen mit dem Thema, welches das notwendige handwerkliche Geschick fördert. Wenn allerdings das Interesse (nicht am Ergebnis, sondern am Entstehungsprozess, das ist ein Unterschied!) nicht angeboren ist - zwingen kann man sich dazu so gut wie nicht.
0Dev
Beiträge: 2
Registriert: 06.08.2013, 23:00

Re: Algorithmisches Denken & Jump n Run

Beitrag von 0Dev »

Entschuldigt für die späte Antwort.

@Jonathan
Wird zur Kenntnis genommen vielen Dank :)

@Sternmull
Wie soll ich angehen wenn ich deine vorgestellten Algorithmen programmieren will ?
Erstmal mich in die Theorie einlesen oder es grob versuchen zu programmieren ?
Den Debugger werd ich mir ans Herz legen, bedanke mich!

@Schrompf
Werde ich garantiert, vielen Dank!

@Specialist
Befinde mich nicht mit der Mathematik nicht auf dem Kriegsbeil, bin immer offen etwas neues dazu zu lernen :)

@BeRsErKeR
Denke auch dass es keine Veranlagung ist, jedoch ist es gut zu wissen was andere darüber denken.
Vielen Dank!

@joeydee
Wenn man etwas lernen will sollte man auch dass Interesse dazu haben, wie du es gesagt hast.
Sonst artet dass nur in Frust aus, und lernt schlussendlich nichts.


Mit freundlichen Grüßen
Sascha
Benutzeravatar
Sternmull
Establishment
Beiträge: 264
Registriert: 27.04.2007, 00:30
Echter Name: Til
Wohnort: Dresden

Re: Algorithmisches Denken & Jump n Run

Beitrag von Sternmull »

Wie Schrompf schon sagte: Einfach machen!

Um die Umkehrung der Reihenfolge von Array-Elementen zu implementieren, braucht es ja jetzt nicht so viel Vorwissen. Du musst halt in der Lage sein Quelltext zu schreiben, zu kompilieren und auszuführen. Und natürlich den Algorithums zuerst in deinem Kopf zurecht zu legen (natürlich auch mit Hilfe von Papier und Bleistift oder allen anderen Mitteln die dir hilfreich erscheinen) und ihn dann in C++ formulieren zu können. Ob du dein Ziel erreicht hast, kannst du mit dem Debugger, printf, std::cout oder einem anderen Mittel deiner Wahl prüfen.
Für komplexere Sachen solltest du dir erst mal Referenzmaterial suchen. Wikipedia ist da meistens ein sehr guter Einstieg. Informationen zu Sortieralgorithmen wirst du dort z.B. reichlich finden.

Das was ich aufgezählt habe ist auch nicht verbindlich. Je nach deinem Interessenbereich, Vorkentnissen und deiner Veranlagung solltest du dir Ziele suchen die dich reizen und für dich erreichbar sind. Wenn es zu kompliziert ist dann vesuch es in Teilprobleme zu zerlegen. Wenn das nicht weiter geht und es immer noch zu kompliziert ist, dann such dir halt erst mal was anderes. So geht das dann Schritt für Schritt voran bis du irgendwann auch das umsetzen kannst was du eigentlich willst. Wobei sich das bis dahin dann auch wieder geändert haben kann. Der Weg ist hier Teil des Zieles.
Blackster
Beiträge: 3
Registriert: 11.01.2014, 15:59

Re: Algorithmisches Denken & Jump n Run

Beitrag von Blackster »

Hallo Sascha,

Eigentlich wurde schon fast alles gesagt. Ich kann übrigens bestätigen, dass man kein besonders guter Mathematiker sein muss um effektiv und gut programmieren zu können.
Kenne einen Mathematiker der Hobbyprogrammierer ist - er ist nicht besonders gut.
Wichtiger ist es - meine ich, in der Lage zu sein, sich vorstellen zu können, wie und wo der Computer Daten ablegt.
Eine der wichtigsten Strukturen ist da wie ich meine das Array - weil der Computer ja im Endeffekt alle Daten quasi eindimensional ablegt (auf Hardwareebene).
Auch schadet es nicht, sich mit der LinkedList oder ArrayList(aus Java) und Vector ein wenig zu beschäftigen.
Sobald du dir nämlich vorstellen kannst wie der Computer deine Daten abgelegt hat und wie du sie wieder ausliest, ist das oft schon die halbe Miete.
2. Wie kann man effektiv Programmieren üben?
und
3.Wie lange würde es dauern genug Erfahrung zu haben um ein Jump and Run im "Megaman X" - Stil zu programmieren?
Ich kann dir mal erzählen, wie ich mir als Kind autodidaktisch das Programmieren selbst beigebracht habe :
Ich habe ein Basic-Listing für eine Ellipse, die gezeichnet wurde zunächst einmal nur mühsam abgetippt ohne auch nur ansatzweise zu verstehen, was ich dort eigentlich abtippe.
Dann habe ich angefangen an den Variablen rumzuspielen.
Eine Kleinigkeit ändern, Programm starten, Ergebnis anschauen, Programm stoppen - und von vorne.
Und das immer und immer wieder.

Ich bin inzwischen ein sehr geübter Programmierer und habe jetzt nach über 10 Jahren Berufserfahrung mal ernsthaft angefangen ein Spiel zu entwickeln.
Ich habe recht schnell gemerkt, dass ein Spiel einen recht schnell vor Probleme stellt, die man aus der normalen Datenverarbeitung nicht unbedingt kennt.

Ich ging deswegen sehr langsam und schrittweise vor. Ich wollte für mein Raumschiff einen Kreisschuss implementieren, einen Schuss der kreisförmig in alle Richtungen vom Spieler
weg sich ausbreitet - mit einem Kreis aus beliebig definierbar vielen Kugeln.
Dafür musste ich zunächst einmal eine kleine Pflichtübung umsetzen : Selber einen Kreis zeichnen ohne zuhilfenahme einer Grafikbibliothek - was mit Kenntnissen der Mathematik der 9. oder 10. Klasse recht schnell erledigt ist.
Als der Kreis fertig war, musste ich nun diesen Kreis - wie auch immer - auf das Kugelarray meines Schusses übertragen.
Nachdem die Kugeln dann schlussendlich einen perfekten Kreis bildeten, machte ich mich daran dafür zu sorgen, dass alle Kugeln gleichzeitig sich kreisförmig vom Spieler wegbewegen.
Ab einer bestimmten zurückgelegten Entfernung sollte eine Kugel verschwinden.
Da brauchte ich schon wieder Mathematik - den Satz des Pythagoras.
Schwupp gabs das nächste kleinere Problem : nach dem Löschen einer Kugel den Speicher ordentlich aufräumen, so dass es keine Memory Leaks gibt.
(Grad die Vermeidung von Memory Leaks - das saubere Aufräumen von gelöschten Objekten die z.B. in dynamischen Listen geführt werden müssen, kann einen zu Beginn in C++ halb in den Wahnsinn treiben)

So dann funktionierte das alles und ich stellte fest, dass die Performance des Schusses deutlich zu wünschen übrig ließ, weil ich den Einheitskreis jedesmal berechnete, wenn der Spieler die Schuss-Taste betätigte.
x mal n mal den sin und cos eines bestimmten Winkels zu berechnen - das kostet ordentlich Prozessorzeit.

Wenn du willst kannst du es dir ja mal anschauen - hier noch eine etwas ältere Version, wo der Einheitskreis noch bei jedem einzelnen Schuss berechnet wird :

http://sys9.net/downloads/Battle_of_HybrisSDL2Win32.zip

Der Grund warum ich dir diese eine, eigentlich kleine Problemstellung so ausführlich schildere ist folgender : Gerade zu Beginn - so ist jedenfalls meine erste Erfahrung bei der Entwicklung eines Spiels mit C++ - hangelt man sich von einem Problem zum nächsten.
Ich könnte mir vorstellen, dass jemand dem ständiges Bugfixing noch nicht in Fleisch und Blut übergegangen ist, recht schnell frustriert werden könnte. Denn es kann durchaus mal passieren, dass man ein, zwei
oder gar drei Tage an ein und demselben Problem hockt und eine ganze Weile kein Stück weiter kommt.
Jemand der sowas noch nicht gewöhnt ist, noch keine Routine dafür hat, was zu tun ist wenn man mal mehrere Tage den Wald vor lauter Bäumen nicht mehr sieht, könnte schon bald die Lust am "eigenen Spiel" verlieren.

Aber jeder muss selbst herausfinden, wie er sich die Materie der Programmierung am besten aneignet.
Bleib ruhig bei C++! - wichtig ist, dass es dir Spaß macht - denn ohne Spaß an der Sache wirst du es nicht schaffen!

Wie lange du brauchst kommt vor allem darauf an, wie geübt du schon darin bist deine Wünsche in C++ zu formulieren - und im zweiten Schritt - der viel schlimmere - die Fehler deiner ersten Implementierung zu finden und auszubügeln.
Ehrlich - keine Ahnung wieviel Erfahrung man für Megaman X brauchen würde oder wie lange das dauern würde sich diese anzueignen.



LG
Blackster
Antworten