Nowondering
Nowondering

Reputation: 1

Javascript | Parsing error: unexpected token if

Before reading below, do note that I have only recently started learning Javascript.

I am interested in making a text-based survival game. When trying to subtract a random number of survivors from the whole, I attempted to write what I think is, "A raid happens if the number is 0.50 - 1.00, and if the raid is successful, the group loses a random number of survivors between 1, and however many survivors there are." However, when I write this, I get an ESLint error, stating: ERROR: Parsing error: Unexpected Token if I don't know how I would rewrite it, or how to reformat it to work, if it is at all possible. The issue is in the code below, on lines 10, 11, & 12.

//constants
var EVENT_CHANCE = 0.15;
var EVENT_TYPE = 0.50;
var FOOD_CONSUMPTION = FOOD_CONSUMPTION;
var MATERIALS_CONSUMPTION = 1;
var ENEMY_STRENGTH = 10;
var SURVIVOR_STRENGTH = 1;
//equations
this.FOOD_CONSUMPTION = (this.food - this.surviors);
this.raid = if ( EVENT_TYPE > 0.50);{
this.survivors - Math.floor((Math.random() * this.surviors) + 1);
};

Let me know if I left anything important out

Note: I copied this post from the game development stack exchange, because they had advised me it is more of a stack overflow question, as it relates more to JS as a whole, than game development.

Upvotes: 0

Views: 3305

Answers (2)

Aron
Aron

Reputation: 9258

  1. You have a semicolon after the condition
  2. To conditionally assign a variable you need to use the ternary operator, for example:

    const thing = condition ? ifTrue : ifFalse;
    

Or for your code:

this.raid = EVENT_TYPE > 0.50 ?
  this.survivors - Math.floor((Math.random() * this.surviors) + 1) :
  null;
//replace the null with what you want the variable to be if the condition is false

Upvotes: 1

T.J. Crowder
T.J. Crowder

Reputation: 1075309

You can't use a statement as the right-hand side of an assignment, which is what you're trying to do here:

this.raid = if ( EVENT_TYPE > 0.50);{
    this.survivors - Math.floor((Math.random() * this.surviors) + 1);
};

If you want to set this.raid to the result of EVENT_TYPE > 0.50, you just do that directly:

this.raid = EVENT_TYPE > 0.50;

If you then want to use that in a branch, you can follow it with the if testing this.raid:

this.raid = EVENT_TYPE > 0.50;
if (this.raid) {
    this.survivors - Math.floor((Math.random() * this.survivors) + 1);
}

(I also fixed a typo in that, the second survivors was missing a v. But there's still a problem I didn't know how to fix: It calculates a value without storing it anywhere. It's not an error in JavaScript, but it probably isn't what you wanted. You may have meant -= instead of -.)

Note that neither of the ; that were originally in that if belonged there. You don't put ; after the () in an if, and you don't put a ; after the block attached to a flow-control statement (if, while, etc.).

Upvotes: 0

Related Questions