# Tetris mit Images anstatt gezeichneten Rechtecken



## egophil (14. Mrz 2008)

Hallo,
ich versuche in Java ein kleines Tetrisspiel dahindgehend zu erweitern, dass es anstatt gezeichneten Rechteckfiguren Grafiken verwendet. Ich weiß leider nicht wie man das Image einbinden muss, so dass das Programm korrekt läuft.

```
public void paint(Graphics g)
  {
  
    Image img;
    img = getToolkit().getImage("pic.jpg");
    
    if (goff==null && d.width>0 && d.height>0)
    {
      ii = createImage(d.width, d.height);
      goff = ii.getGraphics();
    
    }
    if (goff==null || ii==null)
      return;

    goff.setColor(background);
    goff.fillRect(0, 0, d.width, d.height);

    if (ingame)
      playGame();
    else
      showIntro();
    showScore();

    g.drawImage(ii, 0, 0, this);
  }
 



  public void drawBlocks()
  {
    short x,y;

    for (x=0; x<xblocks; x++)
    {
      for (y=0; y<yblocks; y++)
      {
        goff.setColor(blocks[screendata[x][y]]);
        goff.drawRect(x*blocksize+barwidth,y*blocksize, 15, 15);   
      }
    }
  }
```
im letzteren Abschnitt muss ja das Image geladen werden anstatt des Rechtecks aber ein drawImage(img,0,0,this)
wie es sonst üblich ist funktioniert hier nicht, bzw. weiß ich nicht wie es geht. Gibt es Ideen oder Vorschläge?
Vielen Dank im Voraus
Phil


----------



## André Uhres (14. Mrz 2008)

Ich hab mir sagen lassen, dass das Tutorial Einstieg in die Spieleprogrammierung mit Java 
auch auf Tetris anwendbar ist. Leider kann ich (noch) nichts aus eigener Erfahrung dazu sagen :wink:


----------



## Quaxli (14. Mrz 2008)

Woher nur? 

Es sollte machbar sein. Allerdings muß man bei Images dann auf pixelgenaue Kollision wert legen. Das ist insgesamt wohl etwas aufwändiger, als wenn man es mit gezeichneten Rechtecken löst (die von Rectangle erben) und wo man eine Kollission recht leicht auskaspern kann.


----------



## André Uhres (14. Mrz 2008)

Nur so nebenbei: ich hab ein Beispiel, da wird jede Form durch ein "drehbares" Point[] dargestellt,
wobei jeder Point ein Teilquadrat der Form darstellt. Die Kollisionsberechnung ist dann komplett von den "Pixels" getrennt.
Das "Color[][] boardArray" enthält für jeden Punkt entweder null (Quadrat ist frei) oder die entsprechende formabhängige Farbe.
In paintComponent wird dann dieses "boardArray" einfach in zwei verschachelten for-Schleifen gemalt.
Wenn (color != null), dann wird das entsprechende Quadrat so gemalt:
g.setColor(color);
g.fillRect(..);
und noch ein Rahmen drumherum.
(Theoretisch könnte man aber auch jedes Quadrat mit "g.drawImage(..)" malen)


----------



## Quaxli (14. Mrz 2008)

Das klingt doch gut. Ich denke man muß da schon etwas abstrakt an die Sache rangehen, damit man es letzten Endes einfacher hat. Wenn man nur Images aufeinander stapelt, wird es auch mit der Ermittlung fertiger Reihen zu schwierig.


----------

