M14 | L10 – Programarea Jocurilor

Astăzi vom afla despre:

  • Finalizarea unui joc

Aplicațiile pe care le vom folosi sunt:

Replit, python

PROIECTE:

Jocuri

Pong

# SmileyPong2.py

import pygame       # Setup

pygame.init()

screen = pygame.display.set_mode([800,600])

pygame.display.set_caption(„Smiley Pong”)

keepGoing = True

pic = pygame.image.load(„CrazySmile.bmp”)

colorkey = pic.get_at((0,0))

pic.set_colorkey(colorkey)

picx = 0

picy = 0

BLACK = (0,0,0)

WHITE = (255,255,255)

timer = pygame.time.Clock()

speedx = 5

speedy = 5

paddlew = 200

paddleh = 25

paddlex = 300

paddley = 550

picw = 100

pich = 100

points = 0

lives = 5

font = pygame.font.SysFont(„Times”, 24)

while keepGoing:    # Game loop

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            keepGoing = False

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_F1:    # F1 = New Game

                points = 0

                lives = 5

                picx = 0

                picy = 0

                speedx = 5

                speedy = 5

    picx += speedx

    picy += speedy

    if picx <= 0 or picx >= 700:

        speedx = -speedx * 1.1

    if picy <= 0:

        speedy = -speedy + 1

    if picy >= 500:

        lives -= 1

        speedy = -5

        speedx = 5

        picy = 499

    screen.fill(BLACK)   

    screen.blit(pic, (picx, picy))

    # Draw paddle

    paddlex = pygame.mouse.get_pos()[0]

    paddlex -= paddlew/2

    pygame.draw.rect(screen, WHITE, (paddlex, paddley, paddlew, paddleh))

    # Check for paddle bounce

    if picy + pich >= paddley and picy + pich <= paddley + paddleh \

       and speedy > 0:

        if picx + picw/2 >= paddlex and picx + picw/2 <= paddlex + \

           paddlew:

            speedy = -speedy

            points += 1

    # Draw text on screen

    draw_string = „Lives: ” + str(lives) + ” Points: ” + str(points)

    # Check whether the game is over

    if lives < 1:  

        speedx = speedy = 0

        draw_string = „Game Over. Your score was: ” + str(points)

        draw_string += „. Press F1 to play again. „

    text = font.render(draw_string, True, WHITE)

    text_rect = text.get_rect()

    text_rect.centerx = screen.get_rect().centerx

    text_rect.y = 10

    screen.blit(text, text_rect)

    pygame.display.update()

    timer.tick(60)

pygame.quit()       # Exit

SmyleyPop versiunea 3:

# SmileyPop2.py

import pygame

import random

BLACK = (0,0,0)

WHITE = (255,255,255)

pygame.init()

screen = pygame.display.set_mode([800,600])

pygame.display.set_caption(„Pop a Smiley”)

mousedown = False

keep_going = True

clock = pygame.time.Clock()

pic = pygame.image.load(„CrazySmile.bmp”)

colorkey = pic.get_at((0,0))

pic.set_colorkey(colorkey)

sprite_list = pygame.sprite.Group()

pygame.mixer.init()    # Add sounds

pop = pygame.mixer.Sound(„pop.wav”)

font = pygame.font.SysFont(„Arial”, 24)

count_smileys = 0

count_popped = 0

class Smiley(pygame.sprite.Sprite):

    pos = (0,0)

    xvel = 1

    yvel = 1

    scale = 100

    def __init__(self, pos, xvel, yvel):

        pygame.sprite.Sprite.__init__(self)

        self.image = pic

        self.scale = random.randrange(10,100)

        self.image = pygame.transform.scale(self.image,

                                            (self.scale,self.scale))

        self.rect = self.image.get_rect()

        self.pos = pos

        self.rect.x = pos[0] – self.scale/2

        self.rect.y = pos[1] – self.scale/2

        self.xvel = xvel

        self.yvel = yvel

    def update(self):

        self.rect.x += self.xvel

        self.rect.y += self.yvel

        if self.rect.x <= 0 or self.rect.x > screen.get_width() – self.scale:

            self.xvel = -self.xvel

        if self.rect.y <= 0 or self.rect.y > screen.get_height() – self.scale:

            self.yvel = -self.yvel

