Skip to content

Commit f4ef18a

Browse files
authored
Add README for Fantasy Character Creator project
Added a README for the Fantasy Character Creator project, detailing OOP concepts, key features, practice exercises, best practices, and instructions on how to run the code.
1 parent 2c12445 commit f4ef18a

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

Day_19_OOP_Project/README.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Day 19: OOP Project - A Fantasy Character Creator 🧙‍♂️⚔️
2+
3+
Welcome to our second project day! Today, we're building a **Fantasy Character Creator** to solidify our understanding of Object-Oriented Programming (OOP) concepts, especially **Inheritance**.
4+
5+
This project models different character types (like `Warrior` and `Wizard`) as classes that inherit from a more generic `Character` class. This allows us to share common traits and behaviors while giving each character a unique identity.
6+
7+
### Key Concepts Used
8+
9+
* **Classes:** We define classes for `Character`, `Warrior`, `Wizard`, and `Rogue` to act as blueprints for our objects.
10+
* **Objects:** We instantiate a specific character, like `player_character`, as a real object from one of our classes.
11+
* **Attributes:** Each object has its own set of attributes (like `name`, `health`, and `strength`) that define its state.
12+
* **Methods:** We define methods (like `display_stats` and `attack`) to give our objects behaviors.
13+
* **Inheritance:** `Warrior`, `Wizard`, and `Rogue` are **child classes** that inherit from the `Character` **parent class**. This means they automatically get the `name`, `health`, and `display_stats` attributes and methods without us having to write the code again.
14+
* **Method Overriding:** The `Warrior` class overrides the `health` attribute, giving it a unique value.
15+
* **`isinstance()`:** We use the built-in `isinstance()` function to check the type of our `player_character` object and call the correct method (`attack`, `cast_spell`, etc.).
16+
17+
### 📝 Practice Exercises
18+
19+
**Extend the Character Creator:**
20+
21+
1. **Add a new class:** Create a new class, like a `Healer` or `Archer`, that inherits from `Character`. Give it unique attributes (e.g., `healing_power`) and a unique method.
22+
2. **Add more methods:** Add a `take_damage()` method to the parent `Character` class. This method should reduce the character's health. Now, every child class can use this method.
23+
3. **Create a battle simulation:** Write a simple script that creates two different characters (e.g., a Warrior and a Wizard) and has them "battle" by taking turns calling their attack methods on each other. Print the health of each character after every "turn."
24+
25+
### ✨ Best Practices & Professional Notes
26+
27+
* **Hierarchical Design:** Inheritance is best used when you can model a clear hierarchy with an "is-a" relationship (e.g., a Wizard `is a` Character).
28+
* **The `super()` call:** Remember to always call `super().__init__()` in the child's `__init__` method to ensure the parent class's attributes are properly initialized.
29+
* **Readability:** The OOP approach makes our code highly readable and organized. We can easily understand what a `Warrior` is and what it can do by looking at its class definition.
30+
31+
### 🏃 How to Run This Code
32+
33+
1. Open your terminal or command prompt.
34+
2. Navigate to the `Day_19_OOP_Project` directory.
35+
```bash
36+
cd path/to/your/fluffy-python/Day_19_OOP_Project
37+
```
38+
3. Run the script using:
39+
```bash
40+
python oop_project.py
41+
# Or if you installed python3:
42+
# python3 oop_project.py
43+
```
44+
45+
---
46+
47+
### ➡️ What's Next?
48+
49+
Tomorrow, on Day 20, we'll dive into working with **APIs**, which will allow our programs to communicate with online services and pull in real-world data!
50+
51+
---
52+
53+
[⬅️ Back to Main Repository](../README.md)

0 commit comments

Comments
 (0)