Компьютер оюндарын кантип программалоо керек (Сүрөттөр менен)

Мазмуну:

Компьютер оюндарын кантип программалоо керек (Сүрөттөр менен)
Компьютер оюндарын кантип программалоо керек (Сүрөттөр менен)
Anonim

Сизде компьютердик оюндун идеясы барбы жана аны реалдуу кылгыңыз келеби? Же сиз компьютердик оюндар кантип жазылганын ойлонуп көрдүңүз беле? Бул wikiHow сизге Pythonдо үч компьютер оюнун жазууну үйрөтөт. Биринчи оюнду иштеп чыгуу үчүн сизге Python жана жалпы программалоо түшүнүктөрү боюнча негизги түшүнүк керек болот.

Кадамдар

3төн 1 бөлүк: Текстке негизделген оюн жасоо

5692759 1
5692759 1

Кадам 1. Программалоо тилин тандаңыз

Бардык программалоо тилдери ар башка, андыктан оюнду жазуу үчүн кайсы тилди колдонууну чечишиңиз керек. Ар бир негизги программалоо тили текстти киргизүүнү, текстти чыгарууну жана эгерде конструкцияларды (текстке негизделген жөнөкөй оюн үчүн керектүү болгон нерселерди) колдойт, андыктан варианттарды изилдеп, кайсынысы сизге ыңгайлуу жана үйрөнүүгө арналганын чечиңиз. Бул жерде кээ бир факторлор эске алынышы керек:

  • Көбүнчө кайсы тил колдонулат?

    JavaScript сыяктуу кээ бир программалоо тилдери веб үчүн колдонууга ылайыкташтырылган, башкалары Python, C же C ++ сыяктуу, компьютердик программаларды иштетүү үчүн иштелип чыккан. Оюнуңуз үчүн Python, C, C ++ же JavaScript.

  • Үйрөнүү канчалык кыйын?

    Программаны жазуу кандайдыр бир кадимки программалоо тилинде бир аз машыгуудан кийин жетишерлик жеңил болушу керек да (б.а., Malbolge сыяктуу башаламан болуу үчүн атайын иштелип чыккан эмес), башкалары башкаларга караганда достук мамиледе. Java жана C, мисалы, Python сыяктуу нерсеге караганда, терең программалоо түшүнүктөрүн түшүнүүнү талап кылат, ал жеткиликтүү жана түз синтаксиси менен белгилүү.

  • Мен аны кайда колдоно алам?

    Сиз, балким, Linux, Mac же Windows сыяктуу ар кандай системалардагы адамдардын сиздин оюңузду ойношун каалашат. Ошентип, сиз Windowsто гана колдоого алынган Visual Basic сыяктуу бир нече системада гана колдоого алынган тилди колдонбошуңуз керек.

Бул макалада текстке негизделген оюндун мисалдары үчүн Python колдонулмакчы, бирок сиз түшүнүктөр башка программалоо тилинде кандайча жасалганын карап көрсөңүз болот.

5692759 2
5692759 2

Кадам 2. Компьютериңизди даярдаңыз

Сизге керек болгон эки негизги компонент - бул кодуңузду жазчу текст редактору жана аны оюнга айлантуу үчүн колдоно турган компилятор. Эгерде сиз бул макаланын мисалын ээрчигиңиз келсе, анда Pythonду орнотуп, программаларды иштетүүнү үйрөнүшүңүз керек. Кааласаңыз, түзөтүүнү, компиляцияны жана мүчүлүштүктөрдү бир программага бириктирген IDE (Integraded Desktop Environment) орното аласыз. Python IDE IDLE деп аталат. Бирок сиз ошондой эле Windows үчүн Notepad, macOS үчүн TextEdit же Linux үчүн Vim сыяктуу жөнөкөй текстти колдогон текст редакторун колдонсоңуз болот.

5692759 3
5692759 3

Кадам 3. Оюнчуга салам айтуу үчүн кээ бир коддорду жазыңыз

Оюнчу эмне болуп жатканын жана эмне кылыш керек экенин билгиси келет, андыктан алар үчүн текстти басып чыгарышыңыз керек.

  • Бул Pythonдогу print () функциясы менен жасалат. Аны сынап көрүү үчүн.py кеңейтүүсү бар жаңы файлды ачыңыз, ага төмөнкү кодду киргизиңиз, сактап, иштетиңиз:

    print ("Сан табуу оюнуна кош келиңиз!") print ("1ден 1000ге чейинки бүтүн санды киргизиңиз:")

5692759 4
5692759 4

Кадам 4. Кокус санды жаратыңыз

Келгиле, оюнчуга туура санды табууну суранган текстке негизделген оюн жасайбыз. Биринчи кылышыбыз керек болгон нерсе - оюндун башталышында кокус сандарды түзүү, андыктан оюнчу бир эле санды таппай калат. Программанын саны ошол бойдон кала тургандыктан, сиз туш келди санды өзгөрмөгө сактагыңыз келет.

  • Pythonдун кокустук сандар функциясы жок, бирок анын стандарттык китепканасы бар (бул колдонуучуга кошумча эч нерсе орнотуунун кажети жок дегенди билдирет). Ошентип, кодуңуздун башына өтүңүз (print () функцияларынын алдында) жана сапты импортту туш келди териңиз.
  • Кокустук функциясын колдонуңуз. Ал randint () деп аталат, сиз жаңы эле импорттогон туш келди китепканада жана сан аргумент боло турган минималдуу жана максималдуу маанини алат. Ошентип, кодуңуздун аягына кайтыңыз жана төмөнкү сапты киргизиңиз:

    rightNum = random.randint (0, 1000)

5692759 5
5692759 5

Кадам 5. Плеерден кириш алыңыз

Оюнда оюнчу бир нерсе кылууну же бир нерсе менен өз ара аракеттенүүнү каалайт. Текстке негизделген оюнда бул текстти киргизүү менен мүмкүн болот. Эми бизде туш келди сан болгондон кийин, биздин кийинки код линиялары оюнчудан эң жакшы божомолун киргизүүсүн сурашы керек.

  • Сиз киргизген код оюнчуга номерди киргизүү боюнча көрсөтмөнү басып чыгаргандыктан, ал дагы алар киргизген номерди окушу керек. Бул Python 3төгү input (), Python 2де raw_input () менен жасалат. Python 3 менен жазышыңыз керек, анткени Python 2 жакында эскирип калат. Оюнчу киргизгенди сан деп аталган өзгөрмөгө сактоо үчүн кодуңузга төмөнкү сапты кошуңуз:

    userNum = input ()

5692759 6
5692759 6

Кадам 6. Оюнчунун киргизүүсүн пайдалуу маалымат түрүнө айландырыңыз