while keep_going:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            keep_going = False

        if event.type == pygame.MOUSEBUTTONDOWN:

            if pygame.mouse.get_pressed()[0]:    # Left mouse button, draw

                mousedown = True

            elif pygame.mouse.get_pressed()[2]:  # Right mouse button, pop

                pos = pygame.mouse.get_pos()

                clicked_smileys = [s for s in sprite_list if

                                   s.rect.collidepoint(pos)]

                sprite_list.remove(clicked_smileys)

                if len(clicked_smileys) > 0:

                    pop.play()

                    count_popped += len(clicked_smileys)

        if event.type == pygame.MOUSEBUTTONUP:

            mousedown = False

    screen.fill(BLACK)

    sprite_list.update()

    sprite_list.draw(screen)

    clock.tick(60)

    draw_string = „Bubbles created: ” + str(count_smileys)

    draw_string += ” – Bubbles popped: ” + str(count_popped)

    if (count_smileys > 0):

        draw_string += ” – Percent: „

        draw_string += str(round(count_popped/count_smileys*100, 1))

        draw_string += „%”

    text = font.render(draw_string, True, WHITE)

    text_rect = text.get_rect()

    text_rect.centerx = screen.get_rect().centerx

    text_rect.y = 10

    screen.blit (text, text_rect)

    pygame.display.update()

    if mousedown:

        speedx = random.randint(-5, 5)

        speedy = random.randint(-5, 5)

        newSmiley = Smiley(pygame.mouse.get_pos(), speedx, speedy)

        sprite_list.add(newSmiley)

        count_smileys += 1

pygame.quit()

Provocare 1:

O caracteristică pe care am putea să o adăugăm la Smiley Pong, versiunea 2.0, este efectele sonore. În consola și jocul arcade clasic Pong, mingea a făcut un zgomot „blip” atunci când jucătorii au marcat un punct și un „buzz” sau „blap” atunci când au ratat. Pentru una dintre provocările tale finale, folosește abilitățile pe care le-ai învățat în versiunea 2.0 a aplicației SmileyPop pentru a face upgrade la Smiley Pong v2.0 la v3.0 adăugând efecte sonore la obiect și ratează bounces. Salvați acest fișier nou ca SmileyPong3.py.

Provocare 2:

Pentru a face aplicația SmileyPop și mai asemănătoare jocului, adăugați logică pentru a urmări numărul de accesări și ratări din numărul total de clicuri. Dacă utilizatorul lovește orice sprite smiley când face clic dreapta, adăugați 1 la numărul de accesări (1 accesare pe clic – nu dorim să duplicăm count_popped). Dacă utilizatorul dă clic dreapta și nu lovește niciun sprite zâmbitor, înregistrează-l ca pe o ratare. Ați putea programa logica pentru a termina jocul după un anumit număr de ratări sau puteți oferi utilizatorului un anumit număr de clicuri totale pentru a obține procentul cel mai ridicat pe care îl poate. S-ar putea chiar să adăugați un cronometru și să-i spuneți jucătorului să creeze și să scoată cât mai multe bule de zâmbete pe care le poate, să zicem, în 30 de secunde. Salvați această nouă versiune ca SmileyPopHitCounter.py.

Provocare 3:

S-ar putea să doriți să adăugați o caracteristică „clar” (sau un buton de trișare) pentru a afișa toate bulele apăsând o tastă funcțională, un fel ca funcția noastră „redare din nou” din Smiley Pong. De asemenea, ați putea face ca fețele zâmbitoare săritoare să încetinească în timp multiplicându-și viteza cu un număr mai mic de 1 (cum ar fi 0,95) de fiecare dată când sări de pe o margine. Posibilitățile sunt nelimitate.