Bilgisayar Oyunları Nasıl Programlanır (Resimli)

İçindekiler:

Bilgisayar Oyunları Nasıl Programlanır (Resimli)
Bilgisayar Oyunları Nasıl Programlanır (Resimli)
Anonim

Bir bilgisayar oyunu için bir fikriniz var ve onu gerçeğe dönüştürmek mi istiyorsunuz? Veya bilgisayar oyunlarının nasıl yazıldığını hiç merak ettiniz mi? Bu wikiHow makalesi sana Python'da üç temel bilgisayar oyununu nasıl yazacağını öğretir. İlk oyununuzu geliştirmek için temel bir Python anlayışına ve genel programlama kavramlarına ihtiyacınız olacak.

adımlar

Bölüm 1/3: Metin Tabanlı Bir Oyun Yapmak

5692759 1
5692759 1

Adım 1. Bir programlama dili seçin

Tüm programlama dilleri farklıdır, bu nedenle oyununuzu yazmak için hangisini kullanacağınıza karar vermeniz gerekecektir. Her ana programlama dili metin girişini, metin çıkışını ve if-yapılarını (basit bir metin tabanlı oyun için ihtiyacınız olan temel şeyler) destekler, bu nedenle seçenekleri keşfedin ve hangisinde kendinizi en rahat hissettiğinize ve öğrenmeye kendinizi adadığınıza karar verin. İşte dikkate alınması gereken bazı faktörler:

  • En çok kullanılan dil nedir?

    JavaScript gibi bazı programlama dilleri web için kullanılmak üzere tasarlanırken, Python, C veya C++ gibi diğerleri bilgisayar programlarını çalıştırmak için tasarlanmıştır. Oyununuz için Python, C, C++ veya JavaScript.

  • Öğrenmek ne kadar zor?

    Herhangi bir normal programlama dilinde (yani, Malbolge gibi kafa karıştırıcı olacak şekilde özel olarak tasarlanmamıştır) bazı alıştırmalardan sonra bir program yazmak yeterince kolay olsa da, bazıları yeni başlayanlar için diğerlerinden daha dostçadır. Örneğin Java ve C, daha erişilebilir ve doğrudan sözdizimi ile bilinen Python gibi bir şeyden daha derin programlama kavramlarını anlamanızı gerektirir.

  • Nerede kullanabilirim?

    Muhtemelen Linux, Mac veya Windows gibi farklı sistemlerdeki insanların oyununuzu oynayabilmesini istiyorsunuz. Bu nedenle, yalnızca Windows'ta desteklenen Visual Basic gibi yalnızca birkaç sistemde desteklenen bir dil kullanmamalısınız.

Bu makale, metin tabanlı oyun örnekleri için Python'u kullanacak, ancak kavramların başka herhangi bir programlama dilinde nasıl yapıldığına bakabilirsiniz.

5692759 2
5692759 2

Adım 2. Bilgisayarınızı hazırlayın

İhtiyacınız olan iki ana bileşen, kodunuzu yazacağınız bir metin düzenleyici ve onu bir oyuna dönüştürmek için kullanacağınız bir derleyicidir. Bu makaledeki örneği takip etmek istiyorsanız Python kurmalı ve program çalıştırmayı öğrenmelisiniz. İsterseniz, düzenleme, derleme ve hata ayıklamayı tek bir programda birleştiren bir IDE (Tümleşik Masaüstü Ortamı) kurabilirsiniz. Python'un IDE'sine IDLE denir. Ancak Windows için Notepad, macOS için TextEdit veya Linux için Vim gibi düz metni destekleyen herhangi bir metin düzenleyiciyi de kullanabilirsiniz.

5692759 3
5692759 3

Adım 3. Oyuncuyu selamlamak için bir kod yazın

Oyuncu neler olup bittiğini ve ne yapması gerektiğini bilmek isteyecektir, bu yüzden onlar için bir metin yazdırmalısınız.

  • Bu, Python'daki print() işleviyle yapılır. Denemek için.py uzantılı yeni bir dosya açın, içine aşağıdaki kodu girin, kaydedin ve çalıştırın:

    print("Sayı tahmin oyununa hoş geldiniz!") print("1 ile 1000 arasında bir tam sayı giriniz:")

5692759 4
5692759 4

Adım 4. Rastgele bir sayı oluşturun

Oyuncudan doğru sayıyı tahmin etmesini isteyen metin tabanlı bir oyun yapalım. Yapmamız gereken ilk şey, oyunun başında rastgele bir sayı oluşturmak, böylece oyuncu her zaman aynı sayıyı tahmin etmeyecek. Sayı program boyunca aynı kalacağından, rastgele sayıyı bir değişkende saklamak isteyeceksiniz.

  • Python'un yerleşik bir rastgele sayı işlevi yoktur, ancak standart bir kitaplığı vardır (bu, kullanıcının fazladan bir şey yüklemesi gerekmeyeceği anlamına gelir). Bu yüzden kodunuzun başına gidin (print() işlevlerinden önce) ve import random satırını yazın.
  • Rastgele işlevini kullanın. Randint() olarak adlandırılır, az önce içe aktardığınız rastgele kitaplıkta bulunur ve sayının argüman olarak alabileceği minimum ve maksimum değeri alır. Bu yüzden kodunuzun sonuna geri dönün ve aşağıdaki satırı girin:

    sağNum = rastgele.randint(0, 1000)

5692759 5
5692759 5

Adım 5. Oynatıcıdan girdi alın

Bir oyunda, oyuncu bir şey yapmak veya bir şeyle etkileşime geçmek ister. Metin tabanlı bir oyunda bu, metin girerek mümkündür. Artık rastgele bir sayıya sahip olduğumuza göre, sonraki kod satırlarımız oyuncudan en iyi tahminlerini girmesini istemelidir.

  • Girdiğiniz kod, oyuncuya bir numara girme talimatını yazdırdığından, girdiği numarayı da okuması gerekir. Bu Python 3'te input() ve Python 2'de raw_input() ile yapılır. Python 2'de yakında güncelliğini yitireceği için Python 3'te yazmalısınız. Player'ın girdisini numara adı verilen bir değişkende saklamak için kodunuza aşağıdaki satırı ekleyin:

    userNum = girdi()

5692759 6
5692759 6

Adım 6. Oynatıcının girdisini kullanılabilir bir veri türüne çevirin

Oyuncu bir sayı girdi-şimdi ne olacak?

  • Oyuncunun girişini bir sayı yapın. Şimdi, bu biraz kafa karıştırıcı gelebilir çünkü az önce bir sayı girdiler. Ancak bunun iyi bir nedeni var: Python, tüm girdilerin metin veya programlamada adlandırıldığı gibi bir "dize" olduğunu varsayar. Bu metin, almak istediğiniz numarayı içerir. Python, yalnızca bir sayı içeren bir dizeyi içindeki sayıya dönüştüren bir işleve sahiptir. Tip:

    userNum = int(userNum)