Оюнчу номерге кирди-эми эмне?

  • Оюнчунун киргизүүсүн номер кылыңыз. Эми, бул түшүнүксүз болуп көрүнүшү мүмкүн, анткени алар жаңы эле номерди киргизишти. Бирок жүйөлүү себеп бар: Python программалоодо айтылгандай, бардык киргизүү текст же "сап" деп ойлойт. Бул текст сиз алгыңыз келген номерди камтыйт. Python бир гана сандан турган сапты ичиндеги санга айландыруучу функцияга ээ. Түрү:

    userNum = int (userNum)

5692759 7
5692759 7

Кадам 7. Оюнчунун номерин туура санга салыштырыңыз

Оюнчу өз номерин киргизгенден кийин, аны туш келди түзүлгөнгө салыштыруу керек болот. Эгерде сандар бирдей болбосо, анда сиздин оюнуңуз оюнчуну башка номерди аракетке келтириши мүмкүн. Эгерде сандар дал келсе, анда оюнчуга алар туура божомолдогонун айтып, программадан чыгыңыз. Бул төмөнкү код менен жасалат:

ал эми userNum! = rightNum: userNum = int (input ())

5692759 8
5692759 8

Кадам 8. Оюнчуга пикир билдириңиз

Сиз алардын маалыматын иштеп чыкканыңызда, оюнчу муну көрбөйт. Оюнчуга эмне болуп жатканын түшүнүшү үчүн жыйынтыктарды чындыгында басып чыгарышыңыз керек болот.

  • Албетте, сиз оюнчуга алардын саны туура же туура эмес экенин айта аласыз. Бирок мындай мамиле менен, оюнчу эң начар учурда 1000 жолу болжолдоого туура келиши мүмкүн, бул абдан кызыксыз болмок.
  • Ошентип, оюнчуга алардын саны өтө кичине же өтө чоң экенин айт. Бул алардын божомолдорунун санын бир кыйла азайтат. Эгерде, мисалы, оюнчу биринчи 500дү ойлоп тапса жана оюн "Өтө чоң. Кайталап көрүңүз" деп жооп берсе, 1000дин ордуна 500 гана мүмкүн болгон сандар болот. Кайра аракет кылыңыз. ") Бири менен.
  • Билиңиз, эки сандын бирдей экендигин текшерүү = менен эмес, == менен жүргүзүлөт. = анын сол жагындагы өзгөрмөгө анын укугун ыйгарат!
  • if userNum <rightNum: print ("Өтө кичине. Кайталап көрүңүз:") if userNum> rightNum: print ("Өтө чоң. Кайталап көрүңүз:")

5692759 9
5692759 9

Кадам 9. Кодуңузду текшериңиз

Программист катары, кодуңуз бүткөнгө чейин иштээрине ишенишиңиз керек.

  • Pythonдо программалоодо, чегинүүлөрдүн туура экенин текшериңиз. Сиздин кодуңуз мындай болушу керек:

    туш келди басып чыгарууну импорттоо ("Санды болжоо оюнуна кош келиңиз!") басып чыгаруу ("1ден 1000ге чейин бүтүн санды киргизиңиз:") rightNum = random.randint (0, 1000) userNum = input () userNum = int (userNum) while userNum! = rightNum: if userNum <rightNum: print ("Өтө кичине. Кайталап көрүңүз:") if userNum> rightNum: print ("Өтө чоң. Кайталап көрүңүз:") userNum = int (input ()) print ("Сиз божомолдогонсуз туура. ")

5692759 10
5692759 10

Кадам 10. Киргизүүнү ырастаңыз

Оюнчу жөн эле туура эмес нерсени киргизип, оюнуңузду буза албашы керек. "Киргизүүнү ырастоо" - оюнчу аны иштетүүдөн мурун туура нерсени киргизгенине ынануу.

  • Оюнду кайра ачып, номер эмес нерсени киргизип көрүңүз. Оюн ValueError менен чыгат. Мунун алдын алуу үчүн, киргизүүнүн сан экенин текшерүү ыкмасын колдонсоңуз болот.
  • Функцияны аныктоо. Киргизүүнү текшерүү абдан узун болгондуктан жана аны бир нече жолу жасашыңыз керек болгондуктан, сиз функцияны аныкташыңыз керек. Бул эч кандай аргументтерди талап кылбайт жана номерди кайтарат. Биринчиден, def numInput () жазыңыз: кодуңуздун башына, импорттук кокустуктун астына.
  • Оюнчунун киргизүүсүн бир жолу алыңыз. Input () функциясын колдонуңуз жана натыйжаны inp өзгөрмөсүнө дайындаңыз.
  • Оюнчунун киргизүүсү сан болбосо, алардан номерди киргизүүсүн сураныңыз. Саптын сан экендигин текшерүү үчүн, бүтүн санга гана уруксат берген isdigit () функцияларын колдонуңуз, андыктан аны өзүнчө текшерүүнүн кажети жок.
  • Эгерде киргизүү сан болсо, аны саптан санга айлантып, натыйжаны кайтарыңыз. Сапты бүтүн санга айландыруу үчүн int () функциясын колдонуңуз. Бул негизги коддогу конверсияны керексиз кылат жана аны ошол жерден алып салышыңыз керек.
  • Негизги коддогу input () бардык чалууларды numInput () чалуулары менен алмаштырыңыз.
  • NumInput () функциясынын коду мындай болот:
  • def numInput (): inp = input () inp.isdigit () эмес: print ("Сизге бүтүн санды киргизүү керектиги айтылды! Бүтүн санды киргизиңиз:") inp = input () return int (inp)

5692759 11
5692759 11

Кадам 11. Оюнду кайра сынап көрүңүз

Эмне болуп жатканын көрүү үчүн атайылап туура эмес нерселерди киргизиңиз, андан кийин алар келип жатканда каталарды оңдоңуз.

Программа сизден номер сураганда кээ бир текстти киргизип көрүңүз. Эми, ката билдирүүсү менен чыгуунун ордуна, программа сизден кайра номерди сурайт

5692759 12
5692759 12

Кадам 12. Оюн аяктагандан кийин кайра баштоону сунуштаңыз

Бул жол менен, оюнчу сиздин оюңузду дайыма өчүрүп -күйгүзбөстөн, узак убакыт бою ойной алат.

  • Импорт менен функциянын аныктамасынан башка бардык коддорду убактылуу циклге салыңыз. Чындыкты шарт катары коюңуз: бул дайыма туура болот, андыктан цикл түбөлүккө улана берет.
  • Оюнчудан номерди туура тапкандан кийин кайра ойногусу келерин сураңыз. Print () функциясын колдонуңуз.
  • Эгер алар "Жок" деп жооп беришсе, сырткы келбетиңизден чыгып кетиңиз. Эгерде алар башка нерсеге жооп берсе, улантыңыз. Укуруктан чыгуу break билдирүүсү менен ишке ашат.
  • "Сан табуу оюнуна кош келиңиз" убакыт циклинин сыртына жылдырыңыз. Оюнчу, балким, алар оюнду ойногон сайын тосуп алгысы келбейт. Нускаманын басып чыгарылышын жылдырыңыз ("Сан табуу оюнуна кош келиңиз!" "True"), ошондуктан колдонуучу биринчи оюнду баштаганда бир гана жолу басылат.
