package work; import java.util.*; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.MediaTracker; import java.awt.geom.Arc2D; import java.awt.image.BufferedImage; import java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; public class Work extends JFrame { private Image background; private int j=0, // номер кадра x=8, // початкові координати центра круга y=250, xmax=800, // розміри поля по горизонталі ymax=450, // розміри поля по вертикалі dy=25, // висота заголовку вікна програми r=8, // радіус круга s=2, // приріст коорднати за зміну одного кадру igame=0, // стан гри idir =0, // напрям руху xb, // найбільше досягнуте значення абсциси jb, // номер точки траєкторії з найбільшим // досягнутим значенням абсциси jt; // поточний номер точки траєкторії при поверненні // у точку "відриву" за найменшу кількість кроків boolean incjt; // зростання поточного номера точки траєкторії // при поверненні у "точку відриву від перешкоди" // за найменшу кількість кроків LinkedList t = new LinkedList();// траєкторія огинання перешкоди BufferedImage bi; // буфер зображення для виведення на екран // і визначення кольорів пікселів Timer timer; public Work (String s) { super(s); MediaTracker tr = new MediaTracker(this); background = getToolkit().getImage("field.png"); // завантаження зображення лісу tr.addImage(background, 0); try { tr.waitForAll ();} // очікування на завантаження всіх зображень catch (InterruptedException e) {}; setSize(xmax, ymax+dy); // вказати розміри вікна setVisible(true); // зробити вікно видимим setDefaultCloseOperation(EXIT_ON_CLOSE); // припинити виконання програми при закритті вікна timer = new Timer(); timer.schedule(new Step(), 3000, // початкова затримка 1*100); // проміжок часу між послідовними викликами } @Override public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; int w = getSize().width, // отримати ширину вікна h = getSize().height; // отримати висоту вікна bi = (BufferedImage) createImage(w, h);// створити буфер зображення Graphics2D big = bi.createGraphics(); // отримати його графічний контекст big.drawImage(background,0,25,this); // вивести зображенння поля big.setColor(Color.white); // білий колір малювання big.fill(new Arc2D.Double(x-r,y-r,2*r,2*r,0,360,Arc2D.OPEN)); // намалювати круг g2.drawImage(bi, 0, 0, this); // вивести зображення-буфер на экран } class Step extends TimerTask { @Override public void run() { if (x+r< xmax) { repaint(); x+=s; }} } public static void main(String[] args) { Work f = new Work("Java: рух з оминанням перешкод"); } }