Привет, я начинающий программист, и это мой проект 2048, но он не работает, и я не могу понять, в чем проблема
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; 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.HashMap; import java.util.Random; import javax.swing.JFrame; public class MyGame extends JFrame implements KeyListener { private static final int size = 100; private Font font = new Font("TimesRoman", Font.BOLD, 20); private HashMap cLu = new HashMap() { { put(0, new Color(0xcdc1b4)); put(2, new Color(0xeee4da)); put(4, new Color(0xede0c8)); put(8, new Color(0xf2b179)); put(16, new Color(0xf59563)); put(32, new Color(0xf67c5f)); put(64, new Color(0xf65e3b)); put(128, new Color(0xedcf72)); put(256, new Color(0xedcc61)); put(512, new Color(0xedc850)); put(1024, new Color(0xedc53f)); put(2048, new Color(0xedc22e)); } }; private int[][] grill = new int[4][4]; public void init() { appear(1); addKeyListener(this); } private void appear(int h) { ArrayList available = new ArrayList<>(); for (int i = 0; i = 0; j--) { if (grill[i][j] == 0 && grill[i][j + 1] == 0) { continue; } if (grill[i][j] == grill[i][j + 1]) { grill[i][j + 1] = grill[i][j] * 2; grill[i][j] = 0; } else if (grill[i][j + 1] == 0) { grill[i][j + 1] = grill[i][j]; grill[i][j] = 0; j = grill[0].length - 1; } } } } else if (m == KeyEvent.VK_LEFT) { for (int j = 0; j = 0; i--) { if (grill[i][j] == 0 && grill[i + 1][j] == 0) { continue; } if (grill[i][j] == grill[i + 1][j]) { grill[i + 1][j] = 2 * grill[i][j]; grill[i][j] = 0; } else if (grill[i + 1][j] == 0) { grill[i + 1][j] = grill[i][j]; grill[i][j] = 0; i = grill.length - 1; } } } } } @Override public void paint(Graphics g) { g.clearRect(0, 0, grill.length, grill[0].length); FontMetrics fm = g.getFontMetrics(); g.setFont(font); for (int i = 0; i < grill.length; i++) { for (int j = 0; j < grill[0].length; j++) { g.setColor(cLu.get(grill[i][j])); g.fillRoundRect(i * size, j * size, 95,95, 40, 40); //g.setColor(cLu.get(0)); // g.drawRect(i * size, j * size, size, size); g.setColor(new Color(0x776e65)); String number = String.valueOf(grill[i][j]); // center the number on top of the square int x = (i * size) + (size / 2) - (fm.stringWidth(number) / 2); int y = (j * size) + (size / 2) + (fm.getAscent() / 2); g.drawString(number, x, y); } } } @Override public void keyTyped(KeyEvent e) { int a = e.getKeyCode(); if (a == KeyEvent.VK_UP || a == KeyEvent.VK_DOWN || a == KeyEvent.VK_RIGHT || a == KeyEvent.VK_LEFT) { move(a); appear(1); repaint(); } } public static void main(String[] args) { JFrame frame = new JFrame(); MyGame m = new MyGame(); frame.setVisible(true); frame.setTitle("2048"); frame.setSize(410, 448); frame.setLocationRelativeTo(null); frame.add(m, BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void keyPressed(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } }
Что я уже пробовал:
я хочу использовать фрейм, но у него есть исключение в потоке "main" java.lang.IllegalArgumentException: добавление окна в контейнер
мольбы о помощи !
Спасибо^-^
Patrice T
Пожалуйста, покажите положение ошибки в коде.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.