public StackButton(Texture2D texture, Player p, SpriteBatch sBatch, Thing t, Tile hex, int width, int height, int x, int y) : base(texture, sBatch, width, height, x, y) { image = texture; thingsInStack = new List<Thing>(10); thingsInStack.Add(t); hexStackIsOn = hex; owner = p; }
public HexButton(Texture2D[] texture, SpriteBatch sBatch, int width, int height, int x, int y, Tile t, Texture2D[] forts) : base(texture, sBatch, width, height, x, y, t) { hex = t; hexNumber = hex.getHexNum(); backside = texture[0]; spriteB = sBatch; fortTexture = forts; stacks = new Dictionary<int, StackButton>(4); stacks[1] = null; stacks[2] = null; stacks[3] = null; stacks[4] = null; }
public void moveStack(Tile t) { hexStackIsOn = t; }
public void removeOwnedTile(Tile hex) { ownedTiles.Remove(hex); }
public void addOwnedTile(Tile hex) { ownedTiles.Add(hex); }
//hexes public Button(Texture2D[] texture, SpriteBatch sBatch, int width, int height, int x, int y, Tile t) { //_hex = t; //backside = texture[0]; //hexNumber = _hex.getHexNum(); switch (t.getType()) { case "Desert": image = texture[1]; break; case "Forest": image = texture[2]; break; case "Frozen Waste": image = texture[3]; break; case "Jungle": image = texture[4]; break; case "Mountain": image = texture[5]; break; case "Plains": image = texture[6]; break; case "Sea": image = texture[7]; break; case "Swamp": image = texture[8]; break; } location = new Rectangle(x, y, width, height); spriteBatch = sBatch; //buttonType = number; topleft = new Point(25 + x, 0 + y); midleft = new Point(0 + x, 50 + y); botleft = new Point(25 + x, 100 + y); topright = new Point(85 + x, 0 + y); midright = new Point(110 + x, 50 + y); botright = new Point(85 + x, 100 + y); middle = new Rectangle(topleft.X, topleft.Y, 60, 100); //needDice = false; }
public static StackButton createStack(Tile hex, Thing t, SpriteBatch s) { StackButton stackB = new StackButton(stackTexture, me, s, t, hex, 30, 30, 0, 0); StackButtons.Add(stackB); return stackB; }
public void resolveCombat(Tile t) { bool resolved = false; int attacker = 0; int defender = t.getPlayer().getPlayerNumber(); for (int i = 1; i < 5; i++) { if (i != defender) { if (t.doesPlayerHaveStack(i)) attacker = i; } } BattleForm combatF; List<Thing> attackerStack = t.getPlayerStack(attacker); List<Thing> defenderStack = t.getPlayerStack(defender); Random r = new Random(); int attackerRolls = 0; int defenderRolls = 0; foreach (Thing aThing in attackerStack) { if (aThing.combatScore() <= r.Next(1, 7)) attackerRolls++; } foreach (Thing aThing in defenderStack) { if (aThing.combatScore() <= r.Next(1, 7)) defenderRolls++; } combatF = new BattleForm(attackerStack, defenderStack, attackerRolls, defenderRolls, attacker, defender); DialogResult dResult = combatF.ShowDialog(); //Tile stack for attacker is refreshed this.hex.clearPlayerStack(attacker); foreach (Thing aThing in combatF.getAttackerStack()) this.hex.addToPlayerStack(attacker, aThing); KNT_Game.removeStack(stacks[attacker]); if (this.hex.doesPlayerHaveStack(attacker)) { stacks[attacker] = KNT_Game.createStack(this.hex, this.hex.getPlayerStack(attacker), spriteBatch); if (attacker == 1) stacks[attacker].Location(0 + topleft.X, 35 + topleft.Y); if (attacker == 2) stacks[attacker].Location(25 + topleft.X, 35 + topleft.Y); if (attacker == 3) stacks[attacker].Location(0 + topleft.X, 65 + topleft.Y); if (attacker == 4) stacks[attacker].Location(25 + topleft.X, 65 + topleft.Y); stacks[attacker].thingsInStack = this.hex.getPlayerStack(attacker); } //Tile stack for defender is refreshed this.hex.clearPlayerStack(defender); foreach (Thing aThing in combatF.getDefenderStack()) this.hex.addToPlayerStack(defender, aThing); KNT_Game.removeStack(stacks[defender]); if (this.hex.doesPlayerHaveStack(defender)) { stacks[defender] = KNT_Game.createStack(this.hex, this.hex.getPlayerStack(defender), spriteBatch); if (defender == 1) stacks[defender].Location(0 + topleft.X, 35 + topleft.Y); if (defender == 2) stacks[defender].Location(25 + topleft.X, 35 + topleft.Y); if (defender == 3) stacks[defender].Location(0 + topleft.X, 65 + topleft.Y); if (defender == 4) stacks[defender].Location(25 + topleft.X, 65 + topleft.Y); stacks[defender].thingsInStack = this.hex.getPlayerStack(defender); } if (!this.hex.doesPlayerHaveStack(attacker) || !this.hex.doesPlayerHaveStack(defender)) { resolved = true; this.hex.setCFlag(false); //CONQUER BY COMBAT if (this.hex.doesPlayerHaveStack(attacker)) { KNT_Game.deleteMarker(currentMarkerID); this.hex.getPlayer().removeOwnedTile(this.hex); this.hex.setPlayerControl(GameBoard.Game.getPlayerByNumber(attacker)); this.hex.setPlayerControlBool(true); GameBoard.Game.getPlayerByNumber(attacker).addOwnedTile(this.hex); int c = 0; foreach(Tile aTile in GameBoard.Game.getPlayerByNumber(attacker).getOwnedTiles()) { if (aTile.getFort() == 4) c++; } if (c == 2) { WinMessage wm = new WinMessage(KNT_Game.me.getName()); wm.Show(); } currentMarkerID = KNT_Game.createMarker(topleft, attacker, spriteB); } } if (dResult == DialogResult.OK && resolved == false) { resolveCombat(this.hex); } }