5692759 7
5692759 7

Adım 7. Oyuncunun numarasını doğru numarayla karşılaştırın

Oyuncu numarasını girdikten sonra, rastgele oluşturulmuş numarayla karşılaştırmanız gerekir. Rakamlar aynı değilse, oyununuz oyuncunun başka bir numara denemesini sağlayabilir. Rakamlar eşleşirse, oyuncuya doğru tahmin ettiğini söyleyebilir ve programdan çıkabilirsiniz. Bu, aşağıdaki kodla yapılır:

while userNum != rightNum: userNum = int(input())

5692759 8
5692759 8

Adım 8. Oyuncuya geri bildirimde bulunun

Girişlerini zaten işlemiş olsanız da, oyuncu bunu görmez. Neler olduğunu anlamaları için sonuçları oyuncuya yazdırmanız gerekir.

  • Elbette, oyuncuya numarasının doğru mu yanlış mı olduğunu söyleyebilirsiniz. Ancak bu yaklaşımla, oyuncunun en kötü durumda 1000 kez tahmin etmesi gerekebilir, bu çok sıkıcı olurdu.
  • Bu yüzden oyuncuya sayılarının çok mu küçük yoksa çok mu büyük olduğunu söyleyin. Bu, tahmin sayısını önemli ölçüde azaltacaktır. Örneğin, oyuncu önce 500'ü tahmin ederse ve oyun "Çok büyük. Tekrar dene" yanıtını verirse, 1000 yerine yalnızca 500 olası sayı olacaktır. Bu, if-yapıları ile yapılır, bu nedenle print("Yanlış. Tekrar deneyin.") biriyle.
  • İki sayının aynı olup olmadığını kontrol etmenin = ile değil, == ile yapıldığını unutmayın. = sağındaki değeri solundaki değişkene atar!
  • if userNum < rightNum: print("Çok küçük. Tekrar deneyin:") if userNum > rightNum: print("Çok büyük. Tekrar deneyin:")

5692759 9
5692759 9

Adım 9. Kodunuzu test edin

Bir programcı olarak, kodunuzun bittiğini düşünmeden önce çalıştığından emin olmalısınız.

  • Python'da programlama yaparken, girintileri doğru aldığınızdan emin olun. Kodunuz şöyle görünmelidir:

    import random print("Sayı tahmin oyununa hoş geldiniz!") print("1 ile 1000 arasında bir tam sayı giriniz:") rightNum = random.randint(0, 1000) userNum = input() userNum = int(userNum) while userNum != rightNum: if userNum < rightNum: print("Çok küçük. Tekrar deneyin:") if userNum > rightNum: print("Çok büyük. Tekrar deneyin:") userNum = int(input()) print("Tahmin ettiniz doğru şekilde.")

5692759 10
5692759 10

Adım 10. Girişi doğrulayın

Oyuncu, sadece yanlış şeyi girerek oyununuzu bozamamalıdır. "Girişi doğrulama", oynatıcının işlemeden önce doğru şeyi girdiğinden emin olmak anlamına gelir.

  • Oyunu tekrar açın ve sayı olmayan herhangi bir şey girmeyi deneyin. Oyun bir ValueError ile çıkacaktır. Bundan kaçınmak için girişin bir sayı olup olmadığını kontrol etmenin bir yolunu uygulayabilirsiniz.
  • Bir fonksiyon tanımlayın. Girdiyi doğrulamak oldukça uzun olduğundan ve bunu birden çok kez yapmanız gerektiğinden, bir işlev tanımlamanız gerekir. Argüman almaz ve bir sayı döndürür. İlk olarak, kodunuzun en üstüne, rastgele import öğesinin altına def numInput(): yazın.
  • Oyuncunun girişini bir kez alın. input() işlevini kullanın ve sonucu inp değişkenine atayın.
  • Oyuncunun girişi bir sayı değilse, bir sayı girmesini isteyin. Bir dizgenin sayı olup olmadığını kontrol etmek için, yalnızca tam sayıya izin veren isdigit() işlevlerini kullanın, böylece bunu ayrıca kontrol etmeniz gerekmez.
  • Girdi bir sayıysa, onu dizeden sayıya dönüştürün ve sonucu döndürün. Dizeyi bir tam sayıya dönüştürmek için int() işlevini kullanın. Bu, ana koddaki dönüşümü gereksiz hale getirecek ve oradan kaldırmalısınız.
  • Ana koddaki tüm input() çağrılarını numInput() çağrılarıyla değiştirin.
  • numInput() işlevinin kodu şöyle görünecektir:
  • def numInput(): inp = input() değilken inp.isdigit(): print("Tam sayı girmeniz söylendi! Bir tam sayı girin:") inp = input() return int(inp)

5692759 11
5692759 11

Adım 11. Oyunu tekrar test edin

Ne olduğunu görmek için bilerek yanlış şeyleri girin ve ardından ortaya çıkan hataları düzeltin.

Program sizden bir numara istediğinde bir metin girmeyi deneyin. Artık program bir hata mesajı ile çıkmak yerine sizden tekrar bir numara isteyecektir

5692759 12
5692759 12

Adım 12. Bittiğinde oyunu yeniden başlatmayı önerin

