Αναπήδηση της μπάλας

28-01-2020 10:15:32
- από τον χρήστη Διαχειριστής Πλατφόρμας

Το σενάριο είναι το εξής: Όαν η μπάλα φτάσει στα όρια οριζόντια ( χ=0 ή χ=400) τότε πρέπει να αλλάξει φορά.

Η αλλαγή φοράς μπορεί να γίνει με την αύξηση ή μείωση του βήματος.

Όταν το βήμα είναι θετικό η μπάλα πάει δεξιά .  x += 3

Όταν το βήμα είναι αρνητικό η μπάλα πάει αριστερά . x -= 3

Αυτό που μεταβάλεται στις δύο παραπάνω εκφράσεις είναι το πρόσημο.

χ = χ + (+1)*χ

χ = χ + (-1)*χ

Άρα η σκέψη είναι : πριν την επανάληψη μια μεταβλητή που θα αναλάβει να ελέγχει το πρόσημο θα πάρει την τιμή +1

Κάθε φορά που η μπάλα φτάνει στα όρια δεξιά ή αριστερά η μεταβλητή που εέγχει το πρόσημο γίνεται αντίθετη.

Οι αλλαγές φαίνονται παρακάτω με έντονο χρώμα.

import pygame
import os
import random

_image_library = {}


def get_image(path):
    global _image_library
    image = _image_library.get(path)
    if image == None:
        canonicalized_path = path.replace('/', os.sep).replace('\\', os.sep)
        image = pygame.image.load(canonicalized_path)
        _image_library[path] = image
    return image


pygame.init()
screen = pygame.display.set_mode((400, 300))
done = False
clock = pygame.time.Clock()
x = 30
y = 30
x1 = 3  (θέση χ1 δεύτερης μπάλας)
y1 = 3  (θέση y1 δεύτερης μπάλας)
d = 1   (πρόσημο)
while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    pressed = pygame.key.get_pressed()
    if pressed[pygame.K_UP]: y -= 3
    if pressed[pygame.K_DOWN]: y += 3
    if pressed[pygame.K_LEFT]: x -= 3
    if pressed[pygame.K_RIGHT]: x += 3
    x1 += d*3  (Μεταβολή x1 με χρήση προσήμου)  
    if x>=400 : x=3
    if x<=0 : x=400
    if y>=300 : y=3
    if y<=0 : y=300
    if x1>=400 or x1<=0:  ( έλεγχος ορίων για το χ1)
        d = (-1)*d    (αλλαγή προσήμου)
        y1 +=3        ( το y1 αυξανεται σταθερά με βήμα 3)
    if y1>300 : y1=0
    screen.fill((0, 0, 0))
    screen.blit(get_image('ball.png'), (x, y))
    screen.blit(get_image('ball.png'), (x1, y1))  (τοποθέτηση δεύτερης μπάλας στη θέση x1,y1)
    pygame.display.flip()
    clock.tick(60)