RPG-персонаж
Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 58 из 61.
Задание
ЛегкоДавайте создадим боевую систему для RPG Character: классический пример, объединяющий структуры, методы, конструкторы и взаимодействие объектов в чистом модульном дизайне.
Вы организуете код в трёх файлах:
character.h: Define структуруCharacterс двумя целочисленными полями:healthиdamage. Declare прототипы function для создания персонажа, выполнения атаки, проверки того, жив ли персонаж, и вывода состояния персонажа.character.c: Implement вашу систему персонажей:create_character: принимает начальные значения здоровья и урона, выделяет Character в heap, инициализирует его поля и возвращает указательattack: принимает два указателя Character (attacker и цель), уменьшает здоровье цели на величину урона attackeris_alive: принимает указатель на const Character и возвращает 1, если health больше 0, иначе возвращает 0print_status: принимает указатель на const Character и выводит health персонажа в форматеHealth: Xfree_character: освобождает выделенную память
main.c: Create симуляцию сражения! Считайте четыре целых числа, представляющих: здоровье героя, урон героя, здоровье врага и урон врага. Создайте обоих персонажей с помощью вашего конструктора. Затем смоделируйте раунды combat: в каждом раунде герой атакует первым, после чего враг наносит ответный удар. Оба удара происходят в одном и том же раунде, поэтому контратака врага всё ещё достигает цели, даже если атака героя уже уменьшила его здоровье до нуля или ниже. Continue, пока один из персонажей не falls. После каждого раунда выведите статус обоих персонажей (сначала героя, затем врага). Когда сражение закончится, выведитеHero wins!илиEnemy wins!в зависимости от того, кто выжил. Не забудьте освободить память обоих персонажей.
Ваша программа получит четыре входных значения:
- Начальное здоровье героя
- Урон героя за атаку
- Начальное здоровье врага
- Урон врага за атаку
Пример вывода для входных значений 50, 20, 30, 15:
Health: 35
Health: 10
Health: 20
Health: -10
Hero wins!Пример вывода для входных значений 20, 5, 100, 25:
Health: -5
Health: 95
Enemy wins!Не забудьте использовать include guards в заголовочном файле. Function attack демонстрирует, как один объект может изменять внутреннее состояние другого: это ключевая концепция объектно-ориентированного дизайна. Используйте указатели const надлежащим образом в function, которые только считывают данные.
Попробуйте сами
#include <stdio.h>
#include "character.h"
int main() {
// Прочитать входные значения
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: Создать персонажей героя и врага с помощью create_character
// TODO: Симулировать раунды боя
// - Герой атакует первым
// - Враг атакует, если ещё жив
// - Вывести статус обоих персонажей после каждого раунда (сначала герой, затем враг)
// - Продолжать, пока один из персонажей не падёт
// TODO: Вывести победителя ("Hero wins!" или "Enemy wins!")
// TODO: Освободить обоих персонажей
return 0;
}
Все уроки раздела Объектно-ориентированное программирование
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация кругаРеализация прямоугольникаПолиморфное использованиеКонтейнер фигурПотренируйтесь самостоятельно: Онлайн-компилятор C