5692759 13
5692759 13

Кадам 13. Оюнду сыноо

Сиз жаңы функцияны ишке киргизген сайын оюңузду текшеришиңиз керек болот.

  • Эки вариант тең иштээрине ынануу үчүн жок дегенде бир жолу "Ооба" жана "Жок" деп жооп бериңиз. Бул жерде сиздин код кандай болушу керек:

    импорттук туш келди def numInput (): inp = input () inp.isdigit эмес (): print ("Сизге бүтүн санды киргизүү керектиги айтылды! Бүтүн санды киргизиңиз:") inp = input () return int (inp) print ("Сан табуу оюнуна кош келиңиз!") True: print ("1ден 1000ге чейинки бүтүн санды киргизиңиз:") rightNum = random.randint (0, 1000) userNum = numInput () userNum! = RightNum: if userNum <rightNum: print ("Өтө кичине. Кайталап көрүңүз:") if userNum> rightNum: print ("Өтө чоң. Дагы бир жолу аракет кылыңыз:") userNum = numInput () print ("Туура айттыңыз.") print ("Сиз кайра ойногуңуз келеби? Чыгуу үчүн "No" деп жазыңыз. ") if input () ==" No ": break

5692759 14
5692759 14

Step 14. Башка текстке негизделген оюндарды жазыңыз

Кийинки тексттик укмуштуу окуяны жазууга кандай дейсиз? Же викториналык оюнбу? Чыгармачыл бол.

Кеңеш: Кээде бир нерсе кантип жасалганын же функция кантип колдонулганын билбей жатсаңыз, документтерди кароо пайдалуу. Python 3 документтери https://docs.python.org/3/ дарегинде жайгашкан. Кээде интернеттен каалаган нерсеңизди издөө жакшы натыйжаларды берет.

3төн 2 бөлүк: 2D графикасы менен оюн жасоо

5692759 15
5692759 15

Кадам 1. Графикалык китепкананы тандаңыз

Графика жасоо өтө татаал жана программалоо тилдеринин көбү (анын ичинде Python, C ++, C, JavaScript) негизги же стандарттык китепканалардагы графиканы минималдуу же ал тургай колдобойт. Ошентип, графиканы түзүү үчүн тышкы китепкананы колдонуу керек болот, мисалы Python үчүн Pygame.

Графикалык китепкана болсо да, менюну кантип көрсөтүү керек, плеердин чыкылдатуусун текшерүү, плиткаларды кантип көрсөтүү ж.б.у.с. Эгер сиз чыныгы оюнду өнүктүрүүгө басым жасоону кааласаңыз, анда муну оңой ишке ашыруучу Unity сыяктуу оюн кыймылдаткычтарынын китепканасын колдоно аласыз

Бул макалада Cocos2D менен Python колдонулуп, жөнөкөй 2D платформерди кантип жасоо керектиги көрсөтүлөт. Жогоруда айтылган кээ бир түшүнүктөр башка оюн кыймылдаткычтарында жок болушу мүмкүн. Көбүрөөк маалымат алуу үчүн алардын документтерине кайрылыңыз.

5692759 16
5692759 16

Кадам 2. Сиз тандаган графикалык китепкананы орнотуңуз

Python үчүн Cocos2D орнотуу оңой. Сиз аны https://python.cocos2d.org/index.html дарегинен же Linuxту колдонуп жатсаңыз sudo pip3 install cocos2d иштетүү менен ала аласыз.

5692759 17
5692759 17

Кадам 3. Оюнуңуз жана медиаңыз үчүн жаңы каталог жасаңыз

Сиз оюнда сүрөттөр жана үндөр сыяктуу нерселерди колдоносуз. Бул нерселерди программа менен бир каталогдо сактаңыз. Бул каталогдо башка эч нерсе болбошу керек, андыктан оюндун кандай активдери бар экенин оңой көрө аласыз.

5692759 18
5692759 18

Кадам 4. Жаңы каталогдо жаңы код файлын түзүңүз

Программалоо тилиңиз үчүн файл кеңейтүүсү менен аны негизги деп атаңыз. Эгерде сиз чоң жана татаал программаны жазсаңыз, анда бир нече программа файлдары бар болсо, бул сизге негизги файлдын кайсынысын көрсөтөт.

Бул мисалда биз main.py деп аталган файлды түзөбүз, ал биздин бардык кодду камтыйт

5692759 19
5692759 19

Кадам 5. Оюн терезесин түзүңүз

Бул графика менен оюндун негизги шарты.

  • Керектүү cocos2d суб-модулдарын импорттоңуз: cocos.director, cocos.scene жана cocos.layer. Бул subModuleName импортунун *жардамы менен жасалат, мында суб-модулдун аты сиз импорттогусу келген субмодуль. … Импорттоонун * импорттон… айырмасы, модулдун атын мурунку модулдан колдонгон нерсенин алдына коюунун кажети жок.
  • ColorLayerдин MainMenuBgr субклассын аныктаңыз. Бул, негизинен, сиз түзгөн ар кандай негизги меню фону сиз киргизген кээ бир өзгөртүүлөр менен түстүү катмар сыяктуу иштей турганын билдирет.
  • Кокос директорун баштаңыз. Бул сизге жаңы терезе берет. Эгер сиз коштомо жазууну койбосоңуз, анда терезеде файлдын аталышы (main.py) сыяктуу эле жазуу болот, ал профессионалдуу көрүнбөйт. Өлчөмүн "Чын" деп коюу менен терезенин өлчөмүн өзгөртүүгө уруксат бериңиз.
  • ShowMainMenu функциясын аныктаңыз. Сиз негизги менюну көрсөтүү үчүн кодду функцияга коюшуңуз керек, анткени бул функцияны кайра чакырып, негизги менюга оңой кайтууга мүмкүндүк берет.
  • Сахна түзүү. Сахна азырынча бир катмардан турат, бул сиз аныктаган MainMenuBgr классынын объектиси.
  • Бул көрүнүштү терезеден иштетиңиз.
  • cocos.director импортунан * cocos.layer импортунан * cocos.layer импортунан * класс MainMenuBgr (ColorLayer): def _init _ (өзүн): супер (MainMenu, өз алдынча)._ init _ (0, 200, 255, 255) def showMainMenu (): menuSc = Сахна (MainMenuBgr ()) Director.run (menuSc) Director.init (caption = "IcyPlat - жөнөкөй платформер", resizable = True) showMainMenu ()

5692759 20
5692759 20

Кадам 6. Терезеге башкы менюну кошуу

Чыныгы оюндан тышкары, оюнчу терезени жабуу үчүн колдоно турган менюну кошушуңуз керек, кийинчерээк кошо аласыз.

  • Cocos.menu (кайра нускамадан) жана pyglet.app импорттоо (бул жолу импорт менен).
  • MainMenu Менюнун субклассы катары аныктаңыз.
  • Негизги менюнун тегизделишин коюңуз. Сиз тигинен жана туурасынан тегиздөө керек.
  • Меню пункттарынын тизмесин түзүңүз жана аларды менюга кошуңуз. Сизде жок дегенде менюда "Оюн баштоо" жана "Чыгуу" болушу керек. Ар бир меню пункту кашаанын ичине жайгаштырылышы керек. Ар бир нерсенин энбелгиси жана кайра чалуу функциясы болушу керек, ал оюнчу аны басканда эмне болорун аныктайт. "Оюнду баштоо" пункту үчүн startGame функциясын колдонуңуз (аны жакында жазасыз), "Чыгуу" пункту үчүн "pyglet.app.exit" колдонуңуз (мурунтан эле бар). Self.create_menu (menuItems) деп чакырып чыныгы менюну түзүңүз.
  • StartGame () аныктоо. Азырынча аныктаманы киргизиңиз, сиз чыныгы оюнду жазганда аны алмаштырасыз.
  • MenuSc көрүнүшүн түзгөн кодуңузга өтүңүз жана ага MainMenu объектисин кошуңуз.
  • Сиздин кодуңуз азыр төмөнкүдөй көрүнүшү керек:

    cocos.director импортунан * cocos.menu импортунан * cocos.scene импортунан * cocos.layer импортунан * импорттоо pyglet.app класс MainMenuBgr (ColorLayer): def _init _ (өзүн): супер (MainMenuBgr, өзүн)._ init _ (0, 200, 255, 255) класс MainMenu (Меню): def _init _ (өзүн): супер (MainMenu, өзүн)._ init _ ("") self.menu_valign = ЦЕНТР self.menu_halign = ЦЕНТР menuItems = [(MenuItem ("Оюнду баштоо) ", startGame))), (MenuItem (" Чык ", pyglet.app.exit))] self.create_menu (menuItems) defGG (): pass def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) Director.init (caption = "IcyPlat - жөнөкөй платформер", resizable = True) showMainMenu ()

5692759 21
5692759 21

Кадам 7. Кодуңузду текшериңиз

Кодду эртерээк сынап көрүңүз, ал дагы кыска жана салыштырмалуу жөнөкөй. Андан кийин, нерселер өтө татаалданып кете электе, негизги структурадагы каталарды аныктап, оңдоого болот.

Көрсөтмөлөрдүн коду "IcyPlat - жөнөкөй платформер" деп жазылган терезени ачышы керек. Фон ачык көк түстө жана сиз терезенин өлчөмүн өзгөртө аласыз. Менюдан "Оюн баштоо" баскычын чыкылдатыңыз, эч нерсе болбошу керек (азырынча). "Чыгуу" баскычын басканыңызда, терезе жабылат

5692759 22
5692759 22

Кадам 8. Спрайт түзүү

Спрайт-бул "оюн объектиси" же 2 өлчөмдүү сүрөт. Sprites оюндагы объекттер, иконалар, фондук декорациялар, каармандар жана оюндун сүрөтү менен көрсөтө турган башка нерселер болушу мүмкүн. Биз оюнчу менен баарлаша ала турган каарманга спрайт түзүүдөн баштайбыз.

  • From-import-expression менен cocos.sprite субмодулун импорттоо.
  • Спрайтты көрсөтүү үчүн сүрөттү табыңыз. Эгерде сизде сүрөт жок болсо, сиз спрайтты көрсөтө албайсыз. Сиз бирин тартсаңыз болот, же интернеттен алсаңыз болот (эгер оюңузду жарыялоону пландап жатсаңыз, лицензияларга көңүл буруңуз). Бул мисал үчүн, https://opengameart.org/content/tux-classic-hero-style дарегине өтүңүз жана иштеп жаткан пингвиндердин-p.webp" />
  • Катмарды ScrollableLayer классынын жаңы объектиси катары түзүңүз. Андан кийин, Sprite объектиси катары спрайт түзүңүз жана анын ордун [8, 250] деп коюңуз. Маалымат үчүн, (0, 0) чекит төмөнкү сол бурчта. Бул абдан бийик, бирок бул пингвиндин музга тыгылып калбасына кепилдик берет.
  • Спрайтты спрайттын катмарына кошуңуз.
  • Спрайттын катмарынан жаңы сахна түзүңүз жана аны иштетиңиз.
  • def startGame (): figLayer = ScrollableLayer () fig = Sprite ('pingu.png') fig.position = (75, 100) figLayer.add (fig) # gameSc = Scene (figLayer) Director.run (gameSc)

  • Кодду иштетүү. Сиз чыкылдаткандан кийин кара фондо кичинекей пингвин фигурасын (же сиз тарткан нерсени) көрүшүңүз керек Оюнду баштоо.
5692759 23
5692759 23

Кадам 9. Пейзажыңызды кыялдануу

Көпчүлүк оюндарда сиздин спрайттарыңыз боштукта калбашы керек. Алар чындыгында тегерегинде бир нерсе бар, кандайдыр бир бетинде турушу керек. 2D оюндарында бул көбүнчө плиткалар жана плиткалар картасы менен жасалат. Черепица топтому негизинен кандай беткей квадраттардын жана фондук квадраттардын бар экенин жана алардын кандай болорун айтат.

  • Черепица топтомун түзүү. Бул оюндун плиткалары абдан жөнөкөй болот: бир плитка муз үчүн жана бир плитка асман үчүн. Бул мисалда колдонулган муз плиткасы бул жерден, CC-BY-SA 3.0 астында.
  • Черепица сүрөтүн түзүңүз. Бул бардык плиткалардын сүрөтү, алар бирдей өлчөмдө болушу керек (эгерде жок болсо, аларды түзөтүңүз) жана оюнда көргүңүз келген өлчөмгө ээ болуш керек. Сүрөтүңүздү icyTiles-p.webp" />
  • Черепица топтомунун сүрөттөмөсүн түзүңүз. Бул XML файлы. XML файлы плиткалардын плиткасында канчалык чоң экени, кайсы сүрөттү колдонуу керектигин жана кайсы плитканы кайдан табуу керектигин камтыйт. Төмөндөгү код менен icyTiles.xml аттуу XML файлын түзүңүз:

         
    
5692759 24
5692759 24

Кадам 10. Пейзажыңыз үчүн плитка картасын түзүңүз

