Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите господа!!!сам не допру никак)) (https://javascript.ru/forum/misc/23315-pomogite-gospoda-sam-ne-dopru-nikak.html)

dimidrol 20.11.2011 00:46

Помогите господа!!!сам не допру никак))
 
вот пишу крестикиНолики. Как мне взять(например) "td"[2] и проверить какой из рисунков в нем находиться??? помогите новичку плиз)))
Код:

<BODY>
        <table><tbody>
                <tr> <td></td><td></td><td></td> </tr>
                <tr> <td></td><td></td><td></td> </tr>
                <tr> <td></td><td></td><td></td> </tr>
        </tbody></table>
       
<script language="javascript">
        var O=new Image()
        O.src ="zero.png";
        var X=new Image()
        X.src ="dagger.png"; 
 
  function ticTacToe(){
    var cells = document.getElementsByTagName("td");
    var last = O;
    for (var i =0; i <= 8; i++){
      var cell = cells[i];
      cell.onclick = function (x){
	return function(){
	  if (cells[x].innerHTML==""){
	    if (last==X){
	      this.appendChild(O.cloneNode(false) );
	    }
	    else{
	      this.appendChild(X.cloneNode(false) );
	    }
	  last=last==X ? O : X;
	 }
	 else {
	  alert ("клетка заполнена");
	 }
	}
      }(i);
    }
  }
ticTacToe() 
</script>

</BODY>


Ultimatum 20.11.2011 00:53

Не стал читать Ваш код, так как не читабелен.

Вы матрицу себе представляете что это такое, ну или массив. В данном случае у вас должен быть массив, скажем
var table = [
[id1,id2,id3]
[id4,id5,id6]
[id7,id8,id9]
];

Его даже можно сделать одномерным. И считывать что находиться в нём.

dimidrol 20.11.2011 01:18

Цитата:

Сообщение от Ultimatum (Сообщение 137739)
Не стал читать Ваш код, так как не читабелен.

Вы матрицу себе представляете что это такое, ну или массив. В данном случае у вас должен быть массив, скажем
var table = [
[id1,id2,id3]
[id4,id5,id6]
[id7,id8,id9]
];

Его даже можно сделать одномерным. И считывать что находиться в нём.

вот, исправил!я понимаю что такое матрица, но мне немного сложно вас понять
мне просто добавить var table, а вместо id1, id2...поставить идентификатор td? А как потом считывать?

ksa 20.11.2011 15:39

Интересно будет последить как гражданин, который сам не умеет работать с массивами (Ultimatum), будет учить как нужно работать с массивами.

Ultimatum, пивом и чипсами я запасся... Т.ч. готов внимать твоему гению. :yes:

dimidrol 20.11.2011 16:27

Цитата:

Сообщение от ksa;137812

[b
Ultimatum[/b], пивом и чипсами я запасся... Т.ч. готов внимать твоему гению. :yes:

))та блин, помоги лучше!!!:cray:

trikadin 20.11.2011 17:01

Цитата:

Сообщение от dimidrol
))та блин, помоги лучше!!!

Согласен. Он же не виноват, что тут есть Ultimatum. :D

А вообще, dimidrol, в вашем коде много плохого. Например, в результате O.cloneNode(true) (кстати, зачем true, если у картинки O нет детей, которые надо копировать?) каждый раз создаётся новый элемент с таким же id. Т. е. у вас на странице id теряет своё основное св-во - уникальность. Дальше: вам совершенно необязательно через замыкания сохранять номер элемента - можно через this обратиться к нему:
<div id="el" style="width: 100px; height: 100px; background: red"></div>
<script>
document.getElementById("el").onclick= function(){
 alert(this.style.background); // и вовсе необязательно обработчику знать, каким по счёту на странице является этот див))
};
</script>

P. S. Как поправите это - публикуйте код, продолжим разбор ошибок дальше.
P. P. S. И уберите это бешеное количество отступов - бесит. Вполне достаточно одного-двух пробелов или символа табуляции.

ksa 20.11.2011 18:28

Цитата:

Сообщение от dimidrol
помоги лучше

Извини, но тут есть спец который получает 80т.р (означеный Ultimatum)!
Мне просто до жути интересно, как решит такую задачку гражданин, который еще не овладел навыком поиска элемента в массиве...

Да и задачу ты в корне неправильно начал делать. Лучше сразу такое выкинуть. Ну если только табличку пустую оставить... :)

dimidrol 22.11.2011 14:54

<table><tbody>
<tr> <td id="a"></td><td id="b"></td><td id="c"></td> </tr>
<tr> <td id="d"></td><td id="e"></td><td id="f"></td> </tr>
<tr> <td id="g"></td><td id="h"></td><td id="i"></td> </tr>
</tbody></table>


<script>
		var O=new Image()
		O.src ="zero.png";
		var X=new Image()
		X.src ="dagger.png"; 
	function ticTacToe(){
		var cells = document.getElementsByTagName("td");
		var last = O;
		for (var i =0; i <= 8; i++){
			var cell = cells[i];
			cell.onclick = function (){
					if (this.innerHTML==""){
						if (last==X){
							this.appendChild(O.cloneNode(false));
						}
						else{
							this.appendChild(X.cloneNode(false));
						}
						last=last==X ? O : X;
					}
					else {
						alert ("клетка заполнена");
					}
			};
		}
	}
	ticTacToe()	
</script>


Но я не понимаю что мне использовать вместо метода O.cloneNode(false), у меня же всего два рисунка, innerHTML удаляет прошлый!

ksa 23.11.2011 10:53

Цитата:

Сообщение от dimidrol
Но я не понимаю что мне использовать ...

Даю намёк... ;)

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
#playing td {
	width: 30px;
	height: 30px;
}
.player0 {
	background: url('http://javascript.ru/forum/images/smilies/blink.gif') no-repeat center;
}
.player1 {
	background: url('http://javascript.ru/forum/images/smilies/laugh.gif') no-repeat center;
}
</style>
<script type="text/javascript">
player=0;
$(document).ready(function (){
	$('#playing td').click(function (){
		if (this.className!='') {
			return false;
		};
		this.className='player'+player;
		player=(player+1)%2;
	});
});
</script>
</head>
<body>
<table border='1'>
<tbody id='playing'>
<tr>
	<td></td><td></td><td></td>
</tr>
<tr>
	<td></td><td></td><td></td>
</tr>
<tr>
	<td></td><td></td><td></td>
</tr>
</tbody>
</table>
</body>
</html>

dimidrol 27.11.2011 15:19

вот, разобрался!Просто jquery ще не начинал(первый раз юзаю)! что дальше?
<script type="text/javascript">
		player=0;
		$(document).ready(function(){
			$(document).css("background").slideDown("slow");
			$("#game td").click(function(){
				if (this.className==""){
					this.className="player"+player;
					player = (player+1)%2;
				}
			})
		})
</script>


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