From fbf841b55162bba492e16593dc87b038db60340a Mon Sep 17 00:00:00 2001 From: nolwn Date: Thu, 29 Apr 2021 22:51:52 -0700 Subject: [PATCH] Player takes items and lists inventory. --- Player.ts | 33 +++++++++++++++++++++++++++++++++ main.ts | 16 +++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 Player.ts diff --git a/Player.ts b/Player.ts new file mode 100644 index 0000000..ef601d8 --- /dev/null +++ b/Player.ts @@ -0,0 +1,33 @@ +import { Item } from "./data/data.ts"; +import User from "./User.ts"; + +export default class Player { + #items: Item[]; + #user: User; + + constructor(items?: Item[]) { + this.#items = items || []; + this.#user = new User(); + } + + drop(item: Item) { + this.#items.push(item); + } + + async inventory() { + const vowels = ["a", "e", "i", "o", "u"]; + const description = this.#items + .map(({ name }, i) => { + let anItem = `${vowels.includes(name[0]) ? "an" : "a"} ${name}`; + + if (i + 1 === this.#items.length) { + anItem = `and ${anItem}`; + } + + return anItem; + }) + .join(", "); + + await this.#user.tell(`You have ${description}.`); + } +} diff --git a/main.ts b/main.ts index 7a92255..1612b1a 100644 --- a/main.ts +++ b/main.ts @@ -1,11 +1,13 @@ import User from "./User.ts"; import Scene from "./Scene.ts"; +import Player from "./Player.ts"; import { hall } from "./data/data.ts"; import parseCommand from "./parseCommand.ts"; async function main() { const user = new User(); const scene = new Scene(hall); + const player = new Player(); const question = ""; let running = true; let statement = ""; @@ -28,7 +30,11 @@ async function main() { break; case "take": - await scene.take(target); + await pickUpItem(scene, player, target); + break; + + case "inventory": + await player.inventory(); break; default: @@ -49,4 +55,12 @@ function quit(user: User): boolean { return true; } +async function pickUpItem(scene: Scene, player: Player, target: string) { + const item = await scene.take(target); + + if (item !== null) { + player.drop(item); + } +} + main();