Черепица картасы - бул кайсы плитка сиздин деңгээлде экенин аныктоочу карта. Мисалда, плитка карталарын түзүү функциясын аныкташыңыз керек, анткени плиткалык карталарды кол менен иштеп чыгуу абдан түйшүктүү. Көбүрөөк өнүккөн оюнда адатта кандайдыр бир деңгээлдеги редактор болмок, бирок 2D оюнун иштеп чыгуу менен таанышуу үчүн алгоритм жетиштүү деңгээлде камсыздай алат.

  • Канча сап жана мамыча керек экенин билип алыңыз. Бул үчүн, экран өлчөмүн туурасынан (мамычалар) жана тигинен (саптар) плиткалардын өлчөмүнө бөлүңүз. Санды өйдө карай тегеректөө; ал үчүн математика модулунун функциясы керек, андыктан математиканын импорттук чегинен кодуңуздун башындагы импортко чейин кошуңуз.
  • Жазуу үчүн файлды ачыңыз. Бул файлдын мурунку бардык мазмунун өчүрөт, андыктан каталогдо азырынча эч бир файл болбогон атты тандаңыз, levelMap.xml сыяктуу.
  • Файлга ачылуучу тегдерди жазыңыз.
  • Алгоритм боюнча плитканын картасын түзүңүз. Сиз төмөндөгү коддогу нерсени колдоносуз, же өзүңүз ойлоп таба аласыз. Randint функциясын кокусунан модулдан импорттогонуңузду текшериңиз: ал төмөнкү коддун иштеши үчүн талап кылынат жана сиз ойлоп тапканыңыздын баарына кокус бүтүн сандар керек болот. Ошондой эле, ар кандай катмарларга асман плиткаларын жана муз плиткаларын коюуну унутпаңыз: муз катуу, асман эмес.
  • Файлга жабуучу тегдерди жазыңыз жана файлды жабыңыз.
  • def generateTilemap (): colAmount = шып (800/16) * 3 # (экрандын туурасы / плитканын өлчөмү) * 3 катарAmount = шып (600/16) # экран бийиктиги / плитканын өлчөмү tileFile = ачык ("levelMap.xml", " w ") tileFile.write ('\ n / n / n') iceHeight = randint (1, 10) i үчүн диапазондо (0, colAmount): tileFile.write ('') makeHole = Эгерде randint (0, 50)) == 10 жана i! = 0: # spawnpoint тешиктерине жол бербе makeHole = Туура j үчүн диапазондо (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: # плиталар өтө төмөн iceHeight = randint (1, 5) if iceHeight> rowAmount: # плиткалар өтө бийик болуп кетүүдөн iceHeight = randint (int (rowAmount/2) -5, int (rowAmount/2) +5) tileFile.write ('\ n') tileFile.write ('\ n / n') i үчүн диапазондо (0, colAmount): tileFile.write ('') j үчүн диапазондо (0, rowAmount): tileFile.write ('\ n') tileFile.write ('\ n ') tileFile.write (' / n / n ') tileFile.close ()

5692759 25
5692759 25

Кадам 11. Черепица картасын көрсөтүү

Бардыгын cocos.tilesтен импорттоп, андан кийин startGame функциясына өтүңүз.

  • StartGame функцияңыздын башында, сиз аныктаган функцияны колдонуп, плитканын картасын түзүңүз.
  • Жаңы жылдыруу башкаруучусун түзүңүз. Муну түздөн -түз анын катмарына спрайт кошкон сызыктын астында жасаңыз.
  • LevelMap.xml плиткасынын картасынан жүктөлүүчү плиткаларды камтыган жаңы катмарды түзүңүз, generateTilemap функцияңыз түзүлөт.
  • Катуу эмес катмарды, катуу катмарды жана спрайт катмарын жылдыруу менеджерине так ушул тартипте кошуңуз. Кааласаңыз z-позициясын кошо аласыз.
  • Спрайт катмарынан сцена түзүүнүн ордуна, аны жылдыруучу менеджерден түзүңүз.
  • Сиздин startGame функциясы эми мындай болушу керек:

    def startGame (): generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 500) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = жүктөө ('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) Director.run (gameSc)

5692759 26
5692759 26

Кадам 12. Кодуңузду текшериңиз

Сиз киргизген жаңы функциялар чынында иштээрине ынануу үчүн кодуңузду тез -тез текшерип турушуңуз керек.

Мисалдагы код эми пингвиндин артында муздуу пейзажды көрсөтүшү керек. Эгерде пингвин муздун үстүндө учуп бараткандай көрүнсө, анда сиз эч кандай жамандык кылган жоксуз жана ал кийинки кадамда оңдолот

5692759 27
5692759 27

Кадам 13. Контролдорду кошуңуз

Оюнчу текстке негизделген оюнга караганда, 2D оюнда программа менен иштөөнүн дагы көптөгөн жолдору бар. Жалпыга туура баскыч басылганда алардын фигурасын жылдыруу кирет.

  • Бардыгын cocos.mapcolliders жана cocos.actionтен импорттоңуз. Ошондой эле pyglet.window'дон ачкычты импорттоо.
  • Кээ бир глобалдык өзгөрмөлөрдү "жарыялоо". Глобалдык өзгөрмөлөр функциялар ортосунда бөлүшүлөт. Pythonдо өзгөрмөлөрдү чындап жарыялай албайсыз, бирок глобалдык өзгөрмө аны колдонуудан мурун негизги коддо бар экенин айтышыңыз керек. Сиз маанини 0 катары дайындай аласыз, анткени функция кийинчерээк туура маанини берүү менен алектенет. Ошентип, импорттук сөз айкаштарынын астына кошуңуз:

    # "жарыялоо" глобалдык өзгөрмөлөр клавиатура = 0 scrMang = 0

  • StartGame функциясын тууралаңыз:

    • Глобалдык өзгөрмөлөр клавиатурасын жана scrMang колдонгонуңузду айтыңыз. Муну глобалдык клавиатура менен жазыңыз, scrMang функциянын жогору жагында.
    • Терезе клавиатура окуяларын угушу үчүн.
    • PlatformerControllerге негизделген иш -аракетти сүрөттө айтыңыз. Сиз жакында PlatformerController'ди ишке ашырасыз.
    • Катуу плиткалар менен фигуранын кагылышуусун чечүү үчүн карта коллайдерин түзүңүз.

    def startGame (): глобалдык клавиатура, 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 '] # клавиатура = key. KeyStateHandler () Director.window.push_handlers (клавиатура) # fig.do (PlatformerController ()) mapcollider = RectMapCollib (velocity_ = '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) # gameSc = Scene (scrMang) Director.run (gameSc)

  • Платформа контроллерин түзүңүз. Бул сиздин баскычтарыңызга ылайык фигураны жылдырат.

    • Платформер контроллерин Action субклассы катары аныктаңыз.
    • Кыймылдын ылдамдыгын, секирүү ылдамдыгын жана тартылуу күчүн аныктаңыз.
    • Баштоо функциясын аныктаңыз. Бул функция платформер контролери фигурага туташканда бир жолу чакырылат. Ал x жана y багытында 0 ылдамдыгын орнотушу керек.
    • Кадам функциясын аныктаңыз. Сахна чуркап баратканда кайталанат.
    • Глобалдык өзгөрмөлөр клавиатурасын жана scrMangты колдонуу үчүн кадам функциясына айт.
    • Алып, ылдамдыгын өзгөртүңүз. X жана y ылдамдыгын өзүнчө өзгөрмөлөргө сактаңыз. Х ылдамдыгын 1 же -1ге коюңуз (сол же оң баскыч басылганына жараша), ылдамдык менен көбөйтүлөт. Y ылдамдыгына гравитация кошуу. Аны жайыраак түзмөктөрдө иштөө үчүн, аны иштебей көбөйтүү. Эгерде боштук баскычы басылып, фигура жерде турса, ылдамдыгын секирүү үчүн y ылдамдыгын өзгөртүү менен секириңиз.
    • Фигура кайсы жакка жылышы керек экенин эсептеп көрүңүз. Андан кийин, эгерде катуу плитканын ичинде болсо, кагылышуу иштетүүчү ошол абалды жөнгө салсын. Акырында, фигураны жаңы туураланган позицияга жылдырыңыз.
    • Фигурага жылдыруу менеджеринин көңүлүн коюңуз. Бул фигура жылганда камеранын акылга сыярлык түрдө жылышына себеп болот.

    класс PlatformerController (Аракет): глобалдык клавиатура, scrMang on_ground = Чыныгы MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 деф баштоо (өз алдынча): self.target.velocity = (0, 0) def кадамы (өзүн, dt): глобалдык клавиатура, жылдыргыч эгерде dt> 0.1: # тыныгуу учурунда эч нерсе кылбаңыз, vx = self.target.velocity vx = (клавиатура [key. RIGHT] - клавиатура [key. LEFT]) * self. MOVE_SPEED vy + = self. GRAVITY * dt if self.on_ground жана клавиатура [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

