Exemple #1
0
        /// <summary>
        /// 將投票者加入名單並列入計票
        /// </summary>
        /// <param name="voter"></param>
        public void AddVoter(CommentVM voter)
        {
            _voterColle.Add(voter);
            this.Count = _voterColle.Count;

            //得票率需由投票中心(VotingCenterVM)計算後設定至Rate成員
        }
Exemple #2
0
        /// <summary>
        /// CommentLoader收到新留言處理函式
        /// </summary>
        /// <param name="sender">CommentLoader</param>
        /// <param name="lsComments">新留言</param>
        private void On_CommentLoader_CommentsReceive(CommentLoader sender, List <CommentData> lsComments)
        {
            if (lsComments != null)
            {
                foreach (CommentData cmt in lsComments)
                {
                    //將留言加入留言集合中
                    CommentVM vm = new CommentVM(cmt);
                    _commentColle.Add(vm);
                    this.TotalCommentCount = _commentColle.Count;

                    //紀錄留言者ID供人數統計
                    if (!_authorTable.ContainsKey(vm.AuthorID))
                    {
                        _authorTable.Add(vm.AuthorID, vm.AuthorName);
                        this.TotalAuthorCount = _authorTable.Keys.Count;
                    }

                    //將留言送至投票中心
                    if (_votingCenterVM != null)
                    {
                        _votingCenterVM.Vote(vm);
                    }

                    //將留言送至猜謎中心
                    if (_puzzleCenterVM != null)
                    {
                        _puzzleCenterVM.Guessing(vm);
                    }
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// 解析留言是否猜中答案
        /// </summary>
        /// <param name="vm">留言</param>
        /// <returns>若留言符合答案集合中任一答案則回傳True</returns>
        public bool Guessing(CommentVM vm)
        {
            //判斷猜謎是否已開始
            if (!this.IsStarted)
            {
                return(false);
            }

            //比對答案集合
            for (int i = 0; i < _ansColle.Count; i++)
            {
                PuzzleAnswerVM ans = _ansColle.ElementAt(i);
                if (String.Equals(ans.Answer, vm.Message))
                {
                    //判斷同一位留言者是否已經猜中,避免重複記名
                    if (!ans.IsNameExist(vm))
                    {
                        ans.AddName(vm);
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemple #4
0
 /// <summary>
 /// 將留言者加入記名名單中
 /// </summary>
 /// <param name="name">留言</param>
 public void AddName(CommentVM name)
 {
     _nameColle.Add(name);
     if (!_nameTable.ContainsKey(name.AuthorID))
     {
         _nameTable.Add(name.AuthorID, name);
     }
     this.IsHighLight = true;
 }
Exemple #5
0
        /// <summary>
        /// 新增至投票者滑動動畫佇列中等待開始滑動動畫
        /// </summary>
        /// <param name="vote">要顯示滑動動畫的投票</param>
        private void AddShowVoterColle(CommentVM vote)
        {
            SlideTextItemVM showVoter = new SlideTextItemVM();

            showVoter.Text           = vote.AuthorName;
            showVoter.SlideFinished += On_ShowVoter_SlideFinished;
            _showVoterQueue.Enqueue(showVoter);
            _showVoterQueueTimer.Start();
        }
        /// <summary>
        /// 新增至評分者滑動動畫佇列中等待開始滑動動畫
        /// </summary>
        /// <param name="rater">要顯示滑動動畫的評分</param>
        /// <param name="score">分數</param>
        private void AddShowRaterColle(CommentVM rater, int score)
        {
            SlideTextItemVM showRater = new SlideTextItemVM();

            showRater.Text           = rater.AuthorName + ": " + score.ToString();
            showRater.SlideFinished += On_ShowRater_SlideFinished;
            showRater.ShowTime       = 3 * 1000;
            _showRaterQueue.Enqueue(showRater);
            _showRaterQueueTimer.Start();
        }
 public void RemoveRate(CommentVM vm)
 {
     if (_raterColle.Remove(vm))
     {
         //int rateScore = 0;
         int rateScore = _raterScoreTable[vm.AuthorID];
         //if (Int32.TryParse(vm.Message, out rateScore))
         //{
         this.TotalScore  -= rateScore;
         this.RaterCount   = _raterColle.Count;
         this.AverageScore = Math.Round((double)this.TotalScore / this.RaterCount, 4);
         //}
     }
 }
        /// <summary>
        /// 解析留言是否為有效分數並進行評分
        /// </summary>
        /// <param name="vm">留言</param>
        /// <returns>若評分成功則回傳TRUE</returns>
        public bool Rate(CommentVM vm)
        {
            //判斷評分是否已開始
            if (!this.IsStarted)
            {
                return(false);
            }

            //int rateScore = _random.Next(50, 101);
            int rateScore = 0;

            if (Int32.TryParse(vm.Message, out rateScore))
            {
                if (rateScore >= this.MinScore &&
                    rateScore <= this.MaxScore)
                {
                    //判斷是否已評過分
                    if (_raterTable.ContainsKey(vm.AuthorID))
                    {
                        if (!this.CanChangeRate)
                        {
                            //不允許重新評分
                            return(false);
                        }
                        else
                        {
                            //允許重新評分
                            //移除舊分數
                            CommentVM oldRate = _raterTable[vm.AuthorID];
                            RemoveRate(oldRate);
                            _raterTable.Remove(vm.AuthorID);
                            _raterScoreTable.Remove(vm.AuthorID);
                        }
                    }

                    _raterScoreTable.Add(vm.AuthorID, rateScore);
                    _raterTable.Add(vm.AuthorID, vm);
                    _raterColle.Add(vm);
                    this.RaterCount   = _raterColle.Count;
                    this.TotalScore  += rateScore;
                    this.AverageScore = Math.Round((double)this.TotalScore / this.RaterCount, 4);
                    AddShowRaterColle(vm, rateScore);
                }
            }

            return(false);
        }
Exemple #9
0
        /// <summary>
        /// 解析留言是否為有效票並進行投票
        /// </summary>
        /// <param name="vm">留言</param>
        /// <returns>若投票成功則回傳True</returns>
        public bool Vote(CommentVM vm)
        {
            //判斷投票是否已開始
            if (!this.IsStarted)
            {
                return(false);
            }

            int voteNum = 0;

            if (Int32.TryParse(vm.Message, out voteNum))
            {
                //判斷是否已投過票
                if (_voterTable.ContainsKey(vm.AuthorID))
                {
                    return(false);
                }

                //計票
                bool isValidVote = false;
                foreach (VoteCandidateVM candidate in _voteCandidateColle)
                {
                    if (candidate.Num == voteNum)
                    {
                        _voterTable.Add(vm.AuthorID, vm);
                        _allVoteColle.Add(vm);
                        OnPropertyChanged(nameof(this.VoteCount));

                        candidate.AddVoter(vm);
                        candidate.Rate = Math.Round((double)candidate.Count / this.VoteCount, 4) * 100;
                        isValidVote    = true;
                    }
                }

                return(isValidVote);
            }

            return(false);
        }
Exemple #10
0
        /// <summary>
        /// 解析留言是否為有效票並進行投票
        /// </summary>
        /// <param name="vm">留言</param>
        /// <returns>若投票成功則回傳True</returns>
        public bool Vote(CommentVM vm)
        {
            //判斷投票是否已開始
            if (!this.IsStarted)
            {
                return(false);
            }

            int voteNum = 0;

            if (Int32.TryParse(vm.Message, out voteNum))
            {
                //判斷是否已投過票
                bool isVoted = _voterTable.IsVoted(vm.AuthorID);
                if (isVoted)
                {
                    if (!this.CanChangeVote)
                    {
                        //不允許換票
                        //判斷投票者是否已投滿票數
                        if (_voterTable.GetVoterCount(vm.AuthorID) >= this.MaxVoteCount)
                        {
                            return(false);
                        }
                    }
                    else if (this.CanChangeVote &&
                             this.MaxVoteCount == 1)
                    {
                        //允許換票,單票制
                        //移除舊票
                        Dictionary <CommentVM, VoteCandidateVM> tickets = _voterTable.GetVoterTicket(vm.AuthorID);
                        if (tickets != null)
                        {
                            VoteCandidateVM candidate = tickets.Values.ElementAt(0);
                            CommentVM       oldVote   = tickets.Keys.ElementAt(0);
                            candidate.RemoveVote(oldVote);
                            tickets.Remove(oldVote);
                            _allVoteColle.Remove(oldVote);
                        }
                    }
                    else if (this.CanChangeVote &&
                             this.MaxVoteCount > 1)
                    {
                        //允許換票,多票制
                    }
                }

                //計票
                bool isValidVote = false;
                foreach (VoteCandidateVM candidate in _voteCandidateColle)
                {
                    if (candidate.Num == voteNum)
                    {
                        _voterTable.Add(vm, candidate);
                        _allVoteColle.Add(vm);
                        OnPropertyChanged(nameof(this.VoteCount));

                        candidate.AddVoter(vm);
                        isValidVote = true;
                        break;
                    }
                }

                //計所有得票率
                if (isValidVote)
                {
                    foreach (VoteCandidateVM candidate in _voteCandidateColle)
                    {
                        candidate.Rate = Math.Round((double)candidate.Count / this.VoteCount, 4) * 100;
                    }
                }

                return(isValidVote);
            }

            return(false);
        }
Exemple #11
0
 /// <summary>
 /// 判斷留言者是否已存在
 /// </summary>
 /// <param name="name"></param>
 /// <returns></returns>
 public bool IsNameExist(CommentVM name)
 {
     return(_nameTable.ContainsKey(name.AuthorID));
 }
Exemple #12
0
 /// <summary>
 /// 從投票列表中移除投票
 /// </summary>
 /// <param name="vm">要移除的投票</param>
 public void RemoveVote(CommentVM vm)
 {
     _voterColle.Remove(vm);
     this.Count = _voterColle.Count;
 }