JQuery Bilder austauschen

Ja, kann man alles machen. Das sind aber alles Dinge die nichts mit der allgemeinen Logik zu tun haben. Das sind kosmetische Dinge. Du könntest die Knöpfe auch animieren und weiß der Geier was machen lassen ^^

Am Anfang könntest du die Knöpfe zum drehen auch außerhalb der Spielfelder platzieren und sie einfach passend beschriften.
Deiner Kreativität sind nahezu keine Grenzen gesetzt. Einzig deiner Erfahrung 😉
 
joar ich setzte jetzt links neben das erste spielfeld 2 pfeile die die richtungen bestimmten .... beim zweiten feld setzte ich sie rechts und bei 3 und 4 so wie bei 1 und 2 ... dann muss ich für die pfeile auch ne onclick machen und dann wäre das mit der drehung dran, nichtwahr ?
 
hmm son paar darstellungsfehler habe ich ja noch ... wie schaffe ich das denn das die beiden pfeil bilder untereinandern sind und das spielfeld rechts daneben ??
 
Jou das stimmt schon irgendwo ^^ den großteil check ich auch schon, nur verstehe ich nicht warum er nach dem ersten pfeil alles leer lässt... beim 2ten pfeil ist das feld super dran ... bevor ich mich damit abhetzte, soll ich das ganze feld jetzt mal statisch erzeugen oder ist das zeitverschwendung ?
 
jou kommisch... iwi nixs geändert und dann gings ^^ .... ähhm sollte ich mich erst mit dem drehen beschäftigen oder erst mit der gewinnbedingung ... ?
 
Drehen fand ich recht einfach. Hab das zwischendurch auch nen wenig geschrieben. Kann meine Felder drehen. Spiellogik hab ich keine gemacht. Vielleicht später, wenn ich Langeweile hab.

Gewinnbedingung könntest du auch machen. Dafür würden sich Tests mit deiner finalen Methode am besten eignen. Du wirst ja so einige Fälle abbilden müssen.

//edit: Meine Felder werden auch generiert 😉
 
joar ich habs jetzt einfach mal spontan wieder dynamisch erstellt ... will mich denke ich auch erstmal ums drehen kümmern ... naja einfach ist immer relativ ^^ weiß noch nicht so genau wie ich das genau machen soll ^^
 
ja und bei mir will er die farbe einfach nicht ändern ... wie sprichst du denn deine generierten felder an ??? bzw. wie wechselst du die ???
 
Ich hol mir die, setze sie zurück, setze die neuen Positionen in einem Array und weise das danach zu.

HTML:
function feldDrehen(direction) {
	var tiles = $('#spielfeld_0').children();
	var states = [];
	var state = 0;
	var obj = null 
	
	// gather current states and relocate
	for (i=0, il=tiles.length; i<il; i++) {
		obj = $(tiles[i]);
		states[i] = obj.hasClass('playerOne') ? 1 : (obj.hasClass('playerTwo') ? 2 : 0);
		obj.removeClass('playerOne playerTwo');	
	}
	// rearrange and apply them - left is default behavior
	var tmp = null;
	if (direction == 1) {
		tmp = [	states[6], states[3], states[0],
		   	states[7], states[4], states[1],
		   	states[8], states[5], states[2]];
	} else {
		tmp = [	states[2], states[5], states[8],
		   	states[1], states[4], states[7],
		   	states[0], states[3], states[6]];
	}
	
	for (i=0, il=tiles.length; i<il; i++) {
		$(tiles[i]).addClass( tmp[i] == 1 ? 'playerOne' : (tmp[i] == 2 ? 'playerTwo' : '') );
	}	
}

Könnte man sicher noch eleganter lösen. Reichte mir aber ^^ Und sie funktioniert aktuell nur mit einem vorher festgelegten Feld. Hab das bisher nicht dynamisiert.
 
ich bin froh wenn ich überhaupt erstmal eine variante schaffe ...
Code:
if(aktiverSpieler%2==0){
			console.log('weiß ist dran');
			$('#spielfeld.'+feld).css('background-image', 'url(Image-fields/Weißes-Feld.PNG)');
		}

damit will ich die felder ändern ... geht aber nicht weißt du warum ?
 
Gibt es den Pfad "Image-fields/Weißes-Feld.PNG" ? Und wieso willst du das Spielfeld mit einem Hintergrund belegen. An sich musst du doch den Spielstein belegen...
 
das war das letzte ergebnis (also das spielfeld.stein1_1 (im feld steckt das gelickte feld drinne)) und jap das gibts ... wenn ich nur .stein ansspreche werden alle weiß ....
Code:
$('#spielfelder-drehen1').click(function(){
				feldfinden();
			if(feld =="pfeil-rechts"){
					alert("rechts");
				}
				else if(feld = "pfeil-links"){
					alert("links");
				}
				else{
					alert("gar nixs");
				}

			});
und kannst du mir sagen wieso er das falsch rum ausgbt ??? klick ich auf den rechts buttpn wird links ausgeben und umgedreht auch ....
 
Firebug hab ich schon 🙂 hiernochmal der komplette quellcode ....
Code:
$(document).ready(
		function() {
			
				$("#spielfelder-drehen1").append("<div id='pfeil-rechts' class='pfeil-rechts'></div>");
				$("#spielfelder-drehen1").append("<div id='pfeil-links' class='pfeil-links'></div>");
				$("#spielfelder-drehen2").append("<div id='pfeil-rechts' class='pfeil-rechts'></div>");
				$("#spielfelder-drehen2").append("<div id='pfeil-links' class='pfeil-links'></div>");
			
			for ( var i = 1; i <= 4; i++) {
				$("#spielfeld").append("<div id='quadrat_" + i + "' class='quadrat'></div>");

				for ( var x = 0; x < 9; x++) {
					if (x % 3 == 0) {
						$("#quadrat_" + i).append("<div id='stein_" + i + "_" + x + "' class='stein clearboth'></div>");
					}
					else {
						$("#quadrat_" + i).append("<div id='stein_" + i + "_" + x + "' class='stein'></div>");
					}
				}
			}
				$("#spielfelder-drehen3").append("<div id='pfeil-rechts' class='pfeil-rechts'></div>");
				$("#spielfelder-drehen3").append("<div id='pfeil-links' class='pfeil-links'></div>");
				$("#spielfelder-drehen4").append("<div id='pfeil-rechts' class='pfeil-rechts'></div>");
				$("#spielfelder-drehen4").append("<div id='pfeil-links' class='pfeil-links'></div>");
			
			
			
			
			
			$('#spielfeld').click(function() {
				feldfinden();
				  test();
			});
			$('#spielfelder-drehen1').click(function(){
				feldfinden();
			if(feld =="pfeil-rechts"){
					alert("rechts");
				}
				else if(feld = "pfeil-links"){
					alert("links");
				}
				else{
					alert("gar nixs");
				}
				
				
				
			});
		});

var aktiverSpieler = 0;

function test() {
	alert('test ' + aktiverSpieler);
	aktiverSpieler++;
	
		if(aktiverSpieler%2==0){
			console.log('weiß ist dran');
			$('.'+feld).css('background-image', 'url(Image-fields/Weißes-Feld.PNG)');
		}
		else {
			console.log('schwarz ist dran'+ feld);
		}
	
}
function feldfinden(){
	document.onclick = function(objEvt){
		  var objEvt = (window.event)? window.event: objEvt;
		  var objSrc = (objEvt.target)? objEvt.target : objEvt.srcElement;
		  console.log(objSrc.id);
		  feld = objSrc.id;
		  return feld;
		};

}
 
Da ist ja wieder deine seltsame Feldfinden() Funktion. Du sagtest doch selbst das ihr jQuery nutzen sollt. Wieso tust du das dann nicht?

Klick auf HTML Objekt -> $(this) <-- geklicktes Objekt.

Davon abgesehen kann dein drehen nicht klappen, da du nie den Rückgabewert von feldfinden() zuweist.

Das ist alles nicht sonderlich sauber.

Zum Vergleich meine kleine Variante.

