示例#1
0
    private void Awake()
    {
        if (!instance)
        {
            instance = this;
        }

        gm     = GameManager.instance;
        quizes = gm.GetQuiz();

        animals = new ArrayList();
        card    = new GameObject[10];
        answers = new int[10];
        for (int i = 0; i < card.Length; i++)
        {
            card[i] = GameObject.Find("select" + i);
        }

        foreach (GameObject gameObject in FindObjectsOfType(typeof(GameObject)))
        {
            if (gameObject.name.Contains("animal"))
            {
                animals.Add(gameObject);
                //Instantiate((GameObject)animals[j], card[i].transform.position, Quaternion.identity, card[i].transform);
            }
        }

        ResetItems();
    }
示例#2
0
        //Handle the Click event
        private void HandleClick()
        {
            txtQuestion = GameObject.Find("Question").GetComponent <Text>();
            GameManager gm = GameManager.instance;

            if (card == null)
            {
                card = CardChange.instance;
            }

            if (itemName.Equals("sphinx"))
            {
                AnswerScript answerScript = AnswerScript.instance;
                if (gm.CheckAnswer())
                {
                    GameObject.Find("SoundCorrect").GetComponent <AudioSource>().Play();
                    answerScript.correct.SetActive(true);
                    Invoke("CorrectAnswer", 2);
                }
                else
                {
                    GameObject.Find("SoundWrong").GetComponent <AudioSource>().Play();
                    answerScript.wrong.SetActive(true);
                    Invoke("WrongAnswer", 2);
                }
            }
            else
            {
                gm.AddText(itemName);
                //SphinxManager sphinx = new SphinxManager();
            }
        }
示例#3
0
    void MoveCards()
    {
        if (moveCardsIndexList.Count == 0)
        {
            canMove = true;
            return;
        }

        int totleScore = 0;

        for (int i = 0; i < moveCardsIndexList.Count; i++)
        {
            int froX  = moveCardsIndexList[i].fromIndexX;
            int froY  = moveCardsIndexList[i].fromIndexY;
            int toX   = moveCardsIndexList[i].toIndexX;
            int toY   = moveCardsIndexList[i].toIndexY;
            int crNum = moveCardsIndexList[i].createNum;

            if (crNum != 0)
            {
                DestroyCardItem(items[toX, toY]);
                CardChange change = new CardChange(-1, -1, -1, -1, toX, toY, toX, toY, crNum);
                destroyCardsIndexList.Add(change);
                createCardsIndexList.Add(change);
                totleScore += crNum;
            }

            switch (toX)
            {
            case 0:
                items[froX, froY].SetMoveValue(oneRowCards[toY].position);
                break;

            case 1:
                items[froX, froY].SetMoveValue(towRowCards[toY].position);
                break;

            case 2:
                items[froX, froY].SetMoveValue(thrRowCards[toY].position);
                break;

            case 3:
                items[froX, froY].SetMoveValue(forRowCards[toY].position);
                break;
            }

            items[toX, toY]   = items[froX, froY];
            items[froX, froY] = null;
        }
        //加分
        if (totleScore != 0)
        {
            ScoreController._instance.AddScore(totleScore);
        }
        moveCardsIndexList.Clear();
        StartCoroutine(TestNest());
    }
示例#4
0
        public void Add_card_change()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(1);

            change             = CardChange.MapCard(card);
            change.Description = "description change";
            change.Comment     = "test";
            change.UserId      = Guid.NewGuid();

            Guid newId = repository.AddCardChangeRequest(change);

            Assert.AreNotEqual(Guid.Empty, newId);
        }
示例#5
0
        public void Get_change_value()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change             = CardChange.MapCard(card);
            change.Comment     = "test";
            change.Description = "test";
            change.UserId      = Guid.NewGuid();

            Guid id = repository.AddCardChangeRequest(change);

            string value = change.GetFieldValue("description");

            Assert.AreEqual(value, "test");
        }
