• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Hilfe beim Magischeer Quadraht

Tapeline

New member
Schön Guten Tag

Ich muss ein Zauberwürfel machen, mit JavaScript.
Nur komme ich gerade nicht weiter und muss mir jetzt hier Hilfe suchen und hoffe auch, dass ihr mir Helfen könnt.

So soll es später aussehen: http://img5.fotos-hochladen.net/uploads/bild12qjk59xud63.png

Die Regeln für sowas, wie man das ganze aufbauen soll: http://img5.fotos-hochladen.net/uploads/regel3bofhunyt0.png

Code:
var SIZE = 3;
var maggi = new Array();
var number = 1;
var xPos = (SIZE-1) /2;
var yPos = SIZE -1;

function showArray(){
    //x = 0,1,2,0,1,2,0,1,2   //innen
    //y   2,2,2,1,1,1,0,0,0   //außen

    document.write('<TABLE id="gabb">');

    for(var y = SIZE-1; y >= 0;y--){

            document.write('<TR>')

        for(var x = 0; x < SIZE; x++){

            document.write('<TD id="gabb2">' + maggi[xPos][yPos] + '</TD>');
        }
            document.write('<br />');
    }
   document.write('</TABLE>');
}


function createArray(){

        var yPosOld = yPos;
        var xPosOld = xPos;
        var maggi[xPos][yPos] = number;
        var yPos = yPos + 1;

    for (var x = 0; x < SIZE; x++){
            maggi[x] = new Array();
    }

    for(var i =0; i < SIZE * SIZE; i++) {

            if(var yPos >= SIZE) {
                yPos = 0;
                xPos = xPos + 1;
            }

            if(var xPos >= SIZE) {
                xPos = 0;
            }

            if(var maggi[xPos][yPos] != 0) {
                xPos = xPosOld;
                yPos = yPos - 1;
                yPos = yPosOld;
            }
        number = number + 1;
    }


Ich hab jetzt schon einiges geschrieben, nur zeigt er mir im Browser nix an. Weis einer woran das liegt ? Er Zeigt nicht mal das 3x3 Array an. Kann mir jemand sagen wie ich weiter vorgehen muss? Und warum er das nicht anzeigt ?



Ich bedanke mich schon einmal für Ihre Hilfe.
 
Hallo Tapeline,

lässt du die Funktion überhaupt ausführen?

Leider fehlt mir hierzu nun die HTML-Datei, wie diese ausgegeben wird, damit man mal sieht, wie es innerhalb der HTML-Seite ausgegeben wird. Dafür reicht nur die Zeile, wo die Funktion ausgeführt wird.

Beste Grüße
Pariak
 
Ja habe ich, ich habe aber nix gefunden.

Code:
<script>
      createArray();
      showArray();
</script>

So sieht der aus.
 
Ich bekomme nun folgenden Fehler:
Code:
SyntaxError: missing ; before statement
	

var maggi[xPos][yPos] = number;
Die Angabe des arrays ist glaube ich falsch. Aber ehrlich gesagt weiß ich nun nicht warum. Hinzu wundert es mich, dass beim öffnen der Seite die Variablen nicht gelesen werden, obwohl sie am anfang definiert werden. Tut mir leid, ich bin da selber ratlos...

P. S. mir fiel gerade auf, dass mehrmals var definiert wurde... Wenn eine Variable bereits vorhanden ist, braucht dieser nicht erneut mit var definiert werden.

Hier einmal der Code:
Code:
var SIZE = 3;
var maggi = new Array();
var number = 1;
var xPos = (SIZE-1) /2;
var yPos = SIZE -1;

function showArray(){
    //x = 0,1,2,0,1,2,0,1,2   //innen
    //y   2,2,2,1,1,1,0,0,0   //außen

    document.write('<TABLE id="gabb">');

    for(var y = SIZE-1; y >= 0;y--){

            document.write('<TR>')

        for(var x = 0; x < SIZE; x++){

            document.write('<TD id="gabb2">' + maggi[xPos][yPos] + '</TD>');
        }
            document.write('<br />');
    }
   document.write('</TABLE>');
}


function createArray(yPos, xPos, number){

        var yPosOld = yPos;
        var xPosOld = xPos;
        maggi[xPos,yPos] = number;
        yPos = yPos + 1;

    for (var x = 0; x < SIZE; x++){
            maggi[x] = new Array();
    }

    for(var i =0; i < SIZE * SIZE; i++) {
	
            if(yPos >= SIZE) {
                yPos = 0;
                xPos = xPos + 1;
            }

            if(xPos >= SIZE) {
                xPos = 0;
            }

            if(maggi[xPos][yPos] != 0) {
                xPos = xPosOld;
                yPos = yPos - 1;
                yPos = yPosOld;
            }
        number = number + 1;
    }
}
Nun kommt als Fehlermeldung, dass in der if Abfrage "if(maggi[xPos][yPos] != 0)" -> maggi[xPos] undefiniert ist. Am besten du schaust hier einmal auf der Seite, wie man eine 2 Dimensionale Array aufbaut: http://www.trans4mind.com/personal_development/JavaScript/Array2D.htm

Hoffentlich hilft das :)
 
