Zıplayan ve aynı zamanda çarpışan toplar için java kodları.
Hareket ve çarpışma fonksiyonları ile gerekli hesaplar ve dosyalar aşağıdadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package ziplayantoplar; import javax.swing.JFrame; /** @author http://tasarhane.com */ public class Main { public static int genislik = 500; public static int yukseklik = 450; public static void main(String[] args) { JFrame pencere = new JFrame ("Ziplayan Toplar"); pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pencere.setSize(genislik,yukseklik); Arayuz arayuz = new Arayuz(); pencere.add(arayuz); pencere.setVisible(true); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
package ziplayantoplar; import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel; /** @author http://tasarhane.com */ public class Arayuz extends JPanel implements Runnable { Top top1, top2, top3; double top12x, top12y, mesafe12, top13x, top13y, mesafe13, top23x, top23y, mesafe23; Thread islem; public Arayuz() { top1 = new Top(150, 150, 80, Color.green); top2 = new Top(90, 90, 60, Color.black); top3 = new Top(250, 200, 45, Color.blue); top1.isleXHiz(6); top1.isleYHiz(7); top2.isleXHiz(4); top2.isleYHiz(5); top3.isleXHiz(2); top3.isleYHiz(4); islem = new Thread(this); islem.start(); } @Override public void paintComponent(Graphics buMetotDegeri) { super.paintComponent(buMetotDegeri); top1.ciz(buMetotDegeri); top2.ciz(buMetotDegeri); top3.ciz(buMetotDegeri); } @Override public void run() { while (true) { top1.hareket(); top2.hareket(); top3.hareket(); carpisma(); repaint(); try { Thread.sleep(15); } catch (InterruptedException ex) { } } } public void carpisma() { int carp1 = 3; int carp2 = 14; int carp3 = 8; int bol = 11; top12x = Math.abs(top1.getirX() - top2.getirX()); top12y = Math.abs(top1.getirY() - top2.getirY()); mesafe12 = top12x * top12x + top12y * top12y; if (mesafe12 < (top1.getirCap() / 2 + top2.getirCap() / 2) * (top1.getirCap() / 2 + top2.getirCap() / 2)){ double yeniXHizA = (top1.getirXHiz() * -carp1 + (carp2 * top2.getirXHiz())) / bol; double yeniXHizB = (top2.getirXHiz() * carp1 + (carp3 * top1.getirXHiz())) / bol; double yeniYHizA = (top1.getirYHiz() * -carp1 + (carp2 * top2.getirYHiz())) / bol; double yeniYHizB = (top2.getirYHiz() * carp1 + (carp3 * top1.getirYHiz())) / bol; top2.isleXHiz(yeniXHizB); top2.isleYHiz(yeniYHizB); top1.isleXHiz(yeniXHizA); top1.isleYHiz(yeniYHizA); } top13x = Math.abs(top1.getirX() - top3.getirX()); top13y = Math.abs(top1.getirY() - top3.getirY()); mesafe13 = top13x * top13x + top13y * top13y; if (mesafe13 < (top1.getirCap() / 2 + top3.getirCap() / 2) * (top1.getirCap() / 2 + top3.getirCap() / 2)){ double yeniXHizA = (top1.getirXHiz() * -carp1 + (carp2 * top3.getirXHiz())) / bol; double yeniXHizB = (top3.getirXHiz() * carp1 + (carp3 * top1.getirXHiz())) / bol; double yeniYHizA = (top1.getirYHiz() * -carp1 + (carp2 * top3.getirYHiz())) / bol; double yeniYHizB = (top3.getirYHiz() * carp1 + (carp3 * top1.getirYHiz())) / bol; top3.isleXHiz(yeniXHizB); top3.isleYHiz(yeniYHizB); top1.isleXHiz(yeniXHizA); top1.isleYHiz(yeniYHizA); } top23x = Math.abs(top2.getirX() - top3.getirX()); top23y = Math.abs(top2.getirY() - top3.getirY()); mesafe23 = top23x * top23x + top23y * top23y; if (mesafe23 < (top2.getirCap() / 2 + top3.getirCap() / 2) * (top2.getirCap() / 2 + top3.getirCap() / 2)){ double yeniXHizA = (top2.getirXHiz() * carp1 + (carp2 * top3.getirXHiz())) / bol; double yeniXHizB = (top3.getirXHiz() * carp1 + (carp3 * top2.getirXHiz())) / bol; double yeniYHizA = (top2.getirYHiz() * carp1 + (carp2 * top3.getirYHiz())) / bol; double yeniYHizB = (top3.getirYHiz() * carp1 + (carp3 * top2.getirYHiz())) / bol; top3.isleXHiz(yeniXHizB); top3.isleYHiz(yeniYHizB); top2.isleXHiz(yeniXHizA); top2.isleYHiz(yeniYHizA); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
package ziplayantoplar; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; /** @author http://tasarhane.com */ public class Top { Color renk; private float x, y, cap; private double xHiz, yHiz; public Top(float x, float y, float cap, Color renk) { this.x = x; this.y = y; this.cap = cap; this.renk = renk; } public void ciz(Graphics buMetotDegeri) { Graphics2D grafik = (Graphics2D) buMetotDegeri; Ellipse2D.Double cember = new Ellipse2D.Double(x - cap / 2, y - cap / 2, cap, cap); grafik.setColor(renk); grafik.fill(cember); } public void hareket() { isleX((float) (x + xHiz)); if (x - cap / 2 < 0) { x = cap / 2; xHiz = -xHiz; } else if (x + cap / 2 > Main.genislik) { xHiz = -xHiz; } isleY((float) (y + yHiz)); if (y - cap / 2 < 0) { yHiz = -yHiz; } else if (y + cap / 2 > Main.yukseklik) { y = Main.yukseklik - cap / 2; yHiz = -yHiz; } } public double getirXHiz(){return xHiz;} public void isleXHiz(double buMetotDegeri){this.xHiz = buMetotDegeri;} public double getirYHiz(){return yHiz;} public void isleYHiz(double buMetotDegeri){this.yHiz = buMetotDegeri;} public float getirX(){return x;} public void isleX(float buMetotDegeri){this.x = buMetotDegeri;} public float getirY(){return y;} public void isleY(float buMetotDegeri){this.y = buMetotDegeri;} public float getirCap(){return cap;} public void isleCap(float buMetotDegeri){this.cap = buMetotDegeri;} } |