CodeGym/Java-Blog/Random-DE/Am Anfang war...
John Squirrels
Level 41
San Francisco

Am Anfang war...

Veröffentlicht in der Gruppe Random-DE
Am Anfang war ... - 1 Die Probezeit meines ersten Jobs endete vor drei Jahren, aber erst jetzt fand ich Zeit, einen Artikel zu schreiben. Ich habe ein Jahr in verschiedenen Abteilungen meiner Universität verbracht: Im ersten Semester habe ich Management studiert und im zweiten Semester bin ich in die Softwaretechnik gewechselt. Ich hatte gehofft, dass sie mir das Programmieren beibringen würden, aber ich habe mich geirrt. Also sammelte ich Materialien und beschloss, alles selbst zu lernen. Der einzige Grund, warum ich meinem Lehrer dankbar bin, ist, dass er mir empfohlen hat, mit Stephen Pratts E-Book „The C Programming Language“ zu beginnen. Es ist wirklich ein gutes Buch mit vielen praktischen Übungen. Ich verbrachte ungefähr zwei Monate mit dem Buch, dann stieß ich in den Gruppen eines Freundes auf diesen Online-Java-Kurs und so begann es. Zunächst hatte ich vor, Android-Entwickler zu werden, aber das Backend erschien mir mit zunehmendem Lernfortschritt interessanter. Ich habe übrigens drei Monate lang studiert, um Level 20 zu erreichen, und habe mich dann dazu entschieden, einen Job zu finden. Die erste Aufgabe bestand darin, in eine andere Stadt zu ziehenda es bei mir keine offenen Stellen für einen Junior-Java-Entwickler gab. Ich habe ein Unternehmen gefunden, mich beworben und eine Testaufgabe erhalten, für deren Bearbeitung ich eine Woche Zeit hatte. Ich musste eine einfache Webanwendung mit Hibernate, Servlet/JSP und MySQL schreiben. Als ich all diese Begriffe sah, wusste ich nur, dass MySQL eine Datenbank war. Zuerst war ich sehr enttäuscht. Ich beschloss sogar, bei irgendeinem KFC nach Stellenangeboten zu suchen, beschloss dann aber, mich an der Testaufgabe zu versuchen. Schließlich könnte ich immer einen Job bei KFC bekommen. Ich habe die ganze Woche ununterbrochen gearbeitet und es geschafft, den Test zu beenden. Ich habe meine Lösung eingereicht, aber sie war „nicht schön“, also habe ich sie noch viermal überarbeitet. Meine letzte Lösung erwies sich als richtig, aber die Stellen waren bereits besetzt und weitere Bewerbungen wurden erst nach 3 Monaten angenommen. Was wirst du tun, richtig? Für die nächsten 3 Monate Ich habe HTML, CSS, JS, SQL und PHP gelernt. Warum PHP? Ich brauchte eine Serversprache, die auf Anfragen und dergleichen reagiert. Damals schienen Servlets und JSP zu kompliziert. Am Ende habe ich eine vollwertige Webanwendung mit einer schrecklichen Benutzeroberfläche erstellt. Ich habe den Code für mein Portfolio auf GitHub veröffentlicht. Zu diesem Zeitpunkt waren bereits drei Monate vergangen, und das gleiche Unternehmen kontaktierte mich erneut und lud mich zu einem Vorstellungsgespräch ein. Dabei wurde mir eine weitere einfache Aufgabe gestellt, um meine SQL-Kenntnisse zu testen, die ich in wenigen Stunden erledigte. Die Person, mit der ich über Beschäftigung gesprochen habe, deutete an, dass sie nach Algorithmen und Datenstrukturen fragen würde – Themen, für deren Beherrschung ich noch keine Zeit hatte. Allerdings vergingen noch 15 Tage bis zum Vorstellungsgespräch. Ich schaff das! Mir hat Robert Lafores Buch „Data Structures & Algorithms in Java“ geholfen. Ich habe es nicht getan Ich hatte in zwei Wochen keine Zeit, alles zu lesen und zu verstehen, aber ich habe trotzdem viel gelernt. Und dann kam der Tag des Interviews. Ich kam zur verabredeten Zeit an. Zwei Männer begrüßten mich und das Interview begann. Zu sagen, dass ich mir Sorgen machte, wäre eine völlige Untertreibung. Meine Stimme zitterte. Sie fragten nach allem außer Algorithmen und Datenstrukturen. Sie fragten nach Spring, DI, IoC, Hibernate, wie die JVM funktioniert, wie der Garbage Collector funktioniert – ich konnte keine einzige dieser Fragen beantworten. Ich habe nur Fragen zu Java Core (Sammlungen, Ausnahmen, OOP usw.) erfolgreich beantwortet. Schon beim Vorstellungsgespräch wusste ich, dass ich durchgefallen war, war aber dennoch enttäuscht, keine Rückmeldung zu erhalten. Stattdessen erkannte ich Wissenslücken und begann fleißig daran zu arbeiten, diese zu schließen. Und dann kam der Tag des Interviews. Ich kam zur verabredeten Zeit an. Zwei Männer begrüßten mich und das Interview begann. Zu sagen, dass ich mir Sorgen machte, wäre eine völlige Untertreibung. Meine Stimme zitterte. Sie fragten nach allem außer Algorithmen und Datenstrukturen. Sie fragten nach Spring, DI, IoC, Hibernate, wie die JVM funktioniert, wie der Garbage Collector funktioniert – ich konnte keine einzige dieser Fragen beantworten. Ich habe nur Fragen zu Java Core (Sammlungen, Ausnahmen, OOP usw.) erfolgreich beantwortet. Schon beim Vorstellungsgespräch wusste ich, dass ich durchgefallen war, war aber dennoch enttäuscht, keine Rückmeldung zu erhalten. Stattdessen erkannte ich Wissenslücken und begann fleißig daran zu arbeiten, diese zu schließen. Und dann kam der Tag des Interviews. Ich kam zur verabredeten Zeit an. Zwei Männer begrüßten mich und das Interview begann. Zu sagen, dass ich mir Sorgen machte, wäre eine völlige Untertreibung. Meine Stimme zitterte. Sie fragten nach allem außer Algorithmen und Datenstrukturen. Sie fragten nach Spring, DI, IoC, Hibernate, wie die JVM funktioniert, wie der Garbage Collector funktioniert – ich konnte keine einzige dieser Fragen beantworten. Ich habe nur Fragen zu Java Core (Sammlungen, Ausnahmen, OOP usw.) erfolgreich beantwortet. Schon beim Vorstellungsgespräch wusste ich, dass ich durchgefallen war, war aber dennoch enttäuscht, keine Rückmeldung zu erhalten. Stattdessen erkannte ich Wissenslücken und begann fleißig daran zu arbeiten, diese zu schließen. Zu sagen, dass ich mir Sorgen machte, wäre eine völlige Untertreibung. Meine Stimme zitterte. Sie fragten nach allem außer Algorithmen und Datenstrukturen. Sie fragten nach Spring, DI, IoC, Hibernate, wie die JVM funktioniert, wie der Garbage Collector funktioniert – ich konnte keine einzige dieser Fragen beantworten. Ich habe nur Fragen zu Java Core (Sammlungen, Ausnahmen, OOP usw.) erfolgreich beantwortet. Schon beim Vorstellungsgespräch wusste ich, dass ich durchgefallen war, war aber dennoch enttäuscht, keine Rückmeldung zu erhalten. Stattdessen erkannte ich Wissenslücken und begann fleißig daran zu arbeiten, diese zu schließen. Zu sagen, dass ich mir Sorgen machte, wäre eine völlige Untertreibung. Meine Stimme zitterte. Sie fragten nach allem außer Algorithmen und Datenstrukturen. Sie fragten nach Spring, DI, IoC, Hibernate, wie die JVM funktioniert, wie der Garbage Collector funktioniert – ich konnte keine einzige dieser Fragen beantworten. Ich habe nur Fragen zu Java Core (Sammlungen, Ausnahmen, OOP usw.) erfolgreich beantwortet. Schon beim Vorstellungsgespräch wusste ich, dass ich durchgefallen war, war aber dennoch enttäuscht, keine Rückmeldung zu erhalten. Stattdessen erkannte ich Wissenslücken und begann fleißig daran zu arbeiten, diese zu schließen. Ich habe nur Fragen zu Java Core (Sammlungen, Ausnahmen, OOP usw.) erfolgreich beantwortet. Schon beim Vorstellungsgespräch wusste ich, dass ich durchgefallen war, war aber dennoch enttäuscht, keine Rückmeldung zu erhalten. Stattdessen erkannte ich Wissenslücken und begann fleißig daran zu arbeiten, diese zu schließen. Ich habe nur Fragen zu Java Core (Sammlungen, Ausnahmen, OOP usw.) erfolgreich beantwortet. Schon beim Vorstellungsgespräch wusste ich, dass ich durchgefallen war, war aber dennoch enttäuscht, keine Rückmeldung zu erhalten. Stattdessen erkannte ich Wissenslücken und begann fleißig daran zu arbeiten, diese zu schließen.Einen Monat nach meinem gescheiterten Vorstellungsgespräch habe ich einen Job gefunden. Übrigens habe ich die Stellenausschreibung in Diskussionen über CodeGym gefunden ( CodeGym ist die russischsprachige Version von CodeGym – Anmerkung der Redaktion).). Zuerst gab es ein Skype-Interview mit einem Personalvermittler (es dauerte etwa 2 Stunden). Sie fragten nach Java Core, Garbage Collection (jetzt wusste ich, wie es funktioniert), Datenbanken und Datenstrukturen. Der Interviewer bat mich, meinen Bildschirm zu teilen und einen Taschenrechner zu schreiben. Ich weinte fast vor Freude, da ich erst eine Woche zuvor einen Taschenrechner geschrieben hatte. Selbstbewusst begann ich mit der Aufgabe. Aber ob aus Aufregung oder aus einem anderen Grund, ich habe einen Teil des Algorithmus vergessen. Mein Bildschirm wurde geteilt. Ich hatte Angst davor, Google zu konsultieren. Zum Glück hatte ich mein Handy, was mir den Arsch gerettet hat. Am nächsten Tag riefen sie zu einem persönlichen Vorstellungsgespräch an und ein paar Tage später erhielt ich ein Angebot. Es war keine offizielle Position. Meine Rolle war die eines Lehrlings bei einem Einzelunternehmer. Wir haben einen Service für die Veranstaltungsplanung, den Ticketverkauf usw. geschrieben. Ich erinnere mich an meinen ersten Arbeitstag. Mein Chef brauchte 15 Minuten, um zu erklären, was zu tun war. „Ist alles klar?“ er hat gefragt. „Hmm, nicht wirklich. Kannst du es noch einmal durchgehen?“ Ich fragte mit großer Sorge. Der Chef hat alles noch einmal erklärt. „Es ist jetzt klar?“ „Ja, jetzt ist es soweit.“ Eigentlich habe ich NICHTS verstanden. Aber ich hatte Angst, um eine weitere Erklärung zu bitten. Ich denke, jeder Angestellte kann das verstehen. Die Aufgabe lief auf die Portierung von Thymeleaf nach AngularJS hinaus. Glücklicherweise habe ich einen Teil des fertigen Codes gefunden und ihn als Beispiel dafür verwendet, was zu tun ist. Ich habe nicht verstanden, wie es funktioniert, aber ich habe die Aufgabe erledigt. Anschließend wurden mir Aufgaben übertragen, die einen direkten Bezug zum Backend hatten. Erst nach einer praktischen Erfahrung mit Spring begann ich zu verstehen, was ich in „Spring for Professionals“ gelesen habe. Ich arbeitete dort 8 Monate lang und zog dann in eine andere Stadt, wo ich schnell einen offiziellen Job fand, 2 Jahre lang arbeitete und nebenbei meinen Titel von „Junior“ in „Mid-Level“ änderte. Dann musste ich feststellen, dass mein Job zur Routine geworden war und mir keinen Tropfen Freude bereitete. Also machte ich eine Pause. Um zu verhindern, dass meine Finger während meiner Pause verkümmern, beschloss ich, mich in einem anderen Bereich zu versuchen: der Spieleentwicklung. Genauer gesagt, Entwicklung mobiler Spiele, wobei ich mir Android aneignete, da ich bereits Java kannte. Und darüber werde ich jetzt ausführlich sprechen. Erst nach einer praktischen Erfahrung mit Spring begann ich zu verstehen, was ich in „Spring for Professionals“ gelesen habe. Ich arbeitete dort 8 Monate lang und zog dann in eine andere Stadt, wo ich schnell einen offiziellen Job fand, 2 Jahre lang arbeitete und nebenbei meinen Titel von „Junior“ in „Mid-Level“ änderte. Dann musste ich feststellen, dass mein Job zur Routine geworden war und mir keinen Tropfen Freude bereitete. Also machte ich eine Pause. Um zu verhindern, dass meine Finger während meiner Pause verkümmern, beschloss ich, mich in einem anderen Bereich zu versuchen: der Spieleentwicklung. Genauer gesagt, Entwicklung mobiler Spiele, wobei ich mir Android aneignete, da ich bereits Java kannte. Und darüber werde ich jetzt ausführlich sprechen. Erst nach einer praktischen Erfahrung mit Spring begann ich zu verstehen, was ich in „Spring for Professionals“ gelesen habe. Ich arbeitete dort 8 Monate lang und zog dann in eine andere Stadt, wo ich schnell einen offiziellen Job fand, 2 Jahre lang arbeitete und nebenbei meinen Titel von „Junior“ in „Mid-Level“ änderte. Dann musste ich feststellen, dass mein Job zur Routine geworden war und mir keinen Tropfen Freude bereitete. Also machte ich eine Pause. Um zu verhindern, dass meine Finger während meiner Pause verkümmern, beschloss ich, mich in einem anderen Bereich zu versuchen: der Spieleentwicklung. Genauer gesagt, Entwicklung mobiler Spiele, wobei ich mir Android aneignete, da ich bereits Java kannte. Und darüber werde ich jetzt ausführlich sprechen. Dort fand ich schnell einen offiziellen Job, arbeitete zwei Jahre lang und änderte nebenbei meinen Titel von „Junior“ in „Mid-Level“. Dann musste ich feststellen, dass mein Job zur Routine geworden war und mir keinen Tropfen Freude bereitete. Also machte ich eine Pause. Um zu verhindern, dass meine Finger während meiner Pause verkümmern, beschloss ich, mich in einem anderen Bereich zu versuchen: der Spieleentwicklung. Genauer gesagt, Entwicklung mobiler Spiele, wobei ich mir Android aneignete, da ich bereits Java kannte. Und darüber werde ich jetzt ausführlich sprechen. Dort fand ich schnell einen offiziellen Job, arbeitete zwei Jahre lang und änderte nebenbei meinen Titel von „Junior“ in „Mid-Level“. Dann musste ich feststellen, dass mein Job zur Routine geworden war und mir keinen Tropfen Freude bereitete. Also machte ich eine Pause. Um zu verhindern, dass meine Finger während meiner Pause verkümmern, beschloss ich, mich in einem anderen Bereich zu versuchen: der Spieleentwicklung. Genauer gesagt, Entwicklung mobiler Spiele, wobei ich mir Android aneignete, da ich bereits Java kannte. Und darüber werde ich jetzt ausführlich sprechen. Ich beschloss, mich in einem anderen Bereich zu versuchen: der Spieleentwicklung. Genauer gesagt, Entwicklung mobiler Spiele, wobei ich mir Android aneignete, da ich bereits Java kannte. Und darüber werde ich jetzt ausführlich sprechen. Ich beschloss, mich in einem anderen Bereich zu versuchen: der Spieleentwicklung. Genauer gesagt, Entwicklung mobiler Spiele, wobei ich mir Android aneignete, da ich bereits Java kannte. Und darüber werde ich jetzt ausführlich sprechen.Mein Team. In kurzer Zeit hatte ich ein kleines Team von 4 Leuten (einschließlich mir) zusammengestellt: 2 Entwickler, 1 Spieledesigner und 1 Toningenieur. Da niemand im Team Erfahrung in der Spieleentwicklung hatte und meine Urlaubszeit begrenzt war, beschlossen wir, ein einfaches Projekt umzusetzen, das wir auf jeden Fall abschließen konnten. Und das haben wir getan! Ursprünglich war die Frist der 15. November, aber wie Sie wissen, ist es einfach falsch, ein Projekt termingerecht abzuschließen. Also haben wir es mit zwei Wochen Verspätung fertiggestellt. Unser Technologie-Stack bestand aus Java 8 und libGDX.