Bu şekilde, oyuncu oyununuzu sürekli olarak yeniden başlatmak zorunda kalmadan daha uzun süre oynayabilir.

  • İçe aktarma ve işlev tanımı dışındaki tüm kodu bir while döngüsüne koyun. True'u koşul olarak ayarlayın: bu her zaman doğru olacaktır, bu nedenle döngü sonsuza kadar devam edecektir.
  • Oyuncuya sayıyı doğru tahmin ettikten sonra tekrar oynamak isteyip istemediğini sorun. print() fonksiyonunu kullanın.
  • "Hayır" cevabını verirlerse, görünümden ayrılın. Başka bir şeye cevap verirlerse, devam edin. Bir döngüden çıkmak break deyimi ile yapılır.
  • "Sayı tahmin oyununa hoş geldiniz"i while döngüsünün dışına taşıyın. Oyuncu muhtemelen oyunu her oynadığında hoş karşılanmak istemez. Print("Sayı tahmin oyununa hoş geldiniz!" komutunu True: öğesinin üzerine getirin, böylece kullanıcı ilk oyunu başlattığında yalnızca bir kez yazdırılacaktır.
5692759 13
5692759 13

Adım 13. Oyunu test edin

Yeni bir özelliği her uyguladığınızda oyununuzu test etmeniz gerekecek.

  • Her iki seçeneğin de çalıştığından emin olmak için en az bir kez hem "Evet" hem de "Hayır" yanıtını verdiğinizden emin olun. İşte kodunuzun nasıl görünmesi gerektiği:

    rastgele içe aktar def numInput(): inp = input() değilken inp.isdigit(): print("Tam sayı girmeniz istendi! Bir tam sayı girin:") inp = input() return int(inp) print ("Sayı tahmin oyununa hoş geldiniz!") while True: print("1 ile 1000 arasında bir tam sayı girin:") rightNum = random.randint(0, 1000) userNum = numInput() while userNum != rightNum: if userNum < rightNum: print("Çok küçük. Tekrar deneyin:") if userNum > rightNum: print("Çok büyük. Tekrar deneyin:") userNum = numInput() print("Doğru tahmin ettiniz.") print("Biliyor musunuz? tekrar oynamak ister misiniz? Çıkmak için Hayır girin.") if input() == "Hayır": break

5692759 14
5692759 14

Adım 14. Diğer metin tabanlı oyunlar yazın

Sırada bir metin macerası yazmaya ne dersiniz? Yoksa bir bilgi yarışması oyunu mu? Yaratıcı ol.

: Bir şeyin nasıl yapıldığından veya bir işlevin nasıl kullanıldığından emin değilseniz, bazen belgelere bakmak yararlı olabilir. Python 3 belgeleri https://docs.python.org/3/ adresinde bulunur. Bazen internette yapmak istediğiniz her şeyi aramak da iyi sonuçlar verir.

Bölüm 2/3: 2D Grafiklerle Oyun Yapmak

5692759 15
5692759 15

Adım 1. Bir grafik kitaplığı seçin

Grafik yapmak çok karmaşıktır ve çoğu programlama dili (Python, C++, C, JavaScript dahil) çekirdekteki veya standart kitaplıklardaki grafikler için çok az destek sağlar veya hiç destek vermez. Dolayısıyla, grafik oluşturabilmek için harici bir kitaplık kullanmanız gerekecek, örneğin Pygame for Python.

Bir grafik kitaplığında bile, bir menünün nasıl görüntüleneceği, oynatıcının neyi tıkladığını nasıl kontrol edeceğiniz, döşemeleri nasıl görüntüleyeceğiniz gibi şeyler hakkında endişelenmeniz gerekecek. Asıl oyunu geliştirmeye odaklanmayı tercih ediyorsanız, Unity gibi bunları kolayca uygulayan bir oyun motoru kitaplığı kullanabilirsiniz

Bu makale, basit bir 2D platform oluşturmayı göstermek için Cocos2D ile Python'u kullanacak. Bahsedilen kavramlardan bazıları diğer oyun motorlarında bulunmayabilir. Daha fazla bilgi için belgelerine bakın.

5692759 16
5692759 16

Adım 2. Seçtiğiniz grafik kitaplığını kurun

Python için Cocos2D'nin kurulumu kolaydır. https://python.cocos2d.org/index.html adresinden veya Linux kullanıyorsanız sudo pip3 install cocos2d çalıştırarak alabilirsiniz.

5692759 17
5692759 17

Adım 3. Oyununuz ve medyanız için yeni bir dizin oluşturun

Oyununuzda görüntü, ses gibi şeyleri kullanacaksınız. Bunları programla aynı dizinde tutun. Bu dizin başka hiçbir şey içermemelidir, böylece oyunda hangi varlıklara sahip olduğunuzu kolayca görebilirsiniz.

5692759 18
5692759 18

Adım 4. Yeni dizinde yeni bir kod dosyası oluşturun

Programlama dilinizin dosya uzantısıyla ana olarak adlandırın. Birden fazla program dosyasına sahip olmanın mantıklı olduğu büyük ve karmaşık bir program yazarsanız, bu size ana dosyanın hangisi olduğunu gösterecektir.

Bu örnekte, tüm kodumuzu içerecek olan main.py adında bir dosya oluşturacağız

5692759 19
5692759 19

Adım 5. Oyun penceresini oluşturun

Bu, grafikli bir oyun için temel ön koşuldur.

  • Gerekli cocos2d alt modüllerini içe aktarın: cocos.director, cocos.scene ve cocos.layer. Bu, from subModuleName içe aktarma * ile yapılır; burada alt Modül adı, içe aktarmak istediğiniz alt modüldür. from … import * ve import … arasındaki fark, modül adını o modülden öncekiyle birlikte kullandığınız her şeyin önüne koymanız gerekmemesidir.
  • ColorLayer'ın bir MainMenuBgr alt sınıfını tanımlayın. Bu temelde, oluşturduğunuz herhangi bir ana menü arka planının, yaptığınız bazı değişikliklerle bir renk katmanı gibi davranacağı anlamına gelir.
  • Cocos direktörünü başlatın. Bu size yeni bir pencere verecektir. Bir resim yazısı ayarlamazsanız, pencerede dosya adıyla (main.py) aynı resim yazısı olacaktır ve bu profesyonel görünmeyecektir. Yeniden boyutlandırılabilir ayarını True olarak ayarlayarak pencerenin yeniden boyutlandırılmasına izin verin.
  • Bir işlev tanımlayın showMainMenu. Ana menüyü gösteren kodu bir fonksiyona koymalısınız çünkü bu fonksiyon tekrar çağırarak ana menüye kolayca dönmenizi sağlayacaktır.
  • Bir sahne oluşturun. Sahne, tanımladığınız MainMenuBgr sınıfının bir nesnesi olan şimdilik bir katmandan oluşuyor.
  • Bu sahneyi pencerede çalıştırın.
  • cocos.director'dan import * cocos.scene'den import * cocos.layer'dan import * class MainMenuBgr(ColorLayer): def _init_(self): super(MainMenu, self)._init_(0, 200, 255, 255) def showMainMenu(): menuSc = Scene(MainMenuBgr()) direktör.run(menuSc) direct.init(caption="IcyPlat - basit bir platform", resizable=True) showMainMenu()

5692759 20
5692759 20

Adım 6. Pencereye bir ana menü ekleyin

Asıl oyunun yanı sıra, daha sonra ekleyebileceğiniz diğer öğelerin yanı sıra, oyuncunun pencereyi kapatmak için kullanabileceği bir menü eklemeniz gerekecek.

  • Cocos.menu'yu (yine from talimatıyla) ve pyglet.app'yi (bu sefer içe aktarmayla) içe aktarın.
  • MainMenu'yu Menu'nün bir alt sınıfı olarak tanımlayın.
  • Ana menünün hizalamasını ayarlayın. Dikey ve yatay hizalamayı ayrı ayrı ayarlamanız gerekir.
  • Menü öğelerinin bir listesini oluşturun ve bunları menüye ekleyin. En azından "Oyunu Başlat" ve "Çıkış" menü öğelerine sahip olmalısınız. Her menü öğesi parantez içine yerleştirilmelidir. Her öğenin bir etiketi ve oynatıcı tıkladığında ne olacağını belirleyen bir geri arama işlevi olmalıdır. "Oyunu Başlat" öğesi için startGame işlevini kullanın (yakında yazacaksınız), "Çıkış" öğesi için "pyglet.app.exit" (zaten var) kullanın. self.create_menu(menuItems) öğesini çağırarak asıl menüyü oluşturun.
  • startGame()'i tanımlayın. Şimdilik tanımlamaya geçmeniz yeterli, asıl oyunu yazdığınızda bunu değiştireceksiniz.
  • MenuSc sahnesini kodunuzda oluşturduğunuz yere gidin ve ona bir MainMenu nesnesi ekleyin.
  • Kodunuzun tamamı şimdi aşağıdaki gibi görünmelidir:

    cocos.director'dan içe aktar * cocos.menu'dan içe aktar * cocos.scene'den içe aktar * cocos.layer'dan içe aktar * içe aktar pyglet.app class MainMenuBgr(ColorLayer): def _init_(self): super(MainMenuBgr, self)._init_(0, 200, 255, 255) class MainMenu(Menü): def _init_(self): super(MainMenu, self)._init_("") self.menu_valign = MERKEZ self.menu_halign = MERKEZ menüItems = [(MenuItem("Oyunu Başlat) ", startGame))), (MenuItem("Çıkış", pyglet.app.exit))] self.create_menu(menuItems) def startGame(): pass def showMainMenu(): menuSc = Scene(MainMenuBgr()) menuSc.add(MainMenu()) direct.run(menuSc) direct.init(caption="IcyPlat - basit bir platform", resizable=True) showMainMenu()

