| In ein normales Fenster verwandeln  | close  
> gametheory.ch - swiss gamedesign (elearning & knowhow at gamedesign.zhdk.ch [zürcher hochschule der künste])> GAMEDESIGN: Programmierung & GameEngines> Game-Development (3D-Gameengines)> Unity3D> Spielwelten / Maschinen / Automaten> Kontrollerbasiertes Beispiel (in Unity)> Lumines - einfacher Prototyp (Unity3d)

Lumines - einfacher Prototyp (Unity3d)
 
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen

Lumines in Action
Lumines in Action
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen

Bewirtschaftung der Daten und der Views


# Model: 2D-Array mit Werten

# View: 2D-Array mit Objekten

Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen
Ablauf: Suche in den Arrays dann Suche nach den Objekten dazu
Ablauf: Suche in den Arrays dann Suche nach den Objekten dazu
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen

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.
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen

Ablauf eines Gameloops
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen
Objekte in Unity3d
Objekte in Unity3d
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen

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

}
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen

Lumines 1.o Prototyp Extended