Entwicklung

Die Entwicklung begann am 17. Oktober. Insgesamt verbrachten wir 45 Tage, in denen wir:
  1. Wir haben gelernt, wie man libGDX verwendet.
  2. Wir haben Code geschrieben.
  3. Wir haben Grafiken erstellt.
  4. Wir haben Musik gemacht.
Jeder, der das Spiel gesehen hat, könnte sich fragen: „Warum hat es so lange gedauert? Das Spiel ist so einfach.“ Ja, das stimmt, und um genau zu sein, hat der Entwicklungsteil (das Schreiben des Codes) etwa anderthalb Wochen gedauert. Die restliche Zeit wurde aufgeteilt zwischen:
  1. Beherrschen der Verwendung der Spiel-Engine.
  2. Zeichnen und Neuzeichnen von Kunstwerken.
  3. Musik komponieren.
  4. Suche nach Sounds auf https://freesound.org .
  5. Lesen Sie haufenweise Artikel darüber, wie man Spiele bewirbt.
Aus verschiedenen Gründen hatten wir auch Momente der „Ausfallzeit“: Jemand hatte eine Prüfung, jemand anderes hatte einen Nachholtest usw. Wir können der Ausfallzeit sicherlich anderthalb Wochen oder mehr zuschreiben. Es wurde auch einige Zeit mit „Debatten“ verbracht: Fast täglich tauchten neue Ideen auf, was man dem Spiel hinzufügen könnte, also debattierten wir: „Das ist überflüssig“, „Das passt nicht“ usw. Wir haben viele Ideen verworfen, Zum Beispiel das Hinzufügen laufender Kakerlaken, die zerquetscht werden können, um zusätzliche Punkte zu erhalten: Meiner Meinung nach war es eines der schwierigsten Dinge, im Voraus zu entscheiden, was im Spiel sein würde, und sich an den Plan zu halten, ohne zu versuchen, „nur noch eine“ hinzuzufügen " Besonderheit. So summierten sich diese 45 Tage. Ein Prototyp des Spiels war nach anderthalb Wochen fertig. In dieser Zeit hatten wir wirklich keine Grafiken, Am Anfang war ... - 2Das Spiel ist technisch gesehen sehr einfach. Wir mussten nicht einmal box2d (eine Physik-Engine) verwenden. Wir können selbst mit Kollisionen umgehen und die Hypotenuse berechnen. Die interessantesten Punkte, die ich hervorheben möchte, sind:
  1. Zunächst wurden alle Spielelemente zufällig generiert. Mit anderen Worten, wir haben Anbieter (von Schwarzen Löchern, Scheren, Ninja-Sternen, Bleistiftminen, Herzen) in ein Array eingefügt, einen zufälligen Anbieter erhalten und ein Element mit zufälligen Koordinaten erhalten. Es sei ziemlich schnell klar geworden, dass dieser Ansatz „wirklich nicht wirklich gut“ sei. Freunde, die an den Tests teilnahmen, sagten uns dasselbe und empfahlen die Verwendung von Vorlagen. Für diejenigen, die an der Spieleentwicklung beteiligt sind, ist dies wahrscheinlich eine naheliegende Lösung. Da wir jedoch Neulinge auf diesem Gebiet waren, war es für uns ein sehr praktischer Rat.

    Deshalb haben wir mehrere Vorlagen erstellt: ein Tal aus Scheren; Bleistiftminen – es ist ziemlich cool, sie superschnell einzusammeln (wusch, wusch, wusch mit dem Finger); und noch eine Vorlage, von der ich nicht weiß, wie ich sie nennen soll – ich sage Ihnen nur, wie wir die Klasse in unserem Code benannt haben: StraightForwardPattern.

    Am Anfang war ... - 3

    Diese Vorlagen haben es verbessert, aber es wurde irgendwie zu vorhersehbar. Deshalb haben wir noch eine hinzugefügt: eine Zufallsvorlage. Mit anderen Worten, wir haben jetzt einige „statische“ Vorlagen und eine zufällige (fügen Sie hier „perfekt ausbalanciertes“ Meme ein).

  2. Hier ist das Hauptproblem, auf das wir gestoßen sind. LibGDX ruft die Render-Methode (Float Delta) in einer Endlosschleife auf. Hier werden alle Elemente gezeichnet. Die Bleistiftlinie wird wie folgt gezeichnet: Wir ermitteln die Fingerkoordinaten und zeichnen dort die Textur. Wenn wir also unseren Finger sehr schnell über den Bildschirm bewegen würden, würde die Zeile aufgrund der Millisekunden zwischen Aufrufen der render(delta)-Methode „Lücken“ aufweisen.

    Die Lösung war ganz einfach: Wir merken uns die letzten Koordinaten, an denen die Textur gezeichnet wurde, rufen die nächsten Koordinaten ab und wenn der Abstand zwischen ihnen mehr als X beträgt und der Finger nicht losgelassen wurde, füllen wir die Lücke. Zuerst dachten wir, diese Option würde möglicherweise nicht funktionieren – die Linien wären eckig. Aber unsere Befürchtungen waren unbegründet, alles funktionierte wie es sollte.

