Personagem de RPG
Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 58 de 61.
Desafio
FácilVamos criar um sistema de combate de Personagem de RPG: um exemplo clássico que reúne structs, métodos, construtores e interação entre objetos em um design limpo e modular.
Você vai organizar seu código em três arquivos:
character.h: Defina uma structCharactercom dois campos inteiros:healthedamage. Declare os protótipos das funções para criar um personagem, realizar um ataque, verificar se um personagem está vivo e imprimir o status de um personagem.character.c: Implemente seu sistema de personagens:create_character: recebe valores iniciais de vida e dano, aloca um Character no heap, inicializa seus campos e retorna um ponteiroattack: recebe dois ponteiros para Character (atacante e alvo) e reduz a vida do alvo pelo dano do atacanteis_alive: recebe um ponteiro const para Character e retorna 1 se a vida for maior que 0; caso contrário, retorna 0print_status: recebe um ponteiro const para Character e imprime a vida do personagem no formatoHealth: Xfree_character: libera a memória alocada
main.c: Crie uma simulação de batalha! Leia quatro números inteiros que representam: a vida do herói, o dano do herói, a vida do inimigo e o dano do inimigo. Crie os dois personagens usando seu construtor. Em seguida, simule rodadas de combate: em cada rodada, o herói ataca primeiro e, depois, o inimigo revida. Se o ataque do herói reduzir a vida do inimigo a zero ou menos, o inimigo é derrotado e não revida nessa rodada. Continue até que um dos personagens caia. Após cada rodada, imprima o status dos dois personagens (primeiro o herói, depois o inimigo). Quando a batalha terminar, imprimaHero wins!ouEnemy wins!, dependendo de quem sobreviveu. Não se esqueça de liberar a memória dos dois personagens.
Seu programa receberá quatro entradas:
- Vida inicial do herói
- Dano do herói por ataque
- Vida inicial do inimigo
- Dano do inimigo por ataque
Exemplo de saída quando as entradas são 50, 20, 30, 15:
Health: 35
Health: 10
Health: 35
Health: -10
Hero wins!Exemplo de saída quando as entradas são 20, 5, 100, 25:
Health: -5
Health: 95
Enemy wins!Lembre-se de usar guardas de inclusão no arquivo de cabeçalho. A função attack demonstra como um objeto pode modificar o estado interno de outro: um conceito-chave no design orientado a objetos. Use ponteiros const adequadamente nas funções que apenas leem dados.
Experimente você mesmo
#include <stdio.h>
#include "character.h"
int main() {
// Leia os valores de entrada
int hero_health, hero_damage, enemy_health, enemy_damage;
scanf("%d", &hero_health);
scanf("%d", &hero_damage);
scanf("%d", &enemy_health);
scanf("%d", &enemy_damage);
// TODO: Crie os personagens do herói e do inimigo usando create_character
// TODO: Simule as rodadas de combate
// - O herói ataca primeiro
// - O inimigo ataca se ainda estiver vivo
// - Imprima o status de ambos os personagens após cada rodada (primeiro o herói, depois o inimigo)
// - Continue até que um dos personagens caia
// TODO: Imprima o vencedor ("Hero wins!" ou "Enemy wins!")
// TODO: Libere a memória de ambos os personagens
return 0;
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos da Programação Modular
Arquivos de cabeçalhoProteções de inclusãoArquivos-fonteFunções estáticasRevisão: calculadora modular4Encapsulamento
Conceito de ponteiros opacosDefinindo structs opacasGetters e settersValidação em settersRevisão: caixa secreta2Objetos e métodos
Structs como objetosO ponteiro 'Self'Correção de constPonteiro vs. valorMétodos auxiliaresRevisão: Gerenciador de pontos5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta3Ciclo de vida do objeto
Padrão de construtorPadrão de destrutorInicialização da pilhaCópia profundaRevisão: wrapper de String6Herança por composição
Incorporação de structRegra do primeiro membroAcessando membros do tipo paiUpcastingRevisão: hierarquia de formas9Projeto: Desenhador de Formas
Visão geral do projetoImplementação do círculoImplementação do retânguloUso polimórficoContêiner de formasPratique por conta própria: Compilador de C online