Кадам 14. Кодуңузду текшериңиз

Эгер сиз мисалды ээрчисеңиз, анда азыр пингвинди жебе баскычтары менен жылдырып, боштукту басып басуу керек. Ошондой эле, пингвин эми жерге сүзүлбөй, кулашы керек.

5692759 29
5692759 29

15 -кадам. Оюн үчүн аяктоону түзүңүз

Атүгүл чексиз улана турган оюндарда да утулуу мүмкүнчүлүгү болушу керек. Мисалда функциясы бар деңгээлдин аягы бар болгондуктан, сиз дагы ошол максатка жетүү менен жеңишке жетишиңиз керек. Болбосо, оюнчу ал жердеги муз блоктордун үстүндө гана секирип, зеригип калат.

  • Платформер контроллеринин ичинде, фокус коюлган соң, фигуранын x жана y позициясын алыңыз. Эгерде y позициясы 0ден аз болсо, анда "Game Over" аргументи катары FinishGame () функциясын чакырыңыз (кийинчерээк жазасыз). Эгерде x позициясы экрандын чоңдугунан 3кө көбөйтүлгөндөн чоң болсо (сиз муну мурда эле деңгээлдин өлчөмү катары койгонсуз).

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

  • Класс бүтүрүү менюсун аныктаңыз. Бул сиз мурда аныктаган негизги меню классына окшош болушу керек, бирок титул катары бош саптын ордуна _init_ функциясы аргумент катары кабыл алынган өзгөрмө текстти колдонушу керек. Менюнун пункттары "Дагы аракет кыл" жана "Чык" деп жазылышы керек, бирок алар чакырган функциялар ошол бойдон калат.

    класс FinishMenu (Меню): def _init _ (өзүн, текст): супер (FinishMenu, өзүн)._ init _ (текст) self.menu_valign = ЦЕНТР self.menu_halign = ЦЕНТР menuItems = [(MenuItem ("Дагы аракет кыл", startGame)), (MenuItem ("Чыгуу", pyglet.app.exit))] self.create_menu (menuItems)

  • FinishGame () функциясын аныктаңыз. Бул аргумент катары текстти кабыл алышы керек. Бул негизги менюнун фонунан бир көрүнүштү жаратышы керек, бул менюга текст аргументи бар FinishMenu. Андан кийин бул көрүнүштү иштетүү керек.

    def finishGame (текст): menuSc = Сахна (MainMenuBgr ()) menuSc.add (FinishMenu (текст)) Director.run (menuSc)

5692759 30
5692759 30

Кадам 16. Кредиттерди кошуу

