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ê 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 inteiros que representam: a vida do herói, o dano do herói, a vida do inimigo e o dano do inimigo. Crie ambos os personagens usando seu construtor. Em seguida, simule as rodadas de combate; em cada rodada, o herói ataca primeiro e depois o inimigo revida. Ambos os golpes acontecem na mesma rodada, portanto o contra-ataque do inimigo ainda acontece mesmo que o ataque do herói já tenha reduzido sua vida a zero ou menos. Continue até que um dos personagens seja derrotado. Após cada rodada, imprima o status de ambos os 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 ambos os 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: 20
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 include guards no seu arquivo de cabeçalho. A função attack demonstra como um objeto pode modificar o estado interno de outro: um conceito fundamental 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() {
// Ler 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 herói e inimigo usando create_character
// TODO: Simule as rodadas de combate
// - Herói ataca primeiro
// - Inimigo ataca se ainda estiver vivo
// - Imprima o status de ambos os personagens após cada rodada (herói primeiro, depois inimigo)
// - Continue até que um personagem caia
// TODO: Imprima o vencedor ("Hero wins!" or "Enemy wins!")
// TODO: Libere ambos os personagens
return 0;
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos da Programação Modular
Arquivos de CabeçalhoInclude GuardsArquivos-FonteFunções EstáticasRecapitulação: Calculadora Modular4Encapsulamento
Conceito de Ponteiros OpacosDefinindo Structs OpacasGetters e SettersValidação em SettersRecapitulação: Caixa Secreta2Objetos e Métodos
Structs como ObjetosO Ponteiro 'Self'Const CorrectnessPonteiro vs ValorMétodos AuxiliaresRecapitulação: Point Manager5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta3Ciclo de Vida de Objetos
Padrão de ConstrutorPadrão de DestrutorInicialização na StackCópia ProfundaRecapitulação: String Wrapper6Herança via Composição
Incorporação de StructsA Regra do Primeiro MembroAcessando Membros PaiUpcastingRecapitulação: Hierarquia de Formas9Projeto: Desenhador de Formas
Visão Geral do ProjetoImplementação do CírculoImplementação do RetânguloUso PolimórficoContainer de FormasPratique por conta própria: Compilador de C online