Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Buckshot Roulette Simulation; Author: LEGENDBOSS123
- // Write your strats below
- /* -------------------------------------------------------------------- */
- // bulletsLeft is the number of bullets left in the game.
- // loadedBulletsLeft is the number of loaded bullets left in the game.
- // started is a boolean representing if your player started the game.
- // Player 1 always goes first, if you want random starting order, set RANDOM_STARTING_ORDER to true.
- /* -------------------------------------------------------------------- */
- var player1Name = "Strat 1";
- var player2Name = "Strat 2";
- var strat1 = function (bulletsLeft, loadedBulletsLeft, started) {
- return SHOOT;
- }
- var strat2 = function (bulletsLeft, loadedBulletsLeft, started) {
- if (bulletsLeft % 2 == 0) {
- return CALL_BLANK;
- }
- return SHOOT;
- }
- const NUMBER_GAMES = 1_000_000;
- const SHOOT = 0;
- const CALL_BLANK = 1;
- const NUMBER_BULLETS = 5;
- const NUMBER_LOADED_BULLETS = 1;
- const RANDOM_STARTING_ORDER = false;
- /* --------------------------------------------------------------*/
- const Player = class {
- constructor(name, strategy) {
- this.name = name;
- this.strategy = strategy;
- this.wins = 0;
- this.lost = false;
- this.started = false;
- }
- }
- const player1 = new Player(player1Name, strat1);
- const player2 = new Player(player2Name, strat2);
- function fillLoadedBullets(bullets) {
- var loadedBulletsCount = 0;
- while (loadedBulletsCount < NUMBER_LOADED_BULLETS) {
- var bulletIndex = Math.floor(Math.random() * NUMBER_BULLETS);
- if (bullets[bulletIndex] == 0) {
- bullets[bulletIndex] = 1;
- loadedBulletsCount++;
- }
- }
- }
- function getNextBullet(bullets) {
- return bullets.pop();
- }
- function playGame(players) {
- var gameOver = false;
- var currentPlayerIndex = Math.floor(Math.random() * players.length);
- if(!RANDOM_STARTING_ORDER) {
- currentPlayerIndex = 0;
- }
- var currentPlayer = players[currentPlayerIndex];
- var otherPlayer = players[(currentPlayerIndex + 1) % players.length];
- for (var p of players) {
- p.lost = false;
- }
- currentPlayer.started = true;
- otherPlayer.started = false;
- var bullets = Array(NUMBER_BULLETS).fill(0);
- fillLoadedBullets(bullets);
- var loadedBulletsLeft = NUMBER_LOADED_BULLETS;
- var bulletsLeft = NUMBER_BULLETS;
- while (!gameOver) {
- var decision = currentPlayer.strategy(bulletsLeft, loadedBulletsLeft, currentPlayer.started);
- var bullet = getNextBullet(bullets);
- if (bullet == 1) {
- loadedBulletsLeft--;
- }
- bulletsLeft--;
- if (decision == SHOOT) {
- if (bullet == 1) {
- otherPlayer.lost = true;
- gameOver = true;
- currentPlayer.wins++;
- }
- else {
- var temp = currentPlayer;
- currentPlayer = otherPlayer;
- otherPlayer = temp;
- }
- }
- else if (decision == CALL_BLANK) {
- if (bullet == 1) {
- currentPlayer.lost = true;
- gameOver = true;
- otherPlayer.wins++;
- }
- }
- }
- }
- for (var i = 0; i < NUMBER_GAMES; i++) {
- playGame([player1, player2]);
- }
- console.log("-- WINRATE --");
- console.log(player1.name + ": " + (player1.wins / NUMBER_GAMES * 100).toFixed(0) + "%");
- console.log(player2.name + ": " + (player2.wins / NUMBER_GAMES * 100).toFixed(0) + "%");
Advertisement
Add Comment
Please, Sign In to add comment