|
|
|
|  Lumines - einfacher Prototyp (Unity3d) | | | |
 ![Einen Kommentar (einer Stelle[markiert]) hinzufügen](imgs/iconaddobject.gif)
| Lumines in Action
 | | | |
|  Bewirtschaftung der Daten und der Views
# Model: 2D-Array mit Werten
# View: 2D-Array mit Objekten
| | | |
| Ablauf: Suche in den Arrays dann Suche nach den Objekten dazu
 |  | ![Einen Kommentar (einer Stelle[markiert]) hinzufügen](imgs/iconaddobject.gif) |  Bewirtschaftung der Daten auf zwei Ebenen Bewirtschaftung könnte auch nur in einem Array stattfinden, dann müsste allerdings der Wert eines Objektes aus dem Objekt herausgeholt werden.
Die hier vorliegende Programmierung benutzt den Playfield-Array als Hauptspielelement. Die GameObjekte werden im Hintergrund in einem zweiten Array als View gehalten. | | | |
| | |
|  Ablauf eines Gameloops | | | |
| Objekte in Unity3d
 | | | |
|  Lumines.Prototype 0.7 /*
Y/X=0
[-|] [|-]
| | | | |- | |_______________________|
*/ /* Falling Piece */ var positionFallingPieceX=5; var positionFallingPieceY=0; var arrayFallingPiece=new Array(); var arrayFallingObjects=new Array();
/* PlayField */ var playFieldWidth=15; var playFieldHeight=20; var arrayPlayField=new Array(); var arrayPlayFieldObjects=new Array();
// downfallingCounter var downfallingCounter=0;
// strt function Start() { /* 01 10 */ // piece arrayFallingPiece[0]=new Array(2,1); arrayFallingPiece[1]=new Array(1,2); // the objects arrayFallingObjects[0]=new Array(); arrayFallingObjects[1]=new Array(); generateFallingObject(); // ----------------------- // init playfield // ----------------------- var t; var tt; for ( t=0; t { arrayPlayField[t]=new Array(); arrayPlayFieldObjects[t]=new Array();
for ( tt=0;tt { arrayPlayField[t][tt]=0; if (t==0) { arrayPlayField[t][tt]=-1; } if (t==(playFieldWidth-1)) { arrayPlayField[t][tt]=-1; } if (tt==(playFieldHeight-1)) { arrayPlayField[t][tt]=-1; } } }
// go through and generate it for ( t=0; t { for ( tt=0;tt { var val=arrayPlayField[t][tt]; // rand if (val==-1) { posx=t; posy=tt; var objMauer=GameObject.CreatePrimitive(PrimitiveType.Cube); objMauer.transform.position.x=posx; objMauer.transform.position.y=posy; arrayPlayFieldObjects[t][tt]=objMauer; } } } // falling down downfallingCounter=0; }
// update function FixedUpdate () { // ------------------------------------------------------ // piece // ------------------------------------------------------ // --------------------------- // input from the keys // --------------------------- if (Input.GetKeyDown("d")) { debugField(); } // if (Input.GetKeyDown("left")) // if (downfallingCounter%5==0) if (Input.GetKeyDown("left")) { // is there something? if ( (arrayPlayField[positionFallingPieceX+2][positionFallingPieceY]==0) &&(arrayPlayField[positionFallingPieceX+2][positionFallingPieceY+1]==0) ) { positionFallingPieceX=positionFallingPieceX+1; } } if (Input.GetKeyDown("right")) { // is there something? if ( (arrayPlayField[positionFallingPieceX-1][positionFallingPieceY]==0) && (arrayPlayField[positionFallingPieceX-1][positionFallingPieceY+1]==0) ) { positionFallingPieceX=positionFallingPieceX-1; } } // --------------------------- // rotate // --------------------------- /* 12 31 34 >> 42 01 >> 12 32 03 */ if (Input.GetKeyDown("up")) { // save first var valFrist=arrayFallingPiece[0][0]; var valFristObject=arrayFallingObjects[0][0]; arrayFallingPiece[0][0]=arrayFallingPiece[1][0]; arrayFallingObjects[0][0]=arrayFallingObjects[1][0];
arrayFallingPiece[1][0]=arrayFallingPiece[1][1]; arrayFallingObjects[1][0]=arrayFallingObjects[1][1];
arrayFallingPiece[1][1]=arrayFallingPiece[0][1]; arrayFallingObjects[1][1]=arrayFallingObjects[0][1];
arrayFallingPiece[0][1]=valFrist; arrayFallingObjects[0][1]=valFristObject;
} // going down if (Input.GetKey("down")) { if ( (arrayPlayField[positionFallingPieceX][positionFallingPieceY+2]==0) && (arrayPlayField[positionFallingPieceX+1][positionFallingPieceY+2]==0) ) { positionFallingPieceY=positionFallingPieceY+1; } } // --------------------------- // falling down // --------------------------- downfallingCounter++; // print(downfallingCounter); if (downfallingCounter>50) { positionFallingPieceY=positionFallingPieceY+1; downfallingCounter=0; } updateFallingPiecePosition();
// --------------------------- // collision with background // --------------------------- if ( (arrayPlayField[positionFallingPieceX][positionFallingPieceY+2]!=0) || (arrayPlayField[positionFallingPieceX+1][positionFallingPieceY+2]!=0) ) { // from pieces to playfield for (var p=0;p<2;p++) { for (var pp=0;pp<2;pp++) { arrayPlayField[positionFallingPieceX+p][positionFallingPieceY+pp]=arrayFallingPiece[p][pp]; arrayPlayFieldObjects[positionFallingPieceX+p][positionFallingPieceY+pp]=arrayFallingObjects[p][pp]; arrayFallingPiece[p][pp]=0; // arrayFallingObjects[p][pp]=0; } } // generate a new falling piece generateFallingObject(); // up again positionFallingPieceX=5; positionFallingPieceY=0; }
// --------------------------- // graviation in playfield // --------------------------- var t; var tt; if (downfallingCounter%5==0) for ( t=0; t { // if (t>0) for ( tt=0;tt { var val=arrayPlayField[t][tt]; if (val!=-1) // no walls { if (val>0) { if (val!=0) { if (arrayPlayField[t][tt+1]==0) { arrayPlayField[t][tt+1]=arrayPlayField[t][tt]; arrayPlayFieldObjects[t][tt+1]=arrayPlayFieldObjects[t][tt]; var obj=arrayPlayFieldObjects[t][tt+1]; obj.transform.position.y=tt+1; arrayPlayField[t][tt]=0;
} } } } // no walls } } // --------------------------- // make points // --------------------------- // crash etc // go through and check for a // [] // [] for (var typ=1;typ<3;typ++) { for ( t=0; t { for ( tt=0;tt { // str=str+arrayPlayField[t][tt]; var count=0; if ( (arrayPlayField[t][tt]==typ)&&(arrayPlayField[t+1][tt]==typ) && (arrayPlayField[t][tt+1]==typ)&&(arrayPlayField[t+1][tt+1]==typ) ) { // delete them! arrayPlayField[t][tt]=0; arrayPlayField[t+1][tt]=0; arrayPlayField[t+1][tt+1]=0; arrayPlayField[t][tt+1]=0; // deactivate the objects arrayPlayFieldObjects[t][tt].active=false; arrayPlayFieldObjects[t+1][tt].active=false; arrayPlayFieldObjects[t+1][tt+1].active=false; arrayPlayFieldObjects[t][tt+1].active=false; } } } } // end find }
// debug field function debugField() { var str=""; var t; var tt; for ( t=0; t { for ( tt=0;tt { str=str+arrayPlayField[t][tt]; } str=str+"\n"; } print(str); }
// udpate falling piece position function updateFallingPiecePosition() { for (var i=0;i<2;i++) { for (var ii=0;ii<2;ii++) { var posx=i+positionFallingPieceX; var posy=ii+positionFallingPieceY; // type // var objectype=arrayFallingPiece[i][ii]; var obj=arrayFallingObjects[i][ii]; obj.transform.position.x=posx; obj.transform.position.y=posy; } } }
// generateFallingObject function generateFallingObject() { arrayFallingPiece[0][0]=Random.Range(1,3); arrayFallingPiece[1][0]=Random.Range(1,3); arrayFallingPiece[1][1]=Random.Range(1,3); arrayFallingPiece[0][1]=Random.Range(1,3);
// init the falling objects // piece for (var i=0;i<2;i++) { for (var ii=0;ii<2;ii++) { var posx=i+positionFallingPieceX; var posy=ii+positionFallingPieceY; // type var objectype=arrayFallingPiece[i][ii]; if (objectype==1) { var obj=GameObject.CreatePrimitive(PrimitiveType.Cube); obj.transform.position.x=posx; obj.transform.position.y=posy; arrayFallingObjects[i][ii]=obj; } if (objectype==2) { var objSphere=GameObject.CreatePrimitive(PrimitiveType.Sphere); objSphere.transform.position.x=posx; objSphere.transform.position.y=posy; arrayFallingObjects[i][ii]=objSphere; } } } // generate the pieces } | | | |
 | | | |
|
|
|