Über das Spiel

Das Gameplay erhebt nicht den Anspruch, einzigartig zu sein, aber es ist ziemlich gut und kann Benutzer in seinen Bann ziehen. Sie steuern einen Bleistift, zeichnen buchstäblich auf Papier und weichen Hindernissen aus – Scheren, Ninja-Sternen und schwarzen Löchern. In der Zwischenzeit geht Ihre Bleistiftmine zur Neige und Sie müssen kleine Bleistifte in die Hand nehmen. Wenn Ihr Bleistift zu Ende geht, bevor Sie einen kleinen Bleistift einsammeln, können Sie ein Stück Spiegel nehmen. Anstatt die Bleistiftmine zu verbrauchen, wird sie für ein paar Sekunden wiederhergestellt, gleichzeitig werden jedoch die Bedienelemente gespiegelt – wenn sich Ihr Finger nach links bewegt, zeichnet der Bleistift nach rechts. Sie können auch ein Herz aufheben, mit dem Sie einmal auf ein Hindernis stoßen und am Leben bleiben. Je länger Sie den Stift bewegen, ohne den Finger anzuheben, desto höher ist Ihre Kombination, was bedeutet, dass Sie schneller Punkte sammeln. Am Anfang war ... - 4Auch die Geschwindigkeit des Spiels nimmt sukzessive zu. Das Einzige, was fehlt, sind wütende Vögel. Ursprünglich hatten wir geplant, das Spiel Karan Dash zu nennen (die Transliteration des russischen Wortes für Bleistift ist karandash – ha! verstanden?), aber später haben wir unsere Meinung geändert und uns für Pencil Dash entschieden. Wir haben dies getan, weil dieses anmutige Wortspiel nur von einem russischsprachigen Publikum verstanden werden würde. Wir haben das Spiel vor ein paar Tagen veröffentlicht und bewerben es jetzt. Auch hier hat niemand im Team Erfahrung. Unser gesamtes Wissen über Spielewerbung haben wir aus verschiedenen Artikeln gewonnen. Wir haben Informationen zum Spiel kostenlos auf verschiedenen Websites/Foren veröffentlicht. Zu unseren kostenpflichtigen Kanälen gehörten Werbung auf 4pd, Werbung mit einem Blogger, mehrere Beiträge in öffentlichen Gruppen auf VKontakte und AdMob-Werbung. Dieser Beitrag ist übrigens auch Teil unserer Werbung, daher füge ich mit Genehmigung der Website-Administration hier einen Link zum Spiel ein. Sie finden das Spiel hier bei Google Play . Ich wäre Ihnen dankbar, wenn Sie es installieren würden (vielleicht wird es Ihnen gefallen!), und wenn Sie eine Bewertung hinterlassen, verspreche ich, ein Kind nach Ihnen zu benennen! :) :) Am Anfang war ... - 6
Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare