Kompüter Oyunlarını Necə Proqramlaşdırmaq olar (Şəkillərlə birlikdə)

Mündəricat:

Kompüter Oyunlarını Necə Proqramlaşdırmaq olar (Şəkillərlə birlikdə)
Kompüter Oyunlarını Necə Proqramlaşdırmaq olar (Şəkillərlə birlikdə)
Anonim

Bir kompüter oyunu üçün bir fikriniz varmı və onu gerçəkləşdirmək istəyirsiniz? Yoxsa kompüter oyunlarının necə yazıldığını heç düşünmüsünüzmü? Bu wikiHow sizə Pythonda üç əsas kompüter oyunu yazmağı öyrədir. İlk oyununuzu inkişaf etdirmək üçün Python və ümumi proqramlaşdırma anlayışlarına dair əsas anlayışa ehtiyacınız olacaq.

Addımlar

3-dən 1-ci hissə: Mətn əsaslı oyun hazırlamaq

5692759 1
5692759 1

Addım 1. Bir proqramlaşdırma dili seçin

Bütün proqramlaşdırma dilləri fərqlidir, buna görə oyununuzu yazmaq üçün hansından istifadə edəcəyinizə qərar verməlisiniz. Hər bir əsas proqramlaşdırma dili mətn daxil etmə, mətn çıxışı və if-konstruksiyaları (sadə mətn əsaslı oyun üçün lazım olan əsas şeylər) dəstəkləyir, buna görə seçimləri araşdırın və hansının özünüzü daha rahat və öyrənməyə həsr etdiyinizə qərar verin. Burada nəzərə alınması lazım olan bəzi amillər var:

  • Dil ən çox nə üçün istifadə olunur?

    JavaScript kimi bəzi proqramlaşdırma dilləri web üçün istifadə üçün nəzərdə tutulmuşdur, digərləri isə Python, C və ya C ++ kimi kompüter proqramlarını idarə etmək üçün hazırlanmışdır. Oyununuz üçün Python, C, C ++ və ya daha geniş istifadə dairəsinə malik bir dil seçin. JavaScript.

  • Öyrənmək nə qədər çətindir?

    Hər hansı bir normal proqramlaşdırma dilində (məsələn, Malbolge kimi çaşqınlıq yaratmaq üçün xüsusi olaraq hazırlanmış deyil) bəzi proqramlardan sonra proqram yazmaq kifayət qədər asan olsa da, bəziləri yeni başlayanlar üçün digərlərindən daha dostdur. Java və C, məsələn, daha əlçatan və düz sintaksisi ilə tanınan Python kimi bir şeydən daha dərindən proqramlaşdırma anlayışlarını anlamanızı tələb edəcək.

  • Harada istifadə edə bilərəm?

    Yəqin ki, Linux, Mac və ya Windows kimi fərqli sistemlərdə olan insanların hamısının oyununuzu oynamasını istəyərsiniz. Buna görə yalnız Windows -da dəstəklənən Visual Basic kimi yalnız bir neçə sistemdə dəstəklənən bir dil istifadə etməməlisiniz.

Bu məqalə Python-dan mətn əsaslı oyun nümunələri üçün istifadə edəcək, ancaq anlayışların hər hansı digər proqramlaşdırma dilində necə edildiyini araşdıra bilərsiniz.

5692759 2
5692759 2

Addım 2. Kompüterinizi hazırlayın

Ehtiyac duyacağınız iki əsas komponent, kodunuzu yazacağınız bir mətn redaktoru və onu oyuna çevirmək üçün istifadə edəcəyiniz bir tərtibçidir. Bu məqalədəki nümunəni izləmək istəyirsinizsə, Python -u yükləməli və proqramların necə idarə olunacağını öyrənməlisiniz. İstəyirsinizsə, tək bir proqramda redaktə etməyi, tərtib etməyi və ayıklamağı özündə birləşdirən bir IDE (İnteqrasiya edilmiş Masaüstü Mühiti) qura bilərsiniz. Python IDE IDLE adlanır. Ancaq Windows üçün Notepad, macOS üçün TextEdit və ya Linux üçün Vim kimi düz mətni dəstəkləyən hər hansı bir mətn redaktorundan da istifadə edə bilərsiniz.

5692759 3
5692759 3

Addım 3. Oyunçunu salamlamaq üçün bir kod yazın

Oyunçu nə baş verdiyini və nə etməli olduqlarını bilmək istəyəcək, buna görə də onlar üçün bir mətn çap etməlisiniz.

  • Bu Pythonda print () funksiyası ilə edilir. Bunu sınamaq üçün.py uzantılı yeni bir fayl açın, içərisinə aşağıdakı kodu daxil edin, saxla və işlədin:

    print ("Nömrəni təxmin edən oyuna xoş gəldiniz!") print ("1 ilə 1000 arasında bir ədəd daxil edin:")

5692759 4
5692759 4

Addım 4. Təsadüfi bir ədəd yaradın

Mətn əsaslı bir oyun edək ki, oyunçudan düzgün nömrəni tapmasını istəsin. Etməli olduğumuz ilk şey, oyunun əvvəlində təsadüfi bir ədəd yaratmaqdır ki, oyunçu həmişə eyni nömrəni təxmin etməsin. Proqram boyunca ədəd eyni qalacağından təsadüfi sayını dəyişəndə saxlamaq istəyəcəksiniz.

  • Python-un təsadüfi ədəd funksiyası yoxdur, ancaq standart kitabxanası var (bu, istifadəçinin əlavə heç bir şey yükləməyəcəyi anlamına gəlir). Kodunuzun əvvəlinə gedin (print () funksiyalarından əvvəl) və təsadüfi xətti daxil edin.
  • Təsadüfi funksiyasından istifadə edin. Randint () adlanır, yeni idxal etdiyiniz təsadüfi kitabxanadadır və rəqəmin arqument olaraq ola biləcəyi minimum və maksimum dəyəri alır. Kodunuzun sonuna qayıdın və aşağıdakı sətri daxil edin:

    sağNum = təsadüfi.randint (0, 1000)

5692759 5
5692759 5

Addım 5. Pleyerdən məlumat alın

Bir oyunda, oyunçu bir şey etmək və ya bir şeylə qarşılıqlı əlaqə qurmaq istəyir. Mətn əsaslı oyunda bu mətn daxil etməklə mümkündür. İndi təsadüfi bir rəqəmə sahib olduğumuz üçün, növbəti kod sətirlərimiz oyunçudan ən yaxşı təxminlərini daxil etmələrini istəməlidir.

  • Daxil etdiyiniz kod, oyunçuya nömrə daxil etmə təlimatını yazdırdığından, daxil etdikləri nömrəni də oxumalıdır. Python 3 -də input () və Python 2 -də raw_input () ilə edilir. Python 2 tezliklə köhnələcəyi üçün Python 3 -də yazmalısınız. Oyunçunun girişini nömrə adlanan dəyişəndə saxlamaq üçün kodunuza aşağıdakı sətri əlavə edin:

    userNum = giriş ()

5692759 6
5692759 6

Addım 6. Oyunçunun girişini istifadə edilə bilən bir məlumat növünə çevirin

Oyunçu nömrəyə girdi-indi nə?

  • Oyunçunun girişini bir rəqəm edin. İndi bu, sadəcə bir nömrə daxil etdikləri üçün qarışıq görünə bilər. Ancaq yaxşı bir səbəb var: Python, bütün girişlərin proqramlaşdırmada deyildiyi kimi mətn və ya "simli" olduğunu qəbul edir. Bu mətndə almaq istədiyiniz nömrə var. Python, yalnız sayı olan bir sətri içərisindəki rəqəmə çevirən bir funksiyaya malikdir. Növ:

    userNum = int (userNum)

5692759 7
5692759 7

Addım 7. Oyunçunun nömrəsini düzgün rəqəmlə müqayisə edin

Oyunçu nömrələrini daxil etdikdən sonra təsadüfi olaraq yaradılanla müqayisə etməlisiniz. Nömrələr eyni deyilsə, oyununuz oyunçunu başqa bir nömrə sınamağa məcbur edə bilər. Nömrələr uyğun gəlsə, oyunçuya düzgün təxmin etdiklərini söyləyə və proqramı tərk edə bilərsiniz. Bu, aşağıdakı kodla edilir:

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

5692759 8
5692759 8

Addım 8. Oyunçuya rəy bildirin

Girişlərini artıq işlətdiyiniz halda, oyunçu bunu görməyəcək. Baş verənləri başa düşmək üçün nəticəni oyunçuya yazdırmalısınız.

  • Şübhəsiz ki, oyunçuya sayının doğru və ya yanlış olduğunu deyə bilərsiniz. Ancaq bu yanaşma ilə oyunçu ən pis halda 1000 dəfə təxmin etməli ola bilər ki, bu da çox darıxdırıcı olardı.
  • Buna görə oyunçuya onların sayının çox az və ya çox olduğunu söyləyin. Bu, onların təxmin sayını əhəmiyyətli dərəcədə azaldacaq. Məsələn, oyunçu əvvəlcə 500-ü təxmin edərsə və oyun "Çox böyükdür. Yenidən cəhd edin" cavabını versə, 1000 əvəzinə yalnız 500 mümkün ədəd olacaq. Yenidən cəhd edin. ") Biri ilə.
  • Unutmayın ki, iki ədədin eyni olub olmadığını yoxlamaq = ilə deyil, == ilə aparılır. = sağdakı dəyəri sol dəyişənə təyin edir!
  • if userNum <rightNum: print ("Çox kiçik. Yenidən cəhd edin:") əgər userNum> rightNum: print ("Çox böyük. Yenidən cəhd edin:")

5692759 9
5692759 9

Addım 9. Kodunuzu sınayın

Bir proqramçı olaraq kodunuzun bitdiyini hesab etməzdən əvvəl işlədiyinə əmin olmalısınız.

  • Python -da proqramlaşdırarkən, girintilərin düzgün alındığından əmin olun. Kodunuz belə görünməlidir:

    təsadüfi çap idxal edin ("Nömrəni təxmin edən oyuna xoş gəldiniz!") çap edin ("1 ilə 1000 arasında bir ədəd daxil edin:") rightNum = random.randint (0, 1000) userNum = input () userNum = int (userNum) isə userNum! = rightNum: userNum <rightNum: print ("Çox kiçik. Yenidən cəhd edin:") əgər userNum> rightNum: print ("Çox böyük. Yenidən cəhd edin:") userNum = int (input ()) print ("Siz təxmin etdiniz düzgün. ")

5692759 10
5692759 10

Addım 10. Girişi təsdiq edin

Oyunçu sadəcə səhv bir şey daxil edərək oyununuzu poza bilməməlidir. "Girişin təsdiqlənməsi", oyunçunun onu emal etməzdən əvvəl doğru şeyi daxil etdiyinə əmin olmaq deməkdir.

  • Oyunu yenidən açın və rəqəm olmayan hər şeyi daxil etməyə çalışın. Oyun bir ValueError ilə çıxacaq. Bunun qarşısını almaq üçün girişin rəqəm olub olmadığını yoxlamaq üçün bir yol tətbiq edə bilərsiniz.
  • Bir funksiyanı təyin edin. Giriş təsdiqlənməsi olduqca uzun olduğundan və bunu dəfələrlə etməli olduğunuz üçün bir funksiya təyin etməlisiniz. Heç bir mübahisə etməyəcək və bir nömrəni qaytaracaq. Əvvəlcə def numInput () yazın: kodunuzun üst hissəsinə, birbaşa idxal təsadüfi altında.
  • Oyunçunun girişini bir dəfə alın. İnput () funksiyasından istifadə edin və nəticəni inp dəyişəninə təyin edin.
  • Oyunçunun girişi bir rəqəm olmadıqda, onlardan bir nömrə daxil etmələrini istəyin. Stringin bir ədəd olub olmadığını yoxlamaq üçün isdigit () funksiyalarından istifadə edin ki, bu da yalnız tam ədədə icazə verir, buna görə də bunu ayrıca yoxlamaq lazım olmayacaq.
  • Giriş bir rəqəmdirsə, onu sətirdən nömrəyə çevirin və nəticəni qaytarın. Sətri tamsayıya çevirmək üçün int () funksiyasından istifadə edin. Bu, əsas koddakı dönüşümü lazımsız hala gətirəcək və onu oradan çıxarmalısınız.
  • Əsas koddakı input () üçün edilən bütün zəngləri numInput () zəngləri ilə əvəz edin.
  • NumInput () funksiyasının kodu belə olacaq:
  • def numInput (): inp.isdigit () deyilkən inp = input (): print ("Sənə tam ədəd daxil etməyini söylədilər! Tam ədəd daxil et:") inp = input () return int (inp)

5692759 11
5692759 11

Addım 11. Oyunu yenidən sınayın

Nə baş verdiyini görmək üçün qəsdən yanlış şeyləri daxil edin və sonra ortaya çıxan səhvləri düzəldin.

Proqram sizdən nömrə istədikdə bir az mətn daxil etməyə çalışın. İndi proqram səhv mesajı ilə çıxmaq əvəzinə yenidən sizdən bir nömrə istəyəcək

5692759 12
5692759 12

Addım 12. Oyunu bitirdikdə yenidən başlamağı təklif edin

