質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.03%

  • Java

    12117questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Java クラスの追加方法について(テトリス)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 181

Kokkoo

score 1

Javaでテトリスの実装をさせているのですが機能として次にくるブロックを表示させる機能追加をしようとしていて別途でnextblockpaenlを作成したのですが(コード2)、コード1の中にどのようにして組み込めばいいのか分かりません。
どうすれば動くようになるのでしょうか?

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.util.ArrayList; 
import java.util.Collections; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 



public class Tetris extends JPanel { 

 private static final long serialVersionUID = -8715353373678321308L; 

 private final Point[][][]Tetraminos = { 
   // I-Piece 
   { 
    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(3, 1) }, 
    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(1, 3) }, 
    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(3, 1) }, 
    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(1, 3) } 
   }, 

   // J-Piece 
   { 
    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(2, 0) }, 
    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(2, 2) }, 
    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(0, 2) }, 
    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(0, 0) } 
   }, 

   // L-Piece 
   { 
    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(2, 2) }, 
    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(0, 2) }, 
    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(0, 0) }, 
    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(2, 0) } 
   }, 

   // O-Piece 
   { 
    { new Point(0, 0), new Point(0, 1), new Point(1, 0), new Point(1, 1) }, 
    { new Point(0, 0), new Point(0, 1), new Point(1, 0), new Point(1, 1) }, 
    { new Point(0, 0), new Point(0, 1), new Point(1, 0), new Point(1, 1) }, 
    { new Point(0, 0), new Point(0, 1), new Point(1, 0), new Point(1, 1) } 
   }, 

   // S-Piece 
   { 
    { new Point(1, 0), new Point(2, 0), new Point(0, 1), new Point(1, 1) }, 
    { new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 2) }, 
    { new Point(1, 0), new Point(2, 0), new Point(0, 1), new Point(1, 1) }, 
    { new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 2) } 
   }, 

   // T-Piece 
   { 
    { new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(2, 1) }, 
    { new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(1, 2) }, 
    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(1, 2) }, 
    { new Point(1, 0), new Point(1, 1), new Point(2, 1), new Point(1, 2) } 
   }, 

   // Z-Piece 
   { 
    { new Point(0, 0), new Point(1, 0), new Point(1, 1), new Point(2, 1) }, 
    { new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(0, 2) }, 
    { new Point(0, 0), new Point(1, 0), new Point(1, 1), new Point(2, 1) }, 
    { new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(0, 2) } 
   } 
 }; 


 private final Color[] tetraminoColors = { 
  Color.cyan, Color.blue, Color.orange, Color.yellow, Color.green, Color.magenta, Color.red 
 }; 

 private Point pieceOrigin; 

 private int currentPiece; 
 private int NextPiece; 

 private int rotation; 

 private ArrayList<Integer> nextPieces = new ArrayList<Integer>(); 
 private ArrayList<Integer> nextnextPieces = new ArrayList<Integer>(); 

 private long score; 

 private Color[][] well; 

 // Creates a border around the well and initializes the dropping piece 
 private void init() { 
  well = new Color[19][24]; 
  for (int i = 0; i < 18; i++) { 
   for (int j = 0; j < 23; j++) { 
    if (i == 0 || i == 11 || j == 22) { 
     well[i][j] = Color.GRAY; 
    } else { 
     well[i][j] = Color.BLACK; 
    } 
   } 
  } 
  newPiece(); 
 } 


 // Put a new, random piece into the dropping position 
 public void newPiece() { 
  pieceOrigin = new Point(5, 2); 
  rotation = 0; 
  if (nextPieces.isEmpty()) { 
   Collections.addAll(nextPieces, 0, 1, 2, 3, 4, 5, 6); 
   Collections.shuffle(nextPieces); 
   Collections.addAll(nextnextPieces, 0, 1, 2, 3, 4, 5, 6); 
   Collections.shuffle(nextnextPieces); 
   currentPiece = nextPieces.get(0); 
   NextPiece = nextnextPieces.get(0); 
   nextnextPieces.remove(0); 
  }else if(!nextPieces.isEmpty()) { 
   Collections.addAll(nextnextPieces, 0, 1, 2, 3, 4, 5, 6); 
   Collections.shuffle(nextnextPieces); 
   currentPiece = NextPiece; 
  } 
  NextPiece = nextnextPieces.get(0); 
  nextnextPieces.remove(0); 
 } 


 // Collision test for the dropping piece 
 private boolean collidesAt(int x, int y, int rotation) { 
  for (Point p : Tetraminos[currentPiece][rotation]) { 
   if (well[p.x + x][p.y + y] != Color.BLACK) { 
    return true; 
   } 
  } 
  return false; 
 } 


 // Rotate the piece clockwise or counterclockwise 
 public void rotate(int i) { 
  int newRotation = (rotation + i) % 4; 
  if (newRotation < 0) { 
   newRotation = 3; 
  } 
  if (!collidesAt(pieceOrigin.x, pieceOrigin.y, newRotation)) { 
   rotation = newRotation; 
  } 
  repaint(); 
 } 


 // Move the piece left or right 
 public void move(int i) { 
  if (!collidesAt(pieceOrigin.x + i, pieceOrigin.y, rotation)) { 
   pieceOrigin.x += i; 
  } 
  repaint(); 
 } 


 // Drops the piece one line or fixes it to the well if it can't drop 
 public void dropDown() { 
  if (!collidesAt(pieceOrigin.x, pieceOrigin.y + 1, rotation)) { 
   pieceOrigin.y += 1; 
  } else { 
   fixToWell(); 
  } 
  repaint(); 
 } 


 // Make the dropping piece part of the well, so it is available for 
 // collision detection. 
 public void fixToWell() { 
  for (Point p : Tetraminos[currentPiece][rotation]) { 
   well[pieceOrigin.x + p.x][pieceOrigin.y + p.y] = tetraminoColors[currentPiece]; 
  } 
  clearRows(); 
  newPiece(); 
 } 


 public void deleteRow(int row) { 
  for (int j = row-1; j > 0; j--) { 
   for (int i = 1; i < 11; i++) { 
    well[i][j+1] = well[i][j]; 
   } 
  } 
 } 


 // Clear completed rows from the field and award score according to 
 // the number of simultaneously cleared rows. 
 public void clearRows() { 
  boolean gap; 
  int numClears = 0; 
  for (int j = 21; j > 0; j--) { 
   gap = false; 
   for (int i = 1; i < 11; i++) { 
    if (well[i][j] == Color.BLACK) { 
     gap = true; 
     break; 
    } 
   } 
   if (!gap) { 
    deleteRow(j); 
    j += 1; 
    numClears += 1; 
   } 
  } 
  switch (numClears) { 
  case 1: 
   score += 100; 
   break; 
  case 2: 
   score += 300; 
   break; 
  case 3: 
   score += 500; 
   break; 
  case 4: 
   score += 800; 
   break; 
  } 
 } 


 // Draw the falling piece 
 private void drawPiece(Graphics g) { 
  g.setColor(tetraminoColors[currentPiece]); 
  for (Point p : Tetraminos[currentPiece][rotation]) { 
   g.fillRect((p.x + pieceOrigin.x) * 26, 
        (p.y + pieceOrigin.y) * 26, 
        25, 25); 
  } 
 } 

 private void drawNextPiece(Graphics g) { 
  g.setColor(tetraminoColors[NextPiece]); 
  g.fillRect(5 * 68, 2 * 26, 25, 25); 
 } 

 @Override 
 public void paintComponent(Graphics g) 
 { 
  // Paint the well 
  g.fillRect(0, 0, 26*19, 26*23); 
  for (int i = 0; i < 19; i++) { 
   for (int j = 0; j < 23; j++) { 
    g.setColor(well[i][j]); 
    g.fillRect(26*i, 26*j, 25, 25); 
   } 
  } 

  // Display the score 
  Font font1 = new Font("Arial", Font.PLAIN, 20); 
  g.setFont(font1); 
  g.setColor(Color.RED); 
  g.drawString("SCORE : " + score, 19*12+85, 500); 
  g.drawString("NEXT", 5 * 63, 2 * 18); 

  // Draw the currently falling piece 
  drawPiece(g); 

  drawNextPiece(g); 
 } 


 public static void main(String[] args) { 
  JFrame f = new JFrame("Tetris"); 
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  f.setSize(12*40, 26*23+25); 
  f.setVisible(true); 

  final Tetris game = new Tetris(); 
  game.init(); 
  f.add(game); 

  // Keyboard controls 
  f.addKeyListener(new KeyListener() { 
   public void keyTyped(KeyEvent e) { 
   } 

   public void keyPressed(KeyEvent e) { 
    switch (e.getKeyCode()) { 
    case KeyEvent.VK_UP: 
     game.rotate(-1); 
     break; 
    case KeyEvent.VK_DOWN: 
     game.rotate(+1); 
     break; 
    case KeyEvent.VK_LEFT: 
     game.move(-1); 
     break; 
    case KeyEvent.VK_RIGHT: 
     game.move(+1); 
     break; 
    case KeyEvent.VK_SPACE: 
     game.dropDown(); 
     game.score += 1; 
     break; 
    } 
   } 

   public void keyReleased(KeyEvent e) { 
   } 
  }); 


  // Make the falling piece drop every second 
  new Thread() { 
   @Override public void run() { 
    while (true) { 
     try { 
      Thread.sleep(1000); 
      game.dropDown(); 
     } catch ( InterruptedException e ) {} 
    } 
   } 
  }.start(); 
 } 
}
import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Image;



import javax.swing.JPanel;



/*

 * Created on 2006/12/09

 */



public class NextBlockPanel extends JPanel {

    public static final int WIDTH = 96;

    public static final int HEIGHT = 400;



    private Block nextBlock;

    private Image blockImage;



    public NextBlockPanel() {

        setPreferredSize(new Dimension(WIDTH, HEIGHT));

    }



    public void paintComponent(Graphics g) {

        g.setColor(Color.BLACK);

        g.fillRect(0, 0, WIDTH, HEIGHT);



        // 次のブロックを描画

        if (nextBlock != null) {

            nextBlock.drawInPanel(g, blockImage);

        }

    }

    public void set(Block nextBlock, Image blockImage) {

        this.nextBlock = nextBlock;

        this.blockImage = blockImage;

        repaint();

    }

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • LouiS0616

    2018/01/25 17:40

    編集履歴を元に、質問内容を元に戻してください。

    キャンセル

  • 退会済みユーザー

    2018/01/25 22:24

    複数のユーザーから「意図的に内容が抹消された質問」という意見がありました
    解決後に編集機能を用いて質問内容を改変し関係のない内容にしたり、内容を削除する行為は禁止しています。
    投稿していただいた質問は、後に他の誰かが困ったときに助けになる情報資産になると考えるからです。
    「質問を編集する」ボタンから編集を行い、他のユーザにも質問内容が見えるように修正してください。

回答 1

checkベストアンサー

+1

このコードはあなたが作ったものではないようですね。
元コードを理解していれば、このような全く違う描画ロジックを採用するはずがないからです。
とりあえず、やっつけで座標調整等はしてないですが、次ブロック表示機能を入れてみましたので、載せておきます。
作ったパネルはmain()のところでadd()しています。これを踏まえて、スタートボタンや点数表示などを追加してみてはいかがですか?

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Tetris extends JPanel {

    private static final long serialVersionUID = -8715353373678321308L;
    private final Point[][][] Tetraminos = {
            // I-Piece
            { { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(3, 1) },
                    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(1, 3) },
                    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(3, 1) },
                    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(1, 3) } },
            // J-Piece
            { { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(2, 0) },
                    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(2, 2) },
                    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(0, 2) },
                    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(0, 0) } },
            // L-Piece
            { { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(2, 2) },
                    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(0, 2) },
                    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(0, 0) },
                    { new Point(1, 0), new Point(1, 1), new Point(1, 2), new Point(2, 0) } },
            // O-Piece
            { { new Point(0, 0), new Point(0, 1), new Point(1, 0), new Point(1, 1) },
                    { new Point(0, 0), new Point(0, 1), new Point(1, 0), new Point(1, 1) },
                    { new Point(0, 0), new Point(0, 1), new Point(1, 0), new Point(1, 1) },
                    { new Point(0, 0), new Point(0, 1), new Point(1, 0), new Point(1, 1) } },
            // S-Piece
            { { new Point(1, 0), new Point(2, 0), new Point(0, 1), new Point(1, 1) },
                    { new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 2) },
                    { new Point(1, 0), new Point(2, 0), new Point(0, 1), new Point(1, 1) },
                    { new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 2) } },
            // T-Piece
            { { new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(2, 1) },
                    { new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(1, 2) },
                    { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(1, 2) },
                    { new Point(1, 0), new Point(1, 1), new Point(2, 1), new Point(1, 2) } },
            // Z-Piece
            { { new Point(0, 0), new Point(1, 0), new Point(1, 1), new Point(2, 1) },
                    { new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(0, 2) },
                    { new Point(0, 0), new Point(1, 0), new Point(1, 1), new Point(2, 1) },
                    { new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(0, 2) } } };
    private final Color[] tetraminoColors = { Color.cyan, Color.blue, Color.orange, Color.yellow, Color.green,
            Color.pink, Color.red };
    private Point pieceOrigin;
    private int preparedPiece = -1;
    private int currentPiece = -1;
    private int rotation;
    private ArrayList<Integer> nextPieces = new ArrayList<Integer>();
    private long score;
    private Color[][] well;

    private static NextBlockPanel nextBlockpanel;

    // Creates a border around the well and initializes the dropping piece
    private void init() {
        well = new Color[12][24];
        for (int i = 0; i < 12; i++) {
            for (int j = 0; j < 23; j++) {
                if (i == 0 || i == 11 || j == 22) {
                    well[i][j] = Color.GRAY;
                } else {
                    well[i][j] = Color.BLACK;
                }
            }
        }
        newPiece();
    }

    // Put a new, random piece into the dropping position
    public void newPiece() {
        pieceOrigin = new Point(5, 2);
        rotation = 0;
        if (nextPieces.isEmpty()) {
            Collections.addAll(nextPieces, 0, 1, 2, 3, 4, 5, 6);
            Collections.shuffle(nextPieces);
        }
        if (preparedPiece == -1) {
            currentPiece = createIndex();
            preparedPiece = createIndex();
        } else {
            currentPiece = preparedPiece;
            preparedPiece = createIndex();
        }
        nextBlockpanel.setPiece(
                preparedPiece,
                Tetraminos[preparedPiece][0],
                tetraminoColors[preparedPiece]);
    }

    public int createIndex() {
        rotation = 0;
        if (nextPieces.isEmpty()) {
            Collections.addAll(nextPieces, 0, 1, 2, 3, 4, 5, 6);
            Collections.shuffle(nextPieces);
        }
        int index = nextPieces.get(0);
        nextPieces.remove(0);
        return index;
    }

    // Collision test for the dropping piece
    private boolean collidesAt(int x, int y, int rotation) {
        for (Point p : Tetraminos[currentPiece][rotation]) {
            if (well[p.x + x][p.y + y] != Color.BLACK) {
                return true;
            }
        }
        return false;
    }

    // Rotate the piece clockwise or counterclockwise
    public void rotate(int i) {
        int newRotation = (rotation + i) % 4;
        if (newRotation < 0) {
            newRotation = 3;
        }
        if (!collidesAt(pieceOrigin.x, pieceOrigin.y, newRotation)) {
            rotation = newRotation;
        }
        repaint();
    }

    // Move the piece left or right
    public void move(int i) {
        if (!collidesAt(pieceOrigin.x + i, pieceOrigin.y, rotation)) {
            pieceOrigin.x += i;
        }
        repaint();
    }

    // Drops the piece one line or fixes it to the well if it can't drop
    public void dropDown() {
        if (!collidesAt(pieceOrigin.x, pieceOrigin.y + 1, rotation)) {
            pieceOrigin.y += 1;
        } else {
            fixToWell();
        }
        repaint();
    }

    // Make the dropping piece part of the well, so it is available for
    // collision detection.
    public void fixToWell() {
        for (Point p : Tetraminos[currentPiece][rotation]) {
            well[pieceOrigin.x + p.x][pieceOrigin.y + p.y] = tetraminoColors[currentPiece];
        }
        clearRows();
        newPiece();
    }

    public void deleteRow(int row) {
        for (int j = row - 1; j > 0; j--) {
            for (int i = 1; i < 11; i++) {
                well[i][j + 1] = well[i][j];
            }
        }
    }

    // Clear completed rows from the field and award score according to
    // the number of simultaneously cleared rows.
    public void clearRows() {
        boolean gap;
        int numClears = 0;
        for (int j = 21; j > 0; j--) {
            gap = false;
            for (int i = 1; i < 11; i++) {
                if (well[i][j] == Color.BLACK) {
                    gap = true;
                    break;
                }
            }
            if (!gap) {
                deleteRow(j);
                j += 1;
                numClears += 1;
            }
        }
        switch (numClears) {
        case 1:
            score += 100;
            break;
        case 2:
            score += 300;
            break;
        case 3:
            score += 500;
            break;
        case 4:
            score += 800;
            break;
        }
    }

    // Draw the falling piece
    private void drawPiece(Graphics g) {
        g.setColor(tetraminoColors[currentPiece]);
        for (Point p : Tetraminos[currentPiece][rotation]) {
            g.fillRect((p.x + pieceOrigin.x) * 26, (p.y + pieceOrigin.y) * 26, 25, 25);
        }
    }

    @Override
    public void paintComponent(Graphics g) {
        // Paint the well
        g.fillRect(0, 0, 26 * 12, 26 * 23);
        for (int i = 0; i < 12; i++) {
            for (int j = 0; j < 23; j++) {
                g.setColor(well[i][j]);
                g.fillRect(26 * i, 26 * j, 25, 25);
            }
        }

        // Display the score
        g.setColor(Color.WHITE);
        g.drawString("" + score, 19 * 12, 25);
        // Draw the currently falling piece
        drawPiece(g);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Tetris");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(600, 650);
        f.setLayout(null);
        f.getContentPane().setBackground(Color.darkGray);
        f.setVisible(true);
        final Tetris game = new Tetris();
        game.setBounds(30, 20, 12 * 26 + 10, 26 * 23 + 25);
        nextBlockpanel = new NextBlockPanel();
        nextBlockpanel.setBackground(Color.WHITE);
        nextBlockpanel.setBounds(370, 20,26*6, 26*6);
        game.init();
        f.add(game);
        f.add(nextBlockpanel);

        // Keyboard controls
        f.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
            }

            public void keyPressed(KeyEvent e) {
                switch (e.getKeyCode()) {
                case KeyEvent.VK_UP:
                    game.rotate(-1);
                    break;
                case KeyEvent.VK_DOWN:
                    game.rotate(+1);
                    break;
                case KeyEvent.VK_LEFT:
                    game.move(-1);
                    break;
                case KeyEvent.VK_RIGHT:
                    game.move(+1);
                    break;
                case KeyEvent.VK_SPACE:
                    game.dropDown();
                    game.score += 1;
                    break;
                }
            }

            public void keyReleased(KeyEvent e) {
            }
        });

        // Make the falling piece drop every second
        new Thread() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(1000);
                        game.dropDown();
                    } catch (InterruptedException e) {
                    }
                }
            }
        }.start();
    }
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;

import javax.swing.JPanel;

/*
 * Created on 2006/12/09
 */
public class NextBlockPanel extends JPanel {

    public static final int WIDTH = 26 * 6;
    public static final int HEIGHT = 26 * 6;

    private int bid;
    private Color color;
    private Point[] points;

    public NextBlockPanel() {
        setPreferredSize(new Dimension(WIDTH, HEIGHT));
    }

    public void setPiece(int bid, Point[] points, Color color) {

        this.bid = bid;
        this.points = points;
        this.color = color;

        repaint();
    }

    public void paintComponent(Graphics g) {

        g.setColor(Color.BLACK);
        g.fillRect(0, 0, WIDTH, HEIGHT);

        drawPiece(g);
    }

    private void drawPiece(Graphics g) {

        if (points == null) return;

        int bx = 39, by = 52;
        if (bid == 0) { bx = 26; by = 39; }
        else if (bid == 2) by = 26;
        else if (bid == 3) bx = 52;
        g.setColor(color);
        for (Point p : points) {
            g.fillRect(p.x * 26 + bx, p.y * 26 + by, 25, 25);
        }
    }
}

追記:ブロック位置の調整も入れてみました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/25 17:22

    初歩的な理解が出来ていなかったです。参考になりました。
    ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    12117questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。