基于 JavaScript 文本的宠物游戏

标签 javascript function properties constructor

我正在尝试创建一个基于文本的虚拟宠物护理游戏。我希望能够为您提供两个宠物(具有属性的对象)和通过修改对象属性与这些对象进行交互的函数。这就是我所拥有的:

function Pet(pet_name){
    this.pet_name = pet_name;
    this.pet_hunger = Math.floor((Math.random() * 10) + 1);
    this.pet_health = Math.floor((Math.random() * 10) + 1);
    this.pet_happiness = Math.floor((Math.random() * 10) + 1);

    this.feed = feed;
    this.show = show;
}

pet1 = new Pet("Brian");
pet2 = new Pet("Lassy");

function feed(){
    var amount = Math.floor((Math.random() *2) + 1);
    this.pet_hunger = this.pet_hunger - amount;
    if (this.pet_hunger < 0){
        this.pet_hunger = 0;
    }
    this.show();
 }

function show(){
    var the_string = "";
    if (this.pet_health === 0){
        the_string = this.pet_name + " is dead!";
    }
    else {
        the_string += "Name: " + this.pet_name;
        the_string += "Hunger: " + this.pet_name;
        the_string += "Health: " + this.pet_health;
        the_string += "Happiness: " + this.pet_happinesss;
    }
}

当我运行代码时:

console.log(pet1);
console.log(pet1.feed());  
console.log(pet1);

我收到以下信息:

{ pet_name: 'Brian',
  pet_hunger: 4,
  pet_health: 4,
  pet_happiness: 10,
  feed: [Function: feed],
  show: [Function: show] }
undefined
{ pet_name: 'Brian',
  pet_hunger: 2,
  pet_health: 4,
  pet_happiness: 10,
  feed: [Function: feed],
  show: [Function: show] }

因此我们可以看到 feed 功能正在运行。但是,我仍然不确定为什么显示未定义。现在,我创建了一个名为 show 的函数。这应该整齐地显示四个人的统计数据(姓名、饥饿、健康、幸福)。但是,当我尝试运行时:

console.log(pet1.show);
console.log(pet1.feed());
console.log(pet1);

我收到以下信息:

[Function: show]
undefined
{ pet_name: 'Brian',
  pet_hunger: 4,
  pet_health: 1,
  pet_happiness: 9,
  feed: [Function: feed],
  show: [Function: show] }

我不确定为什么我的 show 功能不起作用。我真的只是希望我的控制台能够清晰地显示:姓名:饥饿:健康:幸福:大家有什么想法吗?

最佳答案

您会得到未定义,因为当您执行代码时,浏览器将记录函数的返回值。由于您没有指定返回,因此函数返回undefined,这就是控制台记录的内容。

如果您想在 show 函数中返回该字符串,则必须...好吧,返回该字符串:

// ...

function feed(){
    var amount = Math.floor((Math.random() *2) + 1);
    this.pet_hunger = this.pet_hunger - amount;
    if (this.pet_hunger < 0){
        this.pet_hunger = 0;
    }
    return this.show();
}

function show(){
    var the_string = "";
    if (this.pet_health === 0){
        the_string = this.pet_name + " is dead!";
    }
    else {
        the_string += "Name: " + this.pet_name + ", ";
        the_string += "Hunger: " + this.pet_hunger + ", ";
        the_string += "Health: " + this.pet_health + ", ";
        the_string += "Happiness: " + this.pet_happiness;
    }
    return the_string;
}

console.log(pet1.show()); 
// Logs 'Name: a, Hunger: b, Health: c, Happiness: d'

你也有一些拼写错误(在更正之前,你的宠物的幸福是undefined,哈哈),所以我更正了它们,并用逗号分隔了字符串中的每个属性,你可以更改它。

关于基于 JavaScript 文本的宠物游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043573/

相关文章:

javascript - 我如何独立使用 router.js?

python - Python Max/Min 函数中的 iter 和 key 如何工作?

javascript - 更新产品数量而不进行回发

c# - 不一致的可访问性错误 C#

javascript - 在不创建隔离范围的情况下进行射击摧毁

javascript - 在 R 中,如何在 Sankey Graph 的链接/路径上显示值?

c++ - 为什么要在 C++ 中将智能指针作为函数参数传递?

java - 如何在 JavaFX 中实现派生只读属性/值?

c# - 仅在反序列化时设置

javascript - 不断检查日期是否是过去的日期