Добавлен , опубликован
Кликбейтить я не умею, ровно как и придумывать названия к своим проектам. Cложив пайтон и арканоид, получил pycanoid. Я выполнил свой челлендж, уложившись с изучением пайтона в 2 дня, написав простой арканоид с элементарными коллизиями. Каюсь, что не растянул это на 10 дней, но заниматься рефакторинтом пуканоида у меня не было особого желания.
application.py
import pygame as pg
#import sys;

from player import Player
from missile import Missile
from brick import Brick

class Application:
    
    displaysize  = (400,400)

    @staticmethod
    def update_graphics(level, missile, player, screen):
        screen.fill([0,0,0])
        missile.update(screen)
        player.update(screen)
        for brick in level:
            brick.update(screen)
        pg.display.update()
        pg.display.flip()

    @staticmethod
    def update_colliders(level, missile, player, dt):
        missile.position(int(missile.x + missile.speedX * dt), int(missile.y + missile.speedY * dt))
        for brick in level:
            if (brick.collides(missile)):
                level.remove(brick)    
            elif(player.collides(missile)):
                pass

    def main(self):
        player = None
        screen = None    

        pg.init()
        screen = pg.display.set_mode(Application.displaysize)

        player = Player(200)
        missile = Missile(200, 50)
        missile.speedX = missile.speedY = 1        
        level = []

        import random
        for x in range(0, 400, 10):
            for y in range(200, 400, 10):
                if (random.choice([1,2]) == 1):
                    level.append(Brick(x,y))

        while True:       
            dt = pg.time.Clock().tick(120)/5

            for event in pg.event.get():
                if event.type == pg.QUIT:
                    pg.quit()
                    return
                elif event.type == pg.MOUSEMOTION:
                     string = str(event.pos[0])
                     player.position(event.pos[0],0)
            
            Application.update_colliders(level, missile, player, dt)
            Application.update_graphics(level, missile, player, screen)

Application().main();
player.py
class Player:    
    import pygame as pg  

    collider = pg.Rect(0, 0, 0, 0)

    def __init__(self, x):
        Player.position(self,x)

    def update(self,screen):
        import pygame as pg           
        pg.draw.rect(screen, [100,255,170], self.collider, 2)    

    
    def position(self,x,y = 0):
        self.x = x
        self.y = y
        self.collider = [self.x, self.y, 50, 25]

    def collides(self, missile):
         import pygame as pg

         flag = False

         if (pg.Rect(self.collider).colliderect(missile.collider)):
            flag = True

            if (missile.y > self.collider[1]):
                missile.speedY = 1
            elif (missile.y > self.collider[1]):
                    missile.speedY = -1
         return flag
brick.py
class Brick:

    rgb = []

    def __init__(self, x, y):
        import random
        Brick.position(self,x,y)        
        self.rgb =[random.randrange(100,255),random.randrange(100,255),random.randrange(100,255)]
        pass


    def update(self,screen):
        import pygame as pg        
        pg.draw.rect(screen, self.rgb, self.collider, 1) 

    def position(self,x,y):
        self.x = x
        self.y = y
        self.collider = [self.x, self.y, 10, 10]

    def collides(self, missile):
         import pygame as pg

         flag = False

         if (pg.Rect(self.collider).colliderect(missile.collider)):
            flag = True

            if (missile.x < self.collider[0]):
                missile.speedX = -1
            elif (missile.x > self.collider[0]):
                    missile.speedX = 1
            if (missile.y > self.collider[1]):
                missile.speedY = -1
            elif (missile.y < self.collider[1]):
                    missile.speedY = 1
         return flag
missile.py
class Missile:    

    speedX = 0
    speedY = 0

    import pygame as pg   
    collider = pg.Rect(0, 0, 0, 0)

    def __init__(self, x, y):
        Missile.position(self,x,y)
        pass


    def update(self,screen):
        import pygame as pg                
        pg.draw.rect(screen, [255,0,0], self.collider, 2)         


    def check_bounds(self, x, y):
        if (x >= 400 or x <= 0) :
            self.speedX*=-1
        if (y >= 400 or y <= 0) :
            self.speedY*=-1

    def position(self,x,y):        
        self.x = x
        self.y = y        
        self.collider = [self.x,self.y, 2,2]
        self.check_bounds(x, y)
Подведу итог: если не сидеть сложа руки и заниматься поставленными задачами, то вы добьетесь всего. Даже пуканоида за два дня.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
19
Просто еще нужен мотиватор. Если просто "я смогу" не хватает. Я вот бороду растил) Мотивировала доделать хоть что до конца, потому что не оч красиво и колется.
29
BrEd Pitt, моей мотивацией, было "не обосраться на форуме из-за записи о пайтоне за 10 дней". Анти-мотивация. На своей шкуре понял, что работает это вдвое эффективней, чем просто мысли о чем-то лучшем.
29
Msey, есть то, что мотивирует ещё лучше, хоть оно не растёт на грядках, но зелень.
Есть ещё второй вариант: Возомнить себя гением или богом. (обычно профит)
Бордер:
KingMaximax, пруф
На такое пруфы не нужны. Ибо пруфы предназначены для другого.
19
Msey, скорость, таблицу рекордов, анимацию, движение блоков, свастику.
29
DemonoiD, может и нет, но я на всякий случай отстраняюсь от ответственности. Если умеешь в пайтон, то подобный вопрос не будет всплывать
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.