Created Container parent class. Introduced soem fancy bugs.
This commit is contained in:
26
Container.ts
Normal file
26
Container.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import type { Item } from "./data/data.ts";
|
||||||
|
|
||||||
|
export default class Container {
|
||||||
|
protected items: Item[];
|
||||||
|
|
||||||
|
constructor(items: Item[]) {
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
description(items: Item[]): string {
|
||||||
|
const vowels = ["a", "e", "i", "o", "u"];
|
||||||
|
const description = items
|
||||||
|
.map(({ name }, i) => {
|
||||||
|
let anItem = `${vowels.includes(name[0]) ? "an" : "a"} ${name}`;
|
||||||
|
|
||||||
|
if (i + 1 === items.length) {
|
||||||
|
anItem = `and ${anItem}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return anItem;
|
||||||
|
})
|
||||||
|
.join(", ");
|
||||||
|
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
}
|
25
Player.ts
25
Player.ts
@ -1,33 +1,22 @@
|
|||||||
import { Item } from "./data/data.ts";
|
import { Item } from "./data/data.ts";
|
||||||
|
import Container from "./Container.ts";
|
||||||
import User from "./User.ts";
|
import User from "./User.ts";
|
||||||
|
|
||||||
export default class Player {
|
export default class Player extends Container {
|
||||||
#items: Item[];
|
|
||||||
#user: User;
|
#user: User;
|
||||||
|
|
||||||
constructor(items?: Item[]) {
|
constructor(items?: Item[]) {
|
||||||
this.#items = items || [];
|
super(items || []);
|
||||||
this.#user = new User();
|
this.#user = new User();
|
||||||
}
|
}
|
||||||
|
|
||||||
drop(item: Item) {
|
drop(item: Item) {
|
||||||
this.#items.push(item);
|
this.items.push(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
async inventory() {
|
look(): void {
|
||||||
const vowels = ["a", "e", "i", "o", "u"];
|
const description = super.description(this.items);
|
||||||
const description = this.#items
|
|
||||||
.map(({ name }, i) => {
|
|
||||||
let anItem = `${vowels.includes(name[0]) ? "an" : "a"} ${name}`;
|
|
||||||
|
|
||||||
if (i + 1 === this.#items.length) {
|
this.#user.tell(`You have ${description}`);
|
||||||
anItem = `and ${anItem}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return anItem;
|
|
||||||
})
|
|
||||||
.join(", ");
|
|
||||||
|
|
||||||
await this.#user.tell(`You have ${description}.`);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
18
Scene.ts
18
Scene.ts
@ -1,29 +1,27 @@
|
|||||||
import { GameData, Item } from "./data/data.ts";
|
import { GameData, Item } from "./data/data.ts";
|
||||||
import User from "./User.ts";
|
import User from "./User.ts";
|
||||||
|
import Container from "./Container.ts";
|
||||||
|
|
||||||
export default class Scene {
|
export default class Scene extends Container {
|
||||||
#items: Item[];
|
|
||||||
#user: User;
|
#user: User;
|
||||||
|
|
||||||
constructor(gameData: GameData) {
|
constructor(gameData: GameData) {
|
||||||
this.#items = gameData.items;
|
super(gameData.items);
|
||||||
this.#user = new User();
|
this.#user = new User();
|
||||||
}
|
}
|
||||||
|
|
||||||
async look() {
|
async look() {
|
||||||
const description = this.#items
|
const description = super.description(this.items);
|
||||||
.map(({ description }) => description)
|
|
||||||
.join(" ");
|
|
||||||
|
|
||||||
await this.#user.tell(description);
|
await this.#user.tell(`There is ${description}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async take(target: string): Promise<Item | null> {
|
async take(target: string): Promise<Item | null> {
|
||||||
const idx = this.#items.findIndex(({ name }) => name === target);
|
const idx = this.items.findIndex(({ name }) => name === target);
|
||||||
|
|
||||||
if (idx >= 0) {
|
if (idx >= 0) {
|
||||||
const item = this.#items[idx];
|
const item = this.items[idx];
|
||||||
this.#items.splice(idx, 1);
|
this.items.splice(idx, 1);
|
||||||
|
|
||||||
await this.#user.tell("Taken.");
|
await this.#user.tell("Taken.");
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ export * from "./rooms.ts";
|
|||||||
|
|
||||||
export interface Item {
|
export interface Item {
|
||||||
name: string;
|
name: string;
|
||||||
description: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GameData {
|
export interface GameData {
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
export const hall = {
|
export const hall = {
|
||||||
items: [{ name: "flashlight", description: "There is a flashlight." }],
|
items: [{ name: "flashlight" }],
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user