/// <summary> /// 將投票者加入名單並列入計票 /// </summary> /// <param name="voter"></param> public void AddVoter(CommentVM voter) { _voterColle.Add(voter); this.Count = _voterColle.Count; //得票率需由投票中心(VotingCenterVM)計算後設定至Rate成員 }
/// <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); } } } }
/// <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); }
/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 判斷留言者是否已存在 /// </summary> /// <param name="name"></param> /// <returns></returns> public bool IsNameExist(CommentVM name) { return(_nameTable.ContainsKey(name.AuthorID)); }
/// <summary> /// 從投票列表中移除投票 /// </summary> /// <param name="vm">要移除的投票</param> public void RemoveVote(CommentVM vm) { _voterColle.Remove(vm); this.Count = _voterColle.Count; }