Autor Zpráva
FAKTOR2
Profil
V javascripte som amatér. Potreboval by som danú funkciu vložiť do premenej player.Atk =

function nahoda(min,max)
{
    return Math.floor(Math.random()*(max-min+1)+min);
}

Entity.prototype = entityPrototype;

player = new Entity();
player.name = playerName;
player.Atk = nahoda(0,3);
player.Def = 1;
pcmanik
Profil
FAKTOR2:
player.Atk = nahoda;
Radek9
Profil
FAKTOR2:
Jestli je to myšleno tak, aby ty parametry min a max byly už předdefinovány, pak se dá využít metoda bind:

player.Atk = nahoda.bind(null, 0, 3);

Edit: Díky pcmanik za upozornění. Pro verze IE starší než 9 takto:

player.Atk = function () { return nahoda(0, 3); };

Toto řešení je navíc asi i trochu pochopitelnější. Je totiž na první pohled zřejmé, co to dělá. Vytváří to novou funkci, která, když se zavolá, vrátí výlsedek volání funkce nahoda s parametry 0 a 3.
pcmanik
Profil
Radek9:
V tom prípade by ale bolo dobré upozorniť, že tu bude fungovat až od IE9.
FAKTOR2
Profil
Hádžem to cez firefox. Pokial je player.Atk = 3; tak všetko funguje. Skúsil som aj to čo ste poradili ale stále to nejde.

var playerName = "Player";

var entityPrototype = {
  name:'Unknown',
  HP:10,
  Atk:0,
  Def:0,
  Lck:0,
  Mana:10,
};

function Entity () {
}

function rn(min,max)
{
    return Math.floor(Math.random()*(max-min+1)+min);
}

Entity.prototype = entityPrototype;

player = new Entity();
player.name = playerName;
player.Atk = function () { return rn(0, 3); };
player.Def = 1;


enemy = new Entity();
enemy.name = 'enemy';
enemy.Atk = 3;
enemy.Def = 2;

var hi = function() {
  var healthLevelBar = document.getElementById('playerHealthLevel');
  healthLevelBar.style.width = player.HP*10 + "%";
  
  var healthLevelBar2 = document.getElementById('playerManaLevel');
  healthLevelBar2.style.width = player.Mana*10 + "%";

  var healthLevelBar1 = document.getElementById('enemyHealthLevel');
  healthLevelBar1.style.width = enemy.HP*10 + "%";
}
hi();

// PLAYER CONTROLLS


// ATTACKING
var playerAttack = function(){
  var atkSum = player.Atk - enemy.Def,
  remainingHP = enemy.HP - atkSum;
  enemy.HP = remainingHP;
  if (enemy.HP<1){
    alert("He's dead Jim!");
  }
  hi();
};
Radek9
Profil
FAKTOR2:
To číslo se má generovat vždy, nebo jen jednou na začátku? Pokud vždy, tak použij moje řešení, ale v tom případě je Atk metoda a musíš ji volat:

var atkSum = player.Atk() - enemy.Def,
FAKTOR2
Profil
Neviem čo stým je. Nemáš skype ? Poslal by som ti to aj celé ak by si bol ochotný sa na to pozrieť.

function Entity () {
}

function rn(min,max)
{
    return Math.floor(Math.random()*(max-min+1)+min);
}

Entity.prototype = entityPrototype;

player = new Entity();
player.name = playerName;
player.Atk = function () { return rn(0, 3); };
player.Def = 1;


enemy = new Entity();
enemy.name = 'enemy';
enemy.Atk = 3;
enemy.Def = 2;

var hi = function() {
  var healthLevelBar = document.getElementById('playerHealthLevel');
  healthLevelBar.style.width = player.HP*10 + "%";
  
  var healthLevelBar2 = document.getElementById('playerManaLevel');
  healthLevelBar2.style.width = player.Mana*10 + "%";

  var healthLevelBar1 = document.getElementById('enemyHealthLevel');
  healthLevelBar1.style.width = enemy.HP*10 + "%";
}
hi();

// PLAYER CONTROLLS


// ATTACKING
var playerAttack = function(){
  var atkSum = player.Atk() - enemy.Def,
  remainingHP = enemy.HP - atkSum;
  enemy.HP = remainingHP;
  if (enemy.HP<1){
    alert("He's dead Jim!");
  }
  hi();
};
Kubo2
Profil
FAKTOR2:
Nemáš skype ?
Viď pravidlá diskusie, najmä teda [#R.VII]: „Ak je verejný dotaz, má byť verejne dostupná aj odpoveď“.
A z typografického hľadiska ťa dôrazne upozorňujem, že pred otáznikom sa nepíše medzera.
Moderátor Chamurappi: A příspěvky by měly být aspoň trochu k tématu… ne jako tento.
FAKTOR2
Profil
Na koniec to funguje.
pcmanik
Profil
FAKTOR2:
A aký máš teda ten výsledný kód? To začalo fungovať len tak?
FAKTOR2
Profil
Len tak samozrejme nie
function rn(min,max)
{
    return Math.floor(Math.random()*(max-min+1)+min);
}

Entity.prototype = entityPrototype;

player = new Entity();
player.name = playerName;
player.Atk = function () { return rn(0,3); };
player.Def = 1;
player.h = player.HP/10;


enemy = new Entity();
enemy.name = 'enemy';
enemy.Atk = function () { return rn(0,3); };;
enemy.Def = 1;
enemy.h = enemy.HP/10;
var hi = function() {
  var healthLevelBar = document.getElementById('playerHealthLevel');
  healthLevelBar.style.width = player.HP*10/player.h + "%";
  healthLevelBar = document.getElementById('playerHealthLevel').innerHTML = Math.round(player.HP*10/player.h) + "%";
  
  var healthLevelBar2 = document.getElementById('playerManaLevel');
  healthLevelBar2.style.width = player.Mana*10 + "%";

  var healthLevelBar1 = document.getElementById('enemyHealthLevel');
  healthLevelBar1.style.width = enemy.HP*10/enemy.h + "%";
  healthLevelBar1 = document.getElementById('enemyHealthLevel').innerHTML = Math.round(enemy.HP*10/enemy.h) + "%";;
}
hi();

// PLAYER CONTROLLS


// ATTACKING
var playerAttack = function(){
  var atkSum = player.Atk() - enemy.Def,
 
  remainingHP = enemy.HP - atkSum; 
  enemy.HP = remainingHP;
v skripte som ešte zmazal túto časť:
var playerAttacks = function(){
  var luck = Math.random();
  console.log(luck);

  if (luck>0.9) {
    alert("your lucky have + 3 attack");
    var luckyShot = player.Atk + 3;
    player.Atk = luckyShot;
    playerAttack();
    var reversion = player.Atk - 3;
    player.Atk = reversion;
    hi();
  } else {
    playerAttack();
    hi();
  }

  if (luck<0.1) {
    alert("Back luck son, you tripped on a shoelace and lost some health!");
    badLuck = player.HP - 3;
    player.HP = badLuck;
    hi();
  }

  return console.log("Enemy Health " + enemy.HP);
  hi();
};



Aj ked teraz by som tam potreboval dosadiť podmienku. Preto že ak playerAtk() = 0 potom napr. atkSum = 0-2 = -2
teda remainingHP= enemy.hp - - 2 = +2

var atkSum = player.Atk() - enemy.Def,
 
  remainingHP = enemy.HP - atkSum; 
Radek9
Profil
FAKTOR2:
Na to stačí prostě použít Math.max. V případě záporné hodnoty to vybere nulu:

var atkSum = Math.max(player.Atk() - enemy.Def, 0),
 
  remainingHP = enemy.HP - atkSum; 
Joker
Profil
Poznámka k [#12]:
Shodou okolností je o stejném problému zmínka i tady, se stejným navrženým řešením.
FAKTOR2
Profil
Vďaka chlapi , takto sa zrejme naučím aj ďalšiemu programovaciemu jazyku.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0