HTML:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
<style type="text/css">
#spielfelder { display: block; margin: 50px auto; width: 664px; height: 664px; }
#spielfelder div { float: left; width: 300px; height: 300px; margin: 15px; display: block; border: 1px solid #CECECE; background: #FAFAFA; }
#spielfelder span { float: left; width: 98px; height: 98px; border: 1px solid #CFCFCF; -moz-border-radius: 49px; }
.stein { background: #EFEFEF; }
.stein:hover { background: #FFFFAE; cursor: pointer; }
.playerOne { background: #FFAEAE !important; cursor: default !important; }
.playerTwo { background: #AEFFAE !important; cursor: default !important; }
.clear { display: none; clear: both; font-size: 0; height: 0; }
</style>
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
</head>
<body>

<div id="spielfelder"></div>
<br clear="left" />
<a href="#" onclick="feldDrehen();">Feld links drehen</a>
<a href="#" onclick="feldDrehen(1);">Feld rechts drehen</a>
<script type="text/javascript">


$(document).ready(function() {
	var currentPlayer = 0;	// 0 = none, 1 = first player, 2 = second player

	function generatePlayfields(obj) {
		// generate 4 playfields with 9 tiles
		for (var i=0, il=4; i<il; i++) {

			var field = $(document.createElement('div'));
			field.attr('id', 'spielfeld_' + i);
			field.className = 'spielfeld';
			
			// generate stones
			for (c=0, cl=9; c<cl; c++) {
				var tile = document.createElement('span');
				tile.className = 'stein';

				field.append(tile);
			}	
			obj.append(field);			
		}
	}
	
	// we use no object abstraction...
	function clickStone(event) {		
		if (currentPlayer == 1) {
			$(this).addClass('playerOne').unbind();			
		} else if (currentPlayer == 2) {
			$(this).addClass('playerTwo').unbind();			
		}
		currentPlayer ++;
		if (currentPlayer > 2) {
			currentPlayer = 1;
		}
		//console.log(event.target);
		//alert('Stein ' + event.target.id + ' wurde angeklickt');
		
	}	

	function clickGamefield(event) {
		console.log(event.target);
		//alert('Spielfeld - ' + event.target.id + ' - soll gedreht werden?!');
	}		
		
	// all init logic goes here...
	generatePlayfields($('#spielfelder'));
	//$('.spielfeld').bind('click', clickGamefield);
	$('.stein').bind('click', clickStone);

	currentPlayer = 1;		
});

function feldDrehen(direction) {
	var tiles = $('#spielfeld_0').children();
	var states = [];
	var state = 0;
	var obj = null 
	
	// gather current states and relocate
	for (i=0, il=tiles.length; i<il; i++) {
		obj = $(tiles[i]);
		states[i] = obj.hasClass('playerOne') ? 1 : (obj.hasClass('playerTwo') ? 2 : 0);
		obj.removeClass('playerOne playerTwo');	
	}
	// rearrange and apply them - left is default behavior
	var tmp = null;
	if (direction == 1) {
		tmp = [	states[6], states[3], states[0],
		   		states[7], states[4], states[1],
		   		states[8], states[5], states[2]];
	} else {
		tmp = [	states[2], states[5], states[8],
		   		states[1], states[4], states[7],
		   		states[0], states[3], states[6]];
	}
	
	for (i=0, il=tiles.length; i<il; i++) {
		$(tiles[i]).addClass( tmp[i] == 1 ? 'playerOne' : (tmp[i] == 2 ? 'playerTwo' : '') );
	}	
}
</script>

</body>
</html>
 
ich hab deins mal bissl inspiziert und nen kleinen fehler gefunden ... wenn du das feld drehst dann ist dsa (möglicherweise leere) feld nicht mehr zum klicken möglich
 
hmm da sieht man den unterschied zwischen lernend und gelernter xD da würd ich doch glatt gerne dein code nehmen und dran weiterarbeiten 😀
 
Den Code aus meinen Javascript Anfängen oder Schnell-Schuss-Projekten willst du nicht sehen. Der ist auch Kraut und Rüben ^^. Dagegen ist der da oben sauber und verständlich.
 
ja das verstehen hat mir ein neues ergebnis geschaffen ^^ schaffe es schon alle felder zu drehen nur bei mir ist das problem hier -->

Code:
$('#spielfelder-drehen1').click(function(){
	feldDrehen(1,'#spielfeld_0');//rechts
	alert("1 wird gedreht");
});

in der .css existieren bei mir die beiden hier :
Code:
.pfeil-rechts{
	width: 195px;
	height: 195px;
	background-image: url(Image-fields/Pfeil-rechts.PNG);
	float: left;
}
.pfeil-links{
	width: 195px;
	height: 195px;
	background-image: url(Image-fields/Pfeil-links.PNG);
	float: left;
}

kann ich da irgendwie abwägen und ausschließen mit if(.pfeil-links) oder so `?
 
Du solltest im Idealfall dem Objekt das die Funktion auslöst direkt übergeben für welche Logik es zuständig ist. Also unabhängig vom verwendeten Style.
 
Na du hast doch deine Pfeile. 8 Stück an der Zahl. 4 für das Links drehen und 4 für das Rechts drehen. Denen fürs Links drehen übergibst du für das Click Event deine drehen Funktion so, dass sie Links drehen und für Rechts entsprechend mit dem Rechts Parameter.

drehen('spielfeld1'), drehen('spielfeld1', 1).
drehen('spielfeld2'), drehen('spielfeld2', 1).
drehen('spielfeld3'), drehen('spielfeld3', 1).
drehen('spielfeld4'), drehen('spielfeld4', 1).

Lässt sich sogar dynamisch alles erzeugen 😉
 
ja aber die pfeile erreiche ich über die klassen
spielfelder-drehen1
spielfelder-drehen2
spielfelder-drehen3
spielfelder-drehen4

Code:
$("#spielfelder-drehen1").append("<div id='pfeil-rechts' class='pfeil-rechts'></div>");
$("#spielfelder-drehen1").append("<div id='pfeil-links' class='pfeil-links'></div>");
$("#spielfelder-drehen2").append("<div id='pfeil-rechts' class='pfeil-rechts'></div>");
$("#spielfelder-drehen2").append("<div id='pfeil-links' class='pfeil-links'></div>");

$("#spielfelder-drehen3").append("<div id='pfeil-rechts' class='pfeil-rechts'></div>");
$("#spielfelder-drehen3").append("<div id='pfeil-links' class='pfeil-links'></div>");
$("#spielfelder-drehen4").append("<div id='pfeil-rechts' class='pfeil-rechts'></div>");
$("#spielfelder-drehen4").append("<div id='pfeil-links' class='pfeil-links'></div>");
 
Ähm nein. Deine Pfeile haben eigene Klassen und wenn du ohnehin mit Inline HTML arbeitest, dann kannst du direkt das onclick Ereignis definieren oder nachträglich einmal
$('.pfeil-links').bind(....);
$('.pfeil-rechts').bind(....);
aufrufen.
 
jou und was tippe ich dann hier rein ?
Code:
feldDrehen(0,'#spielfelder_ <-- Hier ');

ich mein ist es dann überhaupt sinnvoll
das ausm letzten post zu erstellen mit den spielfelder-drehen(1-4) ?
 
Welches Feld gemeint ist übergibst du deinen Pfeilen. Entweder von Hand oder indem du irgendwelche Informationen am Pfeil hinterlegst oder die Pfeile auch dynamisch erzeugst.
 
Ok hab grade die dynamische variante davon versucht problem ist erstmal das die felder s*****e angeordnet sind ...


>
<
> --- ---
< --- ---
> --- ---
< --- ---
>
<
So siehts aus ....
und so solles aussehen



> --- --- >
< --- --- <
> --- --- >
< --- --- <
 
Tja, da wirst du eben noch mit dem HTML probieren müssen. Erst das statische erzeugen und dann das dynamisch umsetzen. Mag viel Arbeit sein, aber dann übt das auch entsprechend.

<br> zum Umbruch deiner Elemente ist übrigens überflüssig, wenn du die Elemente floatest.
 
hmm fällt dir da denn ein fehler auf ??
<pentago.js>
Code:
function generateDrehen(obj){
		for(var i = 0, il=4; i<il;i++){
			var field = $(document.createElement('div'));
			field.attr('id','pfeil-rechts_'+i);
			field.className = 'pfeil-rechts';
			obj.append(field);
		}
}

Code:
	generateDrehen($('#spielfelder-drehen'));

<style.css>
Code:
#spielfelder-drehen{
	width: 195px;
	height: 390px; 
}
.pfeil-rechts{
	width: 195px;
	height: 195px;
	background-image: url(Image-fields/Pfeil-rechts.PNG);
	float: left;
}

<index.html>

Code:
 <table cellpadding="0" cellspacing="0">
		<tr>
			<td>
				<div id=spielfelder-drehen></div>
...
...
...
 
Jou, projekt grade eben abgegeben hab noch n bissel hibekommen ... die gewinnprüfe funktion eigentich gut hinbekommen , noch paar unschönheiten beim spielen und der fehler mit dem drehen den ich dir mal gennant hatte ist noch drinne. Alles im allem möchte ich sehr für deine hilfe Danken. Du hast mir gut gehlfen nd ich denke ich bin eine ganze ecke besser in jquery, html und css geworden 🙂
Vielen dank für deine hilfe 🙂
 

Zurück
Oben