Бул жерде сиз укмуштуудай кодуңуз үчүн кредит аласыз, ошондой эле сизге жардам берген башка адамдарга кредит бересиз. Эгерде сиз башка веб -сайттан (уруксаты менен) сүрөттү колдонгон болсоңуз, анда ал сүрөттү анын жаратуучусуна таандык кылыңыз.

  • CREDITS файлын түзүңүз жана бардык кредиттериңизди ошол жерге киргизиңиз, мисалы:

    Пингвин: Kelvin Shadewing, CC0 Ice блогунун астында: Michał Banas digit1024 opengameart.org сайтында CC-BY-SA 3.0 астында

  • Python кодуңузга кайтыңыз жана cocos.textтен Label импорттоңуз.
  • Катмар кредиттеринин субклассын аныктаңыз. Анын _init_ функциясында, CREDITS файлын окуп, андагы ар бир саптан туура жерге текст энбелгисин коюңуз.

    класс Кредиттер (Катмар): def _init _ (өзүн -өзү): супер (Кредиттер, өз алдынча)._ init _ () credFile = ачык ("CREDITS", "r") creds = credFile.read () creds = creds.split ("\ n ") i үчүн диапазондо (0, len (creds)): credLabel = Label (creds , font_size = 32, anchor_x =" left ", anchor_y =" top ") credLabel.position = 25, 500- (i +1)*40 self.add (credLabel)

  • Негизги меню классыңызга барып, чыкылдаганда showCredits функциясын чакырган "Кредиттер" деп аталган меню пунктун кошуңуз.
  • Менюнун BackToMainMenuButton субклассын аныктаңыз. Бул нерсени ShowMainMenu функциясын чакырган "Артка" деп аталган бир пункт менен меню кылыңыз. Көбүрөөк баскычка окшош болгон бул "меню" тигинен ылдыйга, горизонталдуу түрдө жогору карай тегизделиши керек.

    класс BackToMainMenuButton (Меню): def _init _ (өзүн): супер (BackToMainuButton, өз алдынча)._ init _ ("") self.menu_valign = ТӨМӨН self.menu_halign = LEFT menuItems = [(MenuItem ("Артка", showMainMenu)) create_menu (menuItems)

  • ShowCredits функциясын аныктаңыз. Ал MainMenuBgr катмарынан жана Кредиттер катмарынан сахна жасап, ошол көрүнүштү иштетиши керек.

    def showCredits (): credSc = Сахна (MainMenuBgr ()) credSc.add (Кредиттер ()) credSc.add (BackToMainMenuButton ()) Director.run (credSc)

5692759 31
5692759 31

Кадам 17. Кодуңузду текшериңиз

Сиз кодуңузду бүттүм деп ойлогондо, анын баарын кайра карап чыгыңыз. Бул сизге бир нерсени оптималдаштырууга болорун же жок кылууну унутуп калган керексиз сызыктар бар -жогун байкоого жардам берет. Эгерде сиз мисалды ээрчисеңиз, анда сиздин кодуңуз азыр төмөнкүдөй көрүнүшү керек:

    cocos.director импортунан * cocos.menu импортунан * cocos.scene импортунан * cocos.layer импортунан.тексттик импорттук этикетка pyglet.windowдан pyglet.appтан импорттун ачкычы математикалык импорттук чектен кокусунан импорттон randint # "жарыялоо" глобалдык өзгөрмөлөр клавиатурасы = 0 scrMang = 0 класс MainMenuBgr (ColorLayer): def _init _ (өзүн): супер (MainMenuBgr, өзүн)._ init _ (0, 200, 255, 255) класс MainMenu (Меню): def _init _ (өзүн): супер (MainMenu, өзүн)._ init _ ("") self.menu_valign = БОРБОР self.menu_halign = ЦЕНТР менюItems = [(MenuItem ("Оюн баштоо", startGame)), (MenuItem ("Кредиттер", showCredits)), (MenuItem ("Чык", pyglet.app.exit))] self.create_menu (menuItems) класс Кредиттер (Катмар): def _init _ (өзүн): супер (Кредиттер, өз алдынча)._ init _ () credFile = ачык ("CREDITS", "r") creds = credFile.read () creds = creds.split ("\ n") i үчүн диапазондо (0, len (creds)): credLabel = Label (creds , font_size = 32, anchor_x = "left", anchor_y = "top") credLabel.position = 25, 500- (i+1)*40 self.add (credLabel) класс BackToMainMenuButton (Меню): def _init _ (өзүн): супер (BackToMainMenuButton, self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("Артка", showMainMenu))] self.create_menu (menuItems) класс FinishMenu (Меню) (_): өзүн, текст): супер (FinishMenu, өзүн)._ init _ (текст) self.menu_valign = ЦЕНТР self.menu_halign = ЦЕНТР menuItems = [(MenuItem ("Дагы аракет кыл", startGame)), (MenuItem ("Чык", pyglet. app.exit))] self.create_menu (menuItems) класс PlatformerController (Аракет): глобалдык клавиатура, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start (self): self.target.velocity = (0, 0) def кадамы (self, dt): глобалдык клавиатура, жылдыргыч dt> 0.1: # тыныгуу учурунда эч нерсе кылбаңыз өтө чоң кайтарым vx, vy = self.target.velocity vx = (клавиатура [key. RIGHT] - клавиатура [key. LEFT]) * self. MOVE_SPEED vy += self. GRAVITY * dt if self.on _топ жана клавиатура [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. new.center) posX, posY = self.target.position if posY <0: finishGame ("Game Over") return posX> 800*3: # level size finishGame ("Level Completed") return def finishGame (текст): menuSc = Сахна (MainMenuBgr ()) menuSc.add (FinishMenu (текст)) Director.run (menuSc) def showCredits (): credSc = Сахна (MainMenuBgr ()) credSc.add (Кредиттер ()) credSc.add (BackToMainMenuButton ()) Director.run (credSc) def generateTilemap (): colAmount = шып (800/16) * 3 # (экрандын туурасы / плитканын өлчөмү) * 3 катарAmount = шып (600/16) # экрандын бийиктиги / плитканын өлчөмү кафеFile = ачык ("levelMap.xml", "w") tileFile.write ('\ n / n / n') iceHeight = randint (1, 10) i үчүн диапазондо (0, colAmount): tileFile.write ('') makeHole = Эгерде rand туура эмес int (0, 50) == 10 жана i! = 0: # spawnpoint тешиктерине жол бербе makeHole = Аралыкта j үчүн туура (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: # плиткалардын өтө кетишине чек low iceHeight = randint (1, 5) if iceHeight> rowAmount: # плиткалар өтө бийик кетүүдөн iceHeight = randint (int (rowAmount/2) -5, int (rowAmount/2) +5) tileFile.write ('\ n ') tileFile.write (' / n / n ') i үчүн диапазондо (0, colAmount):.write ('\ n') tileFile.write ('\ n / n') tileFile.close () def startGame (): глобалдык клавиатура, 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'] # клавиатура = key. KeyStateHandler () директор. терезе.туштуруу ard) # fig.do (PlatformerController ()) mapcollider = RectMapCollider (velocity_on_bump = 'slide') fig.collision_handler = make_collision_handler (mapcollider, solidTiles) # scrMang = ScrollingManager () scrMang.add (n) -1 add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Scene (scrMang) Director.run (gameSc) def showMainMenu (): menuSc = Сахна (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) window = Director.init (caption = "IcyPlat - жөнөкөй платформер", resizable = True) showMainMenu ()

  • Бул жалпысынан 168 сап, ал эми кодду гана эсептесеңиз 152 сап. Бул көп окшойт, бирок мындай татаал оюн үчүн бул чындыгында аз сумма.
5692759 32
5692759 32

18 -кадам. Аякталды

Эми оюнду сынап көрүңүз. Бир нерсени программалап жатканда, сиз жаңы нерсени ишке киргизгенде анын иштээрин текшеришиңиз керек. Ошондой эле, сиз бир азга жазган оюнду ойногонду каалашыңыз мүмкүн.

3төн 3 бөлүк: Оюнду жарыялоо

5692759 52
5692759 52

Кадам 1. Көз карандылыкты жазыңыз

Башка компьютерди колдонгон адам сиздей программалык камсыздоону жана китепканаларды орнотпойт. Демек, сиздин оюңузду орноткондордун баары аны иштетүү үчүн эмне керек экенин так билишине ынанууңуз керек. Бардык көз карандылыктын бардык көз карандылыгын жазуунун кажети жок, бирок жок дегенде пакеттериңиздин жана алардын көз карандылыгын жазышыңыз керек.

5692759 53
5692759 53

Кадам 2. Бардык медианы колдонууга уруксатыңыз бар экенин тактаңыз

Бул бардык графикага, анын ичинде 3D моделдерине, музыкага, диалогго, музыкага, китепканаларга жана оюнуңуз үчүн колдонгон алкактарга тиешелүү. Сиз өзүңүз жазган жоксуз.

  • Көп учурда кээ бир шарттар бар, мисалы, авторго кредит берүү же ошол эле лицензия боюнча маалымат каражаттарынын өзгөртүүлөрүн бөлүшүү. Кээде сиз оюн үчүн акы албасаңыз, жаратуучуларга таандык болбостон графиканы колдоно аласыз. Эгер авторго кредит берүү керек болсо, муну оюңуздагы "Кредиттер" өтмөгү сыяктуу жакшы көрүнгөн жерде жасаңыз.
  • Автордук укуктары корголгон жана лицензия көрсөтүлбөгөн, кээде "Бардык укуктар корголгон" сыяктуу кээ бир тексттери бар медиа каражаттары да бар. Эгер андай болсо, аны оюнга киргизүүдөн мурун автордон ачык уруксат алышыңыз керек.
  • Китепканалар, адатта, аларды китепкана катары колдонууга уруксат берген лицензиялар боюнча чыгарылат. Белгилүү бир өзгөчө шарт - бул GPL өзгөчө шарттарды байланыштырбастан: Мындай лицензия аны айрым лицензиялары бар программада гана колдонууга мүмкүндүк берет. Жана сиз медиа же китепкана менен эмне кылып жатканыңызга ынануу үчүн, жок дегенде лицензиянын негизги пункттарын окуп чыгыңыз.

Эскертүү: Массалык маалымат каражаттарын же китепканаларды лицензия сиз жарыялаган оюнда уруксат бербеген жол менен колдонуу сизди олуттуу юридикалык кыйынчылыктарга алып келиши мүмкүн. Эгер колдонууга уруксат берилген -берилбегенин билбесеңиз, же автордон сураңыз же медиадан таптакыр алыс болуңуз.

5692759 54
5692759 54

Кадам 3. Оюнуңузду жарыялоону каалаган шарттар боюнча чечим кабыл алыңыз

Сиз оюнуңузду сатасызбы? Башкаларга сүрөттөрүңүздү жана идеяларыңызды колдонууга уруксат бергиңиз келеби? Долбооруңузда колдонгон медиага этият болууңуз керек болсо да, адатта башкаларга сиздин оюңузду колдонууга кантип уруксат берүүнү чече аласыз. Оюнуңузду коомдук доменге чыгаруу үчүн Creative Commons CC0 лицензиясын колдонсоңуз болот.. Кээ бир укуктарды сактап калуу менен айрым шарттарда бөлүштүрүүгө жана өзгөртүүгө уруксат берүү үчүн Gnu General Public License (GPL) же Berkeley Software Distribution (BSD) лицензиясын колдонуп көрүңүз. Же болбосо, сиз өзүңүздүн программаңызды менчиктештирип алсаңыз болот, башкача айтканда, аны сиздин уруксатыңызсыз эч ким жайылтууга же өзгөртүүгө тыюу салынат.

Оюндарды сатуу менен акча табууга мүмкүн болсо да, адамдар адатта өзгөчөлүктөрү аз жана өзгөчө эч нерсеге ээ эмес болгон биринчи оюнду сатып алары күмөн. Ошондой эле, эгерде бекер программа иштебесе, аны түшүргөн адамдардын көңүлү чөгөт. Эгер алар аны төлөшсө, алар акчасын кайра талап кылышат, бул сизге да, колдонуучуларга дагы көйгөйлөрдү жаратат. Ошентип, биринчи бир нече программаңызды бекер кылуу мүмкүнчүлүгүн карап көрүңүз

5692759 55
5692759 55

Кадам 4. Оюнуңузду кантип жарыялоону чечиңиз

Ар бир методдун кээ бир артыкчылыктары жана кемчиликтери бар, ошондуктан сиз өзүңүз чечишиңиз керек.

  • Аны сайтка жарыялоо:

    Эгерде сизде веб -сайт болсо, анда оюнду жүктөп алуу үчүн жеткиликтүү кылуу үчүн жүктөй аласыз. Программаны орнотуу боюнча так көрсөтмөлөрдү, ошондой эле бардык керектүү көз карандылыктарды берүүнү унутпаңыз. Мунун кемчилиги - оюнчулар көз карандылыкты кол менен орнотушу керек, бул кээ бир адамдар үчүн кыйын болушу мүмкүн.

  • Пакет менеджери үчүн пакет даярдоо:

    Linux жана Linux негизделген чөйрөдө колдонмолорду орнотууну жеңилдеткен апт, Юм жана Homebrew сыяктуу ар кандай пакет менеджерлери бар. Алардын баары ар кандай пакет форматтарына ээ. Пакеттердин жакшы жери, алар бардык көз карандылыктарды автоматтык түрдө орнотот (эгер сиз аларды туура конфигурацияласаңыз). Ошентип, оюнчу сиздин пакетиңизди гана орнотушу керек, андан кийин оюнду ойной алат. Көйгөй, ар кандай платформаларда ар кандай пакеттердин менеджерлери бар, андыктан баардык эң кеңири таралган пакеттерди камсыз кылуу үчүн бир аз иштөөгө туура келет.

5692759 56
5692759 56

Кадам 5. Программаңызга түз көңүл буруңуз

Оңой орнотууга мүмкүнчүлүк берүү үчүн программаңызды Ubuntu жана Debian сыяктуу негизги пакет репозиторийине жүктөөнү карап көрүңүз. Ошондой эле, GameDevдин долбоорлор бөлүмү же tigSourceтун бир бөлүгү сыяктуу, тиешелүү форумдарга жазыңыз. Бирок биринчи оюндарыңыз атактуу болуп кетпесе, капаланбаңыз. Эгерде сизде көптөгөн адамдарга жагат деген ой болсо, анда сиздин оюн белгилүү болуп калышы мүмкүн.

Кеңештер

  • Сабырдуу болуңуз жана үйрөнүүгө даяр болуңуз. Программалоо кээде капа болушу мүмкүн!
  • Эгерде сиз башка оюнда бир нерсе кантип жасалып жатканына жана оюн ачык булак экенине таң калсаңыз, анын баштапкы кодун карасаңыз болот.
  • Медиа издеп жатканда, коомдук домендеги мазмунду табууга аракет кылыңыз. "Creative Commons" же "Public Domain" сүрөттөрүн жана музыкасын издеңиз жана https://opengameart.org же https://publicdomainpictures.net сыяктуу вебсайттарды колдонуңуз.
  • Лицензияны текшербей туруп, коддун негизги бөлүктөрүн көчүрбөңүз. Буга көбүнчө тыюу салынат, эгер андай болбосо, көбүнчө атрибуцияны талап кылат.
  • Оюнуңузду жарнамалап жатканда спам жасабаңыз же ылайыксыз жерлерге пост жазбаңыз. Бул сизди баракчадан бөгөттөп коюшу мүмкүн, жөн эле тажатат жана аброюңузга доо кетирет.

Сунушталууда: