O‘YINNI TUGATISH - Va axborot texnologiyalari 10-sinf toshkent – 2021

O‘YINNI TUGATISH
O‘tgan mavzular davomida o‘yin oynasi hamda qahramonlarni yaratish, ularni
harakatlantirish, boshqarish va to‘qnashuvlarni tekshirish ko‘nikmalari hosil qilindi. Unda o‘yin
jarayonining so‘ngi bosqichi sifatida sparytlar to‘qnashuvi belgilangan edi. Agar spaytlar
to‘qnashsa, dasturdan chiqib ketadi, xolos. Bunday holat foydalanuvchi uchun unchalik
qiziqarli emas edi. Shu boisdan “Game Over” ekranini qo‘shish, foydalanuvchilar xohishiga
ko‘ra o‘yinni qayta boshlashga ruxsat beruvchi oynani yaratish zarurati kelib chiqdi.
Dasturning to‘xtab qolishiga sabab, o‘yin sikli “running” o‘zgaruvchisi (uning qiymati faqat
True
yoki
False
bo‘lishi mumkin) tomonidan boshqariladi. To‘qnashuv sodir etilganda, uning
qiymati
False
bo‘ladi va o‘yin sikli to‘xtaydi. Uning o‘rniga o‘yin holatini kuzatib boruvchi
jarayonni qo‘shish zarurati tug‘ildi.
O‘yin tugaganligi haqida xabarni chaqirish uchun o‘yin oynasida matn kirituvchi “draw_text ()”
funksiyasini yaratib olish zarur:
def draw_text(surf, text, size, x, y):
Funksiya e’lon qilindi.
font = pygame.font.Font(font_name,
size)
Matn uchun shrift turi va o‘lchami
tanlandi.
text_surface = font.render(text,
True, WHITE)
Matn mazmuni va rangi belgilandi.
text_rect = text_surface.get_rect()
Matn uchun o‘yin oynasida joy ajratildi.
text_rect.midtop = (x, y)
Matn joylashuvi belgilandi.
surf.blit(text_surface, text_rect)
O‘yin oynasiga matn yozildi.
182
182
182
182
V BOB.
WWW-TEXNOLOGIYA VA HTML TILI
Matn kiritish mumkin bo‘lganidan keyin o‘yin tugaganligi haqida xabar hamda o‘yinni qayta
boshlash imkonini beruvchi “game_over()” funksiyasi yaratiladi:
def game_over():
Funksiya e’lon qilindi.
screen.blit(cr,(0,0))
game_o
ver uchun oyna va uning foni
belgilandi.
dr
aw_text(screen, "O‘YIN TUGADI!",
64, WIDTH / 2, 100)
O‘yin tugaganligi haqida matn yozildi.
pygame.display.flip()
O‘yin oynasi yangilandi.
waiting = True
waiting – kutish o‘zgaruvchisiga True
qiymati berildi.
while waiting:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
O‘yin sikli tanasi.
if event.type == pygame.KEYUP:
Tugmacha bosilganligi tekshirildi.
waiting = False
Agar tugmacha bosilgan bo‘lsa,
waitingga False qiymati berildi.
Bu funksiya tanasidagi “waiting” o‘zgaruvchi o‘yin siklini boshqarish uchun xizmat qiladi.
Uning qiymati True bo‘lganda, o‘yin to‘xtatiladi. Agar birorta tugmacha bosilsa, uning qiymati
Falsega aylanadi va o‘yin qayta boshlanadi. Bu esa yutqazgan foydalanuvchiga o‘yinni qayta
boshlash imkonini beradi.
“game_over()” funksiyasinin ishga tushirish uchun “over” o‘zgaruvchisi yaratiladi va bu
funksiya o‘yin sikli tanasida e’lon qilinadi:
over=False
“over”ga False qiymati berildi.
running = True
“running”ga True qiymati berildi.
while running:
O‘yin sikli ishga tushdi.
if over:
“over” qiymati rostligi tekshirildi.
game_over()
“game_over()” funksiyasi ishga tushdi.
over=False
“over”ga False qiymati berildi.
all_sprites = pygame.sprite.Group()
“all_sprites” guruhi yaratildi.
cars = pygame.sprite.Group()
“cars” guruhi yaratildi.
player = Player()
“player” obyekti yaratildi.
car=Car(enemy1,(230,0))
“car” obyekti yaratildi.
all_sprites.add(player)
“player” obyekti “all_sprites” guruhiga
qo‘shildi.
cars.add(car)
“car” obyekti “all_cars” guruhiga
qo‘shildi.
183
183
183
183
“over” o‘zgaruvchisiga False qiymatining berilishi, o‘yin davom etishini anglatadi. O‘yin
sikli tanasidagi “over” qiymati rostligini tekshirish amali o‘yin 1-marta ishga tushirilganda
ishlamaydi. O‘yinda to‘qnashuv yuz bersagina, “over” qiymati Truega almashadi va o‘yin sikli
tanasidagi “over” qiymati rostligini tekshirish amali ishga tushadi. Agar shart tasdiqlansa,
“game_over()” funksiyasi ishga tushadi. Funksiyadan keyingi amallar o‘yin oynasida
spraytlarni qayta yaratish uchun xizmat qiladi. Foydalanuvchi o‘yinni qayta boshlasa,
sparytlarni qayta yaratuvchi amallar ham ishga tushadi.
AMALIY MASHG‘ULOT
O‘tilgan mavzular, funksiya va qism dasturlardan foydalangan holda mashina yo‘li fonli o‘yin
oynasida 5 ta mashina sprayti yaratilsin. Asosiy sprayt oynaning quyi qismida joylashtirilsin
va klaviatura yordamida o‘ngga va chapga, tepaga va pastga harakatlantirilsin. Qolgan 4
ta sprayt tasodifiy joylashuv bo‘yicha oynaning tepa qismidan past qismiga qarab vertikal
yo‘nalishda uzluksiz harakatlansin. Asosiy sprayt qolgan spraytlar bilan to‘qnashganda yoki
yo‘l to‘siqlari bilan to‘qnashganda, o‘yin tugaganligi haqida xabar hamda o‘yinni qayta ishga
tushirish imkonini beruvchi oyna hosil bo‘luvchi o‘yin dasturi tuzilsin.
import pygame
“pygame” kutubxonasi yuklandi.
import os
“os” kutubxonasi yuklandi.
import random
“random” kutubxonasi yuklandi.
from random import choice
“random” kutubxonasining “choice”
funksiyasi yuklandi.
WIDTH = 800
Oyna kengligiga qiymat berildi.
HEIGHT = 650
Oyna balandligiga qiymat berildi.
FPS = 40
Kadr tezligiga qiymat berildi.
COLOR = (0, 0, 0)
“COLOR”ga qora rang o‘zlashtirildi.
game_folder = os.path.dirname(__file__)
Grafik fayllar papkasiga olib boruvchi
yo‘l aniqlandi.
img_folder = os.path.join(game_folder, `img‘)
Grafik fayllar papkasi dasturga
bog‘landi.
player_img = pygame.image.load(os.path.
join(img_folder, `car_black.png‘))
“car_black.png” fayli “player_img”
o‘zgaruvchisiga yuklandi.
player_img = pygame.transform.
scale(player_img, (105, 150))
“player_img” o‘lchamlari belgilandi.
enemy1 = pygame.image.load(os.path.
join(img_folder, `car1.png‘))
“car1.png” fayli “enemy1”
o‘zgaruvchisiga yuklandi.
enemy1 = pygame.transform.scale(enemy1,
(80, 150))
“enemy1” o‘lchamlari belgilandi.
enemy2 = pygame.image.load(os.path.
join(img_folder, `car.png‘))
“car2.png” fayli “enemy2”
o‘zgaruvchisiga yuklandi.
|