const readline = require('readline');
// Define a room function that represents a room in the game
// A room has a name, description, and exits to other rooms
// A room can be locked or unlocked
// A room can contain items
// A room can contain a monster to talk with or fight
function createRoom(name, description, exits, locked, items, monster) {
return {
name,
description,
exits,
locked,
items,
monster
};
}
// Define a monster function that represents a monster in the game
// A monster has a name, description, and a list of items it can drop
// A monster can be talked to or fought
function createMonster(name, description, items) {
return {
name,
description,
items
};
}
// Define an item function that represents an item in the game
// An item has a name, description, and a value
// An item can be picked up and dropped
function createItem(name, description, value) {
return {
name,
description,
value
};
}
// Define a player function that represents the player in the game
// A player has a name, description, and a list of items
// A player can pick up and drop items
// A player can talk to monsters
// A player can fight monsters
// A player has a current location
// A player has a history of all past locations where they've been
// A player can move to a different room
function createPlayer(name, description, items, location, history) {
return {
name,
description,
items,
location,
history
};
}
// Define a game function that represents the game
// A game has a player and a list of rooms
// A game can be started
// A game can be saved
// A game can be loaded
// A game can be ended
function createGame(player, rooms) {
return {
player,
rooms
};
}
// Define a function that starts the game
function startGame() {
// Create the game
const game = createGame(
// Create the player
createPlayer(
"Player 1",
"This is you",
[],
"room1",
[]
),
// Create the rooms
[
createRoom(
"room1",
"This is room 1",
{
north: "room2"
},
false,
[],
null
),
createRoom(
"room2",
"This is room 2",
{
south: "room1"
},
false,
[],
null
)
]
);
// Start the game loop
gameLoop(game);
}
// Define a function that loops the game
// Define a function that displays the current location
function displayLocation(game) {
// Get the current location
const location = game.player.location;
// Get the current room
const room = game.rooms.find(room => room.name === location);
// Display the current room
console.log(room.description);
}
// Define a function that displays the current inventory
function displayInventory(game) {
// Get the current inventory
const inventory = game.player.items;
// Display the current inventory
console.log(`You are carrying: ${inventory.join(", ")}`);
}
// Define a function that displays the current history
function displayHistory(game) {
// Get the current history
const history = game.player.history;
// Display the current history
console.log(`History: ${history.join(", ")}`);
}
// Define a function that processes the user input
function processInput(game, input) {
// Process the user input here
// ...
}
// Define a function that loops the game
function gameLoop(game) {
// Display the current location
displayLocation(game);
// Display the current inventory
displayInventory(game);
// Display the current history
displayHistory(game);
// Create a readline interface for reading user input
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// Prompt the user for input
rl.question("What would you like to do? ", (input) => {
// Close the readline interface
rl.close();
// Process the user input
processInput(game, input);
});
}
// Start the game
startGame();
// Define a function that displays the current location
function displayLocation(game) {
// Get the current location
const location = game.player.location;
// Get the current room
const room = game.rooms.find(room => room.name === location);
// Display the current room
console.log(room.description);
}
// Define a function that displays the current inventory
function displayInventory(game) {
// Get the current inventory
const inventory = game.player.items;
// Display the current inventory
console.log(`You are carrying: ${inventory.join(", ")}`);
}
// Define a function that displays the current history
function displayHistory(game) {
// Get the current history
const history = game.player.history;
// Display the current history
console.log(`You have been to: ${history.join(", ")}`);
}
// Define a function that processes the user input
function processInput(game, input) {
// Split the input into a command and a target
const [command, target] = input.split(" ");
// Process the command
switch (command) {
case "go":
// Process the go command
processGoCommand(game, target);
break;
case "get":
// Process the get command
processGetCommand(game, target);
break;
case "drop":
// Process the drop command
processDropCommand(game, target);
break;
case "talk":
// Process the talk command
processTalkCommand(game, target);
break;
case "fight":
// Process the fight command
processFightCommand(game, target);
break;
case "save":
// Process the save command
processSaveCommand(game);
break;
case "load":
// Process the load command
processLoadCommand(game);
break;
case "quit":
// Process the quit command
processQuitCommand();
break;
default:
// Process the unknown command
processUnknownCommand(game);
break;
}
}
// Define a function that processes the go command
function processGoCommand(game, target) {
// Get the current location
const location = game.player.location;
// Get the current room
const room = game.rooms.find(room => room.name === location);
// Check if the target is a valid exit
if (room.exits[target]) {
// Update the player's location
game.player.location = room.exits[target];
// Update the player's history
game.player.history.push(room.exits[target]);
// Display the current location
displayLocation(game);
} else {
// Display an error message
console.log("You can't go that way!");
}
// Loop the game
gameLoop(game);
}
// Define a function that processes the get command
function processGetCommand(game, target) {
// Get the current location
const location = game.player.location;
// Get the current room
const room = game.rooms.find(room => room.name === location);
// Check if the target is a valid item
if (room.items.includes(target)) {
// Remove the item from the room
room.items.splice(room.items.indexOf(target), 1);
// Add the item to the player's inventory
game.player.items.push(target);
// Display the current inventory
displayInventory(game);
} else {
// Display an error message
console.log("You can't get that!");
}
// Loop the game
gameLoop(game);
}
// Define a function that processes the drop command
function processDropCommand(game, target) {
// Get the current location
const location = game.player.location;
// Get the current room
const room = game.rooms.find(room => room.name === location);
// Check if the target is a valid item
if (game.player.items.includes(target)) {
// Remove the item from the player's inventory
game.player.items.splice(game.player.items.indexOf(target), 1);
// Add the item to the room
room.items.push(target);
// Display the current inventory
displayInventory(game);
} else {
// Display an error message
console.log("You can't drop that!");
}
// Loop the game
gameLoop(game);
}
// Define a function that processes the talk command
function processTalkCommand(game, target) {
// Get the current location
const location = game.player.location;
// Get the current room
const room = game.rooms.find(room => room.name === location);
// Check if the room has a monster
if (room.monster) {
// Display the monster's description
console.log(room.monster.description);
} else {
// Display an error message
console.log("There is no one to talk to!");
}
// Loop the game
gameLoop(game);
}
// Define a function that processes the fight command
function processFightCommand(game, target) {
// Get the current location
const location = game.player.location;
// Get the current room
const room = game.rooms.find(room => room.name === location);
// Check if the room has a monster
if (room.monster) {
// Display the monster's description
console.log(room.monster.description);
} else {
// Display an error message
console.log("There is no one to fight!");
}
// Loop the game
gameLoop(game);
}
// Define a function that processes the save command
function processSaveCommand(game) {
// Save the game
localStorage.setItem("game", JSON.stringify(game));
// Display a success message
console.log("Game saved!");
// Loop the game
gameLoop(game);
}
// Define a function that processes the load command
function processLoadCommand(game) {
// Load the game
const savedGame = JSON.parse(localStorage.getItem("game"));
// Check if a saved game was found
if (savedGame) {
// Display a success message
console.log("Game loaded!");
// Loop the game
gameLoop(savedGame);
} else {
// Display an error message
console.log("No saved game found!");
// Loop the game
gameLoop(game);
}
}
// Define a function that processes the quit command
function processQuitCommand() {
// Display a goodbye message
console.log("Goodbye!");
// Quit the game
return;
}
// Define a function that processes the unknown command
function processUnknownCommand(game) {
// Display an error message
console.log("Unknown command!");
// Loop the game
gameLoop(game);
}
// Start the game
startGame();
// End of game.js