Pythonдо оюнду Pygame менен кантип программалоо керек (сүрөттөрү менен)

Мазмуну:

Pythonдо оюнду Pygame менен кантип программалоо керек (сүрөттөрү менен)
Pythonдо оюнду Pygame менен кантип программалоо керек (сүрөттөрү менен)

Video: Pythonдо оюнду Pygame менен кантип программалоо керек (сүрөттөрү менен)

Video: Pythonдо оюнду Pygame менен кантип программалоо керек (сүрөттөрү менен)
Video: Python и переменные окружения | Где и как хранить секреты в коде | .env, .gitignore 2024, Апрель
Anonim

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

Кадамдар

8дин 1 -бөлүгү: Pygame орнотуу

Кадам 1. Pygame жүктөп алыңыз

Аны платформаңыз үчүн https://www.pygame.org/download.shtml сайтынан табыңыз.

Кадам 2. Орноткучту иштетүү

Кадам 3. Орнотуу иштегенин текшериңиз

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

    pygame импорттоо

8дин 2 -бөлүгү: Негизги терезени орнотуу

Кадам 1. Жаңы файлды ачыңыз

Кадам 2. Импорттоо Pygame

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

    pygame.locals импорттоо pygame.locals импорт *

Кадам 3. Терезенин токтомун коюңуз

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

    чечим = (400, 300)

Кадам 4. Кээ бир түстөрдү аныктаңыз

