Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Jagi125

Problem z powtarzaniem wykonywania programu

Polecane posty

Witam!

Piszę właśnie pierwszy program graficzny "Snake" i napotkałem na problem z powtarzaniem programu. Program po włączeniu wykonuje się nie wiedzieć czemu 2 razy?!, a chciałbym aby powtarzał się do czasu wyłączenia programu. Oto mój tekst źródłowy (na razie bez obsługi klawiatury, tylko poruszający się w prawo wąż):

import java.awt.EventQueue;

public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new Window();
}
});
}
}

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

public class Window extends JFrame{
public Window() {
super("Snake");

JPanel area = new Area();

add(area);
pack();

setLocation(400, 250);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}

import java.awt.*;
import java.awt.geom.*;

import javax.swing.JPanel;

import java.util.List;
import java.util.ArrayList;

public class Area extends JPanel {

private int[][] area = new int[50][30];
private boolean isFirst = true;
private List<Integer> snakePoz = new ArrayList<Integer>();
private int turnSnake = 0;

public Area() {
setPreferredSize(new Dimension(501, 301));
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;

Rectangle2D rectangle = new Rectangle2D.Double(0, 0, 500, 300);

g2d.draw(rectangle);

snake();
madeArea();

Ellipse2D snakeDraw;

for(int i = 0; i < 50; i++){
for(int j = 0; j < 30; j++) {
switch(area[i][j]) {
case 0:
break;
case 1:
snakeDraw = new Ellipse2D.Double( i * 10, j * 10, 10, 10);
g2d.fill(snakeDraw);
}
}
}

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private void snake() {
if(!isFirst) {
for(int i = snakePoz.size() - 1; i > 0; i-- ) {
snakePoz.set(i, snakePoz.get(i - 1));
}
switch(turnSnake) {
case 0:
snakePoz.set(0, snakePoz.get(1) + 100);
break;
case 1:
snakePoz.set(0, snakePoz.get(1) - 1);
break;
case 2:
snakePoz.set(0, snakePoz.get(1) - 100);
break;
case 3:
snakePoz.set(0, snakePoz.get(1) + 1);
}
} else {
snakePoz.add(2615);
snakePoz.add(2515);
snakePoz.add(2415);
isFirst = false;
}

int x = 1;
System.out.println("wykonanie: " + x);
}

private void madeArea() {

int i, j;

for(i = 0; i < 50; i++) {
for(j = 0; j < 30; j++) {
area[i][j] = 0;
}
}

int wartosc;
int x;
int y;

for(i = 0; i < snakePoz.size(); i++) {
wartosc = snakePoz.get(i);
x = (int) wartosc / 100;
y = (int) wartosc - x * 100;
area[x][y] = 1;
}
}
}

Nie wiem co jest źle i jakoś nie potrafię znaleźć w tym błędu, może jakiś MainLoop na końcu jak w OpenGL'u?

I jeśli ma to jakieś znaczenie dodam, że piszę na Linuxie CruchBang (#!).

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...