private static void Run(String pass, String serverIP, int serverPort, int version, String room = "", string cdb = "cards.cdb") { ProVersion = version; if (pass == "--") { pass = ""; } if (room == "[null]") { room = ""; } Console.WriteLine(pass + " " + serverIP + ":" + serverPort + " 0x" + version.ToString("x") + " room:" + room); Rand = new Random(); CardsManager.Init(cdb); DecksManager.Init(); // Start two clients and connect them to the same room. Which deck is gonna win? AIGameClient clientA = new AIGameClient(pass, serverIP, serverPort, room); clientA.Start(); while (clientA.Connection.IsConnected) { clientA.Tick(); Thread.Sleep(1); } //Thread.Sleep(3000); }
private void FillPlayedCards(CurrentGameDataViewModel model, List <CardPlayed> cardsPlayed, PlayerPosition playerPosition) { foreach (var cardPlayed in cardsPlayed) { var onScreenPosition = playerPosition.GetOnScreenPosition(cardPlayed.PlayerPosition); Card card = CardsManager.GetCardFromString(cardPlayed.CardString); switch (onScreenPosition) { case PlayerPosition.Up: model.UpCard = card.ImgPath; break; case PlayerPosition.Left: model.LeftCard = card.ImgPath; break; case PlayerPosition.Right: model.RightCard = card.ImgPath; break; case PlayerPosition.Down: model.DownCard = card.ImgPath; break; } } }
public void PickACardTest2() { int pickTimes = -2; int ecpectedCardsAmount = pickTimes; Game targetGame = new Game(); int playerButton = 1; for (int i = 0; i < pickTimes; i++) { targetGame.PickACard(playerButton); } int actualCardslAmount = 0; CardsManager theManager = targetGame.cardManager1; CardsFactory theFactory = targetGame.cardFactory1; if (pickTimes <= 0) { ecpectedCardsAmount = 0; } else if (pickTimes < targetGame.cardManager1.cards.Count) { actualCardslAmount = theManager.cards.Count; } else if (pickTimes > theManager.cards.Count && theFactory.cards.Count > 0) { ecpectedCardsAmount = 5; actualCardslAmount = theManager.cards.Count; } Assert.AreEqual(ecpectedCardsAmount, actualCardslAmount); }
public void showNewTableTest() { const string info1 = "怪兽名:诅咒之龙\r\n攻击力:500\r\n防守力:"; int info2 = 1; int cardsManager1Amount = 4; int cardsManager2Amount = 5; string expectedBoxesShowInfo = ""; BuiltExpectedBoxesShowInfo(ref expectedBoxesShowInfo, cardsManager1Amount, info1, info2); BuiltExpectedBoxesShowInfo(ref expectedBoxesShowInfo, cardsManager2Amount, info1, info2); Form1 target = new Form1(); // TODO: 初始化为适当的值 target.InitGame(); CardsManager cardManager1 = target.duelGame.cardManager1; CardsManager cardManager2 = target.duelGame.cardManager2; BuiltActualCardsInfo(cardManager1, cardsManager1Amount, info1, info2); BuiltActualCardsInfo(cardManager2, cardsManager2Amount, info1, info2); target.ShowNewTable(); string actualBoxesShowInfo = ""; BuiltActualBoxesShowInfo(ref actualBoxesShowInfo, cardManager1.cards, 0); BuiltActualBoxesShowInfo(ref actualBoxesShowInfo, cardManager2.cards, 15); Assert.AreEqual(expectedBoxesShowInfo, actualBoxesShowInfo); }
/// <summary> /// 洗牌:对局开始时由God为对阵双方洗牌(初始化双方的牌库) /// </summary> public void Shuffle() { int[] c = new int[num_of_cards]; for (int i = 0; i < num_of_cards; i++) { c[i] = i; } for (int i = 0; i < num_of_cards; i++) { int j = Random.Range(i, num_of_cards); int temp = c[i]; c[i] = c[j]; c[j] = temp; } Card FirstCard = new Card(CardsManager.GetInstance().CardsInGame[c[0]]); for (int i = 1; i < num_of_cards; i++) { Card TempCard = new Card(CardsManager.GetInstance().CardsInGame[c[i]]); // 重排数组后,顺序填充卡牌就可以了 times = 100; while (times-- >= 0) { CardStack.Push(new KeyValuePair <int, Card>(100 - times, TempCard)); } } }
public bool AddCard(CardData cardData, int packageId) { if (CardExists(cardData.Id)) { return(false); } string statement = $"INSERT INTO \"{Table}\" (id, name, damage, weakness, element, card_type, package_id) VALUES" + " (@id, @name, @damage, @weakness, @element, @card_type, @package_id)"; string cardType = CardsManager.ExtractCardType(cardData.Name) == CardType.Spell ? "spell" : CardsManager.ExtractMonsterType(cardData.Name).ToString().ToLower(); int rowsAffected = database.ExecuteNonQuery( statement, new NpgsqlParameter <string>("id", cardData.Id), new NpgsqlParameter <string>("name", cardData.Name), new NpgsqlParameter <double>("damage", cardData.Damage), new NpgsqlParameter <double>("weakness", cardData.Weakness), new NpgsqlParameter <string>("element", CardsManager.ExtractElementType(cardData.Name).ToString().ToLower()), new NpgsqlParameter <string>("card_type", cardType), new NpgsqlParameter <int>("package_id", packageId) );; return(rowsAffected == 1); }
private PlayerPosition GetWiningCallPosition(Round round) { Call call = null; var orderedCalls = round.Calls.OrderByDescending(c => c.Type); var firstCall = orderedCalls.FirstOrDefault(); if (firstCall.Type == CallType.EightInARow || firstCall.Type == CallType.FourJacks || firstCall.Type == CallType.FourNines) { call = firstCall; } if (firstCall.Type == CallType.FourOfAKind) { call = orderedCalls .ThenBy(c => Array.IndexOf(CustomSorting.FourOfAKindSortOrder, CardsManager.GetCardFromString(c.HighestCard).Value)) .FirstOrDefault(); } if (firstCall.Type == CallType.SevenInARow || firstCall.Type == CallType.SixInARow || firstCall.Type == CallType.FiveInARow || firstCall.Type == CallType.FourInARow || firstCall.Type == CallType.ThreeInARow) { var maxValue = round.Calls.Select(c => c.Value).Max(); call = orderedCalls .Where(c => c.Value == maxValue) .OrderByDescending(c => CardsManager.GetCardFromString(c.HighestCard).Value) .ThenBy(c => Array.IndexOf(CustomSorting.GetPositionSortingOrderForCalls(round.FirstPlayerToPlay), c.PlayerPosition)) .FirstOrDefault(); } return(call.PlayerPosition); }
public void GetVariables() { cardManager = cardsManager.GetComponent <CardsManager>(); cards = new List <GameObject>(cardManager.Cards); winner = ""; if (GameObject.Find("CatManager") != null) { catManager = GameObject.Find("CatManager").GetComponent <CatManager>(); p1 = catManager.p1g; p2 = catManager.p2g; } else { p1 = GameObject.Find("Sausage"); p2 = GameObject.Find("Queso"); } // get floor if (GameObject.Find("StageManager") != null) { stageManager = GameObject.Find("StageManager").GetComponent <StageManager>(); floor = stageManager.currentStage; } p1s = p1.transform.localScale; p2s = p2.transform.localScale; floorScale = floor.transform.localScale; floorRotation = floor.transform.localRotation; floorPosition = floor.transform.localPosition; }
public static CardsManager GetInstance() //单例方法获取对象 { if (CM == null) { CM = new CardsManager(); } return(CM); }
public void TestFullDeck() { Deck deck = new Deck(2); deck.Add(CardsManager.RandomCard()); deck.Add(CardsManager.RandomCard()); Assert.Throws <DataException>(() => deck.Add(CardsManager.RandomCard())); }
private static UInt32 MyCardReader(UInt32 code, Card.CardData *pData) { Card card = CardsManager.GetCard((int)code); if (card != null) { *pData = card.Data; } return(code); }
void Start() { cardMan = gameObject.GetComponent <CardsManager>(); p1But.interactable = false; p2But.interactable = false; MainMenuScreen.SetActive(true); GameScreen.SetActive(false); GameOverScreen.SetActive(false); CamAnim.SetBool("GameStarted", false); }
private void CalculateResults() { int[] comboCount = new int[_combos.Count]; for (int i = 0; i < _reshuffleAmount; i++) { List <int> randomHand = Decklist.rand(_deckMain).GetRange(0, handSize); bool firstFound = true; for (int j = 0; j < _combosIds.Count; j++) { bool resultFound = false; List <int> combo = _combosIds[j]; if (ListComparer.ContainsAllItems(randomHand, combo)) { resultFound = true; comboCount[j]++; if (firstFound) { _globalCombosCount++; firstFound = false; } } List <Card> randomHandCard = new List <Card>(); foreach (var c in randomHand) { randomHandCard.Add(CardsManager.GetCard(c)); } logs.Add($"Hand number {i.ToString()} Combo number: {j.ToString()} Found combo: {resultFound} Combo: {string.Join(", ", _combos[j])} Hand: {string.Join(", ", randomHandCard)}"); } } for (int j = 0; j < _combosIds.Count; j++) { logs.Add($"\nResult for Combo{j.ToString()} is: {comboCount[j].ToString()}\n"); } for (int i = 0; i < _combos.Count; i++) { DisplayResults(_combos[i], comboCount[i]); } decimal percentage = GetPercentage(_globalCombosCount, _reshuffleAmount); amountLabel.Text = $"{_globalCombosCount.ToString()} out of {_reshuffleAmount} hands = {percentage.ToString()}%"; LastComboLogFileName = $"ComboLogs_{_deckName}_{DateTime.Now.ToString("yyyyMMddTHHmmss")}.txt"; try { if (!Directory.Exists(_logsFolder)) { Directory.CreateDirectory(_logsFolder); } File.WriteAllLines(Path.Combine(_logsFolder, LastComboLogFileName), logs); } catch { MessageBox.Show("The app experienced issues exporting logs into the folder.", "Error saving logs to the logs folder", MessageBoxButtons.OK, MessageBoxIcon.Error); } logs.Clear(); }
public async Task <Result> MakeACall(List <string> cardStrings, int roundId, int userId, bool isCall) { var result = Result.Success(); int highestCallValue = 0; PlayerPosition?winningCallPosition = null; Round round = await _gameRepository.GetRoundById(roundId); Player player = await _playerRepository.GetPlayerByUserIdAsync(userId); if (isCall) { if (cardStrings.Count > 2) { List <Card> cards = cardStrings.Select(cs => CardsManager.GetCardFromString(cs)).ToList(); List <Call> foundCalls = new List <Call>(); List <Card> fourOfAKindRemained = new List <Card>(); List <Card> sequenceRemained = new List <Card>(); FindFourOfAKindCalls(cards, player.PlayerPosition.Value, ref foundCalls, ref fourOfAKindRemained); FindSequenceCalls(cards, player.PlayerPosition.Value, ref foundCalls, ref sequenceRemained); if (!DoListsHaveMatchingCard(fourOfAKindRemained, sequenceRemained)) { round.Calls.AddRange(foundCalls); highestCallValue = foundCalls.OrderByDescending(c => c.Value).FirstOrDefault().Value; } else { return(Result.Fail(new string[] { "Nevažeće zvanje" })); } } else { return(Result.Fail(new string[] { "Nevažeće zvanje" })); } } round.CurrentPlayerToPlay = round.CurrentPlayerToPlay.GetNextPosition(); if (round.CurrentPlayerToPlay == round.FirstPlayerToPlay) { round.RoundPhase = round.RoundPhase.GetNextPhase(); if (round.Calls.Count > 0) { winningCallPosition = GetWiningCallPosition(round); await ResolveCalls(round, winningCallPosition.Value); } } result.Values = GetResultObjForCall(round, highestCallValue, winningCallPosition); if (await _gameRepository.SaveAsync()) { return(result); } return(Result.Fail(new string[] { "Dogodila se greška" })); }
/// <summary> /// 假装洗牌:对局开始时由God为对阵双方洗牌(初始化双方的牌库) /// </summary> public void Shuffle() { Card FirstCard = new Card(CardsManager.GetInstance().CardsInGame[7]); // 酸性沼泽怪 int times = 100; while (times-- >= 0) { CardStack.Push(new KeyValuePair <int, Card>(100 - times, FirstCard)); } }
private void Awake() { if (cardsManager == null) { cardsManager = this; } else if (cardsManager != this) { Destroy(gameObject); } }
private void Awake() { if (instance == null) { instance = this; } else { Destroy(this); } }
private void Awake() { if (_instance != null && _instance != this) { Destroy(this.gameObject); } else { _instance = this; } }
private bool ElementTypeForTradeIsOk(string offeredCardName, string requiredElementType) { if (requiredElementType.IsNullOrWhiteSpace() || requiredElementType.ToLower() == "any") { return(true); } ElementType offeredCardElementType = CardsManager.ExtractElementType(offeredCardName); ElementType requiredElement = CardsManager.ExtractElementType(requiredElementType); return(offeredCardElementType == requiredElement); }
private void ResolveTurn(Round round, Game game, bool isLastTurn) { var cardsPlayed = round.CardsPlayed.Where(cp => cp.RoundPhase == round.RoundPhase).ToList(); var sum = cardsPlayed.Sum(cp => cp.Value); var cards = cardsPlayed.Select(cp => CardsManager.GetCardFromString(cp.CardString)).ToList(); var strongestCard = GetStrongestCardInTurn(cards, round.CurrentTrump.Value); var winningPosition = round.CardsPlayed.Where(cp => strongestCard.ToString() == cp.CardString).FirstOrDefault().PlayerPosition; var playerThatWonTurn = game.PlayerGames.Where(pg => pg.Player.PlayerPosition == winningPosition).Select(pg => pg.Player).FirstOrDefault(); SetPointValuesInTurn(round, playerThatWonTurn.Team.Value, sum, isLastTurn); round.CurrentPlayerToPlay = winningPosition; }
private void Awake() { DontDestroyOnLoad(this); if (instance != null && instance != this) { Destroy(this.gameObject); } else { instance = this; } }
public Card(ElementType element, CardType cardType) { CardData data = CardsManager.RandomCardData(); ID = data.Id; Name = data.Name; Damage = data.Damage; Weakness = data.Weakness; ElementType = element; CardType = cardType; }
public void MakeDeck(CardData c1, CardData c2, CardData c3, CardData c4) { if (!Deck.Empty) { Deck.Clear(); } Deck.Add(CardsManager.Create(c1)); Deck.Add(CardsManager.Create(c2)); Deck.Add(CardsManager.Create(c3)); Deck.Add(CardsManager.Create(c4)); }
public void SetId(int id) { if (Id == id) { return; } Id = id; Data = CardsManager.GetCard(Id); if (Data != null) { Name = Data.Name; } }
private void BuiltActualCardsInfo(CardsManager owner, int cardsAmount, string info1, int info2) { owner.cards.Clear(); for (int i = 0; i < cardsAmount; i++) { info2++; Card builtedCard = new Card(); builtedCard.ChineseName = "诅咒之龙"; builtedCard.attack = "500"; builtedCard.defend = Convert.ToString(info2); owner.cards.Add(builtedCard); } }
/* * 初始化对阵信息 */ public void init() { red = GameObject.Find("PlayerRed"); yellow = GameObject.Find("PlayerYellow"); playerred = red.GetComponent <Player>(); redposcontainer = red.GetComponent <PosContainer>(); playerred.setPlayerObject(red); playeryellow = yellow.GetComponent <Player>(); yellowposcontainer = yellow.GetComponent <PosContainer>(); playeryellow.setPlayerObject(yellow); //UI设置 UI.set_player_HP(playerred.HP, playerred); UI.set_player_MP(playerred.MP, playerred); UI.set_player_Cardnum(playerred.CardsInHand.Count, playerred); UI.set_player_HP(playeryellow.HP, playeryellow); UI.set_player_MP(playeryellow.MP, playeryellow); UI.set_player_Cardnum(playeryellow.CardsInHand.Count, playeryellow); // 开局选边扩展点 Debug.Log("黄色方先手"); PlayerRound = 0; currentplayer = playeryellow; currentoponent = playerred; roundCount = 1; Debug.Log("第" + roundCount + "回合开始"); GameObject redcardslots = GameObject.Find("RedCardSlots"); Transform[] rcs = redcardslots.GetComponentsInChildren <Transform>(); GameObject yellowcardslots = GameObject.Find("YellowCardSlots"); Transform[] ycs = yellowcardslots.GetComponentsInChildren <Transform>(); for (int i = 0; i < rcs.Length; i++) { redposcontainer.CardsPos.Add(rcs[i].position); yellowposcontainer.CardsPos.Add(ycs[i].position); } CSVReader.GetInstance().loadFile(Application.dataPath + "/CardsConfigs", "卡组csv.csv"); // 读取存储卡牌描述的CSV文件 CardsManager.GetInstance().SetCardsData(CSVReader.GetInstance().arrayData); // 将读取到的数据传入卡牌管理器 CardsManager.GetInstance().InstansitateCards(); // 卡牌管理器根据读取的数据来实例化卡牌 currentplayer.Shuffle(); currentoponent.Shuffle(); currentplayer.DrawCard(); }
public static void Init(string path = ".", string scripts = "script", string cards = "cards.cdb") { PathManager.Init(path, scripts, cards); CardsManager.Init(cards); m_buffer = Marshal.AllocHGlobal(65536); m_creader = MyCardReader; m_sreader = MyScriptReader; m_msghandler = MyMessageHandler; set_card_reader(m_creader); set_script_reader(m_sreader); set_message_handler(m_msghandler); }
public void TestGetRandomCard() { Deck deck = new Deck(4); deck.Add(CardsManager.RandomMonster()); deck.Add(CardsManager.RandomSpell()); deck.Add(CardsManager.RandomMonster()); deck.Add(CardsManager.RandomSpell()); for (int i = 0; i < 10000; i++) { Assert.DoesNotThrow(() => deck.GetRandomCard()); } // test that GetRandomCard doesn't go out of boundaries }
public async Task <List <CardInHandModel> > GetCardHandModelListForPlayer(int userId, bool allCards, int trump) { List <CardInHandModel> listOfCards = new List <CardInHandModel>(); var player = await _playerRepository.GetPlayerByUserIdAsync(userId); if (string.IsNullOrEmpty(player.Hand)) { return(listOfCards); } var cards = CardsManager.GetCardListFromHandString(player.Hand); if (allCards) { cards = cards.OrderCards(); var trumpSuit = (CardSuit)trump; var belaAvailable = cards.Exists(c => c.Value == CardValue.King && c.Suit == trumpSuit) && cards.Exists(c => c.Value == CardValue.Queen && c.Suit == trumpSuit); var trumpSuitString = trumpSuit.GetStringValue(); listOfCards = cards .Select(c => new CardInHandModel() { CardString = c.ToString(), CardUrl = c.ImgPath, AskForBela = belaAvailable && c.Suit == trumpSuit && (c.Value == CardValue.Queen || c.Value == CardValue.King) }).ToList(); } else { var firstSix = cards.Take(6).ToList().OrderCards(); listOfCards = firstSix .Select(c => new CardInHandModel() { CardString = c.ToString(), CardUrl = c.ImgPath, AskForBela = false }).ToList(); listOfCards.Add(new CardInHandModel() { CardString = "", CardUrl = CardsManager.GetBackgroundCardImgPath() }); listOfCards.Add(new CardInHandModel() { CardString = "", CardUrl = CardsManager.GetBackgroundCardImgPath() }); } return(listOfCards); }
public void TestRemove() { Deck deck = new Deck(50); // test the equality operator for (int i = 0; i < 10000; i++) { Card card = CardsManager.RandomCard(); deck.Add(card); deck.Remove(card); Assert.IsTrue(deck.Empty); } }
public CardsCatalogViewModel(CardsManager cardsManager) { _cardsManager = cardsManager; }