Bu yolla, oyunçu oyununuzu daim yenidən başlamadan daha uzun müddət oynaya bilər.

  • İdxal və funksiya tərifi istisna olmaqla bütün kodları bir müddətlik döngəyə daxil edin. Doğru olaraq şərt qoyun: bu həmişə doğru olacaq, buna görə də döngə sonsuza qədər davam edəcək.
  • Nömrəni düzgün təxmin etdikdən sonra oyunçudan yenidən oynamaq istədiklərini soruşun. Print () funksiyasından istifadə edin.
  • "Xeyr" cavabını verərlərsə, görünüşünüzdən çıxın. Başqa bir şeyə cavab versələr, davam edin. Bir döngədən çıxmaq break ifadəsi ilə aparılır.
  • "Nömrəni təxmin edən oyuna xoş gəldiniz" müddətini kənara köçürün. Oyunçu yəqin ki, oyunu hər dəfə oynayanda xoş qarşılanmaq istəmir. Təlimat çapını hərəkət etdirin ("Nömrəni təxmin edən oyuna xoş gəldiniz!" "True") yuxarıda, buna görə istifadəçi ilk oyuna başlayanda yalnız bir dəfə çap olunacaq.
5692759 13
5692759 13

Addım 13. Oyunu sınayın

Hər dəfə yeni bir xüsusiyyət tətbiq edərkən oyununuzu sınamalısınız.

  • Hər iki variantın da işlədiyinə əmin olmaq üçün ən azı bir dəfə "Bəli" və "Xeyr" cavabını verdiyinizə əmin olun. Kodunuz necə görünməlidir:

    import təsadüfi def numInput (): inp.isdigit () deyilkən inp = input (): print ("Sənə tam ədəd daxil etməyini söylədilər! Tam ədəd daxil et:") inp = input () return int (inp) print ("Nömrəni təxmin edən oyuna xoş gəldiniz!") True isə: print ("1 ilə 1000 arasında bir ədəd daxil edin:") rightNum = random.randint (0, 1000) userNum = numInput () userNum! = RightNum: if userNum <rightNum: print ("Çox kiçik. Yenidən cəhd edin:") əgər userNum> rightNum: print ("Çox böyük. Yenidən cəhd edin:") userNum = numInput () print ("Doğru təxmin etdiniz.") print ("Siz yenidən oynamaq istəyirsiniz? Çıxmaq üçün Xeyr daxil edin. ") if input () ==" No ": break

5692759 14
5692759 14

Addım 14. Digər mətn əsaslı oyunlar yazın

Növbəti mətn macərasını yazmağa necə? Yoxsa viktorina oyunu? Yaradıcı olmaq.

İpucu: Bir şeyin necə edildiyindən və ya bir funksiyanın necə istifadə edildiyindən əmin deyilsinizsə, bəzən sənədlərə baxmaq faydalıdır. Python 3 sənədləri https://docs.python.org/3/ saytında mövcuddur. Bəzən internetdə nə etmək istədiyinizi axtarmaq da yaxşı nəticələr verir.

3 -dən 2 -ci hissə: 2D Grafika ilə Oyun Yaratmaq

5692759 15
5692759 15

Addım 1. Bir qrafik kitabxana seçin

Qrafika hazırlamaq çox mürəkkəbdir və əksər proqramlaşdırma dilləri (Python, C ++, C, JavaScript daxil olmaqla) nüvədə və ya standart kitabxanalarda qrafika üçün minimum və ya hətta heç bir dəstək vermir. Beləliklə, qrafik qura bilmək üçün xarici kitabxanadan istifadə etməlisiniz, məsələn Python üçün Pygame.

Bir qrafik kitabxanası olsa belə, menyunun necə göstəriləcəyi, pleyerin tıkladığını yoxlamaq, plitələrin necə göstərilməsi və s. Əsl oyunu inkişaf etdirmək istəsəniz, bunları asanlıqla həyata keçirən Unity kimi bir oyun mühərrik kitabxanasından istifadə edə bilərsiniz

Bu məqalədə sadə 2D platformerin necə hazırlanacağını göstərmək üçün Cocos2D ilə Python istifadə ediləcək. Qeyd olunan anlayışlardan bəziləri digər oyun motorlarında olmaya bilər. Daha çox məlumat üçün onların sənədlərinə baxın.

5692759 16
5692759 16

Addım 2. Seçdiyiniz qrafik kitabxanasını quraşdırın

Python üçün Cocos2D qurmaq asandır. Bunu https://python.cocos2d.org/index.html saytından və ya Linux istifadə edirsinizsə sudo pip3 install cocos2d proqramını işə salmaqla əldə edə bilərsiniz.

5692759 17
5692759 17

Addım 3. Oyun və media üçün yeni bir kataloq yaradın

Oyunda şəkillər və səslər kimi şeylərdən istifadə edəcəksiniz. Bunları proqramla eyni qovluqda saxlayın. Bu qovluqda başqa heç bir şey olmamalıdır ki, oyunda nə aktivləriniz olduğunu asanlıqla görə biləsiniz.

5692759 18
5692759 18

Addım 4. Yeni qovluqda yeni bir kod faylı yaradın

Proqramlaşdırma diliniz üçün fayl uzantısı ilə əsas adlandırın. Birdən çox proqram faylının olmasının məntiqli olduğu böyük və kompleks bir proqram yazsanız, bu əsas faylın kim olduğunu göstərəcəkdir.

Bu nümunədə, bütün kodlarımızı ehtiva edən main.py adlı bir fayl yaradacağıq

5692759 19
5692759 19

Addım 5. Oyun pəncərəsi yaradın

Bu qrafika ilə bir oyun üçün əsas şərtdir.

  • Lazım olan cocos2d alt modullarını idxal edin: cocos.director, cocos.scene və cocos.layer. Bu, SubModuleName import *ilə aparılır, burada alt Modul adı idxal etmək istədiyiniz alt moduldur. … İdxalı ilə idxalı arasındakı fərq ondadır ki, modul adını o moduldan istifadə etdiyiniz hər şeyin qabağına qoymaq məcburiyyətində deyilsiniz.
  • ColorLayer -in MainMenuBgr alt sinifini təyin edin. Bu, əsasən, yaratdığınız hər hansı bir əsas menyu fonunun, etdiyiniz bəzi dəyişikliklərlə rəng qat kimi davranacağı deməkdir.
  • Kokos direktoruna başlayın. Bu sizə yeni bir pəncərə açacaq. Bir başlıq təyin etməsəniz, pəncərədə peşəkar görünməyən fayl adı (main.py) ilə eyni başlıq olacaq. Ölçüsünü Doğru olaraq təyin edərək pəncərənin ölçüsünü dəyişməyə icazə verin.
  • ShowMainMenu funksiyasını təyin edin. Əsas menyunu göstərmək üçün kodu bir funksiyaya daxil etməlisiniz, çünki bu funksiyanı yenidən çağıraraq asanlıqla əsas menyuya qayıtmağa imkan verəcəkdir.
  • Səhnə yaradın. Səhnə, müəyyən etdiyiniz MainMenuBgr sinifinin bir obyekti olan bir qatdan ibarətdir.
  • Bu səhnəni pəncərədə işlədin.
  • cocos.director idxalından * cocos.layerdən * cocos.layer idxalından * sinif MainMenuBgr (ColorLayer): def _init _ (özünü): super (MainMenu, öz)._ _ _ (0, 200, 255, 255) def showMainMenu (): menuSc = Səhnə (MainMenuBgr ()) Director.run (menuSc) Director.init (caption = "IcyPlat - sadə bir platformer", ölçüsü dəyişdirilə bilən = True) showMainMenu ()

5692759 20
5692759 20

Addım 6. Pəncərəyə əsas menyu əlavə edin

Əsl oyundan başqa, oyunçunun daha sonra əlavə edə biləcəyiniz digər elementlər arasında pəncərəni bağlamaq üçün istifadə edə biləcəyi bir menyu əlavə etməlisiniz.

  • Cocos.menu (yenidən təlimatla) və pyglet.app (bu dəfə idxal ilə) idxal edin.
  • MainMenu Menyu alt sinfi olaraq təyin edin.
  • Əsas menyunun hizalanmasını təyin edin. Şaquli və üfüqi hizalanmanı ayrıca təyin etməlisiniz.
  • Menyu elementlərinin siyahısını yaradın və menyuya əlavə edin. Ən azı "Oyuna Başla" və "Çıx" menyu maddələrinə sahib olmalısan. Hər bir menyu elementi mötərizədə yerləşdirilməlidir. Hər bir maddənin etiket və oyunçu onu tıkladığında nə olacağını təyin edən geri çağırma funksiyası olmalıdır. "Oyuna Başla" maddəsi üçün startGame funksiyasından istifadə edin (tezliklə yazacaqsınız), "Çıx" maddəsi üçün "pyglet.app.exit" istifadə edin (artıq mövcuddur). Self.create_menu (menuItems) çağıraraq həqiqi menyu yaradın.
  • StartGame () təyin edin. Hələlik tərifi daxil edin, əsl oyunu yazanda bunu əvəz edəcəksiniz.
  • Kodunuzda menuSc səhnəsini yaratdığınız yerə gedin və ona MainMenu obyekti əlavə edin.
  • Bütün kodunuz indi aşağıdakı kimi görünməlidir:

    cocos.director idxalından * cocos.menu idxalından * cocos.scene idxalından * cocos.layer idxalından * idxal pyglet.app sinif MainMenuBgr (ColorLayer): def _init _ (özünü): super (MainMenuBgr, özünü)._ init _ (0, 200, 255, 255) sinif MainMenu (Menyu): def _init _ (özünü): super (MainMenu, özünü)._ init _ ("") self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Oyuna Başla) ", startGame))), (MenuItem (" Çıx ", pyglet.app.exit))] self.create_menu (menuItems) def startGame (): pass def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) Director.init (caption = "IcyPlat - sadə bir platformer", ölçüsü dəyişdirilə bilən = True) showMainMenu ()

5692759 21
5692759 21

Addım 7. Kodunuzu sınayın

Hələ qısa və nisbətən sadə olsa da kodu erkən sınayın. Daha sonra işlər çox mürəkkəbləşmədən əsas quruluşdakı səhvləri müəyyən edə və düzəldə bilərsiniz.

Təlimatdakı kod "IcyPlat - sadə bir platformer" başlığı ilə bir pəncərə açmalıdır. Arxa plan açıq mavi rəngdədir və pəncərənin ölçüsünü dəyişə bilərsiniz. Menyuda "Oyuna Başla" düyməsini tıkladığınızda heç bir şey olmamalıdır (hələ). "Çıx" düyməsini tıkladığınızda, pəncərə bağlanacaq

5692759 22
5692759 22

Addım 8. Sprite yaradın

Sprite "oyun obyekti" və ya 2 ölçülü bir görüntüdür. Sprites oyundakı obyektlər, nişanlar, arxa plan bəzəkləri, personajlar və oyunda bir şəkil ilə təmsil edə biləcəyiniz hər şey ola bilər. Oyunçunun ünsiyyət qura biləcəyi bir xarakter üçün bir sprite yaratmaqla başlayacağıq.

  • From-import-ifadəsi ilə cocos.sprite alt modulunu idxal edin.
  • Spriti təmsil edəcək bir şəkil tapın. Şəkiliniz yoxdursa, sprite göstərə bilməzsiniz. Birini çəkə bilərsiniz və ya İnternetdən əldə edə bilərsiniz (oyununuzu yayımlamağı planlaşdırırsınızsa, lisenziyalara diqqət yetirin). Bu nümunə üçün https://opengameart.org/content/tux-classic-hero-style ünvanına daxil olun və çalışan pinqvinlərin-p.webp" />
  • ScrollableLayer sinifinin yeni bir obyekti olaraq bir təbəqə yaradın. Sonra Sprite obyekti olaraq Sprite yaradın və mövqeyini (8, 250) olaraq təyin edin. İstinad üçün (0, 0) nöqtəsi sol alt küncdədir. Bu olduqca yüksəkdir, amma pinqvinin buzda qalmamasına əmin olacaq.
  • Spriti sprite qatına əlavə edin.
  • Sprite qatından yeni bir səhnə yaradın və işləyin.
  • def startGame (): figLayer = ScrollableLayer () fig = Sprite ('pingu.png') fig.position = (75, 100) figLayer.add (fig) # gameSc = Scene (figLayer) Director.run (gameSc)

  • Kodu işə salın. Tıkladıqdan sonra qara bir fonda kiçik bir pinqvin fiqurunu (və ya çəkdiyiniz hər şeyi) görməlisiniz Oyuna Başlayın.
5692759 23
5692759 23

Addım 9. Mənzərənizi xəyal edin

Əksər oyunlarda spritləriniz yalnız boşluqda üzməməlidir. Əslində bir səthdə, ətrafında bir şeylə dayanmalıdırlar. 2D oyunlarda, bu tez -tez bir kafel dəsti və bir kafel xəritəsi ilə aparılır. Kafel dəsti, əsasən hansı səth meydanlarının və fon kvadratlarının olduğunu və necə göründüklərini söyləyir.

  • Bir kafel dəsti yaradın. Bu oyun üçün kafel dəsti çox sadə olacaq: buz üçün bir kafel və göy üçün bir kafel. Bu nümunədə istifadə olunan buz plitəsi buradan, CC-BY-SA 3.0 altında.
  • Bir kafel dəsti şəkli yaradın. Bu, hamısı eyni ölçüdə olmalı (düzəltməsələr düzəldin) və oyunda görmək istədiyiniz ölçüdə, bir -birinin yanında olan bütün plitələrin şəklidir. Şəkilinizi icyTiles-p.webp" />
  • Kafel dəstinin təsvirini yaradın. Bu bir XML faylıdır. XML faylı, kafel dəsti şəklindəki plitələrin nə qədər böyük olduğu, hansı şəkildən istifadə ediləcəyi və orada hansı kafelin harada tapılacağı haqqında məlumatları ehtiva edir. Aşağıdakı kodla icyTiles.xml adlı bir XML faylı yaradın:

         
    
5692759 24
5692759 24

Addım 10. Mənzərəniz üçün bir kafel xəritəsi hazırlayın

Bir kafel xəritəsi, səviyyənizdə hansı kafelin hansı mövqedə olduğunu təyin edən bir xəritədir. Nümunədə, kafel xəritələri yaratmaq üçün bir funksiya təyin etməlisiniz, çünki kafel xəritələrini əl ilə hazırlamaq çox yorucu bir işdir. Daha inkişaf etmiş bir oyunda ümumiyyətlə bir növ səviyyə redaktoru olardı, ancaq 2D oyun inkişafı ilə tanış olmaq üçün bir alqoritm kifayət qədər yaxşı səviyyələr təmin edə bilər.

  • Neçə satır və sütuna ehtiyac olduğunu öyrənin. Bunun üçün ekranın ölçüsünü həm üfüqi (sütunlar), həm də şaquli (sətirlər) ölçüyə bölün. Sayı yuxarıya doğru yuvarlaqlaşdırın; Bunun üçün riyaziyyat modulunun bir funksiyasına ehtiyacınız var, buna görə də kodunuzun üst hissəsindəki idxal riyaziyyat idxalından əlavə edin.
  • Yazmaq üçün bir fayl açın. Bu, faylın bütün əvvəlki məzmununu siləcək, buna görə də indiyədək heç bir faylın olmadığı bir ad seçin, məsələn levelMap.xml.
  • Açılış etiketlərini fayla yazın.
  • Alqoritmə uyğun olaraq bir kafel xəritəsi yaradın. Aşağıdakı kodda olanı istifadə edirsiniz və ya tək başına özünüzlə gələ bilərsiniz. Randint funksiyasını təsadüfi moduldan aldığınızdan əmin olun: aşağıdakı kodun işləməsi üçün tələb olunur və nə düşünsəniz də təsadüfi tam ədədlərə ehtiyacınız olacaq. Ayrıca, göy plitələr və buz plitələrini fərqli təbəqələrə qoyduğunuzdan əmin olun: buz möhkəmdir, göy deyil.
  • Bitirmə etiketlərini fayla yazın və faylı bağlayın.
  • def generateTilemap (): colAmount = tavan (800/16) * 3 # (ekran genişliyi / kafel ölçüsü) * 3 sıraAmount = tavan (600/16) # ekran hündürlüyü / kafel ölçüsü tileFile = açıq ("levelMap.xml", " w ") tileFile.write ('\ n / n / n') iceHeight = randint (1, 10) i aralığında (0, colAmount): tileFile.write ('') makeHole = Randint (0, 50)) == 10 və i! = 0: # spawn nöqtəsindəki deliklərə icazə verməyin makeHole = Aralığında j üçün doğrudur (0, rowAmount): if makeHole: tileFile.write ('\ n') else: if j <= iceHeight: tileFile.write ('\ n') başqa: tileFile.write ('\ n') iceHeight = randint (iceHeight-5, iceHeight+5) iceHeight <0: # plitələrin çox aşağı olmasından məhdudlaşdırın iceHeight = randint (1, 5) əgər iceHeight> rowAmount: # plitələrin həddindən artıq yüksək olmasından məhdudlaşdırın iceHeight = randint (int (rowAmount/2) -5, int (rowAmount/2) +5) tileFile.write ('\ n') tileFile.write ('\ n / n') i aralığında (0, colAmount): n ') tileFile.write (' / n / n ') tileFile.close ()

5692759 25
5692759 25

Addım 11. Kafel xəritəsini göstərin

Cocos.tiles -dən hər şeyi idxal edin və bunun üçün startGame funksiyasına daxil olun.

  • StartGame funksiyanızın əvvəlində, bunun üçün təyin etdiyiniz funksiyanı istifadə edərək bir kafel xəritəsi yaradın.
  • Yeni bir sürüşmə meneceri yaradın. Bunu birbaşa sprite qatına əlavə etdiyiniz xəttin altında edin.
  • GenerateTilemap funksiyanızın yaradıldığı levelMap.xml faylı xəritəsindən yüklənəcək plitələrdən ibarət yeni bir təbəqə yaradın.
  • Bərk olmayan təbəqəni, bərk təbəqəni və sprite qatını sürüşmə menecerinə tam olaraq bu qaydada əlavə edin. İstəyirsinizsə z-mövqeyi əlavə edə bilərsiniz.
  • Səhnəni sprite qatından yaratmaq əvəzinə, sürüşmə menecerindən yaradın.
  • StartGame funksiyanız indi belə görünməlidir:

    def startGame (): generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 500) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = yük ('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 = Səhnə (scrMang) rejissoru. Qaç (gameSc)

5692759 26
5692759 26

Addım 12. Kodunuzu sınayın

Həyata keçirdiyiniz yeni xüsusiyyətlərin həqiqətən işlədiyinə əmin olmaq üçün kodunuzu tez -tez sınamalısınız.

Nümunədəki kod indi pinqvin arxasında buzlu bir mənzərə göstərməlidir. Pinqvin buzun üzərində uzanmış kimi görünürsə, səhv bir şey etməmisiniz və növbəti addımda düzəldiləcəkdir

5692759 27
5692759 27

Addım 13. Nəzarətçiləri əlavə edin

Oyunçunun mətn əsaslı oyundan daha çox 2D oyunda proqramla qarşılıqlı əlaqə qurmağın bir çox yolu var. Düzgün bir düyməyə basıldığında rəqəmlərini hərəkət etdirmək ümumi bir şeydir.

  • Hər şeyi cocos.mapcolliders və cocos.actions -dan idxal edin. Həmçinin pyglet.window -dan açarı idxal edin.
  • Bəzi qlobal dəyişənləri "elan edin". Qlobal dəyişənlər funksiyalar arasında paylaşılır. Python -da dəyişənləri həqiqətən elan edə bilməzsiniz, ancaq istifadə etməzdən əvvəl qlobal bir dəyişənin əsas kodda olduğunu söyləməlisiniz. Dəyər olaraq 0 təyin edə bilərsiniz, çünki bir funksiya daha sonra düzgün dəyəri təyin etməklə məşğul olacaq. Beləliklə, idxal ifadələrinin altına əlavə edin:

    # qlobal dəyişənlərin "elan edilməsi" klaviaturası = 0 scrMang = 0

  • StartGame funksiyanızı tənzimləyin:

    • Qlobal dəyişənlər klaviatura və scrMang istifadə etdiyinizi söyləyin. Bunu qlobal klaviatura, scrMang funksiyasının üstünə yazaraq edin.
    • Pəncərəni klaviatura hadisələrini dinləməyə məcbur edin.
    • Bir PlatformerController əsasında hərəkət etməyi rəqəmə deyin. Tezliklə PlatformerController tətbiq edəcəksiniz.
    • Möhkəm plitələr və rəqəm arasındakı toqquşmaları idarə etmək üçün bir xəritə çarpazlayıcı yaradın.

    def startGame (): qlobal klaviatura, scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = yük ('levelMap).xml ') solidTiles = tileLayer [' solid '] nsoliTiles = tileLayer [' not_solid '] # klaviatura = key. KeyStateHandler () Director.window.push_handlers (klaviatura) # fig.do (PlatformerController ()) mapcollider = RectMapCollib (velocity_ = 'slayd') 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) # gameSc = Səhnə (scrMang) rejissoru. Qaç (gameSc)

  • Platforma nəzarətçisi yaradın. Düyməni basdığınıza görə rəqəmi hərəkətə gətirəcək budur.

    • Platforma nəzarətçisini bir Fəaliyyət alt sinfi olaraq təyin edin.
    • Hərəkət sürətini, atlama sürətini və çəkisini təyin edin.
    • Başlanğıc funksiyasını təyin edin. Platforma nəzarətçisi rəqəmə qoşulduqda bu funksiya bir dəfə çağırılır. Həm x, həm də y istiqamətində sürətini 0 olaraq təyin etməlidir.
    • Addım funksiyasını təyin edin. Səhnə işləyərkən təkrarlanacaq.
    • Qlobal dəyişənlər klaviatura və scrMang istifadə etmək üçün addım funksiyasını deyin.
    • Alın və sürəti dəyişdirin. X və y sürətini ayrı -ayrı dəyişənlərdə qeyd edin. X sürətini hərəkət sürəti ilə vurulan 1 və ya -1 (sol və ya sağ düymənin basılmasından asılı olaraq) olaraq təyin edin. Y sürətinə cazibə qüvvəsi əlavə edin. Yavaş cihazlarda eyni şəkildə işləməsi üçün fasilə ilə çoxaldın. Boşluq düyməsinə basılırsa və rəqəm yerdə dayanırsa, sürətini atlamaq üçün y sürətini dəyişərək tullanın.
    • Fiqurun hərəkət etməli olduğu yerə hesablayın. Daha sonra möhkəm bir kafel içərisindədirsə, toqquşma işçisinin bu mövqeyi tənzimləməsinə icazə verin. Nəhayət, rəqəmi yeni tənzimlənmiş mövqeyə keçirin.
    • Sürüşdürmə menecerinin diqqətini rəqəmə qoyun. Bu rəqəm hərəkət edərkən kameranın ağlabatan bir şəkildə hərəkət etməsinə səbəb olur.

    sinif PlatformerController (Fəaliyyət): qlobal klaviatura, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start (öz): self.target.velocity = (0, 0) def addım (özünü, dt): qlobal klaviatura, dt> 0.1 olduqda kaydırıcı: # böyük geri dönmə vx, vy = self.target.velocity vx = (klaviatura [key. RIGHT] - klaviatura [key. LEFT]) * self. MOVE_SPEED vy + = self. GRAVITY * dt əgər self.on_ground və klaviatura [key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x += dx new.y += dy self.target.velocity = self.target.collision_handler (last, new, vx, vy) self.on_ground = (new.y == last.y) self.target.position = new.center scrMang.set_focus (*new.center)

5692759 28
5692759 28

Addım 14. Kodunuzu sınayın

Nümunəni təqib etsəniz, indi pinqvin ox düymələri ilə hərəkət edə və boşluq çubuğuna basaraq tullana bilməlisiniz. Ayrıca, pinqvin indi yerə yuvarlanmaq əvəzinə yıxılmalıdır.

5692759 29
5692759 29

Addım 15. Oyun üçün bir sonluq yaradın

Sonsuza qədər davam edə biləcək oyunların belə məğlub olma ehtimalı olmalıdır. Nümunədə bir funksiya ilə etdiyiniz səviyyə bir sona çatdığından, bu məqsədə çataraq qazanmağı da mümkün etməlisiniz. Əks təqdirdə, oyunçu yalnız oradakı buz bloklarının ətrafında tullanırdı, bu da darıxdırıcı olardı.

  • Platforma nəzarətçisinin içərisində fokus qurulduqdan sonra rəqəmin x və y mövqeyini əldə edin. Y mövqeyi 0 -dan azdırsa, arqument olaraq "Game Over" ilə FinishGame () funksiyasını (sonra yazacaqsınız) çağırın. X mövqeyi ekranın 3 -ə vurulan ölçüsündən daha böyükdürsə (bunu əvvəllər səviyyə ölçüsü olaraq təyin etmişdiniz).

    posX, posY = self.target.position posY <0: finishGame ("Game Over") posX> 800*3: # level size size finishGame ("Level Completed") return

  • Bir sinif finişini təyin edin. Daha əvvəl təyin etdiyiniz əsas menyu sinifinə bənzəməlidir, ancaq başlıq olaraq boş bir sətrin olması əvəzinə _init_ funksiyasının arqument olaraq qəbul etdiyi dəyişən bir mətndən istifadə etməlidir. Menyu elementləri "Yenidən cəhd et" və "Çıx" kimi etiketlənməlidir, lakin çağırdıqları funksiyalar eyni qalır.

    sinif FinishMenu (Menyu): def _init _ (özünü, mətn): super (FinishMenu, özünü)._ init _ (mətn) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Yenidən cəhd et", startGame)), (MenuItem ("Çıx", pyglet.app.exit))] self.create_menu (menuItems)

  • FinishGame () funksiyasını təyin edin. Mətni arqument kimi qəbul etməlidir. Əsas menyu fonundan bir səhnə, bu menyuya ötürülən mətn arqumenti olan bir FinishMenu yaratmalıdır. Sonra bu səhnəni işə salmalıdır.

    def finishGame (mətn): menuSc = Səhnə (MainMenuBgr ()) menuSc.add (FinishMenu (mətn)) Director.run (menuSc)

5692759 30
5692759 30

Addım 16. Kredit əlavə edin

Mükəmməl kodunuza görə kredit götürdüyünüz və bu yolda sizə kömək edən hər kəsə kredit verdiyiniz yer budur. Başqa bir veb saytından bir şəkil istifadə etmisinizsə (icazə ilə), bu görüntünü yaradıcısına aid etdiyinizə əmin olun.

  • KREDİT faylını yaradın və bütün kreditlərinizi ora daxil edin:

    Pinqvin: Kelvin Shadewing, CC0 Buz blokunun altında: Michał Banas, opengameart.org saytında CC-BY-SA 3.0 altında 1024

  • Python kodunuza qayıdın və Etiketi cocos.text -dən idxal edin.
  • Layer Kreditləri alt sinifini təyin edin. _İnit_ funksiyasında, KREDİT faylını oxuyun və içindəki hər sətirdən düzgün mövqedə bir mətn etiketi yaradın.

    sinif Kreditləri (Layer): def _init _ (öz): super (Kreditlər, öz)._ init _ () credFile = açıq ("KREDİTLƏR", "r") creds = credFile.read () creds = creds.split ("\ n ") i aralığında (0, len (creds)): credLabel = Etiket (creds , font_size = 32, anchor_x =" left ", anchor_y =" top ") credLabel.position = 25, 500- (i +1)*40 özünü əlavə et (credLabel)

  • Əsas menyu sinifinizə gedin və tıklandığında showCredits funksiyasını çağıran "Kreditlər" etiketli bir menyu maddəsi əlavə edin.
  • Menyunun BackToMainMenuButton alt sinifini təyin edin. Bunu ShowMainMenu funksiyasını çağıran "Geri" etiketli bir maddə ilə bir menyu edin. Daha çox düyməyə bənzəyən bu "menyu" şaquli olaraq aşağıya və üfüqi olaraq yuxarıya doğru hizalanmalıdır.

    sinif BackToMainMenuButton (Menyu): def _init _ (öz): super (BackToMainuButton, öz)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("Geri"), showMainMenu) create_menu (menyu maddələri)

  • ShowCredits funksiyasını təyin edin. MainMenuBgr qatından və Kreditlər qatından bir səhnə düzəltməli və bu səhnəni işə salmalıdır.

    def showCredits (): credSc = Səhnə (MainMenuBgr ()) credSc.add (Kreditlər)) credSc.add (BackToMainMenuButton ()) Director.run (credSc)

5692759 31
5692759 31

Addım 17. Kodunuzu yoxlayın

Kodunuzu bitirdiyinizi düşündüyünüz zaman hamısına yenidən baxmalısınız. Bu, bir şeyin optimallaşdırıla biləcəyini və ya silməyi unutduğunuz lazımsız sətirlərin olub olmadığını anlamağa kömək edə bilər. Nümunəni təqib etsəniz, bütün kodunuz indi belə görünməlidir:

    cocos.director idxalı * cocos.menu idarəsindən * cocos.scen idxalı * cocos.layer idxalı * cocos.sprite idxalı * cocos.tiles idxalı.text idxal Etiketi pyglet.windowdan pyglet.app idxal riyazi idxaldan açar təsadüfi idxal randint # # elan "qlobal dəyişənlər klaviatura = 0 scrMang = 0 sinif MainMenuBgr (ColorLayer): def _init _ (özünü): super (MainMenuBgr, özünü)._ init _ (0, 200, 255, 255) sinif MainMenu (Menü): def _init _ (özünü): super (MainMenu, öz)._ init _ ("") self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Oyuna Başla", startGame)), (MenuItem ("Kreditlər", showCredits)), (MenuItem ("Çıx", pyglet.app.exit))] self.create_menu (menuItems) sinif Kreditləri (Layer): def _init _ (öz): super (Kreditlər, öz)._ init _ () credFile = açıq ("KREDİTLƏR", "r") creds = credFile.read () creds = creds.split ("\ n") i üçün aralıqda (0, len (creds)): credLabel = Etiket (creds , font_size = 32, anchor_x = "left", anchor_y = "top") credLabel.position = 25, 500- (i+1)*40 self.add (credLabel) class BackToMainMenuButton (Menyu): def _init _ (özünü): super (BackToMainMenuButton, self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("Geri", showMainMenu))] self.create_menu (menuItems) sinfi FinishMenu (Menyu): _ özünü, mətn): super (FinishMenu, özünü)._ init _ (mətn) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Yenidən cəhd et", startGame)), (MenuItem ("Çıx", pyglet. app.exit))] self.create_menu (menuItems) class PlatformerController (Action): global keyboard, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start (self): self.target.velocity = (0, 0) def addımı (özünü, dt): qlobal klaviatura, dt> 0.1 olduqda kaydırıcı: # çox dayanma zamanı heç nə etmə vx, vy = self.target.velocity vx = (klaviatura [key. RIGHT] - klaviatura [key. LEFT]) * self. MOVE_SPEED vy += self. GRAVITY * dt if self.on _ zemin və klaviatura [key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x += dx new.y + = dy self.target.velocity = self.target.collision_handler (son, yeni, vx, vy) self.on_ground = (yeni.y == son.y) self.target.position = new.centr scrMang.set_focus (* new.center) posX, posY = self.target.position posY <0: finishGame ("Game Over") posX> 800*3: # level size size finishGame ("Level Completed") return def finishGame (mətn): menuSc = Səhnə (MainMenuBgr ()) menuSc.add (FinishMenu (mətn)) Director.run (menuSc) def showCredits (): credSc = Səhnə (MainMenuBgr ()) credSc.add (Credits ()) credSc.add (BackToMainMenuButton ()) Director.run (credSc) def generateTilemap (): colAmount = tavan (800/16) * 3 # (ekran genişliyi / kafel ölçüsü) * 3 sıraAmount = tavan (600/16) # ekran hündürlüyü / kafel ölçüsü kafelFile = açıq ("levelMap.xml", "w") tileFile.write ('\ n / n / n') iceHeight = randint (1, 10) i aralığında (0, colAmount): tileFile.write ('') makeHole = Rand olduqda yalan int (0, 50) == 10 və i! = 0: # spawn nöqtəsində deşiklərə icazə verməyin makeHole = aralığında j üçün doğrudur (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: # plitələrin getməsini məhdudlaşdırır low iceHeight = randint (1, 5) if iceHeight> rowAmount: # plitələrin həddindən artıq yüksək olmasından məhdudlaşdırın iceHeight = randint (int (rowAmount/2) -5, int (rowAmount/2) +5) tileFile.write ('\ n ') tileFile.write (' / n / n ') i aralığında (0, colAmount):.write ('\ n') tileFile.write ('\ n / n') tileFile.close () def startGame (): qlobal klaviatura, scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml') solidTiles = tileLayer ['solid'] nsoliTiles = tileLayer ['not_solid'] # keyboard = key. KeyStateHandler () rejissor. pəncərə.push_handlers (klaviatura ard) # fig.do (PlatformerController ()) mapcollider = RectMapCollider (velocity_on_bump = 'slide') fig.collision_handler = make_collision_handler (mapcollider, solidTiles) # scrMang = ScrollingManager () scrMang.add (n) -1 əlavə edin (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Scene (scrMang) Director.run (gameSc) def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) window = Director.init (caption = "IcyPlat - sadə bir platformer", ölçüsünü dəyişə bilən = True) showMainMenu ()

  • Bu, cəmi 168 sətir və yalnız kodu sayarsanız 152 sətirdir. Bu çox şey kimi görünür, amma belə bir mürəkkəb oyun üçün bu əslində az bir məbləğdir.
5692759 32
5692759 32

Addım 18. Bitdi

İndi oyunu sınayın. Bir şey proqramlaşdırarkən, yeni bir şey tətbiq etdikdə bunun işləyib -işləmədiyini yoxlamalısan. Ayrıca, bir müddət yazdığınız oyunu oynamaq istəyə bilərsiniz.

3 -dən 3 -cü hissə: Bir Oyunun nəşri

5692759 52
5692759 52

Addım 1. Asılılıqları yazın

Başqa bir kompüterdən istifadə edən hər kəs sizin kimi proqram və kitabxanalara malik olmayacaq. Beləliklə, oyununuzu quran hər kəsin onu çalıştırması üçün nəyə ehtiyacı olacağını dəqiq bildiyindən əmin olmalısınız. Bütün asılılıqların bütün asılılıqlarını və s. Yazmaq məcburiyyətində deyilsiniz, amma heç olmasa paketlərinizin asılılıqlarını və asılılıqlarını yazmalısınız.

5692759 53
5692759 53

Addım 2. Bütün medianı istifadə etməyə icazə aldığınızdan əmin olun

Bu, 3D modellər, musiqi, dialoq, musiqi, kitabxanalar və oyununuz üçün istifadə etdiyiniz çərçivələr də daxil olmaqla bütün qrafiklərə aiddir. Özünüz yazmadığınız hər şeyi.

  • Tez -tez eyni lisenziya altında müəllifə kredit vermək və ya medianın dəyişikliklərini paylaşmaq kimi bəzi şərtlər var. Bəzən oyun üçün pul almadığınız müddətcə yaradıcıları göstərmədən qrafikdən istifadə edə bilərsiniz. Müəllifə borc vermək məcburiyyətindəsinizsə, bunu oyununuzdakı "Kreditlər" nişanı kimi yaxşı görünən bir yerdə edin.
  • Müəllif hüquqları iddia edilən və heç bir lisenziya göstərilməyən, bəzən "Bütün hüquqlar qorunur" kimi mətnləri olan media da var. Əgər belədirsə, oyununuza daxil etməzdən əvvəl müəllifdən açıq icazə almalısınız.
  • Kitabxanalar adətən kitabxana kimi istifadə olunmasına icazə verən lisenziyalar əsasında buraxılır. Diqqət çəkən bir istisna, istisnanı bağlamadan GPL -dir: Belə bir lisenziya yalnız müəyyən lisenziyalı bir proqramda istifadə etməyə imkan verir. Mediya və ya kitabxana ilə etdiyiniz hər şeyə icazə verildiyinə əmin olmaq üçün həmişə ən azı lisenziyanın əsas məqamlarını oxumalısınız.

Xəbərdarlıq: Kütləvi informasiya vasitələrindən və ya kitabxanalardan yayımladığınız bir oyunda lisenziyanın icazə vermədiyi bir şəkildə istifadə etməniz sizi ciddi hüquqi problemlərlə üzləşə bilər. İstifadənizə icazə veriləcəyinə əmin deyilsinizsə, ya müəllifdən soruşun, ya da mediadan tamamilə çəkinin.

5692759 54
5692759 54

Addım 3. Oyununuzu yayımlamaq istədiyiniz şərtlərə qərar verin

Oyununuzu satacaqsınız? Başqalarının şəkillərinizdən və fikirlərinizdən istifadə etməsinə icazə vermək istəyirsiniz? Layihənizdə istifadə etdiyiniz mediaya diqqətli olmalı olsanız da, ümumiyyətlə başqalarının oyununuzu istifadə etməsinə necə icazə verəcəyinizə qərar verə bilərsiniz. Oyununuzu ictimaiyyətə təqdim etmək üçün Creative Commons CC0 lisenziyasından istifadə edə bilərsiniz. Bəzi hüquqları saxlayarkən bəzi şərtlərdə yayılmasına və dəyişdirilməsinə icazə vermək üçün Gnu General Public License (GPL) və ya Berkeley Software Distribution (BSD) lisenziyasını sınayın. Və ya proqramınızı mülkiyyətçi edə bilərsiniz, yəni heç kimin icazəniz olmadan yaymasına və ya dəyişdirməsinə icazə verilmir.

Oyun sataraq pul qazanmaq mümkün olsa da, insanların adətən az xüsusiyyətlərə və xüsusi bir şeyə sahib olmayan ilk oyununuzu alması ehtimalı azdır. Ayrıca, pulsuz bir proqram işləmirsə, onu yükləyən insanlar sadəcə məyus olacaqlar. Bunun üçün pul ödədilərsə, həm sizin, həm də istifadəçilər üçün daha çox problem yaradan pullarını geri tələb edəcəklər. Buna görə ilk bir neçə proqramınızı pulsuz olaraq təqdim etməyi düşünün

5692759 55
5692759 55

Addım 4. Oyununuzu necə yayımlamaq istədiyinizə qərar verin

Hər bir metodun üstünlükləri və mənfi cəhətləri var, buna görə özünüz qərar verməlisiniz.

  • Bir veb saytında yayımlanması:

    Veb saytınız varsa, yükləmək üçün oyununuzu yükləyə bilərsiniz. Proqramın necə qurulacağına dair aydın təlimatlar verdiyinizə və bütün lazım olan asılılıqlara əmin olun. Bunun dezavantajı, oyunçuların asılılıqları əl ilə quraşdırmasıdır ki, bu da bəzi insanlar üçün çətin ola bilər.

  • Paket meneceri üçün bir paket hazırlamaq:

    Apt, Yum və Homebrew kimi fərqli paket menecerləri var ki, bu da insanların Linux və Linux əsaslı mühitlərdə tətbiq yükləməsini asanlaşdırır. Hamısının fərqli paket formatları var. Paketlərin yaxşı tərəfi, bütün asılılıqları avtomatik olaraq quraşdırmalarıdır (düzgün konfiqurasiya etsəniz). Beləliklə, oyunçu yalnız paketinizi quraşdırmalı və sonra oyunu oynaya bilər. Problem ondadır ki, fərqli platformalarda bir çox fərqli paket meneceri var, buna görə də ən çox yayılmış paketlər üçün bir az iş görməli olacaqsınız.

5692759 56
5692759 56

Addım 5. Proqramınıza birbaşa diqqət yetirin

Proqramınızı Ubuntu və Debianın saxladığı kimi böyük bir paket anbarına yükləməyi asan yükləmələr üçün düşünün. Həmçinin GameDev -in layihələr bölməsi və ya tigSource -un bir hissəsi kimi uyğun forumlarda yazılar göndərin. Ancaq ilk oyunlarınız məşhur olmasa, məyus olmayın. Bir çox insanın bəyəndiyini düşünsəniz, oyununuz məşhur ola bilər.

İpuçları

  • Səbirli olun və öyrənməyə hazır olun. Proqramlaşdırma bəzən sinir bozucu ola bilər!
  • Başqa bir oyunda bir şeyin necə edildiyini və oyunun açıq mənbə olduğunu düşünürsünüzsə, onun qaynaq koduna baxa bilərsiniz.
  • Media axtararkən, ictimai yerlərdə olan məzmun tapmağa çalışın. "Creative Commons" və ya "Public Domain" şəkillərini və musiqisini axtarın və https://opengameart.org və ya https://publicdomainpictures.net kimi saytlardan istifadə edin.
  • Lisenziyanı yoxlamadan əsas kod parçalarını kopyalamayın. Tez -tez qadağandır və əgər olmasa, ümumiyyətlə atribut tələb edir.
  • Oyununuzu tanıtarkən spam yazmayın və uyğun olmayan yerlərə yazmayın. Çox güman ki, sizi səhifədən bağlayacaq, sadəcə əsəbiləşdirəcək və nüfuzunuza xələl gətirəcək.

Tövsiyə: