<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Liam D.</title>
    <description>The latest articles on Forem by Liam D. (@liamdewitt).</description>
    <link>https://forem.com/liamdewitt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2289031%2F401908f1-4c1d-4cbd-940a-1352858f7db0.gif</url>
      <title>Forem: Liam D.</title>
      <link>https://forem.com/liamdewitt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/liamdewitt"/>
    <language>en</language>
    <item>
      <title>Project Spotlight: Building an OOP RPG Game Grid</title>
      <dc:creator>Liam D.</dc:creator>
      <pubDate>Sat, 23 Nov 2024 03:55:20 +0000</pubDate>
      <link>https://forem.com/liamdewitt/project-spotlight-building-an-oop-rpg-game-grid-242p</link>
      <guid>https://forem.com/liamdewitt/project-spotlight-building-an-oop-rpg-game-grid-242p</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;For my latest project, I wanted to challenge myself with something more ambitious: creating a grid-based RPG game that leverages object-oriented programming (OOP) principles. This project tested my ability to design, plan, and implement a modular and extensible system, showcasing not just technical skills but also the problem-solving process behind the scenes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Concept: Building an RPG Game Grid
&lt;/h2&gt;

&lt;p&gt;The idea was to simulate a playable RPG game where players explore a dynamic grid, encounter enemies, collect items, and navigate toward a final goal. At its core, the grid is represented as a 2D array, but the functionality is driven by the interaction of OOP classes.&lt;/p&gt;

&lt;p&gt;Every object in the game, whether a player, enemy, or item, is designed to work together seamlessly. I used inquirer to create an interactive CLI experience, giving the game a simple yet engaging interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges and Breakthroughs
&lt;/h2&gt;

&lt;p&gt;The journey from concept to implementation wasn’t straightforward, and most of the difficulty came from planning and structuring the system. Here are some of the challenges I faced and the solutions I discovered:&lt;/p&gt;

&lt;h2&gt;
  
  
  Planning and Class Structure
&lt;/h2&gt;

&lt;p&gt;One of the key learning moments was designing classes that could extend functionality without redundancy. For instance, a base GridObject class provided shared methods, while PlayerObject, EnemyObject, and ItemObject extended and customized that functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Grid Management
&lt;/h2&gt;

&lt;p&gt;Instead of treating the grid as a standalone variable, I incorporated it as a property of the Grid class. This encapsulated logic like generating and updating the grid, keeping the structure clean and manageable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Randomized Events
&lt;/h2&gt;

&lt;p&gt;Designing random but balanced outcomes for player actions required careful consideration. I developed an eventSpawner method to control probabilities, ensuring the experience was unpredictable but fair.&lt;/p&gt;

&lt;h2&gt;
  
  
  Balancing Complexity
&lt;/h2&gt;

&lt;p&gt;Building a turn-based combat system introduced a new layer of challenge, especially in balancing stats like attack, defense, and HP to make encounters engaging and strategic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;p&gt;Object-Oriented Design:&lt;br&gt;
Classes allow the game to be modular and extensible. Adding new objects or mechanics can be done with minimal changes to the core structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Gameplay:
&lt;/h2&gt;

&lt;p&gt;Encounters, whether combat or item discovery, are randomized for replayability. Players can navigate the grid interactively via CLI, mimicking classic text-based games.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scalability:
&lt;/h2&gt;

&lt;p&gt;The modular design opens doors for future features, like obstacles, special tiles, or even expanding to a multi-layered grid using a 3D array.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reflection: Lessons Learned
&lt;/h2&gt;

&lt;p&gt;This project pushed me to think critically about how to translate abstract ideas into functional code. Much of the satisfaction came not just from solving technical problems but also from seeing the game take shape, step by step.&lt;/p&gt;

&lt;p&gt;When approaching how to make the grid look a little... "pretty?" I opted for the choice of using emojis, however, found out that most don't even work for me on my terminal and would require me to download a terminal font. So... I said "nah, I'd win' and just used a few of the very limiting amount I can use. Unless something really forces me to use a different font, I prefer the default over the most popular ones.&lt;/p&gt;

&lt;p&gt;One of the biggest lessons was the value of planning. Spending time upfront to map out the relationships between classes and methods paid off in the long run, making the implementation phase much smoother. This experience reinforced how much I’ve grown as a developer, especially in tackling complex problems independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;As I move forward, I plan to revisit front-end development, particularly the DOM and React, to strengthen my skills in building interactive user interfaces. At the same time, I’m excited to continue exploring back-end development, especially API design and logic, which I find most rewarding.&lt;/p&gt;

&lt;p&gt;Each project helps refine my understanding, not just of code, but of how to approach challenges creatively and methodically. I’m looking forward to building on these skills and seeing where they take me next.&lt;/p&gt;

&lt;p&gt;You can find my project here &lt;br&gt;
&lt;a href="https://github.com/liamdewitt/adventure-rpg-game" rel="noopener noreferrer"&gt;https://github.com/liamdewitt/adventure-rpg-game&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Lessons from My First Project</title>
      <dc:creator>Liam D.</dc:creator>
      <pubDate>Tue, 05 Nov 2024 15:17:11 +0000</pubDate>
      <link>https://forem.com/liamdewitt/lessons-from-my-first-project-k2h</link>
      <guid>https://forem.com/liamdewitt/lessons-from-my-first-project-k2h</guid>
      <description>&lt;h2&gt;
  
  
  Building a Pokémon Downloader CLI: Lessons from My First Projects
&lt;/h2&gt;

&lt;p&gt;Transitioning from a Blackjack game to a Pokémon data downloader CLI has been a rewarding (and humbling) journey! Here’s what I learned, where I got stuck, and how each project helped me grow as a developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Blackjack to Pokémon: Building on the Basics
&lt;/h2&gt;

&lt;p&gt;When I worked on my Blackjack game, I got to grips with control flow, conditional logic, and managing user inputs. Blackjack was relatively self-contained, but it gave me confidence to handle project structure and to debug issues as they came up. These fundamentals became incredibly valuable in the Pokémon CLI project, where things were less about game rules and more about fetching and managing external data. Having that foundation helped me focus on the newer, more complex areas, like async functions and error handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Async Functions &amp;amp; Error Handling: From Theory to Practice
&lt;/h2&gt;

&lt;p&gt;In the Pokémon CLI, one of the biggest leaps was learning to work with async functions and error handling in a real-world way. Exercises were helpful, but using async/await in this project solidified how to handle API requests, ensuring my program didn’t crash if things went wrong. Each time I handled errors, I learned to expect them as part of the process rather than feeling defeated by them. I’d log out values to narrow down issues, especially when the error seemed to point somewhere unexpected. For example, I got a reference error that seemed unrelated to my changes, only to realize I’d missed updating a reference in another file. I found that console logging was a game-changer in tracking issues back to their source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading Documentation: A Whole New Challenge
&lt;/h2&gt;

&lt;p&gt;One of my toughest challenges was learning to read documentation for packages like inquirer and path. It felt like I was told to find a mythical creature in a forest without knowing what it looked like. Inquirer was manageable after some experimenting, especially when it came to validation options. But path was a different story—I had no idea how to approach it at first. I ended up looking for more introductory resources to get a sense of what path even does and why I’d want to use it.&lt;/p&gt;

&lt;p&gt;This process taught me that sometimes it’s okay to step away from the official documentation when it feels overwhelming. I started looking for tutorials and examples to understand the purpose of each package before diving back into the docs for specific features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up: Takeaways &amp;amp; Next Steps
&lt;/h2&gt;

