Скачиваний:
0
Добавлен:
09.09.2026
Размер:
76 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В. И. Ульянова (Ленина)

Кафедра МО ЭВМ

отчет

по лабораторной работе №1

по дисциплине «Объектно-ориентированное программирование»

Тема: Создание классов

Студентка гр. 2383

Бараева Е. Н.

Преподаватель

Жангиров Т. Р.

Санкт-Петербург

2023

Цель работы.

Создание класса игрока с характеристиками и методов для работы с характеристиками, а также создание класса, который будет следить за передвижением игрока по карте.

Задание.

а) Создать класс игрока. У игрока должны быть поля, которые определяют его характеристики, например кол-во жизней, очков и т.д. Также в классе игрока необходимо реализовать ряд методов для работы с его характеристиками. Данные методы должны контролировать значения характеристик (делать проверку на диапазон значений).

б) Создать класс, передвигающий игрока по полю и работу с характеристиками. Данный класс всегда должен знать об объекте игрока, которым управляет, но не создавать класс игрока. В следующих лаб. работах данный класс будет проводить проверку, может ли игрок совершить перемещение по карте.

Примечания:

  • Не забывайте для полей и методов определять модификатор доступа

  • Для указания направления движения можно использовать перечисление enum или дополнительную систему классов. Использования чисел или строк является для указания направления является плохой практикой

  • Делать отдельный метод под каждое направление делает класс перегруженным, и в будущем ограничивает масштабирование класса

Выполнение работы.

Class Player

В данном классе были созданы приватные поля характеристик игрока: health, strength, endurance. Также был объявлен конструктор, который выставляет значения по умолчанию в приватные поля. Для взаимодействия с характеристиками у класса есть геттеры: GetHealth, GetStrength, GetEndurance, возвращающие значения поля, и сеттеры: SetHealth, SetStrength, SetEndurance, принимающие какое-то значение и присваивающие его соответствующему приватному полю, а также есть метод вывода характеристик на экран (ShowCharacteristics) для информирования игрока.

Class Controller

Перед классом были созданы: enum Directions, в котором перечислены направления движений, структура Coordinates для удобного хранения координат.

В данном классе были созданы приватные поля для координат и ссылка на игрока. Также был объявлен конструктор, который инициализирует поля переданными данными. Еще был создан метод Move, принимающий направление, в зависимости от которого изменялись координаты игрока с помощью switch-case. Метод GetCoordinates возвращает структуру координат. Методы ShiftHealth, ShiftStrength, ShiftEndurance принимают какое-то значение, проверяют, находится ли в границах допустимого значение поля игрока плюс сдвиг, и присваивают эту сумму соответствующему полю игрока. Также есть метод Alive, он проверят, жив ли игрок в донный момент, и возвращает True или False.

Все методы и конструкторы классов были вынесены в соответствующие cpp-файлы.

Разработанный программный код см. в приложении А.

Тестирование.

Результаты тестирования представлены в табл. 1.

Таблица 1 – Результаты тестирования

№ п/п

Входные данные

Выходные данные

Комментарии

1.

Player p;

std::cout << p.GetStrength() << ' ' << p.GetEndurance() << ' ' << p.GetHealth() << std::endl << std::endl;

p.ShowCharacteristics();

std::cout << std::endl;

p.SetHealth(-1000);

p.SetEndurance(-25);

p.SetStrength(12);

p.ShowCharacteristics();

10 100 100

ХАРАКТЕРИСТИКИ ПЕРСОНАЖА

Здоровье: 100

Сила: 10

Выносливость: 100

ХАРАКТЕРИСТИКИ ПЕРСОНАЖА

Здоровье: 0

Сила: 22

Выносливость: 75

Проверка создания класса Player, проверка методов класса.

Верно.

2.

Player p;

Movement m(p, {10, 15});

m.Move(0);

m.Move(2);

std::cout << m.GetCoordinates().x << " " << m.GetCoordinates().y << std::endl;

m.Move(1);

m.Move(3);

std::cout << m.GetCoordinates().x << " " << m.GetCoordinates().y << std::endl;

9 14

10 15

Проверка создания класса Movement, проверка изменения координат.

Верно.

Вывод.

Были изучены основы объектно-ориентированно программирования, создан класса игрока с методами, изменяющими его характеристики, а также создан класс передвижения, который будет отвечать за перемещение игрока.

ПРИЛОЖЕНИЕ А ИСХОДНЫЙ КОД ПРОГРАММЫ

Название файла: Player.h

#ifndef OOP_PLAYER_H

#define OOP_PLAYER_H

class Player {

private:

int health;

int strength;

int endurance;

public:

Player();

int GetHealth() const;

int GetStrength() const;

int GetEndurance() const;

void SetHealth(int value);

void SetStrength(int value);

void SetEndurance(int value);

void ShowCharacteristics() const;

};

#endif //OOP_PLAYER_H

Название файла: Player.cpp

#include <iostream>

#include "Player.h"

Player::Player(): health{100}, strength{10}, endurance{100} {}

int Player::GetHealth() const{

return health;

}

int Player::GetStrength() const{

return strength;

}

int Player::GetEndurance() const{

return endurance;

}

void Player::SetHealth(int value){

health = value;

}

void Player::SetStrength(int value){

strength = value;

}

void Player::SetEndurance(int value){

endurance = value;

}

void Player::ShowCharacteristics() const{

printf("ХАРАКТЕРИСТИКИ ПЕРСОНАЖА\nЗдоровье: %d\nСила: %d\nВыносливость: %d\n", health, strength, endurance);

}

Название файла: Controller.h

#ifndef OOP_CONTROLLER_H

#define OOP_CONTROLLER_H

#include "Player.h"

enum Directions {up, down, left, right};

struct Coordinates{

int x;

int y;

};

class Controller {

private:

Player &player;

Coordinates coordinates;

public:

Controller(Player &plr, Coordinates coord);

Coordinates GetCoordinates() const;

void Move(int direction);

void ShiftHealth(int value);

void ShiftStrength(int value);

void ShiftEndurance(int value);

bool Alive();

};

#endif //OOP_CONTROLLER_H

Название файла: Controller.cpp

#include "Controller.h"

#define MIN_LIM 0

#define MAX_LIM 100

Controller::Controller(Player &plr, Coordinates coord): player{plr}, coordinates{coord} {}

void Controller::Move(int direction){

switch (direction){

case up:

coordinates.y--;

break;

case down:

coordinates.y++;

break;

case left:

coordinates.x--;

break;

case right:

coordinates.x++;

}

}

Coordinates Controller::GetCoordinates() const{

return {coordinates.x, coordinates.y};

}

void Controller::ShiftHealth(int value){

int temporary_health = player.GetHealth() + value;

if(temporary_health < MIN_LIM)

player.SetHealth(MIN_LIM);

else{

if(temporary_health >= MAX_LIM)

player.SetHealth(MAX_LIM);

else

player.SetHealth(temporary_health);

}

}

void Controller::ShiftStrength(int value){

int temporary_strength = player.GetStrength() + value;

if(temporary_strength < MIN_LIM)

player.SetStrength(MIN_LIM);

else{

if(temporary_strength >= MAX_LIM)

player.SetStrength(MAX_LIM);

else

player.SetStrength(temporary_strength);

}

}

void Controller::ShiftEndurance(int value){

int temporary_endurance = player.GetEndurance() + value;

if(temporary_endurance < MIN_LIM)

player.SetEndurance(MIN_LIM);

else{

if(temporary_endurance >= MAX_LIM)

player.SetEndurance(MAX_LIM);

else

player.SetEndurance(temporary_endurance);

}

}

bool Controller::Alive(){

if(player.GetHealth())

return true;

return false;

}

7

Соседние файлы в папке Лабы по ООП 2023