Здравствуйте! В данный момент я изучаю апплеты в Java и мне дали задачу написать игру "Жизнь". У меня возник вопрос, можно ли как-то нарисовать поле так, чтобы потом его не перерисовывать, а перерисовывать только клетки. Я пытался через Canvas, но ничего не получилось. Может подскажете?
Собственно код
Код апплета
Код:
package Life;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/*
* <applet code = "MainApplet" width=500 height = 400> </applet>
*/
public class LifeApplet extends Applet implements Runnable, KeyListener, MouseListener {
Thread t = null;
boolean stopFlag, cells[][], mouse_clk = false, key_pressed = false;
Life l;
Background back;
@Override
public void init() {
//setBackground(Color.RED);
//setForeground(Color.GREEN);
setLayout(null);
back = new Background((float) 100);
add(back);
back.setLocation(0, 0);
//back
addKeyListener(this);
addMouseListener(this);
this.setFocusable(true);
}
@Override
public void start() {
t = new Thread(this);
t.setPriority(5);
stopFlag = false;
t.start();
}
public void run() {
back.repaint();
while (!key_pressed) {
if (mouse_clk) {
repaint();
}
}
for (;;) {
try {
repaint();
Thread.sleep(500);
l.simulate();
if (!stopFlag) {
break;
}
} catch (InterruptedException e) {
showStatus("Thread was interrupted");
}
}
}
@Override
public void stop() {
stopFlag = false;
t = null;
}
@Override
public final void paint(Graphics g) {
}
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void keyPressed(KeyEvent e) {
if (e.equals(KeyEvent.VK_ENTER)) {
key_pressed = true;
}
}
public void keyReleased(KeyEvent e) {
if (key_pressed) {
key_pressed = false;
}
}
public void mouseClicked(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void mousePressed(MouseEvent e) {
if (e.equals(MouseEvent.BUTTON1)) {
mouse_clk = true;
}
}
public void mouseReleased(MouseEvent e) {
if (mouse_clk) {
int x = e.getX();
int y = e.getY();
mouse_clk = false;
cells[x / 7 + 1][y / 7 + 1] = !cells[x / 7 + 1][y / 7 + 1];
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
Код Canvas'a
Код:
import java.awt.*;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
public class Background extends Canvas {
Color g;
public Background(Float g) {
this.g = Color.black;
}
public final void paint(Graphics gr) {
Dimension size = getSize();
gr.setColor(Color.BLACK);
gr.fillRect(0, 0, size.width, size.width);
gr.setColor(Color.red);
for (int x = 0; x <= size.width; x += 7) {
gr.drawLine(x, 0, size.width, size.width);
}
for (int y = 0; y <= size.width; y += 7) {
gr.drawLine(0, y, size.width, size.width);
}
}
}