CodeGym/Java Blogu/Rastgele/Başlangıçta vardı...
John Squirrels
Seviye
San Francisco

Başlangıçta vardı...

grupta yayınlandı
Başlangıçta ... - 1 İlk işimin deneme süresi 3 yıl önce bitti ama ancak şimdi makale yazmaya vakit bulabildim. Üniversitemde farklı bölümlerde bir yıl geçirdim: ilk dönemimde işletme okudum ve ikinci dönemimde yazılım mühendisliğine geçtim. Bana programlamayı öğreteceklerini umuyordum ama yanılmışım. Bu yüzden materyal topladım ve her şeyi kendi başıma öğrenmeye karar verdim. Öğretmenime minnettar olmamın tek nedeni Stephen Pratt'ın "C Programlama Dili" adlı e-kitabıyla başlamamı tavsiye etmesi. Gerçekten çok sayıda pratik egzersiz içeren iyi bir kitap. Kitap için yaklaşık 2 ay harcadım, ardından bir arkadaşımın gruplarında bu çevrimiçi Java kursuna rastladım ve böylece başladı. İlk başta Android geliştiricisi olmayı planladım., ancak öğrenmemde ilerledikçe arka uç bana daha ilginç geldi. Bu arada, 20. Seviyeye ulaşmam 3 ay çalışmamı aldı ve ardından bir iş bulmaya karar verdim. İlk iş emri başka bir şehre taşınmak oldu.çünkü benimki genç bir Java geliştiricisi için herhangi bir açıklığa sahip değildi. Bir şirket buldum, başvurdum ve tamamlamam için bana bir hafta verilen bir test görevi aldım. Hibernate, Servlet/JSP ve MySQL kullanarak basit bir web uygulaması yazmak zorunda kaldım. Tüm bu terimleri görünce, sadece MySQL'in bir veritabanı olduğunu biliyordum. İlk başta çok hayal kırıklığına uğradım. Hatta bazı KFC'lerde iş fırsatları aramaya karar verdim, ancak daha sonra test görevine bir göz atmaya karar verdim. Ne de olsa, her zaman KFC'de bir iş bulabilirim. Bütün hafta durmadan çalıştım ve testi bitirmeyi başardım. Çözümümü gönderdim ama "hoş değildi", bu yüzden 4 kez daha revize ettim. Son çözümüm doğru çıktı ama pozisyonlar çoktan dolmuştu ve 3 ay boyunca ek başvurular kabul edilmeyecekti. Ne yapacaksın, değil mi? Önümüzdeki 3 ay boyunca, HTML, CSS, JS, SQL ve PHP öğrendim. Neden PHP? İsteklere cevap verecek bir sunucu diline ihtiyacım vardı. O zamanlar servlet'ler ve jsp çok karmaşık görünüyordu. Sonunda, korkunç bir arayüze sahip tam teşekküllü bir web uygulaması ürettim. Kodu portföyüm için GitHub'da yayınladım. Bu zamana kadar 3 ay geçti ve aynı şirket benimle tekrar iletişime geçti ve beni bir görüşmeye davet ederek SQL bilgimi test etmek için birkaç saat içinde tamamlamayı başardığım basit bir görev daha verdi. İstihdam hakkında konuştuğum kişi, algoritmalar ve veri yapıları - henüz uzmanlaşmaya vaktim olmadığı konular - hakkında soru soracaklarını ima etti. Bununla birlikte, görüşmeden önce 15 gün vardı. Bunu anladım! Robert Lafore'nin "Java'da Veri Yapıları ve Algoritmalar" kitabı bana yardımcı oldu. ben yapmadım İki haftada hepsini okuyup anlayacak zamanım olmadı ama yine de çok şey öğrendim. Ve mülakat günü geldi. Belirlenen saatte geldim. İki adam beni karşıladı ve görüşme başladı. Endişelendiğimi söylemek çılgınca bir yetersizlik olurdu. Sesim titredi. Algoritmalar ve veri yapıları dışında her şeyi sordular. Spring, DI, IoC, Hibernate, JVM'nin nasıl çalıştığını, çöp toplayıcının nasıl çalıştığını sordular - bu soruların hiçbirini yanıtlayamadım. Yalnızca Java Core ile ilgili soruları (koleksiyonlar, istisnalar, OOP vb.) başarıyla yanıtladım. Hala görüşmedeyken başarısız olduğumu biliyordum ama yine de herhangi bir geri bildirim alamayınca hayal kırıklığına uğradım. Bunun yerine, bilgimdeki boşlukları belirledim ve bunları kapatmak için özenle çalışmaya başladım. Ve mülakat günü geldi. Belirlenen saatte geldim. İki adam beni karşıladı ve görüşme başladı. Endişelendiğimi söylemek çılgınca bir yetersizlik olurdu. Sesim titredi. Algoritmalar ve veri yapıları dışında her şeyi sordular. Spring, DI, IoC, Hibernate, JVM'nin nasıl çalıştığını, çöp toplayıcının nasıl çalıştığını sordular - bu soruların hiçbirini yanıtlayamadım. Yalnızca Java Core ile ilgili soruları (koleksiyonlar, istisnalar, OOP vb.) başarıyla yanıtladım. Hala görüşmedeyken başarısız olduğumu biliyordum ama yine de herhangi bir geri bildirim alamayınca hayal kırıklığına uğradım. Bunun yerine, bilgimdeki boşlukları belirledim ve bunları kapatmak için özenle çalışmaya başladım. Ve mülakat günü geldi. Belirlenen saatte geldim. İki adam beni karşıladı ve görüşme başladı. Endişelendiğimi söylemek çılgınca bir yetersizlik olurdu. Sesim titredi. Algoritmalar ve veri yapıları dışında her şeyi sordular. Spring, DI, IoC, Hibernate, JVM'nin nasıl çalıştığını, çöp toplayıcının nasıl çalıştığını sordular - bu soruların hiçbirini yanıtlayamadım. Yalnızca Java Core ile ilgili soruları (koleksiyonlar, istisnalar, OOP vb.) başarıyla yanıtladım. Hala görüşmedeyken başarısız olduğumu biliyordum ama yine de herhangi bir geri bildirim alamayınca hayal kırıklığına uğradım. Bunun yerine, bilgimdeki boşlukları belirledim ve bunları kapatmak için özenle çalışmaya başladım. Endişelendiğimi söylemek çılgınca bir yetersizlik olurdu. Sesim titredi. Algoritmalar ve veri yapıları dışında her şeyi sordular. Spring, DI, IoC, Hibernate, JVM'nin nasıl çalıştığını, çöp toplayıcının nasıl çalıştığını sordular - bu soruların hiçbirini yanıtlayamadım. Yalnızca Java Core ile ilgili soruları (koleksiyonlar, istisnalar, OOP vb.) başarıyla yanıtladım. Hala görüşmedeyken başarısız olduğumu biliyordum ama yine de herhangi bir geri bildirim alamayınca hayal kırıklığına uğradım. Bunun yerine, bilgimdeki boşlukları belirledim ve bunları kapatmak için özenle çalışmaya başladım. Endişelendiğimi söylemek çılgınca bir yetersizlik olurdu. Sesim titredi. Algoritmalar ve veri yapıları dışında her şeyi sordular. Spring, DI, IoC, Hibernate, JVM'nin nasıl çalıştığını, çöp toplayıcının nasıl çalıştığını sordular - bu soruların hiçbirini yanıtlayamadım. Yalnızca Java Core ile ilgili soruları (koleksiyonlar, istisnalar, OOP vb.) başarıyla yanıtladım. Hala görüşmedeyken başarısız olduğumu biliyordum ama yine de herhangi bir geri bildirim alamayınca hayal kırıklığına uğradım. Bunun yerine, bilgimdeki boşlukları belirledim ve bunları kapatmak için özenle çalışmaya başladım. Yalnızca Java Core ile ilgili soruları (koleksiyonlar, istisnalar, OOP vb.) başarıyla yanıtladım. Hala görüşmedeyken başarısız olduğumu biliyordum ama yine de herhangi bir geri bildirim alamayınca hayal kırıklığına uğradım. Bunun yerine, bilgimdeki boşlukları belirledim ve bunları kapatmak için özenle çalışmaya başladım. Yalnızca Java Core ile ilgili soruları (koleksiyonlar, istisnalar, OOP vb.) başarıyla yanıtladım. Hala görüşmedeyken başarısız olduğumu biliyordum ama yine de herhangi bir geri bildirim alamayınca hayal kırıklığına uğradım. Bunun yerine, bilgimdeki boşlukları belirledim ve bunları kapatmak için özenle çalışmaya başladım.Başarısız olan görüşmemden bir ay sonra bir iş buldum. Bu arada, CodeGym'taki tartışmalarda açılan işi buldum ( CodeGym, CodeGym'in Rusça versiyonudur — editörün notu)). İlk olarak, işe alım görevlisiyle bir Skype görüşmesi yapıldı (yaklaşık 2 saat sürdü). Java Çekirdeği, çöp toplama (artık nasıl çalıştığını biliyordum), veritabanları ve veri yapılarını sordular. Görüşmeci benden ekranımı paylaşmamı ve bir hesap makinesi yazmamı istedi. Daha bir hafta önce hesap makinesi yazdığım için neredeyse sevinçten ağlayacaktım. Kendime güvenerek göreve başladım. Ama heyecanımdan mı yoksa başka bir nedenden mi algoritmanın bir kısmını unuttum. Ekranım paylaşıldı. Google'a danışmaktan korktum. Neyse ki, kıçımı kurtaran cep telefonum vardı. Ertesi gün yüz yüze görüşme için aradılar ve birkaç gün sonra bir teklif aldım.. Resmi bir pozisyon değildi. Rolüm, bir şahıs firmasının çırağıydı. Etkinlik planlama, bilet satma vs. için bir servis yazdık. İlk iş günümü hatırlıyorum. Patronumun yapılması gerekenleri açıklaması 15 dakika sürdü. "Her şey açık mı?" O sordu. "Hmm, pek değil. Bir kez daha üzerinden geçebilir misin?" Büyük bir endişeyle sordum. Patron her şeyi tekrar açıkladı. "Şimdi anlaşıldı mı?" "Evet, şimdi öyle." Aslında HİÇBİR ŞEY anlamadım. Ama başka bir açıklama istemeye korkuyordum. Sanırım çalışan herkes bunu anlayabilir. Görev, Thymeleaf'ten AngularJS'ye taşımaya kadar kaynatıldı. Neyse ki, bir parça bitmiş kod buldum ve bunu ne yapacağıma örnek olarak kullandım. Nasıl çalıştığını anlamadım ama görevi bitirdim. Daha sonra doğrudan arka uçla ilgili görevler verildi. Ancak Spring ile pratik bir deneyimden sonra "Profesyoneller için Bahar" da okuduklarımı anlamaya başladım. Orada 8 ay çalıştım ve sonra başka bir şehre taşındım, burada hızla resmi bir iş buldum, 2 yıl çalıştım ve yol boyunca "genç" olan unvanımı "orta düzey" olarak değiştirdim. Sonra işimin rutinleştiği ve bana bir gram zevk vermediği gerçeğiyle yüzleştim. Ben de ara verdim. Mola sırasında parmaklarımın körelmesini önlemek için elimi başka bir alanda denemeye karar verdim: oyun geliştirme. Daha spesifik olarak, mobil oyun geliştirme, Java'yı zaten bildiğim için Android'i alıyorum. Ve şimdi ayrıntılı olarak bahsedeceğim şey bu. Ancak Spring ile pratik bir deneyimden sonra "Profesyoneller için Bahar" da okuduklarımı anlamaya başladım. Orada 8 ay çalıştım ve sonra başka bir şehre taşındım, burada hızla resmi bir iş buldum, 2 yıl çalıştım ve yol boyunca "genç" olan unvanımı "orta düzey" olarak değiştirdim. Sonra işimin rutinleştiği ve bana bir gram zevk vermediği gerçeğiyle yüzleştim. Ben de ara verdim. Mola sırasında parmaklarımın körelmesini önlemek için elimi başka bir alanda denemeye karar verdim: oyun geliştirme. Daha spesifik olarak, mobil oyun geliştirme, Java'yı zaten bildiğim için Android'i alıyorum. Ve şimdi ayrıntılı olarak bahsedeceğim şey bu. Ancak Spring ile pratik bir deneyimden sonra "Profesyoneller için Bahar" da okuduklarımı anlamaya başladım. Orada 8 ay çalıştım ve sonra başka bir şehre taşındım, burada hızla resmi bir iş buldum, 2 yıl çalıştım ve yol boyunca "genç" olan unvanımı "orta düzey" olarak değiştirdim. Sonra işimin rutinleştiği ve bana bir gram zevk vermediği gerçeğiyle yüzleştim. Ben de ara verdim. Mola sırasında parmaklarımın körelmesini önlemek için elimi başka bir alanda denemeye karar verdim: oyun geliştirme. Daha spesifik olarak, mobil oyun geliştirme, Java'yı zaten bildiğim için Android'i alıyorum. Ve şimdi ayrıntılı olarak bahsedeceğim şey bu. hızlı bir şekilde resmi bir iş bulduğum, 2 yıl çalıştığım ve bu arada unvanımı "genç" ten "orta düzey" e çevirdiğim yer. Sonra işimin rutinleştiği ve bana bir gram zevk vermediği gerçeğiyle yüzleştim. Ben de ara verdim. Mola sırasında parmaklarımın körelmesini önlemek için elimi başka bir alanda denemeye karar verdim: oyun geliştirme. Daha spesifik olarak, mobil oyun geliştirme, Java'yı zaten bildiğim için Android'i alıyorum. Ve şimdi ayrıntılı olarak bahsedeceğim şey bu. hızlı bir şekilde resmi bir iş bulduğum, 2 yıl çalıştığım ve bu arada unvanımı "genç" ten "orta düzey" e çevirdiğim yer. Sonra işimin rutinleştiği ve bana bir gram zevk vermediği gerçeğiyle yüzleştim. Ben de ara verdim. Mola sırasında parmaklarımın körelmesini önlemek için elimi başka bir alanda denemeye karar verdim: oyun geliştirme. Daha spesifik olarak, mobil oyun geliştirme, Java'yı zaten bildiğim için Android'i alıyorum. Ve şimdi ayrıntılı olarak bahsedeceğim şey bu. Şansımı başka bir alanda denemeye karar verdim: oyun geliştirme. Daha spesifik olarak, mobil oyun geliştirme, Java'yı zaten bildiğim için Android'i alıyorum. Ve şimdi ayrıntılı olarak bahsedeceğim şey bu. Şansımı başka bir alanda denemeye karar verdim: oyun geliştirme. Daha spesifik olarak, mobil oyun geliştirme, Java'yı zaten bildiğim için Android'i alıyorum. Ve şimdi ayrıntılı olarak bahsedeceğim şey bu.Benim takımım. Kısa sürede 4 kişilik küçük bir ekip kurdum (ben dahil): 2 geliştirici, 1 oyun tasarımcısı ve 1 ses mühendisi. Takımdaki hiç kimsenin oyun geliştirme konusunda deneyimi olmadığı ve tatil zamanım kısıtlı olduğu için kesinlikle bitirebileceğimiz basit bir proje uygulamaya karar verdik. Ve biz de yaptık! Başlangıçta son teslim tarihi 15 Kasım'dı, ancak bildiğiniz gibi bir projeyi zamanında bitirmek yanlıştır. O yüzden iki hafta geç bitirdik. Teknoloji yığınımız Java 8 ve libGDX'ten oluşuyordu.