5692759 21
5692759 21

Adım 7. Kodunuzu test edin

Kodu henüz kısa ve nispeten basitken erken test edin. Ardından, işler çok karmaşık hale gelmeden önce temel yapıdaki hataları belirleyip düzeltebilirsiniz.

Talimatlardaki kod, "IcyPlat - basit bir platform oyunu" başlıklı bir pencere açmalıdır. Arka plan açık mavidir ve pencereyi yeniden boyutlandırabilirsiniz. Menüde "Oyunu Başlat" ı tıkladığınızda (henüz) hiçbir şey olmamalıdır. "Çık" ı tıkladığınızda pencere kapanacaktır

5692759 22
5692759 22

Adım 8. Bir hareketli grafik oluşturun

Sprite bir "oyun nesnesi" veya 2 boyutlu bir görüntüdür. Sprite'lar oyun içi nesneler, simgeler, arka plan süslemeleri, karakterler ve oyunda bir görüntüyle temsil edebileceğiniz başka herhangi bir şey olabilir. Oyuncunun etkileşime geçebileceği bir karakter için bir hareketli grafik oluşturarak başlayacağız.

  • cocos.sprite alt modülünü from-import-ifadesiyle içe aktarın.
  • Sprite'ı temsil edecek bir resim bulun. Bir resminiz yoksa bir hareketli grafiği görüntüleyemezsiniz. Bir tane çizebilir veya internetten alabilirsiniz (yine de oyununuzu yayınlamayı planlıyorsanız lisanslara dikkat edin). Bu örnek için, https://opengameart.org/content/tux-classic-hero-style adresine gidin ve çalışan penguenlerin-p.webp" />
  • ScrollableLayer sınıfının yeni bir nesnesi olarak bir katman oluşturun. Ardından, hareketli grafiği bir Sprite nesnesi olarak oluşturun ve konumunu (8, 250) olarak ayarlayın. Referans olarak, (0, 0) noktası sol alt köşededir. Bu oldukça yüksek, ancak penguenin buza sıkışmamasını sağlayacaktır.
  • Sprite'ı, hareketli grafiğin katmanına ekleyin.
  • Sprite katmanından yeni bir sahne oluşturun ve çalıştırın.
  • def startGame(): figLayer = ScrollableLayer() fig = Sprite('pingu.png') fig.position = (75, 100) figLayer.add(fig) # gameSc = Scene(figLayer) direct.run(gameSc)

  • Kodu çalıştırın. Tıkladıktan sonra siyah bir arka plan üzerinde küçük bir penguen figürü (veya ne çizdiyseniz) görmelisiniz. Oyunu başlatmak.
5692759 23
5692759 23

Adım 9. Manzaranızı hayal edin

Çoğu oyunda, sprite'larınız boşlukta süzülmemelidir. Aslında etraflarında bir şey olan bir yüzeyde durmalıdırlar. 2D oyunlarda bu genellikle bir döşeme seti ve bir döşeme haritası ile yapılır. Döşeme seti temel olarak ne tür yüzey kareleri ve arka plan kareleri olduğunu ve neye benzediklerini söyler.

  • Bir kiremit seti oluşturun. Bu oyun için karo seti çok basit olacak: bir karo buz için ve bir karo gökyüzü için. Bu örnekte kullanılan buz karosu buradan, CC-BY-SA 3.0 kapsamındadır.
  • Bir kiremit seti resmi oluşturun. Bu, hepsinin aynı boyutta olması (değilse düzenleyin) ve oyunda görmek istediğiniz boyuta sahip olması gereken tüm karoların yan yana resmidir. Resminizi icyTiles-p.webp" />
  • Döşeme seti açıklamasını oluşturun. Bu bir XML dosyası. XML dosyası, döşeme seti resmindeki döşemelerin ne kadar büyük olduğu, hangi resmin kullanılacağı ve orada hangi döşemenin nerede bulunacağı hakkında bilgiler içerir. Aşağıdaki kodla icyTiles.xml adlı bir XML dosyası oluşturun:

         
    
5692759 24
5692759 24

Adım 10. Peyzajınız için bir karo haritası yapın

