Percursos
/
Swift
Swift
/
Exercícios
/
A demanda das asas
A demanda das asas

A demanda das asas

Exercício de aprendizagem

Introdução

O Swift disponibiliza um tipo incorporado chamado Bool para representar valores de verdade: true e false.

Operadores lógicos

O Swift disponibiliza três operadores lógicos (!, && e ||) para combinar e avaliar expressões do tipo Boolean.

AND lógico (&&)

O operador and (&&) devolve true apenas se ambos os operandos forem true. Se um dos operandos for false, devolve false. Coloca uma expressão ou um valor do tipo Boolean de cada lado do símbolo &&:

true && true  // true
true && false // false

OR lógico (||)

O operador or (||) devolve true se pelo menos um dos operandos for true. Só devolve false quando ambos os operandos são false. Coloca uma expressão ou um valor do tipo Boolean de cada lado do símbolo ||:

true || true   // true
true || false  // true
false || false // false

NOT lógico (!)

O operador not (!) inverte um valor do tipo Boolean. Devolve true se o valor for false, e false se o valor for true. Coloca o operador ! imediatamente antes do valor ou da expressão:

!true  // false
!false // true

Usar parênteses (())

Podes usar parênteses para agrupar expressões e controlar a ordem de avaliação. Em Swift, as expressões dentro de parênteses são avaliadas primeiro:

true && false && false || true   // true
true && false && (false || true) // false

O agrupamento com parênteses também determina como o operador NOT se aplica a expressões complexas:

!true && false   // false (evaluates (!true) first, then false && false)
!(true && false) // true  (evaluates (true && false) first to false, then !false)
Note

Usa parênteses quando precisares de clarificar a ordem de avaliação ou de tornar condições complexas mais fáceis de ler. Evita adicionar parênteses desnecessários quando a precedência predefinida já é clara.

Instruções

Estás a desenvolver o novo e muito apreciado jogo Wings Quest. No jogo, és uma ave que se move e recolhe sementes. O jogador ganha ao apanhar todas as sementes. Se o jogador entrar em contacto com uma águia, perde todas as sementes e perde o jogo. Há uma exceção a esta regra: o jogador pode ter um power-up ativo que o faz voar mais alto do que as outras aves.

O teu objetivo é escrever algumas regras que serão usadas no jogo.

1. Define se a ave ganha pontos de bónus

No jogo, a ave ganha pontos de bónus se tocar numa águia enquanto tem um power-up ativo.

Define a função bonusPoints(powerUpActive:touchingEagle:), que recebe dois argumentos: powerUpActive, que indica se a ave tem um power-up ativo, e o argumento touchingEagle, que indica se a ave está a tocar numa águia. A função deve devolver true apenas se a ave tiver um power-up ativo e estiver a tocar numa águia, e false caso contrário.

bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false

2. Define se a ave marca pontos

No jogo, o jogador ganha pontos quando apanha uma semente ou um power-up.

Define a função score(touchingPowerUp:touchingSeed:), que recebe dois argumentos: touchingPowerUp, que indica se a ave está a tocar num power-up, e o argumento touchingSeed, que indica se a ave está a tocar numa semente. A função deve devolver true se a ave estiver a tocar num power-up ou numa semente, e devolver false caso contrário.

score(touchingPowerUp: true, touchingSeed: true)
// Returns true

3. Define se a ave perde

Define a função lose(powerUpActive:touchingEagle:), que recebe dois argumentos: powerUpActive, que indica se a ave tem um power-up ativo, e o argumento touchingEagle, que indica se a ave está a tocar numa águia. A função deve devolver true se a personagem estiver a tocar numa águia e não tiver um power-up ativo, e devolver false caso contrário.

lose(powerUpActive: false, touchingEagle: true)
// Returns true

4. Define se a ave ganha

Define a função win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:), que recebe os argumentos:

  • hasPickedUpAllSeeds se a ave apanhou todas as sementes.
  • powerUpActive se a ave tem um power-up ativo.
  • touchingEagle se a ave está a tocar numa águia.

A função deve devolver true se a ave tiver recolhido todas as sementes e não tiver perdido, com base nos argumentos definidos na parte 3, e devolver false caso contrário.

win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false
Editar via GitHub A ligação abre numa nova janela ou separador
Swift Exercism

Estás pronto para começar A demanda das asas?

Inscreve-te no Exercism para aprenderes e dominares Swift com 35 conceitos116 exercícios, e mentoria humana real, tudo grátis.