Код IT
← Каталог

Smalltalk — SmallShooter — ShooterGame, протокол enemies

Фрагмент из «Smalltalk — SmallShooter»: ShooterGame, протокол enemies.

Smalltalk main.st
enemySpeed
    ^ 1.5 + (waveNumber * 0.15)

enemySizeFor: aType
    aType = #grunt ifTrue: [ ^ 24 @ 20 ].
    aType = #zigzag ifTrue: [ ^ 22 @ 18 ].
    ^ 26 @ 22

enemyHpFor: aType
    aType = #shooter ifTrue: [ ^ 2 ].
    ^ 1

addEnemyAt: aPoint type: aType
    enemies add: {
        aPoint x.
        aPoint y.
        aType.
        self enemyHpFor: aType.
        (80 + 120 atRandom) - (waveNumber * 3 max: 0).
        tickCount + (aPoint x asFloat / 8)
    }

updateEnemies
    | toRemove enemy type size speed x y |
    toRemove := OrderedCollection new.
    speed := self enemySpeed.
    enemies do: [ :each |
        enemy := each.
        type := enemy third.
        size := self enemySizeFor: type.
        x := enemy first.
        y := enemy second + speed.
        enemy at: 1 put: x.
        enemy at: 2 put: y.
        (y > fieldHeight + 40) ifTrue: [ toRemove add: enemy ] ].
    toRemove do: [ :each | enemies remove: each ifAbsent: [] ]
enemySpeed
    ^ 1.5 + (waveNumber * 0.15)

enemySizeFor: aType
    aType = #grunt ifTrue: [ ^ 24 @ 20 ].
    aType = #zigzag ifTrue: [ ^ 22 @ 18 ].
    ^ 26 @ 22

enemyHpFor: aType
    aType = #shooter ifTrue: [ ^ 2 ].
    ^ 1

addEnemyAt: aPoint type: aType
    enemies add: {
        aPoint x.
        aPoint y.
        aType.
        self enemyHpFor: aType.
        (80 + 120 atRandom) - (waveNumber * 3 max: 0).
        tickCount + (aPoint x asFloat / 8)
    }

updateEnemies
    | toRemove enemy type size speed x y |
    toRemove := OrderedCollection new.
    speed := self enemySpeed.
    enemies do: [ :each |
        enemy := each.
        type := enemy third.
        size := self enemySizeFor: type.
        x := enemy first.
        y := enemy second + speed.
        enemy at: 1 put: x.
        enemy at: 2 put: y.
        (y > fieldHeight + 40) ifTrue: [ toRemove add: enemy ] ].
    toRemove do: [ :each | enemies remove: each ifAbsent: [] ]