Döşeme haritası, seviyenizde hangi döşemenin hangi konumda olduğunu tanımlayan bir haritadır. Örnekte, karo haritaları oluşturmak için bir fonksiyon tanımlamanız gerekir çünkü karo haritalarını elle tasarlamak çok sıkıcıdır. Daha gelişmiş bir oyunda genellikle bir tür seviye düzenleyici bulunur, ancak 2D oyun geliştirmeye aşina olmak için bir algoritma yeterince iyi seviyeler sağlayabilir.

  • Kaç satır ve sütun gerektiğini öğrenin. Bunun için ekran boyutunu hem yatay (sütunlar) hem de dikey (satırlar) olarak karo boyutuna bölün. Sayıyı yukarı yuvarlayın; bunun için matematik modülünün bir işlevine ihtiyacınız var, bu nedenle matematik içe aktarma tavanından kodunuzun üst kısmındaki içe aktarmalara ekleyin.
  • Yazmak için bir dosya açın. Bu, dosyanın önceki tüm içeriğini silecektir, bu nedenle levelMap.xml gibi dizinde henüz hiçbir dosyanın bulunmadığı bir ad seçin.
  • Açılış etiketlerini dosyaya yazın.
  • Algoritmaya göre bir döşeme haritası oluşturun. Aşağıdaki koddakini kullanın veya kendiniz bir tane oluşturabilirsiniz. Randint işlevini rasgele modülden içe aktardığınızdan emin olun: aşağıdaki kodun çalışması için gereklidir ve ortaya çıkan her şey muhtemelen rasgele tamsayılara da ihtiyaç duyacaktır. Ayrıca, gökyüzü karolarını ve buz karolarını farklı katmanlara yerleştirdiğinizden emin olun: buz katıdır, gökyüzü değildir.
  • Kapanış etiketlerini dosyaya yazın ve dosyayı kapatın.
  • def createTilemap(): colAmount = ceil(800/16)*3 # (ekran genişliği / döşeme boyutu) * 3 rowAmount = ceil(600 / 16) # ekran yüksekliği / döşeme boyutu tileFile = open("levelMap.xml", " w") tileFile.write('\n\n\n') iceHeight = randint(1, 10) in range(0, colAmount): tileFile.write('') makeHole = False if randint(0, 50) == 10 ve i != 0: # spawn noktasında deliklere izin verme makeHole = True for j in range(0, rowAmount): if makeHole: tileFile.write('\n') else: if j <= iceHeight: tileFile.write('\n') else: tileFile.write('\n') iceHeight = randint(iceHeight-5, iceHeight+5) eğer iceHeight < 0: # karoların çok düşmesini engeller iceHeight = randint(1, 5) eğer iceHeight > rowAmount: # karoların çok yüksek olmasını engeller iceHeight = randint(int(rowAmount/2)-5, int(rowAmount/2)+5) tileFile.write('\n') tileFile.write ('\n\n') i aralığında (0, colAmount): tileFile.write('') aralığında j için (0, rowAmount): tileFile.write('\n') tileFile.write('\ n') tileFile.write('\n\n') tileFile.close()

5692759 25
5692759 25

Adım 11. Döşeme haritasını görüntüleyin

Her şeyi cocos.tiles'den içe aktarın ve bunun için startGame işlevine gidin.

  • startGame işlevinizin başında, bunun için tanımladığınız işlevi kullanarak bir döşeme haritası oluşturun.
  • Yeni bir kaydırma yöneticisi oluşturun. Bunu doğrudan hareketli grafiği katmanına eklediğiniz satırın altında yapın.
  • createTilemap işlevinizin oluşturduğu levelMap.xml döşeme haritasından yüklenecek döşemeleri içeren yeni bir katman oluşturun.
  • Katı olmayan katmanı, katı katmanı ve hareketli grafiği kaydırma yöneticisine tam olarak bu sırayla ekleyin. İsterseniz bir z konumu ekleyebilirsiniz.
  • Sahneyi hareketli grafik katmanından oluşturmak yerine kaydırma yöneticisinden oluşturun.
  • startGame işleviniz şimdi şöyle görünmelidir:

    def startGame(): createTilemap() # fig = Sprite('pingu.png') fig.position = (8, 500) figLayer = ScrollableLayer() figLayer.add(fig) # tileLayer = load('levelMap.xml') solidTiles = tileLayer['solid'] nsoliTiles = tileLayer['not_solid'] # scrMang = ScrollingManager() scrMang.add(nsoliTiles, z=-1) scrMang.add(solidTiles, z=0) scrMang.add(figLayer, z =1) # gameSc = Scene(scrMang) direct.run(gameSc)

5692759 26
5692759 26

Adım 12. Kodunuzu test edin

Uyguladığınız yeni özelliklerin gerçekten çalıştığından emin olmak için kodunuzu sık sık test etmelisiniz.

Örnekteki kod şimdi penguenin arkasında bir miktar buzlu manzara göstermelidir. Penguen buzun çok üzerinde uçuyor gibi görünüyorsa, yanlış bir şey yapmamışsınızdır ve bir sonraki adımda düzeltilecektir

5692759 27
5692759 27

Adım 13. Kontrolleri ekleyin

Oyuncu, metin tabanlı bir oyuna kıyasla 2B oyunda programla etkileşim kurmak için çok daha fazla yola sahiptir. Yaygın olanı, doğru tuşa basıldığında figürlerini hareket ettirmeyi içerir.

  • Her şeyi cocos.mapcolliders'dan ve cocos.actions'dan içe aktarın. Ayrıca anahtarı pyglet.window'dan içe aktarın.
  • Bazı global değişkenleri "bildirin". Global değişkenler fonksiyonlar arasında paylaşılır. Python'da değişkenleri gerçekten tanımlayamazsınız, ancak kullanmadan önce ana kodda global bir değişken olduğunu söylemelisiniz. Değer olarak 0 atayabilirsiniz çünkü bir fonksiyon daha sonra doğru değeri atamakla ilgilenecektir. Öyleyse, içe aktarma ifadelerinin altına ekleyin:

    # global değişkenleri "bildirmek" klavye = 0 scrMang = 0

  • startGame işlevinizi ayarlayın:

    • Global değişkenler klavyesini ve scrMang'ı kullandığınızı söyleyin. Bunu, işlevin en üstüne genel klavye, scrMang yazarak yapın.
    • Pencerenin klavye olaylarını dinlemesini sağlayın.
    • Şekle bir PlatformerController'a göre hareket etmesini söyleyin. Bu PlatformerController'ı yakında uygulayacaksınız.
    • Katı döşemeler ve şekil arasındaki çarpışmaları işlemek için bir harita çarpıştırıcısı oluşturun.

    def startGame(): global klavye, scrMang createTilemap() # fig = Sprite('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer() figLayer.add(fig) # tileLayer = load('levelMap).xml') solidTiles = tileLayer['solid'] nsoliTiles = tileLayer['not_solid'] # klavye = key. KeyStateHandler() direktör.window.push_handlers(keyboard) # fig.do(PlatformerController()) mapcollider = RectMapvelocCollider(='slide') fig.collision_handler = make_collision_handler(mapcollider, solidTiles) # scrMang = ScrollingManager() scrMang.add(nsoliTiles, z=-1) scrMang.add(solidTiles, z=0) scrMang.add(figLayer, z=-1), 1) # gameSc = Scene(scrMang) direct.run(gameSc)

  • Bir platform denetleyicisi oluşturun. Tuşlara göre figürü hareket ettirecek olan budur.

    • Platformer denetleyicisini Action'ın bir alt sınıfı olarak tanımlayın.
    • Hareket hızını, atlama hızını ve yerçekimini tanımlayın.
    • Başlatma işlevini tanımlayın. Bu işlev, platform denetleyicisi şekle bağlandığında bir kez çağrılır. Hem x hem de y yönünde hızını 0 yapmalıdır.
    • Adım fonksiyonunu tanımlayın. Sahne çalışırken tekrarlanacaktır.
    • step fonksiyonuna global değişkenler klavyesini ve scrMang'ı kullanmasını söyleyin.
    • Hızı alın ve değiştirin. x ve y hızını ayrı değişkenlerde kaydedin. X hızını, hareket hızı ile çarpılan (sol veya sağ tuşa basılmış olmasına bağlı olarak) 1 veya -1 olarak ayarlayın. y hızına yerçekimi ekleyin. Daha yavaş cihazlarda aynı şekilde çalışması için kesinti süresi ile çarpın. Boşluk tuşuna basılırsa ve figür yerde duruyorsa, y hızını atlama hızına çevirerek zıplayın.
    • Figürün nereye hareket etmesi gerektiğini hesaplayın. Ardından, sağlam bir döşemenin içindeyse çarpışma işleyicisinin bu konumu ayarlamasına izin verin. Son olarak, rakamı yeni ayarlanan konuma taşıyın.
    • Kaydırma yöneticisinin odağını şekle ayarlayın. Bu, şekil hareket ettiğinde kameranın makul bir şekilde hareket etmesine neden olur.

    class PlatformerController(Action): global klavye, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start(self): self.target.velocity = (0, 0) def step(self, dt): global klavye, kaydırıcı dt > 0,1 ise: # büyük geri dönüş vx için kapalı kalma süresi sırasında hiçbir şey yapmayın, vy = self.target.velocity vx = (klavye[anahtar. SAĞ] - klavye[anahtar. SOL]) * self. MOVE_SPEED vy + = self. GRAVITY * dt if self.on_ground ve klavye[key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect() yeni = last.copy() yeni.x += dx yeni.y += dy self.target.velocity = self.target.collision_handler(last, new, vx, vy) self.on_ground = (yeni.y == last.y) self.target.position = new.center scrMang.set_focus(*new.center)

