> For the complete documentation index, see [llms.txt](https://demirels-organization.gitbook.io/javascript-tutorial/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://demirels-organization.gitbook.io/javascript-tutorial/reducing-arrays-of-objects/third-person-shooter-example.md).

# Third Person Shooter Example

Imagine you are building a third-person shooter game, and you have an array of objects that represent the player's weapons. Each weapon object has the following properties:

* `name`: the name of the weapon
* `damage`: the base damage dealt by the weapon
* `accuracy`: a value between 0 and 1 representing the weapon's accuracy
* `ammo`: the number of rounds left in the weapon's magazine

You can use the `Array.prototype.reduce()` method to calculate the total damage dealt by all of the player's weapons that have ammo remaining.

Here is an example of how you could do this:

```javascript
const weapons = [
  { name: 'Pistol', damage: 20, accuracy: 0.8, ammo: 12 },
  { name: 'Rifle', damage: 30, accuracy: 0.7, ammo: 8 },
  { name: 'Sniper rifle', damage: 50, accuracy: 0.9, ammo: 5 },
  { name: 'Shotgun', damage: 40, accuracy: 0.6, ammo: 0 }
];

const totalDamage = weapons.reduce((accumulator, weapon) => {
  if (weapon.ammo > 0) {
    return accumulator + weapon.damage;
  }
  return accumulator;
}, 0);

console.log(totalDamage); // 100
```

In this example, the `reduce()` function is called on the `weapons` array with two arguments: a callback function and an initial accumulator value of `0`. The callback function has two arguments: `accumulator` and `weapon`.

On each iteration, the callback function checks if the current `weapon` has ammo remaining (`weapon.ammo > 0`). If it does, the callback function adds the `damage` property of the `weapon` object to the accumulator and returns the new value. If the `weapon` has no ammo remaining, the callback function simply returns the current value of the accumulator without modifying it. This process continues until all elements in the array have been processed, and the final value of `accumulator` is returned as the total damage dealt by all weapons with ammo remaining.