Пигамдагы түстөр (RBGA, алар 0ден 255ке чейин. Альфа мааниси (A) милдеттүү эмес, бирок башка түстөр (кызыл, көк жана жашыл милдеттүү).

    ак = (255, 255, 255) кара = (0, 0, 0) кызыл = (255, 0, 0)

Кадам 5. Экранды баштоо

Мурда аныкталган чечим өзгөрмөсүн колдонуңуз.

    экран = pygame.display.set_mode (чечим)

Кадам 6. Оюн циклин жасаңыз

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

    чын болсо:

Кадам 7. Экранды түскө боёгула

    экран. толтуруу (ак)

Кадам 8. Экранды көрсөтүү

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

    Чынында:… pygame.display.flip ()

Step 9. Окуяларды чечүү

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

    while True:… pygame.event.get () окуясы үчүн: эгер event.type == ЧЫГУУ: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

10 -кадам. Аны сынап көрүңүз

Бул жерде код азыр кандай болушу керек:

    pygame.locals дан pygame импорттоо * токтому = (400, 300) ак = (255, 255, 255) кара = (0, 0, 0) кызыл = (255, 0, 0) экран = pygame.display.set_mode (Чечим) True болуп турганда: screen.fill (ак) pygame.display.flip () pygame.event.get ичиндеги окуя үчүн (): if event.type == QUIT: pygame.quit ()

8дин 3 -бөлүгү: Оюн объектисин жасоо

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

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

    класс Ball: def _init _ (өзүн, xPos = токтому [0] / 2, yPos = токтому [1] / 2, xVel = 1, yVel = 1, рад = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball"

Кадам 2. Объектти кантип тартуу керектигин аныктаңыз

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

    def draw (өзүн, үстү): pygame.draw.circle (бети, кара, (self.x, self.y), self.radius)

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

    ball = Ball () True болсо:… ball.draw (экран)

Кадам 4. Объектти жылдырыңыз

Объектинин абалын жаңырта турган функцияны түзүңүз. Бул функцияны ар бир оюн циклинде чакырыңыз.

    класс Ball:… def update (self): self.x += self.dx self.y += self.dy

Кадам 5. Кадрдын ылдамдыгын чектеңиз

Топ чындыгында тез кыймылдайт, анткени оюн циклы секундасына жүздөгөн жолу чуркайт. Pygame саатын колдонуп кадр ылдамдыгын 60 кадр / сек менен чектеңиз.

    саат = pygame.time. Clock () Чынында:… clock.tick (60)

Кадам 6. Топту экранда кармаңыз

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

    класс Ball:… def update (өзүн):… if (self.x <= 0 же self.x> = токтом [0]): self.dx *= -1 if (self.y <= 0 же self.y > = токтом [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Кадам 7. Аны сынап көрүңүз

Бул жерде код азыр кандай болушу керек:

    pygame.locals дан pygame импорттоо * токтому = (400, 300) ак = (255, 255, 255) кара = (0, 0, 0) кызыл = (255, 0, 0) экран = pygame.display.set_mode (чечим) класс Ball: def _init _ (өзүн, xPos = токтом [0] / 2, yPos = токтом [1] / 2, xVel = 1, yVel = 1, рад = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (бети, кара, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = чечим [0]): self.dx *= -1 if (self.y <= 0 or self.y> = resolution [1]): self.dy *= -1 ball = Ball () clock = pygame.time. Clock () while True: экран. толтуруу (ак) ball.draw (screen) ball.update () pygame.display.flip () clock.tick (60) in pygame.event.get (): in event.type == QUIT: pygame.quit ()

8дин 4 -бөлүгү: Оюнду уюштуруу

Кадам 1. Бардыгын уюштуруу үчүн класстарды колдонуңуз

Оюн татаалдашат. Кодуңузду уюштуруу үчүн объектке багытталган ыкмаларды колдонуңуз.

Кадам 2. Оюн циклин класска бөлүңүз

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

    класс оюну ():

3 -кадам. Конструкторду кошуңуз

Бул жерде сиз кээ бир оюн объектилерин түзүп, экраныбызды жана саатыбызды түзүп, Pygameди баштайсыз. Pygame текст же үн сыяктуу белгилүү бир функцияларды колдонуу үчүн инициализацияланышы керек.

    class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (resolution) self.clock = pygame.time. Clock ()

4 -кадам. Функциядагы окуяларды чечүү

    класс оюну ():… def handleEvents (өзүн өзү): pygame.event.get () ичиндеги окуя үчүн: if event.type == ЧЫК: pygame.quit ()

Кадам 5. Оюн циклин функция кылыңыз

Окуяларды башкаруу функциясын ар бир циклге чакырыңыз.

    класс оюну ():… def run (өз алдынча): ал эми True: self.handleEvents () self.screen.fill (ак) self.clock.tick (60) pygame.display.flip ()

Кадам 6. Бир нече оюн объектилерин иштетүү

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

    класс оюну (): def _init _ (өзүн):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def run (өзүн): ал эми True: өзүн.handleEvents () gameObj for self.gameObjects: gameObj.update () self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

Кадам 7. Аны сынап көрүңүз

Бул жерде код азыр кандай болушу керек:

    pygame.locals дан pygame импорттоо * токтому = (400, 300) ак = (255, 255, 255) кара = (0, 0, 0) кызыл = (255, 0, 0) экран = pygame.display.set_mode (чечим) класс Ball: def _init _ (өзүн, xPos = токтом [0] / 2, yPos = токтом [1] / 2, xVel = 1, yVel = 1, рад = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (бети, кара, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = чечим [0]): self.dx *= -1 if (self.y <= 0 or self.y> = resolution [1]): self.dy *= -1 class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (чечим) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (өзүн): pygame.event.get () окуясы үчүн: эгер event.type == QUIT: pygame.quit () def run (өзүн): ал эми True: self.handleEvent s () for gameObj for self.gameObjects: gameObj.update () self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display. flip () game (). run ()

8дин 5 -бөлүгү: Оюнчу объектисин кошуу

Кадам 1. Оюнчу классын жана конструкторун түзүңүз

Сиз чычкан башкарган дагы бир тегерекчени жасайсыз. Конструктордогу баалуулуктарды инициализациялоо. Радиус - бирден -бир маанилүү баалуулук.

    класстын оюнчусу: def _init _ (өзүн, рад = 20): self.x = 0 self.y = 0 өзүнчө.радиус = рад

Кадам 2. Оюнчу объектти кантип тартуу керектигин аныктаңыз

Бул башка оюн объектилерин тарткандай болот.

    класс оюнчусу:… def draw (өзүн, үстү): pygame.draw.circle (бети, кызыл, (self.x, self.y), self.radius)

Кадам 3. плеер объект үчүн чычкан башкарууну кошуу

Ар бир кадрда чычкандын жайгашкан жерин текшерип, оюнчулардын объектилеринин жайгашкан жерин ошол чекитке коюңуз.

    класстын оюнчусу:… def update (өзүн): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1]

Кадам 4. gameObjects үчүн оюнчу объектисин кошуу

Жаңы оюнчу экземплярын түзүңүз жана аны тизмеге кошуңуз.

    класс оюну (): def _init _ (өзүн):… self.gameObjects.append (Оюнчу ())

ProgramPygamePart4
ProgramPygamePart4

Кадам 5. Аны сынап көрүңүз

Бул жерде код азыр кандай болушу керек:

    pygame.locals дан pygame импорттоо * токтому = (400, 300) ак = (255, 255, 255) кара = (0, 0, 0) кызыл = (255, 0, 0) экран = pygame.display.set_mode (чечим) класс Ball: def _init _ (өзүн, xPos = токтом [0] / 2, yPos = токтом [1] / 2, xVel = 1, yVel = 1, рад = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (бети, кара, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = чечим [0]): self.dx *= -1 if (self.y <= 0 or self.y> = resolution [1]): self.dy *= -1 class Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (өзүн, үстү): pygame.draw.circle (бети, кызыл, (self.x, self.y), self.radius) def update (өзүн): шнур = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_ режими (токтому) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))) def handleEvents (өзүн өзү): pygame.event.get () ичиндеги окуя үчүн: эгер event.type == ЧЫКТЫРУУ: pygame.quit () def run (өз алдынча): ал эми True: self.handleEvents () өзүнчө gameObj үчүн.gameObjects: gameObj.update () self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). чуркоо ()

8дин 6 -бөлүгү: Объекттерди түзүү Оюнчу менен өз ара аракеттенүү

Кадам 1. Жаңыртуу функцияларын өзгөртүү

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

    класс Ball:… def жаңыртуу (өзүн, gameObjects):… класс оюнчу:… def жаңыртуу (өзүн, gameObjects):

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

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

    класс оюнчу:… def жаңыртуу (өзүн, gameObjects):… gameObj in gameObjects үчүн: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y)) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Кадам 3. Оюнчу "сокку" алса, оюнду токтотуңуз

Азырынча оюнду таштайлы.

    if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit ()

Кадам 4. Аны сынап көрүңүз

Бул жерде код азыр кандай болушу керек:

    pygame.locals дан pygame импорттоо * токтому = (400, 300) ак = (255, 255, 255) кара = (0, 0, 0) кызыл = (255, 0, 0) экран = pygame.display.set_mode (чечим) класс Ball: def _init _ (өзүн, xPos = токтом [0] / 2, yPos = токтом [1] / 2, xVel = 1, yVel = 1, рад = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (бети, кара, (self.x, self.y), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = токтом [0]): өзүн.dx *= -1 if (self.y <= 0 or self.y> = resolution [1]): self.dy *= -1 class Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (өзүн, үстү): pygame.draw.circle (бети, кызыл, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj for gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () класс оюну (): def _init _ (өзүн): pygame.init () self.screen = pygame.display.set_mode (чечим) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Оюнчу ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): pygame.event.get () ичиндеги окуя үчүн: эгер event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (ак) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

8дин 7 -бөлүгү: Объекттерди түзүү үчүн оюн контроллерин кошуу

Кадам 1. Оюн контролери классын түзүңүз

Оюн контроллери оюнду "иштетүү" үчүн жооптуу. Бул биздин бардык объекттерибизди тартуу жана жаңыртуу үчүн жооптуу болгон биздин оюн класбыздан айырмаланат. Контроллер оюнду кыйын кылуу үчүн мезгил -мезгили менен экранга дагы бир топту кошуп турат. Конструкторду кошуңуз жана кээ бир негизги баалуулуктарды инициалдаңыз. Интервал башка топ кошулганга чейинки убакыт болот.

    класс GameController: def _init _ (өз алдынча, интервал = 5): self.inter = интервал self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "оюн контролери"

Кадам 2. Жаңыртуу функциясын кошуңуз

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

    класс GameController:… def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball ())

3 -кадам. Топторго туш келди ылдамдыктарды бериңиз

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

    класс GameController:… def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = туш келди ()*2, yVel = туш келди ()*2))

Step 4. Draw функциясын оңдоо

Тартуу функциясы калкып чыгууларды кабыл албайт. Топтор тартылганга чейин топтун ордун бүтүн сандарга айландыралы.

    класс Ball:… def draw (өзү, үстү): pygame.draw.circle (бети, кара, (int (self.x), int (self.y)), self.radius)

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

Бул оюн объектиси болгондуктан, негизги цикл аны тартууга аракет кылат. Сиз оюн бузулбашы үчүн эч нерсе кылбаган тартуу функциясын аныкташыңыз керек болот.

    класс GameController:… def draw (өз алдынча, экран): өтүү

Кадам 6. gameObjectsке оюн контроллерин кошуп, 2 шарды алып салыңыз

Эми оюн ар бир беш секундда бир топту чыгарышы керек.

    class game (): def _init _ (self):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ())

ProgramPygamePart6
ProgramPygamePart6

Кадам 7. Аны сынап көрүңүз

Бул жерде код азыр кандай болушу керек:

    pygame.locals кокустуктан импорттоо pygame.locals import * токтому = (400, 300) ак = (255, 255, 255) кара = (0, 0, 0) кызыл = (255, 0, 0) экран = pygame. display.set_mode (токтом) класс Ball: def _init _ (өзүн, xPos = токтом [0] / 2, yPos = токтом [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (бети, кара, (int (өзүн -өзү). x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 же self. x> = токтом [0]): self.dx *= -1 if (self.y <= 0 or self.y> = resolution [1]): self.dy *= -1 class Player: def _init _ (өзүн өзү, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, sirt): pygame.draw.circle (жер үстү, кызыл, (self.x), self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj for game Объекттер: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () класс GameController: def _init _ (өзүн, интервал = 5): self.inter = интервал self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "оюн контроллери "def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = random) ()*2, yVel = random ()*2)) def draw (өзүн, экран): класс оюнун өткөрүү (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (чечим) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): pygame.event ичиндеги окуя үчүн.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (ак) gameObj for self.gameO объекттер: gameObj.draw (өз алдынча экран) self.clock.tick (60) pygame.display.flip () оюн (). чуркоо ()

8дин 8 -бөлүгү: Упай кошуу жана оюн бүтүү

Кадам 1. Оюн контролери классына балл кошуңуз

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

    класс GameController: def _init _ (self, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects):… self.score += 1 def draw (өзүн, экранды): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5))

Кадам 2. Оюн кантип бүтөөрүн өзгөртүү

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

    класс оюнчу: def _init _ (өзүн, рад = 20):… self.gameOver = False def жаңыртуусу (өзүн, gameObjects):… gameObj for gameObjects: if gameObj.type == "ball": if (gameObj.x - өзүн өзү.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class game (): def _init _ (self): … Self.gameOver = False def run (self): while True: self.handleEvents () if not self.gameOver: for gameObj in self.gameObjects: gameObj.update (self.gameObjects) if gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

3 -кадам. Аны сынап көрүңүз

Бул жерде даяр код азыр кандай болушу керек:

    pygame.locals кокустуктан импорттоо pygame.locals импорт * токтому = (400, 300) ак = (255, 255, 255) кара = (0, 0, 0) кызыл = (255, 0, 0) экран = pygame. display.set_mode (токтом) класс Ball: def _init _ (өзүн, xPos = токтом [0] / 2, yPos = токтом [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (бети, кара, (int (өзүн -өзү). x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 же self. x> = токтом [0]): self.dx *= -1 if (self.y <= 0 or self.y> = токтом [1]): self.dy *= -1 класс Оюнчу: def _init _ (өзүн өзү, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = False def draw (self, sirt): pygame.draw.circle (бети, кызыл, (self.x, self.y), self.radius) def update (өзүн, gameObjects): шнур = pygame.mouse.get_pos () self.x = жип [0] self.y = жип [1] gameObj for gameObjects үчүн: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2*1000) self. type = "game controller" self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter*1000) gameObjects.append (Ball (xVel = random ()*2, yVel = random ()*2)) self.score + = 1 def draw (self, screen): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (чечим) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (өзүн өзү): pygame.event.get () ичиндеги окуя үчүн: if ev ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () if not self.gameOver: for gameObj in self.gameObjects: gameObj.update (self.gameObjects) if gameObj. type == "player": self.gameOver = gameObj.gameOver self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () оюн (). чуркоо ()

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