5692759 28
5692759 28

Adım 14. Kodunuzu test edin

Örneği takip ettiyseniz, artık pengueni yön tuşları ile hareket ettirebilmeli ve boşluk tuşuna basarak zıplayabilmelisiniz. Ayrıca penguen artık yerde uçmak yerine yere düşmelidir.

5692759 29
5692759 29

Adım 15. Oyun için bir son oluşturun

Sonsuza kadar devam edebilen oyunlar bile kaybetme ihtimaline sahip olmalıdır. Örnekte bir fonksiyonla yaptığınız seviyenin bir sonu olduğu için, o uca gelerek kazanmayı da mümkün kılmanız gerekecek. Aksi takdirde, oyuncu sadece oradaki buz bloklarının üzerinde zıplar ve bu da sıkıcı hale gelirdi.

  • Platform denetleyicisinin içinde, odak ayarlandıktan sonra şeklin x ve y konumunu alın. Y konumu 0'dan küçükse, argüman olarak "Game Over" ile finishGame() işlevini çağırın (bunu daha sonra yazacaksınız). x konumu, 3 ile çarpılan ekran boyutundan daha büyükse (bunu daha önce seviye boyutu olarak ayarlamıştınız).

    posX, posY = posY < 0 ise self.target.position: bitişGame("Oyun Bitti") dönüş posX > 800*3 ise: # seviye boyutu bitişGame("Seviye Tamamlandı") dönüş

  • Bir sınıf bitiş menüsü tanımlayın. Daha önce tanımladığınız ana menü sınıfı gibi olmalı, ancak başlık olarak boş bir dize yerine _init_ işlevinin argüman olarak aldığı değişken bir metin kullanmalıdır. Menü öğeleri şimdi "Tekrar dene" ve "Çık" olarak etiketlenmelidir, ancak çağırdıkları işlevler aynı kalır.

    class FinishMenu(Menu): def _init_(self, text): super(FinishMenu, self)._init_(text) self.menu_valign = MERKEZ self.menu_halign = MERKEZ menüItems = [(MenuItem("Tekrar dene", startGame)), (MenuItem("Çıkış", pyglet.app.exit))] self.create_menu(menuItems)

  • FinishGame() işlevini tanımlayın. Metni argüman olarak almalıdır. Ana menü arka planından bir sahne, bu menüye geçirilen metin argümanıyla bir FinishMenu yapmalıdır. O zaman bu sahneyi çalıştırmalı.

    def bitişGame(metin): menuSc = Scene(MainMenuBgr()) menuSc.add(FinishMenu(metin)) direktör.run(menuSc)

5692759 30
5692759 30

Adım 16. Kredi ekleyin

Burası harika kodunuz için kredi alacağınız ve bu süreçte size yardımcı olan herkese kredi vereceğiniz yerdir. Başka bir web sitesinden (izinli) bir görsel kullandıysanız, bu görseli yaratıcısına atfettiğinizden emin olun.

  • CREDITS dosyası oluşturun ve tüm kredilerinizi şu şekilde girin:

    Penguen: Kelvin Shadewing, CC0 altında Buz bloğu: opengameart.org'da Michał Banas digit1024 CC-BY-SA 3.0 altında

  • Python kodunuza geri dönün ve Label'ı cocos.text'ten içe aktarın.
  • Bir alt sınıf Kredisi Katmanı tanımlayın. _init_ işlevinde, CREDITS dosyasını okuyun ve içindeki her satırdan doğru konumda bir metin etiketi yapın.

    class Krediler(Katman): def _init_(self): super(Krediler, kendi)._init_() krediFile = open("KREDİLER", "r") krediler = krediFile.read() krediler = krediler.split("\n ") i in range(0, len(creds)): credLabel = Label(creds, font_size=32, anchor_x="left", spike_y="top") credLabel.position = 25, 500-(i +1)*40 self.add(credLabel)

  • Ana menü sınıfınıza gidin ve tıklandığında showCredits işlevini çağıran "Krediler" etiketli bir menü öğesi ekleyin.
  • Menu öğesinin BackToMainMenuButton alt sınıfını tanımlayın. Bunu, showMainMenu işlevini çağıran "Geri" etiketli tek öğeli bir menü yapın. Daha çok bir buton gibi olan bu "menü" dikey olarak alta ve yatay olarak üste hizalanmalıdır.

    class BackToMainMenuButton(Menu): def _init_(self): super(BackToMainMenuButton, self)._init_("") self.menu_valign = BOTTOM self.menu_halign = SOL menuItems = [(MenuItem("Geri", showMainMenu))] self. create_menu(menuItems)

  • showCredits işlevini tanımlayın. MainMenuBgr katmanından ve Credits katmanından bir sahne oluşturmalı ve bu sahneyi çalıştırmalıdır.

    def showCredits(): credSc = Scene(MainMenuBgr()) credSc.add(Credits()) credSc.add(BackToMainMenuButton()) direct.run(credSc)