Gelişim

Geliştirme 17 Ekim'de başladı. Toplamda 45 gün geçirdik ve bu süre boyunca:
  1. libGDX kullanmayı öğrendik.
  2. Kod yazdık.
  3. Grafikler oluşturduk.
  4. Müzik yarattık.
Oyunu gören herkes "Neden bu kadar uzun sürdü? Oyun çok basit" diyebilir. Evet, bu doğru ve daha kesin olmak gerekirse, geliştirme kısmı (kodu yazmak) yaklaşık bir buçuk hafta sürdü. Zamanın geri kalanı arasında bölündü:
  1. Oyun motorunun nasıl kullanılacağına hakim olmak.
  2. Resmin çizilmesi ve yeniden çizilmesi.
  3. Müzik yazmak.
  4. https://freesound.org adresinde sesler aranıyor .
  5. Oyunların nasıl tanıtılacağına dair yığınla makale okumak.
Ayrıca çeşitli nedenlerle "duruş" anlarımız da oldu: birinin sınavı vardı, bir başkasının bütünleme testi vardı, vb. Bir buçuk haftayı veya daha fazlasını kesinti süresine kesinlikle bağlayabiliriz. "Tartışmalara" da biraz zaman harcandı: oyuna ne ekleneceğine dair yeni fikirler neredeyse her gün ortaya çıktı, bu yüzden "bu gereksiz", "uymaz" vb. örneğin, ekstra puan almak için ezilebilecek koşan hamamböceklerini eklemek: bence en zor şeylerden biri, oyunda ne olacağına önceden karar vermek ve "sadece bir tane daha" eklemeye çalışmadan plana bağlı kalmaktı. " özellik. Bu 45 gün böyle birikti. Oyunun prototipi bir buçuk hafta sonra hazırdı. Bu süre zarfında, gerçekten hiç grafiğimiz yoktu, Başlangıçta, vardı ... - 2Oyun teknik anlamda çok basit. box2d (bir fizik motoru) kullanmamıza bile gerek yoktu. Çarpışmaları halledebilir ve hipotenüsü kendi başımıza hesaplayabiliriz. Vurgulayacağım en ilginç noktalar:
  1. Başlangıçta, tüm oyun öğeleri rastgele oluşturuldu. Başka bir deyişle, sağlayıcıları (kara delikler, makaslar, ninja yıldızları, kurşun kalem, kalpler) bir diziye koyduk, rastgele bir sağlayıcı aldık, rastgele koordinatlara sahip bir öğe aldık. Bu yaklaşımın "gerçekten pek iyi olmadığı" çok çabuk anlaşıldı. Teste katılan arkadaşlar bize aynı şeyi söyleyerek şablonların kullanılmasını önerdiler. Oyun geliştirmeye dahil olanlar için bu muhtemelen bariz bir çözümdür. Ancak bu alanda yeni olduğumuz için bizim için çok pratik bir tavsiye oldu.

    Bu yüzden birkaç şablon oluşturduk: bir makas vadisi; kurşun kalem uçları - onları süper hızlı bir şekilde toplamak oldukça havalı (parmağınızla vızıltı, vızıltı, vızıltı); ve ne diyeceğimi bilmediğim bir şablon daha — size kodumuzda sınıfa ne ad verdiğimizi söyleyeceğim: StraightForwardPattern.

    Başlangıçta vardı ... - 3

    Bu şablonlar onu geliştirdi, ancak bir şekilde çok tahmin edilebilir hale geldi. Bu yüzden bir tane daha ekledik: rastgele bir şablon. Başka bir deyişle, artık bazı "statik" şablonlarımız ve rastgele bir şablonumuz var ("mükemmel dengeli" memeyi buraya ekleyin).

  2. Karşılaştığımız asıl sorun burada. LibGDX, render (float delta) yöntemini sonsuz bir döngüde çağırır. Tüm unsurların çizildiği yer burasıdır. Kalem çizgisi şu şekilde çizilir: parmak koordinatlarını alır ve oraya doku çizeriz. Bu nedenle, parmağımızı ekranda çok hızlı hareket ettirirsek, render(delta) yöntemine yapılan çağrılar arasındaki milisaniyeler nedeniyle satırda "boşluklar" olur.

    Çözüm oldukça basitti: Dokunun çizildiği son koordinatları hatırlıyoruz, sonraki koordinatları alıyoruz ve aralarındaki mesafe X'ten fazlaysa ve parmak serbest bırakılmadıysa boşluğu dolduruyoruz. İlk başta, bu seçeneğin işe yaramayacağını düşündük - çizgiler köşeli olurdu. Ama korkularımız yersizdi, her şey olması gerektiği gibi çalıştı.