示例#6
0
        public void Get_card_change()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change             = CardChange.MapCard(card);
            change.Description = "1";
            change.Comment     = "test";
            change.UserId      = Guid.NewGuid();

            Guid id = repository.AddCardChangeRequest(change);

            change = repository.GetCardChangeRequest(id);

            Assert.AreEqual(id, change.Id);
        }
示例#7
0
        public void Get_card_changes()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change             = CardChange.MapCard(card);
            change.Comment     = "test";
            change.Description = "1";
            //change.UserId = Guid.NewGuid();

            repository.AddCardChangeRequest(change);

            CardChange[] changes = repository.GetCardChangeRequests(2);

            Assert.Greater(changes.Length, 0);
        }
示例#8
0
    //随机生成一个元素2
    public CardChange RedomCreateValue()
    {
        int row = Random.Range(0, 4);
        int col = Random.Range(0, 4);

        while (intValue[row, col] != 0)
        {
            row = Random.Range(0, 4);
            col = Random.Range(0, 4);
        }


        intValue[row, col] = Random.Range(0f, 1f) > 0.9f ? 4 : 2;

        CardChange cardChange = new CardChange(-1, -1, -1, -1, row, col, -1, -1, intValue[row, col]);

        //检查是否输了
        CheckLose();
        return(cardChange);
    }
示例#9
0
        public void Make_change_to_field()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change             = CardChange.MapCard(card);
            change.Comment     = "test";
            change.Description = Guid.NewGuid().ToString();
            change.UserId      = Guid.NewGuid();

            Guid id = repository.AddCardChangeRequest(change);

            string value = change.GetFieldValue("description");

            admin.UpdateCardField(mtgdbUser.AuthToken, change.Mvid, "description", value);

            card = mtgdb.GetCard(2);

            Assert.AreEqual(card.Description, change.Description);
        }
示例#10
0
        public void Make_change_to_field()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change = CardChange.MapCard(card);
            change.Comment = "test";
            change.Description = Guid.NewGuid().ToString();
            change.UserId = Guid.NewGuid();

            Guid id = repository.AddCardChangeRequest(change);

            string value = change.GetFieldValue("description");

            admin.UpdateCardField(mtgdbUser.AuthToken, change.Mvid, "description",value);

            card = mtgdb.GetCard(2);

            Assert.AreEqual(card.Description, change.Description );
        }
示例#11
0
        public void Update_change_status()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change = CardChange.MapCard(card);
            change.Comment = "test";
            change.Description = "lucky";
            change.UserId = Guid.NewGuid();

            Guid id = repository.AddCardChangeRequest(change);

            string value = change.GetFieldValue("description");

            admin.UpdateCardField(mtgdbUser.AuthToken, change.Mvid, "description",value);
            repository.UpdateCardChangeStatus(id, "Accepted", "description");

            change = repository.GetCardChangeRequest(id);

            Assert.AreEqual(change.Status, "Accepted" );
            Assert.Greater(change.ChangesCommitted.Length, 0);
        }
示例#12
0
        public void Update_setchange_status()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change             = CardChange.MapCard(card);
            change.Comment     = "test";
            change.Description = "lucky";
            change.UserId      = Guid.NewGuid();

            Guid id = repository.AddCardChangeRequest(change);

            string value = change.GetFieldValue("description");

            admin.UpdateCardField(mtgdbUser.AuthToken, change.Mvid, "description", value);
            repository.UpdateCardChangeStatus(id, "Accepted", "description");

            change = repository.GetCardChangeRequest(id);

            Assert.AreEqual(change.Status, "Accepted");
            Assert.Greater(change.ChangesCommitted.Length, 0);
        }
示例#13
0
    //Handle the Click event
    private void HandleClick()
    {
        txtQuestion = GameObject.Find("Question").GetComponent <Text>();
        GameManager    gm = GameManager.instance;
        TutorialScript ts = TutorialScript.instance;

        if (ts.isClicked)
        {
            if (card == null)
            {
                card = CardChange.instance;
            }

            if (itemName.Equals("sphinx"))
            {
                AnswerScript answerScript = AnswerScript.instance;

                bool     isAnswer = true;
                string[] arr      = gm.GetListItems();

                for (int i = 0; i < arr.Length; i++)
                {
                    if (!arr[i].Equals("penguin") && !arr[i].Equals("pheas") && !arr[i].Equals("crow"))
                    {
                        isAnswer = false;
                    }
                }

                if (isAnswer && arr.Length == 3)
                {
                    GameObject.Find("SoundCorrect").GetComponent <AudioSource>().Play();
                    answerScript.correct.SetActive(true);
                    Invoke("CorrectAnswer", 2);
                }
                else
                {
                    GameObject.Find("SoundWrong").GetComponent <AudioSource>().Play();
                    answerScript.wrong.SetActive(true);
                    Invoke("WrongAnswer", 2);
                }
            }
            else
            {
                gm.AddText(itemName);

                if (ts.num == 8)
                {
                    ts.ResumeScript();
                }
                else if (ts.num == 13 && gm.GetListCount() == 0)
                {
                    ts.ResumeScript();
                }
                else if (ts.num == 20)
                {
                    bool     isAnswer = true;
                    string[] arr      = gm.GetListItems();

                    for (int i = 0; i < arr.Length; i++)
                    {
                        if (!arr[i].Equals("penguin") && !arr[i].Equals("pheas") && !arr[i].Equals("crow"))
                        {
                            isAnswer = false;
                        }
                    }

                    if (isAnswer && arr.Length == 3)
                    {
                        ts.ResumeScript();
                    }
                }
            }
        }
    }
示例#14
0
        public void Add_card_change()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(1);

            change = CardChange.MapCard(card);
            change.Description = "description change";
            change.Comment = "test";
            change.UserId = Guid.NewGuid();

            Guid newId = repository.AddCardChangeRequest(change);

            Assert.AreNotEqual(Guid.Empty,newId);
        }
示例#15
0
        public void Get_card_changes()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change = CardChange.MapCard(card);
            change.Comment = "test";
            change.Description = "1";
            //change.UserId = Guid.NewGuid();

            repository.AddCardChangeRequest(change);

            CardChange[] changes = repository.GetCardChangeRequests(2);

            Assert.Greater(changes.Length, 0);
        }
示例#16
0
        public void Get_card_change()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change = CardChange.MapCard(card);
            change.Description = "1";
            change.Comment = "test";
            change.UserId = Guid.NewGuid();

            Guid id = repository.AddCardChangeRequest(change);

            change = repository.GetCardChangeRequest(id);

            Assert.AreEqual(id, change.Id );
        }
示例#17
0
        public void Get_change_value()
        {
            CardChange change = new CardChange();

            Card card = mtgdb.GetCard(2);

            change = CardChange.MapCard(card);
            change.Comment = "test";
            change.Description = "test";
            change.UserId = Guid.NewGuid();

            Guid id = repository.AddCardChangeRequest(change);

            string value = change.GetFieldValue("description");

            Assert.AreEqual(value, "test" );
        }
示例#18
0
        public CardModule ()
        {
            this.RequiresAuthentication ();

            Get["/cr/{status?}"] = parameters => {
                ChangeRequestModel model = new ChangeRequestModel();

                string status = (string)parameters.status;
                model.Planeswalker = (Planeswalker)this.Context.CurrentUser;
                model.Title = "M:tgDb.Info Admin";

                if(status == null)
                {
                    model.Changes = repository.GetChangeRequests().ToList();
                }
                else
                {
                    model.Changes = repository.GetChangeRequests(status).ToList();
                }

                return View["Change/ChangeRequests", model];
            };

            Get["/cards/{id}/logs"] = parameters => {
                CardLogsModel model =   new CardLogsModel();
                model.ActiveMenu =      "sets";
                model.Planeswalker =    (Planeswalker)this.Context.CurrentUser;
                model.Mvid =            (int)parameters.id;

                try
                {
                    model.Changes = repository.GetCardChangeRequests((int)parameters.id)
                    .OrderByDescending(x => x.Version) 
                    .ToList();
                }
                catch(Exception e)
                {
                    model.Errors.Add(e.Message);
                }

                return View["Change/CardLogs", model];
            };

            Get["/cards/{id}/logs/{logid}"] = parameters => {
                CardChange model = new CardChange();
            
                try
                {
                    model = repository.GetCardChangeRequest((Guid)parameters.logid);
                }
                catch(Exception e)
                {
                    model.Errors.Add(e.Message);
                }

                model.ActiveMenu =      "sets";
                model.Planeswalker =    (Planeswalker)this.Context.CurrentUser;
                model.Mvid =            (int)parameters.id;

               
                return View["Change/CardChange", model];
            };

            Post["/change/{id}/field/{field}"] = parameters => {
                Admin admin =               new Admin(ConfigurationManager.AppSettings.Get("api"));
                Planeswalker planeswalker = (Planeswalker)this.Context.CurrentUser;
                Guid changeId  =            Guid.Parse((string)parameters.id);
                string field =              (string)parameters.field;
                CardChange change =         null;

                if(!planeswalker.InRole("admin"))
                {
                    return HttpStatusCode.Unauthorized;
                }

                try
                {
                    change = repository.GetCardChangeRequest(changeId);

                    if(field == "close")
                    {
                        repository.UpdateCardChangeStatus(change.Id, "Closed");

                        return Response.AsRedirect(string.Format("/cards/{0}/logs/{1}",
                            change.Mvid, change.Id));
                    }

                    if(field == "open")
                    {
                        repository.UpdateCardChangeStatus(change.Id, "Pending");

                        return Response.AsRedirect(string.Format("/cards/{0}/logs/{1}",
                            change.Mvid, change.Id));
                    }


                    if(field == "formats")
                    {
                        admin.UpdateCardFormats(planeswalker.AuthToken,
                            change.Mvid, change.Formats);
                    }
                    else if(field == "rulings")
                    {
                        admin.UpdateCardRulings(planeswalker.AuthToken,
                            change.Mvid, change.Rulings);
                    }
                    else
                    {
                        string value = change.GetFieldValue(field);
                        admin.UpdateCardField(planeswalker.AuthToken,
                            change.Mvid, field, (string)value);
                    }

                    repository.UpdateCardChangeStatus(change.Id, "Accepted", field);
                }
                catch(Exception e)
                {
                    throw e;
                }
                    
                return Response.AsRedirect(string.Format("/cards/{0}/logs/{1}",
                    change.Mvid, change.Id));
            };
                
            Get ["/cards/{id}/change"] = parameters => {
                CardChange model = new CardChange();
                Card card; 

                try
                {
                    card = magicdb.GetCard((int)parameters.id);
                    model = CardChange.MapCard(card);
                }
                catch(Exception e)
                {
                    throw e;
                }


                return View["Change/Card", model];
            };

            Post ["/cards/{id}/change"] = parameters => {
                CardChange model =      this.Bind<CardChange>();
                Card current =          magicdb.GetCard((int)parameters.id);
                model.CardSetId =       current.CardSetId;
                model.CardSetName =     current.CardSetName;
                model.Name =            current.Name;
                model.Mvid =            (int)parameters.id;
                model.Rulings =         Bind.Rulings(Request);
                model.Formats =         Bind.Formats(Request);
                model.Planeswalker =    (Planeswalker)this.Context.CurrentUser;
                model.UserId =          model.Planeswalker.Id;
                CardChange card =       null;

                var result = this.Validate(model);

                if (!result.IsValid)
                {
                    model.Errors = ErrorUtility.GetValidationErrors(result);
                    return View["Change/Card", model];
                }
                    
                try
                {
                    card = repository.GetCardChangeRequest(
                        repository.AddCardChangeRequest(model)
                    );
                }
                catch(Exception e)
                {
                    model.Errors.Add(e.Message);
                    return View["Change/Card", model];
                }

                return Response.AsRedirect(string.Format("/cards/{0}/logs?v={1}", 
                    card.Mvid, card.Version));

                //return model.Description;
                //return View["Change/Card", model];

            };
                
            Post ["/cards/{id}/amount/{count}"] = parameters => {
                int multiverseId =  (int)parameters.id;
                int count =         (int)parameters.count;
                Guid walkerId =     ((Planeswalker)this.Context.CurrentUser).Id;
      
                repository.AddUserCard(walkerId,multiverseId,count);
               
                return count.ToString();
            };

            //TODO: Refactor this, to long and confusing 
            Get ["/pw/{planeswalker}/blocks/{block}/cards/{setId?}"] = parameters => {
                PlaneswalkerModel model =   new PlaneswalkerModel();
                model.ActiveMenu =          "mycards";
                string setId =              (string)parameters.setId;
                model.Block =               (string)parameters.block;
                model.Planeswalker =        (Planeswalker)this.Context.CurrentUser;

                if(model.Planeswalker.UserName.ToLower() != 
                    ((string)parameters.planeswalker).ToLower())
                {
                    model.Errors.Add(string.Format("Tsk Tsk! {0}, this profile is not yours.",
                        model.Planeswalker.UserName));

                    return View["Page", model];
                }

                try
                {
                    model.Counts = repository.GetSetCardCounts(model.Planeswalker.Id);

                    if(model.Counts == null || 
                        model.Counts.Count == 0)
                    {
                        return Response.AsRedirect("~/" + model.Planeswalker.UserName + 
                            "/cards");
                    }

                    model.TotalCards = model.Counts.Sum(x => x.Value);
                    model.TotalAmount = repository.GetUserCards(model.Planeswalker.Id).Sum(x => x.Amount);
                    
                    string[] blocks;

                    if(model.Counts.Count > 0)
                    {
                        model.Sets = magicdb.GetSets(model.Counts
                            .AsEnumerable().Select(x => x.Key)
                            .ToArray());

                        blocks = model.Sets.Select(x => x.Block).Distinct().OrderBy(x => x).ToArray();

                        foreach(string block in blocks)
                        {
                            CardSet[] sets = model.Sets.Where(x => x.Block == block).ToArray();
                        
                            int total = 0; 
                            foreach(CardSet set in sets)
                            {
                                total += model.Counts[set.Id];
                            }

                            model.Blocks.Add(block,total);
                        }

                        model.Sets = model.Sets
                            .Where(x => x.Block == model.Block)
                            .OrderBy(x => x.Name).ToArray();

                        if(model.Sets == null || model.Sets.Length == 0)
                        {
                            return Response.AsRedirect(string.Format("~/{0}/cards", 
                                model.Planeswalker.UserName));
                        }
                       

                        if(setId == null)
                        {
                            setId = model.Sets.FirstOrDefault().Id;
                        }

                        model.SetId = setId;
                        model.UserCards = repository.GetUserCards(model.Planeswalker.Id, setId);

                        if(model.UserCards == null || 
                            model.UserCards.Length  == 0)
                        {
                            return Response.AsRedirect(string.Format("~/{0}/cards", 
                                model.Planeswalker.UserName));
                        }


                        Card[] dbcards = null;
                        if(Request.Query.Show != null)
                        {
                            dbcards = magicdb.GetSetCards(model.SetId);
                            model.Show = true;
                        }
                        else
                        {
                            dbcards = magicdb.GetCards(model.UserCards
                                .AsEnumerable()
                                .Where(x => x.Amount > 0)
                                .Select(x => x.MultiverseId)
                                .ToArray());

                            model.Show = false;
                        }

                        if(dbcards == null || 
                            dbcards.Length == 0)
                        {
                            return Response.AsRedirect(string.Format("~/{0}/cards", 
                                model.Planeswalker.UserName));
                        }

                        List<CardInfo> cards = new List<CardInfo>();

                        CardInfo card = null;
                        foreach(Card c in dbcards)
                        {
                            card = new CardInfo();
                            card.Amount = model.UserCards
                                .AsEnumerable()
                                .Where(x => x.MultiverseId == c.Id)
                                .Select(x => x.Amount)
                                .FirstOrDefault();

                            card.Card = c;
                        
                            cards.Add(card);
                        }

                        model.Cards = cards.OrderBy(x => x.Card.SetNumber).ToArray();
                    }
                    else
                    {
                        model.Messages.Add("You have no cards in your library.");
                    }
                }
                catch(Exception e)
                {
                    model.Errors.Add(e.Message);
                }

                return View["MyCards", model];
            };

            Get ["/pw/{planeswalker}/cards"] = parameters => {
                PageModel model =       new PageModel();
                model.ActiveMenu =      "mycards";
                model.Planeswalker =    (Planeswalker)this.Context.CurrentUser;

                if(model.Planeswalker.UserName.ToLower() != 
                    ((string)parameters.planeswalker).ToLower())
                {
                    model.Errors.Add(string.Format("Tsk Tsk! {0}, this profile is not yours.",
                        model.Planeswalker.UserName));

                    return View["Page", model];
                }

                try
                {
                    string setId = repository.GetSetCardCounts(model.Planeswalker.Id)
                        .Select(x => x.Key)
                        .OrderBy(x => x).FirstOrDefault();

                    if(setId != null)
                    {
                        CardSet s = magicdb.GetSet(setId);
                      
                        return Response.AsRedirect(string.Format("/pw/{0}/blocks/{1}/cards",
                            model.Planeswalker.UserName, s.Block ));
                    }

                    model.Information.Add("You have no cards yet in your library. " +
                        "Browse the sets and start adding cards Planeswalker!");
                }
                catch(Exception e)
                {
                    model.Errors.Add(e.Message);
                }

                return View["Page", model];
            };
        }
示例#19
0
    public List <CardChange> MoveToButtom()
    {
        List <CardChange> changeList = new List <CardChange>();

        for (int i = 0; i < 4; i++)
        {
            for (int j = 3; j >= 0; j--)
            {
                CardChange change = new CardChange();
                if (j == 3)
                {
                    tabIndex = j;
                }
                else
                {
                    if (intValue[j, i] == 0)
                    {
                        continue;
                    }
                    else if (intValue[j, i] != 0 && intValue[tabIndex, i] == 0)
                    {
                        intValue[tabIndex, i] = intValue[j, i];
                        intValue[j, i]        = 0;

                        change.fromIndexX = j;
                        change.fromIndexY = i;
                        change.toIndexX   = tabIndex;
                        change.toIndexY   = i;
                        changeList.Add(change);
                    }
                    else if (intValue[j, i] != 0 && intValue[tabIndex, i] != 0 && intValue[j, i] != intValue[tabIndex, i])
                    {
                        intValue[tabIndex - 1, i] = intValue[j, i];
                        if (Mathf.Abs(j - tabIndex) > 1)
                        {
                            intValue[j, i] = 0;

                            change.fromIndexX = j;
                            change.fromIndexY = i;
                            change.toIndexX   = tabIndex - 1;
                            change.toIndexY   = i;
                            changeList.Add(change);
                        }
                        tabIndex--;
                    }
                    else if (intValue[j, i] != 0 && intValue[tabIndex, i] != 0 && intValue[j, i] == intValue[tabIndex, i])
                    {
                        intValue[tabIndex, i] *= 2;
                        intValue[j, i]         = 0;

                        change.fromIndexX = j;
                        change.fromIndexY = i;
                        change.toIndexX   = tabIndex;
                        change.toIndexY   = i;
                        change.createNum  = intValue[tabIndex, i];
                        changeList.Add(change);

                        tabIndex--;
                    }
                }
            }
        }
        return(changeList);
    }
示例#20
0
    public List <CardChange> MoveToLeft()
    {
        List <CardChange> changeList = new List <CardChange>();

        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                CardChange change = new CardChange();
                if (j == 0)
                {
                    tabIndex = j;
                }
                else
                {
                    if (intValue[i, j] == 0)
                    {
                        continue;
                    }
                    else if (intValue[i, j] != 0 && intValue[i, tabIndex] == 0)
                    {
                        intValue[i, tabIndex] = intValue[i, j];
                        intValue[i, j]        = 0;

                        change.fromIndexX = i;
                        change.fromIndexY = j;
                        change.toIndexX   = i;
                        change.toIndexY   = tabIndex;
                        changeList.Add(change);
                    }
                    else if (intValue[i, j] != 0 && intValue[i, tabIndex] != 0 && intValue[i, j] != intValue[i, tabIndex])
                    {
                        intValue[i, tabIndex + 1] = intValue[i, j];
                        if (Mathf.Abs(j - tabIndex) > 1)
                        {
                            intValue[i, j] = 0;

                            change.fromIndexX = i;
                            change.fromIndexY = j;
                            change.toIndexX   = i;
                            change.toIndexY   = tabIndex + 1;
                            changeList.Add(change);
                        }
                        tabIndex++;
                    }
                    else if (intValue[i, j] != 0 && intValue[i, tabIndex] != 0 && intValue[i, j] == intValue[i, tabIndex])
                    {
                        intValue[i, tabIndex] *= 2;
                        intValue[i, j]         = 0;

                        change.fromIndexX = i;
                        change.fromIndexY = j;
                        change.toIndexX   = i;
                        change.toIndexY   = tabIndex;
                        change.createNum  = intValue[i, tabIndex];
                        changeList.Add(change);

                        tabIndex++;
                    }
                }
            }
        }
        return(changeList);
    }
        public Guid AddCardChangeRequest(CardChange change)
        {
            MongoCollection<CardChange> collection = 
                database.GetCollection<CardChange> ("card_changes");

            List<CardChange> changes =  new List<CardChange>(); 
            Card card =                 magicdb.GetCard(change.Mvid);
            var query =                 Query.And(Query<CardChange>.EQ (e => e.Mvid, change.Mvid ));
            var mongoResults =          collection.Find(query);

            foreach(CardChange c in mongoResults)
            {
                changes.Add(c);
            }

            if(changes.Count == 0)
            {
                CardChange original =   CardChange.MapCard(card);
                original.Comment =      "Original card info";
                original.Id =           Guid.NewGuid();
                original.Version =      0;
                original.CreatedAt =    DateTime.Now;

                collection.Save(original);
            }

            change.Id =             Guid.NewGuid();
            change.Version =        changes.Count == 0 ? 1 : changes.Count;
            change.CreatedAt =      DateTime.Now;
            change.ModifiedAt =     DateTime.Now;
            change.FieldsUpdated  = CardChange.FieldsChanged(card, change);
            change.Status = "Pending";
            //change.ReleasedAt = change.ReleasedAt.ToShortDateString();

            if(change.FieldsUpdated == null ||
                change.FieldsUpdated.Length == 0)
            {
                throw new ArgumentException("No fields have been updated.");
            }

            try
            {
                collection.Save(change);
            }
            catch(Exception e)
            {
                change.Id = Guid.Empty;
                throw e; 
            }

            return change.Id;
        }