5692759 31
5692759 31

Adım 17. Kodunuzu kontrol edin

Kodunuzu tamamladığınızı düşündüğünüzde, tümüne tekrar bakmalısınız. Bu, bir şeyin optimize edilip edilemeyeceğini veya silmeyi unuttuğunuz bazı gereksiz satırlar olup olmadığını anlamanıza yardımcı olabilir. Örneği izlediyseniz, kodunuzun tamamı şimdi aşağıdaki gibi görünmelidir:

    cocos.director'dan içe aktar * cocos.menu'dan içe aktar * cocos.scene'den içe aktar * cocos.layer'dan içe aktar * cocos.sprite'tan içe aktar * cocos.tiles'den içe aktar * cocos.mapcolliders'dan içe aktar * cocos.actions'dan içe aktar * cocos'tan.text içe aktarma Etiket içe aktarma pyglet.app pyglet.window'dan matematikten içe aktarma anahtarı rasgele içe aktarma randintinden içe aktarma tavanı # "bildiriliyor" global değişkenler klavye = 0 scrMang = 0 class MainMenuBgr(ColorLayer): def _init_(self): super(MainMenuBgr, self)._init_(0, 200, 255, 255) class MainMenu(Menü): def _init_(self): super(MainMenu, self)._init_("") self.menu_valign = MERKEZ self.menu_halign = MERKEZ menüItems = [(MenuItem("Oyunu Başlat", startGame))), (MenuItem("Krediler", showKrediler)), (MenuItem("Çıkış", pyglet.app.exit))] self.create_menu(menuItems) class Krediler(Katman): def _init_(self): super(Credits, self)._init_() credFile = open("CREDITS", "r") creds = credFile.read() creds = creds.split("\n") aralığında i için (0, len(creds)): credLabel = Label(creds, font_size=32, çapa_x="sol", çapa_y="üst") credLabel.position = 25, 500-(i+1)*40 self.add(credLabel) class BackToMainMenuButton(Menu): def _init_(self): super (BackToMainMenuButton, self)._init_("") self.menu_valign = ALT self.menu_halign = SOL menuItems = [(MenuItem("Geri", showMainMenu))] self.create_menu(menuItems) class FinishMenu(Menu): def _init_(self, text): super(FinishMenu, self)._init_(text) self.menu_valign = MERKEZ self.menu_halign = MERKEZ menüItems = [(MenuItem("Tekrar dene", startGame))), (MenuItem("Çık", pyglet. app.exit))] self.create_menu(menuItems) class PlatformerController(Action): global klavye, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start(self): self.target.velocity = (0, 0) def step(self, dt): global klavye, dt > 0.1 ise kaydırma çubuğu: # kapalı kalma süresi çok büyükken hiçbir şey yapma geri dönüş vx, vy = self.target.velocity vx = (klavye[anahtar. SAĞ] - klavye [key. LEFT]) * self. MOVE_SPEED vy += self. GRAVITY * dt if self.on _ground ve klavye[key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect() yeni = last.copy() yeni.x += dx yeni.y + = dy self.target.velocity = self.target.collision_handler(last, new, vx, vy) self.on_ground = (yeni.y == last.y) self.target.position = yeni.center scrMang.set_focus(* new.center) posX, posY = posY < 0 ise self.target.position: bitişGame("Oyun Bitti") eğer posX > 800*3 ise dönüş: # seviye boyutu bitişGame("Seviye Tamamlandı") dönüş def bitişGame(metin): menuSc = Scene(MainMenuBgr()) menuSc.add(FinishMenu(text)) direct.run(menuSc) def showCredits(): credSc = Scene(MainMenuBgr()) credSc.add(Credits()) credSc.add(BackToMainMenuButton()) direct.run(credSc) def createTilemap(): colAmount = ceil(800/16)*3 # (ekran genişliği / döşeme boyutu) * 3 rowAmount = ceil(600 / 16) # ekran yüksekliği / döşeme boyutu tileFile = açık ("levelMap.xml", "w") tileFile.write('\n\n\n') iceHeight = randint(1, 10) in range(0, colAmount): tileFile.write('') makeHole = Rand ise yanlış int(0, 50) == 10 ve i != 0: # spawn noktasında deliklere izin verme makeHole = True for j in range(0, rowAmount): if makeHole: tileFile.write('\n') else: if j <= iceHeight: tileFile.write('\n') else: tileFile.write('\n') iceHeight = randint(iceHeight-5, iceHeight+5) if iceHeight < 0: # karoların da gitmesini sınırlar low iceHeight = randint(1, 5) eğer iceHeight > rowAmount: # karoların çok yüksek olmasını engeller iceHeight = randint(int(rowAmount/2)-5, int(rowAmount/2)+5) tileFile.write('\n ') aralıkta (0, colAmount) i için tileFile.write('\n\n'): tileFile.write('') aralıkta (0, rowAmount): tileFile.write('\n') tileFile.write('\n') tileFile.write('\n\n') tileFile.close() def startGame(): global klavye, scrMang createTilemap() # fig = Sprite('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer() figLayer.add(fig) # tileLayer = load('levelMap.xml') solidTiles = tileLayer['solid'] nsoliTiles = tileLayer['not_solid'] # klavye = key. KeyStateHandler () direktör.window.push_handlers(keybo ard) # fig.do(PlatformerController()) mapcollider = RectMapCollider(velocity_on_bump='slide') fig.collision_handler = make_collision_handler(mapcollider, solidTiles) # scrMang = ScrollingManager() scrMang.add(ns=ns) scrMang.add(ns=r) add(solidTiles, z=0) scrMang.add(figLayer, z=1) # gameSc = Scene(scrMang) direct.run(gameSc) def showMainMenu(): menuSc = Scene(MainMenuBgr()) menuSc.add(MainMenu()) yönetmen.run(menuSc) pencere = direktör.init(caption="IcyPlat - basit bir platform", resizable=True) showMainMenu()

  • Bu toplam 168 satır ve sadece kodu sayarsanız 152 satır. Bu çok fazla gibi görünse de, bu kadar karmaşık bir oyun için bu aslında küçük bir miktardır.
5692759 32
5692759 32

Adım 18. Bitti

Şimdi oyunu test edin. Bir şeyi programladığınızda, yeni bir şey uyguladığınızda çalışıp çalışmadığını kontrol etmeniz gerekir. Ayrıca yazdığınız oyunu bir süre oynamak isteyebilirsiniz.

Bölüm 3/3: Oyun Yayınlama

5692759 52
5692759 52

Adım 1. Bağımlılıkları yazın

