1

我正在尝试使用 java 制作俄罗斯方块游戏,但是我目前只是想在我的游戏网格上显示一个形状...我查看了我的代码,但找不到任何错误或错误,这意味着这不起作用?

这是我的主要课程,称为俄罗斯方块6。

package tetris6;


import java.awt.Graphics;
import javax.swing.*;


public class Tetris6 {

    public static final int WIDTH = 400, HEIGHT = 825;


    public static void main(String[] args) {

    GamePanel gamePanel = new GamePanel();

    JFrame frame = new JFrame();
    frame.setLayout(null);
    frame.setResizable(false);
    frame.setSize(WIDTH,HEIGHT);
    frame.setTitle("Tetris");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(MenuBar.MenuBar());
    frame.add(BoardGrid.GameGrid());
    frame.add(gamePanel);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);


    }

}

这是我的类,它使用 JPanels 创建网格。

public class BoardGrid {    


    public static JPanel GameGrid () {  


        JPanel Grid = new JPanel (new GridLayout(20,10));

        for (int i=0; i < 200; i++){

        Grid.add(createSquareJPanel(Color.white,30));


        }

        Grid.setVisible(true);
        Grid.setBorder(BorderFactory.createLineBorder(Color.white));
        Grid.setBounds(0,50,400,625);

        return Grid;

        }

    private static JPanel createSquareJPanel(Color color, int size)
    {
        JPanel tempPanel = new JPanel();
        tempPanel.setBackground(color);
        tempPanel.setMinimumSize(new Dimension(size, size));
        tempPanel.setMaximumSize(new Dimension(size, size));
        tempPanel.setPreferredSize(new Dimension(size, size));
        tempPanel.setBorder(BorderFactory.createLineBorder(Color.blue));
        return tempPanel;
    }

}

这是我在其中创建菜单栏的类。

package tetris6;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import static tetris6.Tetris6.WIDTH;

/**
 *
 */
public class MenuBar {

    public static JMenuBar MenuBar () {



    JMenuBar bar = new JMenuBar();
    bar.setBounds(0,0, WIDTH, 25);

    JMenu file = new JMenu("File");
    file.setBounds(0,0,45,24);

    JMenuItem newGame = new JMenuItem("New Game");
    newGame.addActionListener(new ActionListener(){
       @Override
       public void actionPerformed(ActionEvent e){
           //code for new game
           System.out.println("Starting new game...");
       }
    });

    JMenuItem highScore = new JMenuItem("High Score");
    highScore.addActionListener(new ActionListener(){
       @Override
       public void actionPerformed(ActionEvent f){
           int highscore = 0; //replace this with getHighscoreMethod later
           final JFrame alert = new JFrame("HighScore");
           alert.setSize(200,200);
           alert.setLayout(null);
           alert.setLocationRelativeTo(null);

           JLabel score = new JLabel ("The highscore is " + highscore);
           score.setBounds(35,0,200,50);

           JButton okayButton = new JButton("Okay");
           okayButton.setBounds(50,120,100,30);
           okayButton.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                alert.dispose();
            }   
           });
           alert.add(score);
           alert.add(okayButton);
           alert.setResizable(false);
           alert.setVisible(true);
       }
    });

    JMenuItem exit = new JMenuItem("Exit");
    exit.addActionListener(new ActionListener(){
       @Override
       public void actionPerformed(ActionEvent g){
           System.out.println("Closing...");
           System.exit(0);
       }
    });


    file.add(newGame);
    file.add(highScore);
    file.add(exit);
    bar.add(file);

    return bar;

}

}

这是我创建俄罗斯方块形状的课程。

package tetris6;

import java.awt.Color;
import java.awt.Graphics2D;

public class Shape {

    public static void main () {


    }

    //Creating the tetris shapes and the rotated shapes    

public static Graphics2D O(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.yellow);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(30,30,30,30);

  return tetrisShape;
}

public static Graphics2D T_up(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.magenta);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(60,30,30,30);

  return tetrisShape;
}

public static Graphics2D T_right(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.magenta);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(0,60,30,30);
  tetrisShape.fillRect(30,30,30,30);

  return tetrisShape;
}

public static Graphics2D T_left(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.magenta);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(30,60,30,30);

  return tetrisShape;
}

public static Graphics2D T_down(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.magenta);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(60,0,30,30);
  tetrisShape.fillRect(30,30,30,30);

  return tetrisShape;
}

public static Graphics2D I_vertical(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.cyan);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(0,60,30,30);
  tetrisShape.fillRect(0,90,30,30);

  return tetrisShape;
}

public static Graphics2D I_horizontal(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.cyan);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(60,0,30,30);
  tetrisShape.fillRect(90,0,30,30);

  return tetrisShape;
}

public static Graphics2D S_horizontal(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.red);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(60,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(30,30,30,30);

  return tetrisShape;
}

public static Graphics2D S_vertical(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.red);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(30,60,30,30);

  return tetrisShape;
}

public static Graphics2D Z_horizontal(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.green);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(60,30,30,30);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(30,0,30,30);

  return tetrisShape;
}

public static Graphics2D Z_vertical(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.green);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(0,60,30,30);

  return tetrisShape;
}

public static Graphics2D J_vertical_left(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.blue);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(30,60,30,30);
  tetrisShape.fillRect(0,60,30,30);

  return tetrisShape;
}

public static Graphics2D J_vertical_right(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.blue);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(0,60,30,30);
  tetrisShape.fillRect(30,0,30,30);

  return tetrisShape;
}

public static Graphics2D J_horizontal_up(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.blue);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(60,30,30,30);
  tetrisShape.fillRect(0,0,30,30);

  return tetrisShape;
}

public static Graphics2D J_horizontal_down(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.blue);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(60,0,30,30);
  tetrisShape.fillRect(60,30,30,30);

  return tetrisShape;
}

public static Graphics2D L_vertical_right(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.orange);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(0,60,30,30);
  tetrisShape.fillRect(30,60,30,30);

  return tetrisShape;
}

public static Graphics2D L_vertical_left(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.orange);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(30,60,30,30);

  return tetrisShape;
}

public static Graphics2D L_horizontal_up(Graphics2D tetrisShape)
{
  tetrisShape.setColor(Color.orange);
  tetrisShape.fillRect(60,0,30,30);
  tetrisShape.fillRect(0,30,30,30);
  tetrisShape.fillRect(30,30,30,30);
  tetrisShape.fillRect(60,30,30,30);

  return tetrisShape;
}

public static Graphics2D L_horizontal_down(Graphics2D tetrisShape)
{

  tetrisShape.setColor(Color.orange);
  tetrisShape.fillRect(0,0,30,30);
  tetrisShape.fillRect(30,0,30,30);
  tetrisShape.fillRect(60,0,30,30);
  tetrisShape.fillRect(0,30,30,30);

  return tetrisShape;
}

//finished creating the tetrominoes

}

这是我试图将矩形绘制到 JPanel 上的类。

package tetris6;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

/**
 *
 */
public class GamePanel extends JPanel {

    public void paintComponent (Graphics g) {

        super.paintComponent(g);

        //set the panel to overlap the game grid
        setBounds(0,50,400,625);
        //draw the tetris shape at the top middle of the grid
        g.setColor(Color.yellow);
        g.fillRect(160, 0, 80, 80);

        setVisible(true);



    }

}
4

1 回答 1

0

如果您没有合理的理由,请避免使用 setLayout (null)。删除以下代码。将显示矩形。

如果您仍然必须使用 null 布局,则必须设置组件的宽度和高度,以及它的 x 和 y 位置。在您的俄罗斯方块6 类中删除 setLayout(null);

   JFrame frame = new JFrame();
   //frame.setLayout(null);   // remove this line.
于 2014-01-24T13:51:22.977 回答