Я создаю игру Connect 4 с использованием Java в процессе изучения языка.
Я сделал небольшую ячейку Connect 4, которая в основном представляет собой продолжение холста, где я закрашиваю каждый пиксель в синий или прозрачный цвет, если он находится в радиусе диска.
Проблема с моим кодом заключается в том, что ячейка не окрашивается сразу, я вижу, как все пиксели окрашиваются один за другим, образуя мою ячейку примерно через 6-7 секунд.
Я хотел бы нарисовать такую ячейку, чтобы разместить ее в сетке и сформировать мою сетку Connect 4.
Что я делаю не так?
Пытался искать решения в интернете, но пока не нашел. Я не могу использовать SWING.
package Puis4;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
public class Vue_Cellule_Grille extends Canvas {
// Attributs
int width;
int height;
// Constructeur
public Vue_Cellule_Grille() {
}
public Vue_Cellule_Grille(int width, int height) {
this.width = width;
this.height = height;
}
// Methodes
public void paint(Graphics g) {
// TODO : Afficher lorsque c'est peint.
int width = this.getWidth();
int height = this.getHeight();
int centreX = width/2;
int centreY = height/2;
Double diametre = this.getWidth() * 0.80;
Double rayon = diametre/2;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
Double distance = Math.sqrt(Math.pow(centreX-i, 2.0) + Math.pow(centreY-j, 2.0));
if (distance > rayon) {
g.setColor(Color.BLUE);
} else {
// Le constructeur prends les valeurs RGB en float et pas en double.
g.setColor(new Color((float) 1.0,(float) 1.0, (float) 1.0, (float) 0.5));
}
g.fillRect(i, j, 1, 1);
}
}
}
}
package Puis4;
import java.awt.Frame;
import java.awt.LayoutManager;
public class Vue_Plateau extends Frame {
// Main de Test
public Vue_Plateau() {
super("Cellule Grille du Plateau");
this.setBounds(600, 600, 300, 300);
this.addWindowListener(new Controlleur_Fermer_Plateau(this));
// Layout & composants
Vue_Cellule_Grille v = new Vue_Cellule_Grille();
this.add(v);
this.setVisible(true);
}
}
package Puis4;
public class Test {
public static void main(String[] args) {
new Vue_Plateau();
}
}
Мне бы хотелось, чтобы мой расширенный холст рисовался точно так же, как я это делал в методе рисования, как только я его вызываю, чтобы поместить его в GridLayout или любой LayoutManager.