Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сравнение элементов массива по столбцам и диагоналям (https://javascript.ru/forum/misc/49718-sravnenie-ehlementov-massiva-po-stolbcam-i-diagonalyam.html)

ghost200607 26.08.2014 08:45

Сравнение элементов массива по столбцам и диагоналям
 
Доброго времени суток, пишу более сложную игру крестиков-ноликов, размерность задается пользователем, вводятся любые символы, где значения в строке или столбце или по диагоналям равны, то победа.
Реализовал универсальную проверку только по строкам, а по столбцам или диагоналям в голову больше ничего не лезет....

<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=cp-1251" />

</head>


<title> Game крестики-нолики ! </title>


<body>

<div align="center" style="margin-top: 100px">

<script type="text/javascript">

//создание

var n = prompt('введите размер крестиков ноликов, например 3', 3);


var mas = new Array(n); // строки
	for (var i=0; i<n; i++)
	mas[i] = new Array(n); // столбцы
	


//инициализация

var id_pole = 0; //счетчик id клеток
	for (var row=0; row<n; row++) {	
		for (var col=0; col<n; col++) {
		id_pole+=1;	
		mas[row][col] = '<input onkeyup="win();" type="text" id='+id_pole+' placeholder="value" style="width: 50px" />';
		if (col == n-1) mas[row][col] = '<input onkeyup="win();" type="text" id='+id_pole+' placeholder="value" style="width: 50px" />' + '<br>';
		document.write(mas[row][col]);
	}

}


function win() {	
	
	//получение значений с клеток

var id_pole2 = 0;
var check;

	for (row=0; row<n; row++) {
		for (col=0; col<n; col++) {			
		id_pole2+=1;
		mas[row][col] = document.getElementById(id_pole2).value;
						
	}	
		
}

  	for (row=0; row<n; row++) {
			check = 1;
			for (col=0; col<n; col++) {
				if (mas[row][0] != mas[row][col]) { check = 0 }; // проверка значений по строкам
				if (check == 1 && col == n-1 && mas[row][col] != '') { alert('Pobeda !!')};					
		

		}	
		
}

	
};

function clear_form() {
var id_pole3=0;
	for (row=0; row<n;row++) {		
		for (col=0; col<n; col++) {		
		id_pole3+=1;		
		mas[row][col] = document.getElementById(id_pole3).value='';
		}		
}	

};
</script>

</div>
<div align="center" style="margin-top: 20px">
<button OnClick="clear_form();">Clear</button>
</div>

</body>


</html>

ksa 26.08.2014 09:26

Цитата:

Сообщение от ghost200607
пишу более сложную игру крестиков-ноликов
...
Реализовал универсальную проверку только по строкам, а по столбцам или диагоналям в голову больше ничего не лезет....

Нормально ты начал писать... :D

skrudjmakdak 26.08.2014 09:33

ksa, а ты как будто великим сразу был? да с того же и начинал..

ksa 26.08.2014 09:39

Цитата:

Сообщение от skrudjmakdak
а ты как будто великим сразу был? да с того же и начинал..

Ты меня знаешь? С чего взял, что я даже в начале пути не мог написать "крестики-нолики"? :D
Это тренировочная игра на массивы и циклы. Вот и тренируйся... Какой смысл в тренировке, если ты ее сам не делаешь?

skrudjmakdak 26.08.2014 09:58

Цитата:

Сообщение от ksa (Сообщение 327477)
Ты меня знаешь? С чего взял, что я даже в начале пути не мог написать "крестики-нолики"? :D
Это тренировочная игра на массивы и циклы. Вот и тренируйся... Какой смысл в тренировке, если ты ее сам не делаешь?

тогда зачем вообще форумы? можнож дойти своим умом?? причем во всем, только вот беда во времени

skrudjmakdak 26.08.2014 10:04

ghost200607, вот тебе пример по столбцам, по диагоналям думай, если совсем будет туго, поможем с алгоритмом. но в каком то смысле ksa говорит верно, нужно самим думать как решить задачу
//проверка по столбцу
	for (j = 0; j < n; j++) //бежим по СТОЛБЦАМ 0-й столбец, 1-й столбец ...
		{
		num = mas[0][j]; //здесь будем хранить значение ячейки по j-му столбцу 0-й строчки
		if (num == '') //если значение пустое, не вводилось, то пропускаем один цикл
			continue;
		
		is = true; // хранит в себе результат о совпадении всех элементов, по умолчанию все значания ""как бы"" равны
		for (i = 1; i < n; i++) //пробегаем по строке на этом столбце, не берем нулевой элемент т.к. он записан в num
			{
			if (num != mas[i][j])//если значение num не совпадает со вторым, третьим или другим элементом то и проверять дальше нет смысла
				{
				is = false; //значения не равны
				break; //прерываем цикл
				}
			}
		
		if (is)
			{
			alert('победа');
			return;
			}
		}

ghost200607 26.08.2014 10:09

Спасибо, буду думать, но бывают моменты что "виснешь" и что делать дальше....

ksa 26.08.2014 10:16

Цитата:

Сообщение от skrudjmakdak
тогда зачем вообще форумы?

У всех свое понимание их существования... :D

skrudjmakdak 26.08.2014 10:20

Цитата:

Сообщение от ksa (Сообщение 327484)
У всех свое понимание их существования... :D

и я так полагаю, что для тебя форумы нах не нужны? точней для начинающих они не нужны, т.к. они смогут в любом вопросе найти свой ответ?

п.с. мож в оффтопике поговорим? ибо засоряем ветку

ksa 26.08.2014 10:22

Цитата:

Сообщение от skrudjmakdak
нужно самим думать как решить задачу

Если она тренировочная... ;)
Цитата:

Сообщение от skrudjmakdak
вот тебе пример по столбцам

По-мне так в корне неправильный подход к проверке...
Проверку нужно/можно "привязать" к собственно поставленному крестику/нолику... И считать те крестики/нолики "вокруг" поставленного значка...
От 0 до N бегать не стоит...


Часовой пояс GMT +3, время: 05:54.