Oyun hakkında

Oynanış benzersiz olduğunu iddia etmiyor ama oldukça iyi ve kullanıcıları kendine çekebiliyor. Bir kalemi kontrol ediyorsun, kelimenin tam anlamıyla kağıda çizim yapıyorsun ve engellerden kaçıyorsun - makas, ninja yıldızları ve kara delikler. Bu arada kalem ucunuz bitiyor ve küçük kalemler almanız gerekiyor. Küçük bir kalem toplamadan önce kaleminiz bitiyorsa, bir ayna parçası alabilirsiniz. Kalem ucunu tüketmek yerine birkaç saniyeliğine geri yüklenir, ancak aynı zamanda kontroller yansıtılır - parmağınız sola hareket ederse kalem sağa doğru çizer. Ayrıca bir kez bir engele çarpıp hayatta kalmanızı sağlayacak bir kalp de alabilirsiniz. Parmağınızı kaldırmadan kalemi ne kadar uzun süre hareket ettirirseniz, kombonuz o kadar yüksek olur, bu da puanları daha hızlı biriktireceğiniz anlamına gelir. Başlangıçta ... - 4Oyunun hızı da kademeli olarak artıyor. Eksik olan tek şey kızgın kuşlar. Başlangıçta oyuna Karan Dash adını vermeyi planladık (Rusça kalem kelimesinin çevirisi karandash - ha! Anladın mı?), ancak daha sonra fikrimizi değiştirdik ve Pencil Dash'te karar kıldık. Bunu yaptık çünkü bu zarif kelime oyunu yalnızca Rusça konuşan bir dinleyici kitlesi tarafından anlaşılacaktı. Oyunu birkaç gün önce yayınladık ve şimdi tanıtıyoruz. Burada da takımdaki hiç kimsenin deneyimi yok. Oyun tanıtımı ile ilgili tüm bilgilerimizi çeşitli makalelerden elde ettik. Oyunla ilgili bilgileri çeşitli web sitelerinde/forumlarda ücretsiz olarak yayınladık. Ücretli kanallarımız arasında 4pd'de reklamcılık, bir blog yazarıyla reklamcılık, VKontakte'de genel gruplarda birkaç gönderi ve AdMob reklamcılığı yer alıyordu. Bu arada, bu gönderi aynı zamanda tanıtımımızın bir parçası, bu yüzden site yönetiminin izniyle buraya oyunun bağlantısını ekliyorum. Oyunu Google Play'de burada bulabilirsiniz . Yüklerseniz minnettar olurum (belki beğenirsiniz!) ve bir derecelendirme bırakırsanız, bir çocuğa sizin adınızı vereceğime söz veriyorum! :) Başlangıçta ... - 6
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok