Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.07.2017, 19:57
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

перебор двухмерного массива n+1
Здравствуйте, есть такой код:
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
 #game {
	padding-left: 15px;
	padding-top: 15px;
	width: 220px;
	height: 220px;
	background: orangered;
}

.block {
	width: 70px;
	height: 70px;
	float: left;
	border: 1px solid white;
	box-sizing: border-box;
	line-height: 70px;
	text-align: center;
	font-size: 50px;
	text-transform: uppercase;
}
  </style>


</head>

<body>
<div id="game"></div>
 <script>
	var kvadratiki = [];
	pole();
	var i;
	var j;
	function pole() {
	for (var i=0; i<3; i++) {
		kvadratiki[i]=[];
		for (var j=0; j<3; j++) {
			kvadratiki[i][j] = document.getElementById('game').innerHTML+='<div class="block"></div>';
		};	
		
	};
};

var hod = 0;

	document.getElementById('game').onclick = function(event){
		console.log(event);
		if (event.target.className == 'block'){
			if (hod%2==0) {
				event.target.innerHTML = 'x';
			}
			else {
				event.target.innerHTML = '0';
			}
			hod++;
			checkWinner();
		}
	}
var n;
var m;

function checkWinner(){
		var block = document.getElementsByClassName('block');
		for (var n=0; n<i; n++) {
			for (var m=0; m<j; m++) {
				if (kvadratiki[n][m] == kvadratiki[n+1][m+1] && 'x') {
					alert('X WINS')
				} 
			}
		}
};
	
  </script>
</body>
</html>

Поле 3 на 3, при нажатии - ставится крестик или нолик, по правилам игры хочу сделать проверку, если в ряд, в столбик, или по диагонали крестики или нолики - выводить алерт. Допустим поле n-ное, оно может быть 3 на 3 или 100 на 100. Хочу сделать проверку.
К примеру поле 3 на 3, получается поле ij:
00 01 02
10 11 12
20 21 22 - вроде правильно обозначил,
не могу догнать как вытащить из этого массива на проверку элементы типа (по диагонали) - [0][0], [1][1], [2][2], получается здесь [i][j],[i+1][j+1] и так далее, беру в учет, если квадратов много.
ну и наподобие в ряд или столбик:
[i][j], [i][j+1]
[i][j], [i+1][j]

Последний раз редактировалось shoopik, 30.07.2017 в 20:33.
Ответить с цитированием
  #2 (permalink)  
Старый 31.07.2017, 01:08
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

var a = document.querySelectorAll('div').length // количество ячеек
var b = Math.sqrt(a); // количество строк или столбцов


можете эти значения получить уже из имеющихся у вас переменных

Последний раз редактировалось j0hnik, 31.07.2017 в 01:21.
Ответить с цитированием
  #3 (permalink)  
Старый 31.07.2017, 10:10
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

Сообщение от j0hnik Посмотреть сообщение
var a = document.querySelectorAll('div').length // количество ячеек
var b = Math.sqrt(a); // количество строк или столбцов


можете эти значения получить уже из имеющихся у вас переменных
спасибо, но как мне поставить алерт на все столбики, строки и диагонали
Ответить с цитированием
  #4 (permalink)  
Старый 31.07.2017, 11:03
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

правильно ли я обращаюсь к блокам ?
первый столбик допустим:
var block = document.getElementsByClassName('block');
if (block[0][0].innerHTML=='x' && block[1][0].innerHTML=='x' && block[2][0].innerHTML=='x') alert('Победили крестики');

но пишет что undefined
Ответить с цитированием
  #5 (permalink)  
Старый 31.07.2017, 15:47
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

все потому что к коллекции так не обращаются
var block = document.getElementsByClassName('block');
block[0][0] block[0]
block[0][1] block[1]
block[1][0] block[3]
block[2][2] block[8]
Это дня данного размера
Ответить с цитированием
  #6 (permalink)  
Старый 31.07.2017, 18:55
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

Сообщение от j0hnik Посмотреть сообщение
все потому что к коллекции так не обращаются
var block = document.getElementsByClassName('block');
block[0][0] block[0]
block[0][1] block[1]
block[1][0] block[3]
block[2][2] block[8]
Это дня данного размера
C блоками догнал уже Я хотел на подобие kvadratiki[i][j], получается в них записывается innerHTML = блок дива, но как попасть мне в то, что находится внутри дива через [i][j]. Ну к примеру kvadratiki[0][0].innerHTML= блок дива, я же не могу написать kvadratiki[0][0].innerHTML.innerHTML
Ответить с цитированием
  #7 (permalink)  
Старый 31.07.2017, 20:16
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

нужно для этого сначала создать такой массив
arr[a][b] = block[i];
потом можно будет обращаться как к многомерному массиву.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перебор массива объектов phoenix200689 Общие вопросы Javascript 5 27.07.2017 09:42
Перебор массива объектов JSON Sokoljr Общие вопросы Javascript 13 24.04.2017 13:59
Перебор массива - вложенный цикл SWin Общие вопросы Javascript 35 27.12.2013 05:06
Перебор массива объектов Триви jQuery 12 26.08.2011 09:22
Формирование двухмерного массива в javascript Neokortex Элементы интерфейса 9 24.03.2011 17:51