O'yin sinfi
O'yin sinfi - bu o'yinning yadrosi. Asosiy ko'chadan ishlaydi. U juda ko'p foydali xususiyatlarga ega. Uning usulini usul bilan tahlil qilaylik.
Usul
__init__()
Pygame-ni, shrift tizimini va ovoz mikserini ishga tushiradi. Uch xil qo'ng'iroqlar kerak, chunki har bir Pygame o'yinida barcha tarkibiy qismlar ishlatilmaydi, shuning uchun biz foydalanadigan quyi tizimlarni boshqarishingiz va tegishli parametrlarga ega faqat keraklilarni ishga tushirishingiz mumkin. Usul fon rasmini, asosiy sirtni (har bir narsa chizilgan) va to'g'ri kvadrat tezligiga ega o'yin taymerini yaratadi.
Self.objects elementi ko'rsatilishi va yangilanishi kerak bo'lgan barcha o'yin ob'ektlarini saqlaydi. Turli ishlov beruvchilar muayyan hodisalarda bajarilishi kerak bo'lgan ishlov berish funktsiyalari ro'yxatini boshqaradilar.
import pygame
import sys
from collections import defaultdict
class Game:
def __init__(self,
caption,
width,
height,
back_image_filename,
frame_rate):
self.background_image = \
pygame.image.load(back_image_filename)
self.frame_rate = frame_rate
self.game_over = False
self.objects = []
pygame.mixer.pre_init(44100, 16, 2, 4096)
pygame.init()
pygame.font.init()
self.surface = pygame.display.set_mode((width, height))
pygame.display.set_caption(caption)
self.clock = pygame.time.Clock()
self.keydown_handlers = defaultdict(list)
self.keyup_handlers = defaultdict(list)
self.mouse_handlers = []
Usullari update()va draw()juda oddiy. Ular barcha boshqariladigan o'yin ob'ektlarini chetlab o'tib, ularning tegishli usullarini chaqirishadi. Agar ikkita ob'ekt ekranda bir-birining ustiga tushsa, u holda ob'ektlar ro'yxatining tartibi birinchi navbatda qaysi biri bajarilishini aniqlaydi, qolganlari qisman yoki to'liq qoplanadi.
def update(self):
for o in self.objects:
o.update()
def draw(self):
for o in self.objects:
o.draw(self.surface)
Usul handle_events()klaviatura va sichqoncha hodisalari kabi Pygame tomonidan yaratilgan hodisalarni tinglaydi. Har bir voqea uchun u tegishli turdagi hodisalarni boshqarishi kerak bo'lgan barcha ishlov berish funktsiyalarini chaqiradi.
def handle_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
for handler in self.keydown_handlers[event.key]:
handler(event.key)
elif event.type == pygame.KEYUP:
for handler in self.keydown_handlers[event.key]:
handler(event.key)
elif event.type in (pygame.MOUSEBUTTONDOWN,
pygame.MOUSEBUTTONUP,
pygame.MOUSEMOTION):
for handler in self.mouse_handlers:
handler(event.type, event.pos)
Va nihoyat, usul run()asosiy pastadirni bajaradi. Element game_overhaqiqiy bo'lgunga qadar bajariladi . Har bir iterasyonda, bu fon tasvirini ko'rsatadi va tartibda usullari chaqiradi handle_events(), update()va draw().
Keyin u ekranni yangilaydi, ya'ni jismoniy displeyga joriy iteratsiyada ko'rsatilgan barcha tarkiblarni yozadi. Va nihoyat, lekin eng muhimi, clock.tick()keyingi iteratsiya qachon chaqirilishini boshqarish uchun usul chaqiradi .
def run(self):
while not self.game_over:
self.surface.blit(self.background_image, (0, 0))
self.handle_events()
self.update()
self.draw()
pygame.display.update()
self.clock.tick(self.frame_rate)
Xulosa
Ushbu bo'limda biz o'yinlarni dasturlash asoslarini va o'yinlarni yaratishda ishtirok etadigan barcha tarkibiy qismlarni bilib oldik. Biz, shuningdek, Pygame-ga qaradik va uni qanday o'rnatishni bilib oldik. Va nihoyat, biz o'yin arxitekturasiga kirib, papka tuzilishini, sinflarini GameObjectva O'yinni o'rganib chiqdik .Ikkinchi bo'limda biz TextObject ekranda matnni namoyish qilish uchun ishlatiladigan sinfni ko'rib chiqamiz . Asosiy oynani, shu jumladan fon rasmini yaratamiz, so'ngra ob'ektlarni (to'p va raketka) qanday chizishni bilib olamiz.
Do'stlaringiz bilan baham: |