Zuletzt bearbeitet:
Ich hab jetzt, dass er das 3x3 Array Anzeigt.


Code:
var SIZE = 3;
var maggi = new Array();
var number = 1;
var xPos = (SIZE-1) /2;
var yPos = SIZE -1;


function createArray(){

     for (var x = 0; x < SIZE; x++){
            maggi[x] = new Array();
    }

        var yPosOld = yPos;
        var xPosOld = xPos;
        maggi[xPos][yPos] = number;
        yPos += 1;



    for(var i =0; i < SIZE * SIZE; i++) {

            if(yPos > SIZE) {
                yPos = 0;
                xPos = xPos + 1;
            }

            if(xPos > SIZE) {
                xPos = 0;
            }

            if(maggi[xPos][yPos] != 0) {
                xPos = xPosOld;
                yPos = yPosOld;
                yPos = yPos -1;
            }

        number += 1;

    }



}


    function showArray(){
    //x = 0,1,2,0,1,2,0,1,2   //innen
    //y   2,2,2,1,1,1,0,0,0   //au?en

    document.write('<TABLE id="gabb">');

    for(var y = SIZE-1; y >= 0;y--){
            document.write('<TR>');
        for(var x = 0; x < SIZE; x++){
            document.write('<TD id="gabb2">' + maggi[x][y] + '</TD>');
        }
            document.write('<br />');
    }
   document.write('</TABLE>');
}


Nu komme ich nicht weiter wie ich das das mit der Nr. 2 machen soll. Damit unten rechts eine 2 ensteht, und die Regel fortlaufend ist.

Hier nochmal die Bilder:

http://www.directupload.net/file/d/3600/ke62imas_png.htm

http://www.directupload.net/file/d/3600/vqo338rh_png.htm
 
Zuletzt bearbeitet:
Ein paar Bemerkungen zu Code:
1. document.write() ist keine gute Wahl um etwas auf der Seite darzustellen - erzeugt einfach mehr Probleme als es löst. Verwende besser .innerHTML oder gleich direkt die DOM-Methoden.
2. Den Array-Konstruktor sollte man nicht verwenden, da er inkonsitent Parameter hat. Verwende lieber Arrayliterale
Code:
var arr = [];
3. Dein HTML, das du in showArray() erzeugst ist invalide. Außerdem vergibst du die ID "gabb2" für alle <td>s. Eine ID muss dokumentenweit eindeutig sein.
4. globale Variablen müssen immer minimiert werden. Alle 5 globalen Variablen bei dir sind überflüssig und können durch lokale ersetzt werden.

Zu deinem Problem: deine Programmlogik im createArray() ist irgendwie daneben.
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
<style type="text/css"></style>
</head>
<body>
<div id="output"></div>
<script type="text/javascript">
function Magic(size){
	this.data = [];
	for (var x = 0; x < size; x += 1){
		this.data.push([]);
		for (var y = 0; y < size; y += 1){
			this.data[x].push(0);
		}
	}
	
	var x = Math.floor(size / 2);
	var y = 0;
	for (var number = 1; number <= size * size; number += 1){
		if (this.data[x][y]){
			x = (x + size - 1) % size;
			y = (y + 2) % size;
		}
		this.data[x][y] = number;
		x = (x + 1) % size;
		y = (y + size - 1) % size;
	} 
};
Magic.prototype.getHTML = function(){
	var html = "<table>";
	for (var y = 0; y < this.data.length; y += 1){
		html += "<tr>";
		for (var x = 0; x < this.data.length; x += 1){
			html += "<td>" + this.data[x][y] + "</td>";
		}
		html += "</tr>";
	}
	html += "</table>";
	return html;
};
document.getElementById("output").innerHTML = (new Magic(3)).getHTML();
</script>
</body>
</html>
 
Zurück
Oben