[041]尼克 |
2016-09-12 17:50 |
enum CardType { Privilege = 1, Common }
interface Card { name: string; type: CardType; }
class Player { name: string; cards: Card[]; constructor(public playerName) { this.name = playerName; this.cards = []; } }
let cards: Array<Card> = [ { name: "杀手牌", type: CardType.Privilege }, { name: "狼人牌", type: CardType.Privilege }, { name: "狙击手牌", type: CardType.Privilege }, { name: "狙击手牌", type: CardType.Privilege }, { name: "束魂牌", type: CardType.Privilege }, { name: "束魂牌", type: CardType.Privilege }, { name: "巫医牌", type: CardType.Privilege }, { name: "巫医牌", type: CardType.Privilege }, { name: "防弹衣/狼毒牌", type: CardType.Privilege }, { name: "防弹衣/狼毒牌", type: CardType.Privilege }, { name: "禁锢/反狙击牌", type: CardType.Privilege }, { name: "禁锢/反狙击牌", type: CardType.Privilege }, { name: "绝杀/特赦牌", type: CardType.Privilege }, { name: "绝杀/特赦牌", type: CardType.Privilege }, { name: "诅咒/庇佑牌", type: CardType.Privilege }, { name: "诅咒/庇佑牌", type: CardType.Privilege }, { name: "纵火/圣人牌", type: CardType.Privilege }, { name: "纵火/圣人牌", type: CardType.Privilege }, { name: "保镖牌", type: CardType.Privilege }, { name: "保镖牌", type: CardType.Privilege }, { name: "保镖牌", type: CardType.Privilege }, { name: "阿米巴变形牌", type: CardType.Privilege }, { name: "阿米巴变形牌", type: CardType.Privilege }, { name: "阿米巴变形牌", type: CardType.Privilege }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common }, { name: "庶民牌", type: CardType.Common } ];
let players: Array<Player> = [ new Player("玩家1"), new Player("玩家2"), new Player("玩家3"), new Player("玩家4"), new Player("玩家5"), new Player("玩家6"), new Player("玩家7") ];
function hasCard(cardName: string, player: Player) { for (var i = player.cards.length - 1; i >= 0; i--) { if (player.cards[i].name == cardName) { return true; } } return false; }
function hasCardCount(cardName: string, player: Player) { let result = 0; for (var i = player.cards.length - 1; i >= 0; i--) { if (player.cards[i].name == cardName) { result++; } } return result; }
function doing(outCount: number) { let tempCards = []; let tempPlayers = []; for (var i = cards.length - 1; i >= 0; i--) { tempCards.push(cards[i]); } for (var i = players.length - 1; i >= 0; i--) { tempPlayers.push(players[i]); }
//决定弃牌 let out = []; for (var i = outCount - 1; i >= 0; i--) { let card = undefined; let cardId = undefined; do { cardId = Math.floor(Math.random() * tempCards.length); card = tempCards[cardId]; } while (card.name == "杀手牌" || card.name == "狼人牌"); out.push(card); tempCards.splice(cardId, 1); } console.log("【弃牌如下】"); for (var i = out.length - 1; i >= 0; i--) { console.log(out[i].name); }
//庶民牌 let waterCards = []; for (var i = tempCards.length - 1; i >= 0; i--) { if (tempCards[i].name == "庶民牌") { waterCards.push(tempCards[i]); tempCards.splice(i, 1); } }
for (var i = players.length - 1; i >= 0; i--) { players[i].cards.push(waterCards.pop()); }
while (waterCards.length > 0) { let playerId = Math.floor(Math.random() * tempPlayers.length); let player = tempPlayers[playerId]; if (hasCardCount("庶民牌", player) < 2) { player.cards.push(waterCards.pop()); } }
let currentPID = 0; for (; tempCards.length > 0;) { let cardId = Math.floor(Math.random() * tempCards.length); let card = tempCards[cardId]; let player: Player = tempPlayers[currentPID];
if (player.cards.length == 5) { currentPID ++; continue; }
if (card.name == "杀手牌") { if (hasCard("狼人牌", player)) { continue; } }
if (card.name == "狼人牌") { if (hasCard("杀手牌", player)) { continue; } }
if (card.name == "狙击手牌") { if (hasCard("狙击手牌", player)) { continue; } }
if (card.name == "束魂牌") { if (hasCard("束魂牌", player)) { continue; } }
if (card.name == "巫医牌") { if (hasCard("巫医牌", player)) { continue; } }
if (card.name == "防弹衣/狼毒牌") { if (hasCard("防弹衣/狼毒牌", player)) { continue; } }
if (card.name == "禁锢/反狙击牌") { if (hasCard("禁锢/反狙击牌", player)) { continue; } }
if (card.name == "绝杀/特赦牌") { if (hasCard("绝杀/特赦牌", player)) { continue; } }
if (card.name == "诅咒/庇佑牌") { if (hasCard("诅咒/庇佑牌", player)) { continue; } }
if (card.name == "纵火/圣人牌") { if (hasCard("纵火/圣人牌", player)) { continue; } }
if (card.name == "保镖牌") { if (hasCard("保镖牌", player)) { continue; } }
if (card.name == "阿米巴变形牌") { if (hasCard("阿米巴变形牌", player)) { continue; } }
player.cards.push(card); tempCards.splice(cardId, 1); currentPID++; if (currentPID == tempPlayers.length) { currentPID = 0; } }
return { out: out, players: tempPlayers }; }
let result = doing(1); for (var i = result.players.length - 1; i >= 0; i--) { document.body.innerHTML += "<h2>【" + result.players[i].name + "】</h2>"; for (var j = result.players[i].cards.length - 1; j >= 0; j--) { document.body.innerHTML += "<h3>" + result.players[i].cards[j].name + "</h3>"; } }
Quote:【玩家1】
束魂牌
巫医牌
保镖牌
庶民牌
庶民牌
【玩家2】
保镖牌
纵火/圣人牌
诅咒/庇佑牌
阿米巴变形牌
庶民牌
【玩家3】
阿米巴变形牌
保镖牌
禁锢/反狙击牌
庶民牌
庶民牌
【玩家4】
禁锢/反狙击牌
狙击手牌
防弹衣/狼毒牌
绝杀/特赦牌
庶民牌
【玩家5】
狼人牌
束魂牌
巫医牌
庶民牌
庶民牌
【玩家6】
杀手牌
阿米巴变形牌
诅咒/庇佑牌
防弹衣/狼毒牌
庶民牌
【玩家7】
纵火/圣人牌
狙击手牌
绝杀/特赦牌
庶民牌
庶民牌 |
|