JQuery Bilder austauschen

Evil-Devil

Top Contributor
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 ;)
 

Michimitsu

Bekanntes Mitglied
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 ?
 

Michimitsu

Bekanntes Mitglied
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 ??
 

Michimitsu

Bekanntes Mitglied
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 ?
 

Michimitsu

Bekanntes Mitglied
jou kommisch... iwi nixs geändert und dann gings ^^ .... ähhm sollte ich mich erst mit dem drehen beschäftigen oder erst mit der gewinnbedingung ... ?
 

Evil-Devil

Top Contributor
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 ;)
 

Michimitsu

Bekanntes Mitglied
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 ^^
 

Michimitsu

Bekanntes Mitglied
ja und bei mir will er die farbe einfach nicht ändern ... wie sprichst du denn deine generierten felder an ??? bzw. wie wechselst du die ???
 

Evil-Devil

Top Contributor
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.
 

Michimitsu

Bekanntes Mitglied
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 ?
 

Evil-Devil

Top Contributor
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...
 

Michimitsu

Bekanntes Mitglied
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 ....
 

Michimitsu

Bekanntes Mitglied
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;
		};

}
 

Evil-Devil

Top Contributor
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>
 

Michimitsu

Bekanntes Mitglied
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
 

Michimitsu

Bekanntes Mitglied
hmm da sieht man den unterschied zwischen lernend und gelernter xD da würd ich doch glatt gerne dein code nehmen und dran weiterarbeiten :D
 

Evil-Devil

Top Contributor
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.
 

Michimitsu

Bekanntes Mitglied
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 `?
 

Evil-Devil

Top Contributor
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.
 

Evil-Devil

Top Contributor
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 ;)
 

Michimitsu

Bekanntes Mitglied
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>");
 

Evil-Devil

Top Contributor
Ä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.
 

Michimitsu

Bekanntes Mitglied
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) ?
 

Evil-Devil

Top Contributor
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.
 

Michimitsu

Bekanntes Mitglied
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



> --- --- >
< --- --- <
> --- --- >
< --- --- <
 

Evil-Devil

Top Contributor
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.
 

Michimitsu

Bekanntes Mitglied
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>
...
...
...
 

Michimitsu

Bekanntes Mitglied
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 :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B jquery mobile popup verzögert ausführen Angular, React, JQuery - Fragen zu JavaScript 2
SKB jQuery Autocomplete - Title Attribute wird nur bei Mousehover gezeigt - nicht bei Pfeil Navi Angular, React, JQuery - Fragen zu JavaScript 0
isatindersinght jquery convert html to image Angular, React, JQuery - Fragen zu JavaScript 0
S URL Abfrage in Jquery? Angular, React, JQuery - Fragen zu JavaScript 9
J jquery selector? Angular, React, JQuery - Fragen zu JavaScript 9
E AJAX/JQUERY/rxjs Angular, React, JQuery - Fragen zu JavaScript 0
L Bildbearbeitung HTML5 Canvas Fabric.js Jquery Angular, React, JQuery - Fragen zu JavaScript 4
S jQuery - Slider funktioniert nicht im Akkordeon Angular, React, JQuery - Fragen zu JavaScript 3
boxi Jquery bei Ajax Call wird response ignoriert. Angular, React, JQuery - Fragen zu JavaScript 2
D Seite mit Jquery in Pop-Up als IFrame einbinden Angular, React, JQuery - Fragen zu JavaScript 1
S Tabelle mit jQuery Angular, React, JQuery - Fragen zu JavaScript 6
M JQuery Parameter mit Post übergeben Angular, React, JQuery - Fragen zu JavaScript 4
F jQuery Tabs + Accordion Angular, React, JQuery - Fragen zu JavaScript 5
E Jquery Script gesucht Angular, React, JQuery - Fragen zu JavaScript 3
S Twitter Anzeige via jQuery Angular, React, JQuery - Fragen zu JavaScript 2
M JQuery in Eclipse Angular, React, JQuery - Fragen zu JavaScript 1
H Bilder auf einer Webseite anzeigen Angular, React, JQuery - Fragen zu JavaScript 4
T Bilder zufällig Anzeigen Angular, React, JQuery - Fragen zu JavaScript 3
T mehrer Bilder neu laden Angular, React, JQuery - Fragen zu JavaScript 6
T Bilder Links setzen Angular, React, JQuery - Fragen zu JavaScript 3
O Javascript soll Bilder an 2 verschiedenen Orten anzeigen Angular, React, JQuery - Fragen zu JavaScript 3
Airwolf89 onClick auf Bilder scheint nicht richtig zu funktionieren Angular, React, JQuery - Fragen zu JavaScript 5
M Bilder mit Java in einen Iframe laden Angular, React, JQuery - Fragen zu JavaScript 3
R 25 Thumbs/Bilder aufgelistet, jede dritte Sek. Bildwechsel Angular, React, JQuery - Fragen zu JavaScript 2
R Kann Man Java Bilder Speichern ? Angular, React, JQuery - Fragen zu JavaScript 2
R Variable übergeben und bilder anzeigen Angular, React, JQuery - Fragen zu JavaScript 10
M bilder mit mouseover effekt und menubar Angular, React, JQuery - Fragen zu JavaScript 2
N Wechselnde Bilder auf Website Angular, React, JQuery - Fragen zu JavaScript 2
M bilder reloaden Angular, React, JQuery - Fragen zu JavaScript 2

Ähnliche Java Themen


Oben