npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

codeofwar

v6.0.0

Published

![fight](docs/fight.JPG)

Downloads

6

Readme

Code of war 2018

fight

Code of War 2018 is an AI programming game where you write a bot to conquer the galaxy, planet by planet. The rules are simple; each planet produces people per turn, and ships can be used to take over other planets from the enemy or neutral forces. It's inspired by Google Planetwars for those of you that are familiar with the game. Once you have written your bot, you submit it to the official site and it competes online against others from around the world!

Requirements

  • a git client
  • nodejs and npm https://nodejs.org/

Setup

  • Get the project and install dependencies
git clone https://github.com/damoebius/codeofwar.git
cd codeofwar & npm i
  • Build it
npm run build
  • Run the local server
npm start

Game Specification

This game takes place on a map which contains several planets, each of which has a population on it. Each planet may have a different population. The planets may belong to one of three different owners: you, your opponent, or neutral. The game has a certain maximum number of turns. At the time of this writing, the maximum number of turns on the official server is 500. Provided that neither player performs an invalid action, the player with the largest population at the end of the game wins. The game may also end earlier if one of the players loses all his planets, in which case the player that has planets remaining wins instantly. If both players have the same poulation when the game ends, it's a draw.

On each turn, the player may choose to send fleets of ships from any planet he owns to any other planet on the map. He may send as many fleets as he wishes on a single turn as long as he has enough people to supply them. After sending fleets, each planet owned by a player (not owned by neutral) will increase the forces there according to that planet's "growth" rate.The fleets will then take some number of turns to reach their destination planets, where they will then fight any opposing forces there and, if they win, take ownership of the planet. Fleets cannot be redirected during travel. Players may continue to send more fleets on later turns even while older fleets are in transit.

The Map

Maps are randomized with random planets number and size.

Planets

https://github.com/damoebius/codeofwar/blob/master/src/com/tamina/planetwars/data/Planet.hx

Planet positions are specified relative to a common origin in Euclidean space. The coordinates are given as floating point numbers. Planets never move and are never added or removed as the game progresses. Planets are not allowed to occupy the exact same position on the map.

The owner of a planet can be neutral, player 1, or player 2. The owner of a planet can change throughout the game. The population is given as an integer, and it may change throughout the game.

The growth rate of the planet is the number of people added to the planet after each turn. Planets have a population maxium number according to their size. https://github.com/damoebius/codeofwar/blob/master/src/com/tamina/planetwars/data/PlanetPopulation.hx

Each planet is also implicitly assigned an ID. A planet's ID will never change throughout the game.

Fleets

https://github.com/damoebius/codeofwar/blob/master/src/com/tamina/planetwars/data/Ship.hx

The source planet and destination planet are specified according to the planets' IDs as specified above.

The total trip length is given as an integer, representing the total number of turns required to make the trip from source to destination. The turns remaining is also an integer, representing the number of turns left from the current turn to arrive at the destination. Trip lengths are determined at the time of departure by taking the Euclidean distance to the destination from the source and rounding up.

Turns

The game engine performs the following steps repeatedly:

Send the game state to the players. Receive orders from both players.

Update the game state. Check for endgame conditions. There is an unspecified maximum turn limit. At the time of this writing, the maximum is 500 turns, but this may change. The intent is to have this number nailed down later in the contest period.

A turn is defined as the above four steps. They are performed up to 500 times and then the game stops. This means that the players receive the game state up to 500 times and send sets of orders up to 500 times.

Game State Update

After receiving complete lists of commands from the players, the engine then updates the game state, advancing the game to the next turn. This happens in three phases: departure, advancement, and arrival.

Departure

In this phase, the players' commands are carried out. This consists of creating new fleets and removing the appropriate numbers of people from each planet. Fleet trip lengths are determined by taking the Euclidean distance to the destination from the source and rounding up.

Advancement & Arrival

This phase advances fleets. Fleets are advanced by simply decrementing their "turns remaining" values.

Fleets whose "turns remaining" became zero tried a planet invasion. It does so by considering each destination planet at a time.

For each planet, consider its owner and ship count along with the owners and ship counts of each fleet. If Planet and ships owners are different the system remove as planet's people as ship's crew. If the crew is larger than the planet population, the attack is a success. The new planet population start with the remaining crew.

If Planet and ships owners are the same, the crew is added to the planet population without exeeded the maximum.

If there is more than one ship, the system resolve arrival randomly.

Endgame Conditions

The following conditions will cause the game to end:

  • The turn limit is reached (500). The winner is the player with the largest population, both on planets and in fleets. If both players have the same number of ships, it's a draw.
  • One player runs out of population entirely. The winner is the other player.
  • Both players run out of population at the same time. The game is a draw.
  • A bot issues a command with the same source and destination planet and forfeits the game.
  • A bot sends invalid data and forfeits the game.
  • A bot crashes and forfeits the game.
  • A bot exceeds the time limit (1000ms) without completing its orders (it never sends it's turn orders) and is disqualified. This is perhaps overly harsh, but is the way it currently works. It may change in the future to simply be a forfeit.
  • A bot attempts to do something that the tournament manager deems a security issue and is disqualified.

Create your AI

You just have to edit MyIA.hx, and do things in the getOrders function to return your turn Orders.

override public function getOrders(context:Galaxy):Array<Order> {
        var result:Array<Order> = new Array<Order>();
        //TODO Put your code here
        return result;
    }

Then you can compile it with :

npm run build:ai

And try it versus our basic AI on : http://localhost:8092/play.html

Publishing your AI online

npm run publish

Your IA will fight against all other published IA.

The tournament ranking is available here : http://qualif.codeofwar.net:8092/api/bots

You can also select two opponents and show their battle.

ranking