&lt;p&gt;This Pokémon CLI project felt like a step up in complexity from my Blackjack game, pushing me to grow in error handling, async functions, and reading documentation. I also learned about ArrayBuffer and handling binary data, which I used to store images locally instead of just fetching URLs. While I don’t fully understand all the mechanics of ArrayBuffer, I understand enough to use it effectively in this project.&lt;/p&gt;

&lt;p&gt;Looking back, each project builds on the last. While there’s still plenty to learn, it’s encouraging to see these skills evolve. I’m excited to tackle my next project with even more confidence (and maybe a few less mythical creatures to track down in the docs)!&lt;/p&gt;

&lt;p&gt;You can find the project on my github!&lt;br&gt;
&lt;a href="https://github.com/liamdewitt/pokemon-downloader-cli" rel="noopener noreferrer"&gt;https://github.com/liamdewitt/pokemon-downloader-cli&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Humble beginnings</title>
      <dc:creator>Liam D.</dc:creator>
      <pubDate>Sun, 27 Oct 2024 22:04:22 +0000</pubDate>
      <link>https://forem.com/liamdewitt/humble-beginnings-34pg</link>
      <guid>https://forem.com/liamdewitt/humble-beginnings-34pg</guid>
      <description>&lt;h2&gt;
  
  
  My name is Liam and I'm 27 years old.
&lt;/h2&gt;

&lt;p&gt;My entire life I've struggled to find a passion or a drive to push me to want to be something and do something. &lt;/p&gt;

&lt;p&gt;Honestly I struggled a lot in school. I procrastinated all the time, but afraid of failure, so I would do well enough out of fear, but couldn't focus on the right things in life. This left me feel stunted, confused, and lost in life. I thought everyone felt like this and I was just lagging behind. &lt;/p&gt;

&lt;p&gt;Like many in this industry, I played a lot of video games, my pc is my entertainment system, and I always thought computers were cool. Though I have a low self-esteem when it came to what I thought I was capable of, after taking C++ and C# in community college, I thought it wasn't for me. I had a lot of fun, but struggled a lot thinking I wasn't good or smart enough. I eventually opted to go for nursing and that ended up just as well you you'd think. I have nothing but an associates degree to my name. This led me to feel like I had exhausted funds, would have to go back and do other classes if I wanted to steer into something else, I felt defeated and lost.&lt;/p&gt;

&lt;p&gt;I was only recently diagnosed with ADHD almost a year ago, now medicated, and a lot of my questions were answered on how and why I struggled so much in school and tasks in general. I wonder the man I could have been by now if I were diagnosed and didn't have this confusing hurdle in my life. I started to self-learn coding after college and found it difficult to stick to it. My ADHD made it crippling to do things I wanted to do, knew was good for me, but couldn't get myself to do it. This led to a inconsistent back and fourth of coding. &lt;/p&gt;

&lt;p&gt;However, coming back, feeling like I have more control in my life, I picked it back up, with a new attitude on life. I went back to the basics again with JavaScript and trying to build a sense of confidence and competence in my abilities before I go back to React and building more grandiose projects. It's scary to feel like you have no path in life and so you try to move so fast to catch up, you end up feeling like a fraud. Coming back to the basics and really getting to understand the fundamentals has been a big help in my coding anxiety. &lt;/p&gt;

&lt;p&gt;What is my goal? My ultimate goal is to be able to work remotely, ideally, and move to Canada. Or be able to move to Canada and offer my skills!&lt;/p&gt;

&lt;p&gt;Here's to learning new things, enjoying that fun, and making something of yourself!&lt;/p&gt;

&lt;p&gt;The last project I made was a little blackjack game that is played strict just through node with no real interaction(&lt;a href="https://github.com/liamdewitt/blackjack-game" rel="noopener noreferrer"&gt;https://github.com/liamdewitt/blackjack-game&lt;/a&gt;), but serves to exercise what I knew at the time. Since then, I've been learning more and plan for a new project soon and looking forward to the struggle and learning pains that follow :)!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>aboutme</category>
    </item>
  </channel>
</rss>