Başka bir bilgisayar kullanan hiç kimse, sizinle aynı yazılımlara ve kitaplıklara sahip olmayacaktır. Bu nedenle, oyununuzu yükleyen herkesin oyunu çalıştırmak için tam olarak neye ihtiyaç duyacağını bildiğinden emin olmanız gerekir. Tüm bağımlılıkların tüm bağımlılıklarını vb. yazmak zorunda değilsiniz, ancak en azından paketlerinizin bağımlılıklarını ve bağımlılıklarını yazmalısınız.

5692759 53
5692759 53

Adım 2. Tüm medyayı kullanma izniniz olduğundan emin olun

Bu, oyununuz için kullandığınız 3B modeller, müzik, diyalog, müzik, kitaplıklar ve çerçeveler dahil tüm grafikler için geçerlidir. Kendin yazmadığın bir şey.

  • Çoğu zaman, yazara atıfta bulunmak veya medyadaki değişiklikleri aynı lisans altında paylaşmak gibi bazı koşullar vardır. Bazen oyun için ücret almadığınız sürece, yaratıcılara atıfta bulunmadan grafikleri kullanabileceksiniz. Yazara atıfta bulunmanız gerekiyorsa, bunu oyununuzdaki bir "Krediler" sekmesi gibi iyi görünür bir yerde yapın.
  • Ayrıca telif hakkı talep edilmiş ve lisans belirtilmemiş, bazen "Tüm hakları saklıdır" gibi bir metin içeren medya da vardır. Bu durumda, oyununuza eklemeden önce yazardan açık izin almalısınız.
  • Kütüphaneler genellikle kütüphane olarak kullanılmalarına izin veren lisanslar altında yayınlanır. Kayda değer bir istisna, bağlantı istisnası olmayan GPL'dir: Böyle bir lisans, yalnızca belirli lisanslara sahip bir programda kullanılmasına izin verir. Medya veya kitaplıkla yaptığınız her şeye izin verildiğinden emin olmak için her zaman en azından lisansın temel noktalarını okumalısınız.

Uyarı: Yayınladığınız bir oyunda medya veya kitaplıkları lisansın izin vermediği şekilde kullanmak sizi ciddi hukuki sıkıntılara sokabilir. Bu nedenle, kullanımınıza izin verilip verilmediğinden emin değilseniz, ya yazara sorun ya da medyadan tamamen kaçının.

5692759 54
5692759 54

Adım 3. Oyununuzu yayınlamak istediğiniz koşullara karar verin

Oyununuzu satacak mısınız? Başkalarının resimlerinizi ve fikirlerinizi kullanmasına izin vermek istiyor musunuz? Projenizde kullandığınız medya konusunda dikkatli olmanız gerekse de, genellikle başkalarının oyununuzu nasıl kullanmasına izin vermek istediğinize karar verebilirsiniz. Oyununuzu kamuya açık alanda yayınlamak için bir Creative Commons CC0 lisansı kullanabilirsiniz. Bazı koşullar altında bazı hakları korurken dağıtım ve değiştirmeye izin vermek için Gnu Genel Kamu Lisansı (GPL) veya Berkeley Yazılım Dağıtımı (BSD) lisansını deneyin. Veya yazılımınızı özel yapabilirsiniz, yani kimsenin izniniz olmadan yazılımı dağıtmasına veya değiştirmesine izin verilmez.

Oyun satarak para kazanmak mümkün olsa da, insanların genellikle birkaç özelliği olan ve hiçbir özelliği olmayan ilk oyununuzu satın almaları pek olası değildir. Ayrıca, ücretsiz bir program çalışmazsa, onu indiren kişiler hayal kırıklığına uğrayacaktır. Ancak bunun için ödeme yaptılarsa, paralarını geri talep edecekler ve hem siz hem de kullanıcılar için daha fazla soruna neden olacaklardır. Bu nedenle, ilk birkaç programınızı ücretsiz olarak kullanıma sunmayı düşünün

5692759 55
5692759 55

Adım 4. Oyununuzu nasıl yayınlamak istediğinize karar verin

Her yöntemin bazı avantajları ve dezavantajları vardır, bu yüzden kendiniz karar vermelisiniz.

  • Bir web sitesinde yayınlamak:

    Bir web siteniz varsa, indirilebilir hale getirmek için oyununuzu yükleyebilirsiniz. Yazılımın nasıl kurulacağına ve gerekli tüm bağımlılıklara ilişkin net talimatlar sağladığınızdan emin olun. Bunun dezavantajı, oyuncuların bağımlılıkları manuel olarak kurmaları gerekmesidir, bu da bazı insanlar için zor olabilir.

  • Paket yöneticisi için paket yapma:

    İnsanların Linux ve Linux tabanlı ortamlarda uygulama yüklemesini kolaylaştıran apt, Yum ve Homebrew gibi farklı paket yöneticileri vardır. Hepsinin farklı paket formatları var. Paketlerle ilgili iyi olan şey, tüm bağımlılıkları otomatik olarak yüklemeleridir (eğer doğru yapılandırırsanız). Böylece oyuncunun yalnızca paketinizi kurması ve ardından oyunu oynaması gerekir. Sorun şu ki, farklı platformlarda birçok farklı paket yöneticisi var, bu yüzden en yaygın olanları için paketler sağlamak için biraz çalışmanız gerekecek.

5692759 56
5692759 56

Adım 5. Programınıza doğrudan dikkat edin

Kolay kuruluma izin vermek için programınızı Ubuntu ve Debian'ın koruduğu gibi büyük bir paket deposuna yüklemeyi düşünün. Ayrıca GameDev'in projeler bölümü veya tigSource'un bir bölümü gibi uygun forumlarda yayınlayın. Ancak ilk oyunlarınız ünlü olmazsa hayal kırıklığına uğramayın. Pek çok kişinin beğendiği bir fikriniz varsa, oyununuz tanınır hale gelebilir.

İpuçları

  • Sabırlı ve öğrenmeye istekli olun. Programlama bazen sinir bozucu olabilir!
  • Başka bir oyunda bir şeyin nasıl yapıldığını merak ediyorsanız ve oyun açık kaynak ise kaynak koduna bakabilirsiniz.
  • Medya ararken, kamu malı olan içeriği bulmaya çalışın. "Creative Commons" veya "Public Domain" resimlerini ve müziğini arayın ve https://opengameart.org veya https://publicdomainpictures.net gibi web sitelerini kullanın.
  • Lisansı kontrol etmeden büyük kod parçalarını kopyalamayın. Genellikle yasaktır ve değilse, genellikle atıfta bulunmayı gerektirir.
  • Oyununuzu tanıtırken spam göndermeyin veya uygunsuz yerlerde yayınlamayın. Bu muhtemelen sayfadan engellenmenize neden olur, sadece can sıkıcıdır ve itibarınıza zarar verir.

Önerilen: