Задать вопрос
@gistol

Расчет рейтинга игрока в групповой таблице с помощью jquery?

Приветствую!
Прошу помощи с реализацией проекта.
Есть групповая таблица игроков размером 6 на 6. Каждый игрок играет друг с другом. Результаты встреч заносятся пользователем вручную.

Необходимо сделать, чтобы автоматически распределились места среди игроков (от 1 до 6) в зависимости от кол-ва побед и набранных очков.

Подскажите как это лучше реализовать?

5626f7d04e344db69b9ec6603d249ff2.png
  • Вопрос задан
  • 164 просмотра
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
@gistol Автор вопроса
Может кому пригодится мое решение:

function calculatewins(ThisValue, score, ParentTr, ParentTd) {
		var RateWithPointsArr = [];
		var winsarr = [];
		$(document).find('tr.bar').each(function() {
			var wins = new Array();
			var i = 0;
			var TR = $(this);
			var sum = 0;
			$(TR).find('td.score input').each(function() {
				var inputvalue = $(this).val();
				if ($(this).hasClass('win')) {
					wins[i] = [$(this).data('againstplayercell')];
					i++;
				}
				if (inputvalue > 0) {
					sum += parseFloat(inputvalue);
				}
			});
			TR.find('div.score').text(wins.length);
			TR.find('div.winplayers').text('выиграно: ' + wins.length + '; набрано очков: ' + sum);
			//$('<div>выиграно: '+wins.length+'; набрано очков: '+sum+'</div').insertAfter(TR.find('div.score'));
		});
		$(document).find('td div.score').each(function() {
			var parentTd = $(this).parent();
			var inputvalue = $(this).text();
			var tddataid = parentTd.data('id');
			if ($(parentTd).length > 0 && parseFloat(inputvalue) >= 0) {
				winsarr.push({parentTd: parentTd, wins: inputvalue});
				//winsarr.sort(sortByWins);
			}
			
		});
	
		var RateWithPointsArr = [];
		$(winsarr).each(function(i, j) {
			var datacelldataid = j.parentTd.data('id');
			var summ = 0;
			for (x = 1; x <= winsarr.length; x++) {
				var index = (x) % winsarr.length;
				if (j.parentTd != winsarr[index]['parentTd']) {
					if (j.wins == winsarr[index]['wins']) {
						var againstcell = winsarr[index]['parentTd'].parent().data('startposition');
						var PlayerScoreVSPlayersWithSameWins = j.parentTd.parent().find('td.score').find('input[data-againstplayercell=' + againstcell + ']').val();
						summ += +parseFloat(PlayerScoreVSPlayersWithSameWins);
					}

				}

			}
			RateWithPointsArr.push({id: datacelldataid, summ: summ, wins: j.wins, parentTd: j.parentTd});
		});
		
		//RateWithPointsArr.sort(sortByRate);
		
		$(RateWithPointsArr).each(function(i, j) {
			for (y = 1; y <= RateWithPointsArr.length; y++) {
				var index = (y) % RateWithPointsArr.length;
				if (j.id != RateWithPointsArr[index]['id']) {
					if (j.wins == RateWithPointsArr[index]['wins'] && j.summ == RateWithPointsArr[index]['summ']) {
						var thiscell = j.parentTd.parent().data('startposition');
						var againstcell = RateWithPointsArr[index]['parentTd'].parent().data('startposition');
						var againstplayerscore = winsarr[index]['parentTd'].parent().find('td.score').find('input[data-againstplayercell=' + thiscell + ']').val();
						var thisplayerscore = j.parentTd.parent().find('td.score').find('input[data-againstplayercell=' + againstcell + ']').val();
						//console.log('againstplayerscore' + againstplayerscore);
						//console.log('thisplayerscore' + thisplayerscore);
						if (thisplayerscore > againstplayerscore) {
							j.summ += +1;
							//console.log(j.id);
						}
					}

				}

			}
		});
		RateWithPointsArr.sort(function(a, b) {
			if (a.wins > b.wins) {
				return -1;
			}
			else if (a.wins < b.wins) {
				return 1;
			}
			else if (a.summ > b.summ) {
				return -1;
			}
			else if (a.summ < b.summ) {
				return 1;
			}
			else {
				return 0;
			}
		});
		$(RateWithPointsArr).each(function(i, j) {
			j.parentTd.find('div.place').text('место: '+(i + 1));
		});

		console.log(RateWithPointsArr);
	}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы