diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..fb565a5
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..4a39d37
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ TerorTron
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..7341ab1
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/bin/Game/Bullet.class b/bin/Game/Bullet.class
new file mode 100644
index 0000000..315837a
Binary files /dev/null and b/bin/Game/Bullet.class differ
diff --git a/bin/Game/ContolersPanel.class b/bin/Game/ContolersPanel.class
new file mode 100644
index 0000000..e2aff2f
Binary files /dev/null and b/bin/Game/ContolersPanel.class differ
diff --git a/bin/Game/GameFrame.class b/bin/Game/GameFrame.class
new file mode 100644
index 0000000..a2644cf
Binary files /dev/null and b/bin/Game/GameFrame.class differ
diff --git a/bin/Game/GameLogic.class b/bin/Game/GameLogic.class
new file mode 100644
index 0000000..d69d316
Binary files /dev/null and b/bin/Game/GameLogic.class differ
diff --git a/bin/Game/GamePanel.class b/bin/Game/GamePanel.class
new file mode 100644
index 0000000..5840687
Binary files /dev/null and b/bin/Game/GamePanel.class differ
diff --git a/bin/Game/ImagePanel.class b/bin/Game/ImagePanel.class
new file mode 100644
index 0000000..e7cabb6
Binary files /dev/null and b/bin/Game/ImagePanel.class differ
diff --git a/bin/Game/Invisibility.class b/bin/Game/Invisibility.class
new file mode 100644
index 0000000..4d3282c
Binary files /dev/null and b/bin/Game/Invisibility.class differ
diff --git a/bin/Game/LengthNode.class b/bin/Game/LengthNode.class
new file mode 100644
index 0000000..ca596ad
Binary files /dev/null and b/bin/Game/LengthNode.class differ
diff --git a/bin/Game/MenuPanel.class b/bin/Game/MenuPanel.class
new file mode 100644
index 0000000..5cd69f4
Binary files /dev/null and b/bin/Game/MenuPanel.class differ
diff --git a/bin/Game/Player.class b/bin/Game/Player.class
new file mode 100644
index 0000000..936f442
Binary files /dev/null and b/bin/Game/Player.class differ
diff --git a/bin/Game/WellcomePanel.class b/bin/Game/WellcomePanel.class
new file mode 100644
index 0000000..8d5bc2c
Binary files /dev/null and b/bin/Game/WellcomePanel.class differ
diff --git a/bin/TESTER1.class b/bin/TESTER1.class
new file mode 100644
index 0000000..c7f8fb1
Binary files /dev/null and b/bin/TESTER1.class differ
diff --git a/bin/ctrl.png b/bin/ctrl.png
new file mode 100644
index 0000000..5478915
Binary files /dev/null and b/bin/ctrl.png differ
diff --git a/bin/wellcome.png b/bin/wellcome.png
new file mode 100644
index 0000000..e426c72
Binary files /dev/null and b/bin/wellcome.png differ
diff --git a/src/Game/Bullet.java b/src/Game/Bullet.java
new file mode 100644
index 0000000..eef9a05
--- /dev/null
+++ b/src/Game/Bullet.java
@@ -0,0 +1,125 @@
+package Game;
+
+import java.awt.Color;
+import java.awt.Graphics;
+
+public class Bullet {
+ private int x, y, direction;
+ private LengthNode other;
+ private Color color;
+ public static int SIZE = Player.THIKNES, PIX_PER_STEP = 1,
+ STILL_GO = 0, HIT = 1, OUT_OF_GRID = 2;
+
+
+ private int hitPointX, hitPointY;
+ public Bullet(int x, int y, int direction, LengthNode other)
+ {
+ color = Color.WHITE;
+ this.x = x;
+ this.y = y;
+ this.direction = direction;
+ this.other = other;
+ }
+
+
+
+ public int getX() {
+ return x;
+ }
+
+
+
+ public int getY() {
+ return y;
+ }
+
+
+
+
+ public int getHitPointX() {
+ return hitPointX;
+ }
+
+
+
+ public int getHitPointY() {
+ return hitPointY;
+ }
+
+
+
+ public int fireStep(int maxWidth, int maxHeight)
+ {
+ switch(direction)
+ {
+ case 1: //up
+ y -= PIX_PER_STEP;
+ return presentState(maxWidth, maxHeight);
+
+ case 2: //down
+ y += PIX_PER_STEP;
+ return presentState(maxWidth, maxHeight);
+
+ case 3: //left
+ x -= PIX_PER_STEP;
+ return presentState(maxWidth, maxHeight);
+
+ case 4: //right
+ x += PIX_PER_STEP;
+ return presentState(maxWidth, maxHeight);
+ }
+ return presentState(maxWidth, maxHeight);
+ }
+
+ private int presentState(int maxWidth, int maxHeight)
+ {
+ if(didHit())
+ return HIT;
+ else if(outOfGrid(maxWidth, maxHeight))
+ return OUT_OF_GRID;
+ else
+ return STILL_GO;
+ }
+
+
+ private boolean didHit()
+ {
+ LengthNode p = other;
+ for(; p.getNext() != null; p = p.getNext()){
+ if(p.getNext().getX() == this.x && this.y == p.getNext().getY()){
+ System.out.println("HIT! HIT! HIT!");
+ p.setNext(null);
+ x = -1000;
+ y = -1000;
+ return true;
+ }
+ }
+ //****** DEBUG ****
+ System.out.println("not hit");
+ // **** end debug ****
+ return false;
+ }
+
+
+
+ private boolean outOfGrid(int maxWidth, int maxHeight)
+ {
+ if((this.x < 0 - SIZE) || (this.y < 0 - SIZE) || (this.x >= maxWidth + SIZE) || (this.y >= maxHeight + SIZE)){
+ // *** DEBUG
+
+ System.out.println("OUT!");
+ return true;
+ }
+ else
+ return false;
+ }
+
+ public void draw(Graphics g)
+ {
+ g.setColor(color);
+ g.fillOval(x, y, SIZE, SIZE);
+ }
+
+
+
+}
diff --git a/src/Game/ContolersPanel.java b/src/Game/ContolersPanel.java
new file mode 100644
index 0000000..f910bfe
--- /dev/null
+++ b/src/Game/ContolersPanel.java
@@ -0,0 +1,28 @@
+package Game;
+
+import java.awt.Color;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+
+
+public class ContolersPanel extends JPanel{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ ImageIcon ctrl;
+
+ public ContolersPanel(){
+ ClassLoader loader = ContolersPanel.class.getClassLoader();
+ setBackground(Color.BLACK);
+ ctrl = new ImageIcon(loader.getResource("ctrl.png"));
+
+ add(new JLabel(ctrl));
+ }
+
+
+}
diff --git a/src/Game/GameFrame.java b/src/Game/GameFrame.java
new file mode 100644
index 0000000..9cd2d2d
--- /dev/null
+++ b/src/Game/GameFrame.java
@@ -0,0 +1,91 @@
+package Game;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.WindowConstants;
+
+public class GameFrame extends JFrame implements ActionListener{
+
+ public static final int FRAME_WIDTH = 1197, FRAME_HEIGHT = 899;
+
+ private JMenuBar menuBar;
+ private JMenu menu;
+ private JMenuItem start, controls, exit;
+
+ public GamePanel gamePanel;
+ private ContolersPanel controlersPanel;
+ private WellcomePanel welcome;
+
+ public GameFrame()
+ {
+ setSize(FRAME_WIDTH, FRAME_HEIGHT);
+ setTitle("TronTeror Version 0.5.1 beta - by SagiDayan");
+ setResizable(false);
+
+ //*************** Menu Bar *******************
+
+ menuBar = new JMenuBar();
+ menu = new JMenu("Menu");
+ start = new JMenuItem("Start Game");
+ controls = new JMenuItem("controlers");
+ menu.add(start);
+ menu.add(controls);
+ menuBar.add(menu);
+
+ start.addActionListener(this);
+ controls.addActionListener(this);
+ //add menuBar to frame
+
+
+ this.setJMenuBar(menuBar);
+
+ //End Menu.
+
+
+
+ setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+ welcome = new WellcomePanel();
+ controlersPanel = new ContolersPanel();
+ gamePanel = new GamePanel();
+
+
+ //gamePanel.addKeyListener(gamePanel);
+
+ add(welcome);
+
+
+ setVisible(true);
+
+
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ if(e.getSource() == controls)
+ {
+ System.out.println("controles");
+ welcome.setVisible(false);
+ gamePanel.setVisible(false);
+ add(controlersPanel);
+ controlersPanel.setVisible(true);
+ }
+ else if( e.getSource() == start)
+ {
+ welcome.setVisible(false);
+ controlersPanel.setVisible(false);
+ gamePanel.setVisible(true);
+ add(gamePanel);
+ gamePanel.start();
+ }
+
+ }
+
+}
diff --git a/src/Game/GameLogic.java b/src/Game/GameLogic.java
new file mode 100644
index 0000000..1243753
--- /dev/null
+++ b/src/Game/GameLogic.java
@@ -0,0 +1,199 @@
+package Game;
+
+import java.awt.Color;
+import java.awt.Graphics;
+
+import javax.swing.JOptionPane;
+
+public class GameLogic {
+ private Player player1, player2;
+ private int width, height;
+ private Color colorP1, colorP2;
+
+ private Bullet bullet1, bullet2;
+
+ // **** Invisibility *****
+
+ private boolean inVisibilityHappend;
+ private Invisibility invisibleMod;
+
+
+ public GameLogic(int maxWidth, int maxHeight)
+ {
+ width = maxWidth;
+ height = maxHeight;
+ colorP1 = new Color(3,3,173);
+ colorP2 = new Color(173, 3, 3 );
+
+ inVisibilityHappend = false;
+ invisibleMod = new Invisibility(maxWidth, maxHeight);
+
+ player1 = new Player(getNewName("Please enter Player 1 Name"), Player.LEFT, colorP1, width - 300, 420, 0); //starts from right to left!
+ player2 = new Player(getNewName("Now, Please enter Player 2 Name"), Player.RIGHT, colorP2, 0 + 300, 420, 0); //starts from left to right!
+ }
+
+
+ private String getNewName(String s){
+ return JOptionPane.showInputDialog(s);
+ }
+
+ public void setP1Direction(int direct)
+ {
+ player1.setDirection(direct);
+ }
+
+ public void setP2Direction(int direct)
+ {
+ player2.setDirection(direct);
+ }
+
+ public String getP1Name()
+ {
+ return player1.getName();
+ }
+
+ public String getP2Name()
+ {
+ return player2.getName();
+ }
+
+ public int getPlayer1Point()
+ {
+ return player1.getPoints();
+ }
+
+ public int getPlayer2Point()
+ {
+ return player2.getPoints();
+ }
+
+ public Player getP1(){
+ return player1;
+ }
+
+ public Player getP2(){
+ return player2;
+ }
+
+
+
+
+ public Bullet getBullet1() {
+ return bullet1;
+ }
+
+
+ public Bullet getBullet2() {
+ return bullet2;
+ }
+
+
+ public boolean stepAndOk()
+ {
+
+ player1.step();
+ player2.step();
+ inVisibilityHappend = invisibleMod.makePoint(player1, player2);
+ if(inVisibilityHappend)
+ {
+ checkPlayersVisibility();
+ }
+ if(player1.loosed(player2, width, height))
+ {
+ player2.addPoints();
+ return false;
+ }
+ else if(player2.loosed(player1, width, height))
+ {
+ player1.addPoints();
+ return false;
+ }
+ return true;
+ }
+
+ public void fire(Player p)
+ {
+ if(!p.isCanFire())
+ return;
+ if(p == player1)
+ {
+ bullet1 = new Bullet(player1.getHead().getX(), player1.getHead().getY(), player1.getDirection(), player2.getHead());
+ return;
+ }
+ else if(p == player2)
+ {
+ bullet2 = new Bullet(player2.getHead().getX(), player2.getHead().getY(), player2.getDirection(), player1.getHead());
+ return;
+ }
+ }
+
+
+
+
+ public void bulletStep(Graphics g, int bulletState)
+ {
+
+ //Player1 Shoots
+ try{ //Freezes game and shoots
+ if(bulletState == Bullet.STILL_GO)
+ bullet1.draw(g);
+ else
+ player1.setCanFire(false);
+ }catch (Exception e) {
+ System.out.println("no bullet to p1");
+ }
+ //Player2 shoots
+ try{ //Freezes game and shoots
+ bulletState = bullet2.fireStep(width, height);
+ if(bulletState == Bullet.STILL_GO)
+ bullet2.draw(g);
+ else
+ player2.setCanFire(false);
+ }catch (Exception e) {
+ System.out.println("no bullet to p2");
+ }
+ }
+
+ public void restart()
+ {
+ player1 = new Player(player1.getName(), Player.LEFT, colorP1,width - 300, 420, player1.getPoints());
+ player2 = new Player(player2.getName(), Player.RIGHT, colorP2, 0 + 300, 420, player2.getPoints());
+ inVisibilityHappend = false;
+ invisibleMod = new Invisibility(width, height);
+ }
+
+ public void checkPlayersVisibility()
+ {
+ int x = invisibleMod.getX();
+ int y = invisibleMod.getY();
+
+ if(player1.getHead().getX() == x && player1.getHead().getY() == y)
+ invisibleModOn(player1, true);
+ else if(player2.getHead().getX() == x && player2.getHead().getY() == y)
+ invisibleModOn(player2, true);
+ }
+
+ public void invisibleModOn(Player p, boolean switcher)
+ {
+ if(switcher)
+ {
+ System.out.println("got The Shit!!!");
+ p.setIsVisible(false);
+ invisibleMod.setX(-200);
+ invisibleMod.setY(-200);
+ }
+ else
+ p.setIsVisible(true);
+ }
+
+
+
+ public void draw(Graphics g)
+ {
+ player1.draw(g);
+ player2.draw(g);
+ if(inVisibilityHappend)
+ invisibleMod.draw(g);
+ }
+
+}
diff --git a/src/Game/GamePanel.java b/src/Game/GamePanel.java
new file mode 100644
index 0000000..65ead29
--- /dev/null
+++ b/src/Game/GamePanel.java
@@ -0,0 +1,243 @@
+package Game;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.Timer;
+
+public class GamePanel extends JPanel implements ActionListener, KeyListener{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private MenuPanel topPanel;
+ private GameLogic logic;
+
+ private JLabel lblScore;
+
+ boolean p1Fire, p2Fire;
+
+ public static final int W = 1195, H = 855;
+
+ /*
+ *
+ * Setup TIMERS & LISTENERS !!!
+ *
+ */
+
+
+ Timer timerGeneral;
+ Timer timerBullet;
+
+ public GamePanel() {
+
+
+ setBackground(Color.BLACK);
+ setLayout(new BorderLayout());
+ setSize(W, H);
+
+
+
+ logic = new GameLogic(W, H);
+ lblScore = new JLabel(logic.getP2Name()+": "+logic.getPlayer2Point()+" "+logic.getP1Name()+": "+logic.getPlayer1Point());
+ lblScore.setForeground(Color.WHITE);
+ lblScore.setHorizontalAlignment(JLabel.CENTER);
+
+ add(lblScore, BorderLayout.SOUTH);
+
+ //TEST!!!!
+ timerGeneral = new Timer(30, this);
+ timerBullet = new Timer(1, this);
+
+
+ }
+
+ private void p1Fire()
+ {
+
+ logic.fire(logic.getP1());
+ p1Fire = true;
+ timerBullet.start();
+
+ }
+
+
+ private void p2Fire()
+ {
+ logic.fire(logic.getP2());
+ p2Fire = true;
+ timerBullet.start();
+ }
+
+ public void paintComponent(Graphics g)
+ {
+ super.paintComponent(g);
+ if(timerBullet.isRunning())
+ paintBullets(g);
+ logic.draw(g);
+ g.setColor(Color.CYAN); //paint borders
+ g.drawRect(0, 0, W-1, H-1);
+ }
+
+
+ private void paintBullets(Graphics g)
+ {
+ if(p1Fire)
+ {
+ int bulletState = logic.getBullet1().fireStep(W, H);
+ if(bulletState == Bullet.STILL_GO){ // CHANGE 500 TODO
+ logic.draw(g);
+ logic.bulletStep(g, bulletState);
+ }
+ else{
+ logic.draw(g);
+ p1Fire = false;
+ timerBullet.stop();
+ }
+
+ }
+ else if(p2Fire)
+ {
+ int bulletState = logic.getBullet2().fireStep(W, H);
+
+ if(bulletState == Bullet.STILL_GO){ // CHANGE 500 TODO
+ logic.draw(g);
+ logic.bulletStep(g, bulletState);
+ }
+ else{
+ logic.draw(g);
+ p2Fire = false;
+ timerBullet.stop();
+ }
+
+ }
+
+ }
+
+ public void start(){
+
+ logic.restart();
+ timerGeneral.start();
+ System.out.println(getWidth()+" "+getHeight());
+ }
+
+ /*
+ *
+ * Actions! Timers, and keyActions will be down here!
+ *
+ */
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ if(e.getSource()==timerGeneral)
+ {
+
+ if(logic.stepAndOk())
+ repaint();
+ else
+ {
+ //logic.stepAndOk();
+ timerGeneral.stop();
+ System.out.println("FUCK!");
+ lblScore.setText(logic.getP2Name()+": "+logic.getPlayer2Point()+" "+logic.getP1Name()+": "+logic.getPlayer1Point());
+ }
+ repaint();
+ }
+ if(e.getSource() == timerBullet)
+ {
+ repaint();
+ }
+
+
+
+ }
+
+ @Override
+ public void keyPressed(KeyEvent e) {
+ /*
+ * Player1 Controls
+ */
+ if(e.getKeyCode() == KeyEvent.VK_SPACE)
+ {
+ if(logic.getP1().isCanFire()){
+ p1Fire();
+
+ logic.getP1().setCanFire(false);
+ }
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_DOWN){
+ if(logic.getP1().getDirection() != Player.UP)
+ logic.setP1Direction(Player.DOWN);
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_UP){
+ if(logic.getP1().getDirection() != Player.DOWN)
+ logic.setP1Direction(Player.UP);
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_LEFT){
+ if(logic.getP1().getDirection() != Player.RIGHT)
+ logic.setP1Direction(Player.LEFT);
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
+ if(logic.getP1().getDirection() != Player.LEFT)
+ logic.setP1Direction(Player.RIGHT);
+ }
+
+ /*
+ * Player2 Controls
+ */
+ if(e.getKeyCode() == KeyEvent.VK_CONTROL)
+ {
+ if(logic.getP2().isCanFire()){
+ p2Fire();
+
+ logic.getP2().setCanFire(false);
+ }
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_S){
+ if(logic.getP2().getDirection() != Player.UP)
+ logic.setP2Direction(Player.DOWN);
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_W){
+ if(logic.getP2().getDirection() != Player.DOWN)
+ logic.setP2Direction(Player.UP);
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_A){
+ if(logic.getP2().getDirection() != Player.RIGHT)
+ logic.setP2Direction(Player.LEFT);
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_D){
+ if(logic.getP2().getDirection() != Player.LEFT)
+ logic.setP2Direction(Player.RIGHT);
+ }
+
+ if(e.getKeyCode() == KeyEvent.VK_F2)
+ {
+ start();
+ }
+ }
+
+ @Override
+ public void keyReleased(KeyEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void keyTyped(KeyEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+}
diff --git a/src/Game/ImagePanel.java b/src/Game/ImagePanel.java
new file mode 100644
index 0000000..f7738c4
--- /dev/null
+++ b/src/Game/ImagePanel.java
@@ -0,0 +1,20 @@
+package Game;
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+public class ImagePanel extends JPanel{
+
+ private BufferedImage image;
+ JLabel l;
+ public ImagePanel() {
+ setBackground(Color.DARK_GRAY);
+ l = new JLabel();
+ l.setIcon(new ImageIcon("Resource/images.png"));
+ add(l);
+ validate();
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/src/Game/Invisibility.java b/src/Game/Invisibility.java
new file mode 100644
index 0000000..37b45f7
--- /dev/null
+++ b/src/Game/Invisibility.java
@@ -0,0 +1,101 @@
+package Game;
+
+import java.awt.Color;
+import java.awt.Graphics;
+
+public class Invisibility {
+
+ private boolean goodPoint;
+ private static int SIZE = 5;
+ private int width, height, x, y;
+ private Color color;
+ private boolean show;
+
+ public Invisibility(int width, int height)
+ {
+ goodPoint = false;
+ this.width = width;
+ this.height = height;
+ color = Color.CYAN;
+ show = false;
+
+
+ }
+
+ public void draw(Graphics g)
+ {
+ g.setColor(color);
+ g.fillRect(x, y, SIZE, SIZE);
+ }
+
+ public boolean makePoint(Player p1, Player p2)
+ {
+ if(goodPoint)
+ if(showPowerUp() || show)
+ return true;
+ else
+ return false;
+
+ x = (int)(Math.random() * width);
+ if(x % Player.THIKNES != 0)
+ return false;
+ y = (int)(Math.random() * height);
+ if(y % Player.THIKNES != 0)
+ return false;
+
+ for(LengthNode p = p1.getHead(); p.getNext() != null ; p = p.getNext())
+ {
+ if(x == p.getX() && y == p.getY())
+ return false;
+ }
+
+ for(LengthNode p = p2.getHead(); p.getNext() != null ; p = p.getNext())
+ {
+ if(x == p.getX() && y == p.getY())
+ return false;
+ }
+ goodPoint = true;
+ return true;
+
+ }
+
+ public boolean isGoodPoint() {
+ return goodPoint;
+ }
+
+ public void setGoodPoint(boolean goodPoint) {
+ this.goodPoint = goodPoint;
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public int getY() {
+ return y;
+ }
+
+ public void setY(int y) {
+ this.y = y;
+ }
+
+ public boolean showPowerUp()
+ {
+ int c = (int)(Math.random() * 10000);
+ if(c <= 10)
+ {
+ show = true;
+ System.out.println("POWER UP!!!!!");
+ return true;
+ }
+ return false;
+ }
+
+
+
+
+}
diff --git a/src/Game/LengthNode.java b/src/Game/LengthNode.java
new file mode 100644
index 0000000..011907a
--- /dev/null
+++ b/src/Game/LengthNode.java
@@ -0,0 +1,51 @@
+package Game;
+
+public class LengthNode {
+
+
+ private int x, y;
+ private LengthNode next;
+
+ public LengthNode(int x, int y, LengthNode next)
+ {
+ this.x = x;
+ this.y = y;
+ this.next = next;
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public int getY() {
+ return y;
+ }
+
+ public void setY(int y) {
+ this.y = y;
+ }
+
+ public LengthNode getNext() {
+ return next;
+ }
+
+ public void setNext(LengthNode next) {
+ this.next = next;
+ }
+
+ public boolean sameValues(LengthNode other)
+ {
+ if(other.getX() == this.getX() && this.getY() == other.getY())
+ return true;
+ else
+ return false;
+ }
+
+
+
+
+}
diff --git a/src/Game/MenuPanel.java b/src/Game/MenuPanel.java
new file mode 100644
index 0000000..7e48ee2
--- /dev/null
+++ b/src/Game/MenuPanel.java
@@ -0,0 +1,51 @@
+package Game;
+import javax.swing.*;
+import java.awt.*;
+
+
+
+public class MenuPanel extends JPanel{
+
+ private JButton button_start;
+ private JLabel p1, p2;
+ private int score1, score2;
+ String name1, name2;
+
+
+
+ public MenuPanel(String name1, String name2, int score1, int score2) {
+ setBackground(Color.DARK_GRAY);
+ this.score1 = score1;
+ this.score2 = score2;
+ this.name1 = name1;
+ this.name2 = name2;
+ p1 = new JLabel();
+ p2 = new JLabel();
+ p1.setForeground(Color.WHITE);
+ p2.setForeground(Color.WHITE);
+ p1.setText(""+this.name1+": "+score1);
+ p2.setText(""+this.name2+": "+score2);
+
+ setLayout(new BorderLayout(20, 0));
+ add(p1, BorderLayout.WEST);
+ add(new ImagePanel(), BorderLayout.CENTER);
+ add(p2, BorderLayout.EAST);
+
+ }
+
+ public void updateScore(int score1, int score2){
+ this.score1 = score1;
+ this.score2 = score2;
+ String s = ""+this.name1+": "+this.score1;
+ p1 = new JLabel(s);
+ System.out.println(p1.getText());
+ s = ""+this.name2+": "+this.score2;
+ p2.setText(s);
+ System.out.println("======");
+ System.out.println(""+this.name1+": "+this.score1);
+ System.out.println(""+this.name2+": "+this.score2);
+ System.out.println("======");
+
+ }
+
+}
diff --git a/src/Game/Player.java b/src/Game/Player.java
new file mode 100644
index 0000000..abcdfcb
--- /dev/null
+++ b/src/Game/Player.java
@@ -0,0 +1,151 @@
+package Game;
+
+import java.awt.Color;
+import java.awt.Graphics;
+
+public class Player {
+
+ private String name;
+ private int direction, points, intvisibleStepCount;
+ private LengthNode head;
+ private Color color;
+ private boolean canFire;
+ private boolean isVisible, flicker;
+
+
+ public static int UP = 1, DOWN = 2, LEFT = 3, RIGHT = 4;
+
+
+ public static int PIX_PER_STEP = 5, THIKNES = 5;
+
+ public Player(String name, int direction, Color color, int x, int y, int point)
+ {
+ this.name = name;
+ this.direction = direction;
+ this.color = color;
+ head = new LengthNode(x, y, null);
+ canFire = true;
+ points = point;
+ isVisible = true;
+ flicker = false;
+ intvisibleStepCount = 0;
+ }
+
+
+
+ public boolean isCanFire() {
+ return canFire;
+ }
+
+ public void setIsVisible(boolean bol)
+ {
+ isVisible = bol;
+ }
+
+ public void setCanFire(boolean canFire) {
+ this.canFire = canFire;
+ }
+
+ public boolean getCanFire() {
+ return canFire;
+ }
+
+
+
+ public int getPoints() {
+ return points;
+ }
+
+ public void addPoints() {
+ this.points++;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setDirection(int direction) {
+ this.direction = direction;
+ }
+
+
+
+ public int getDirection() {
+ return direction;
+ }
+
+
+
+ public LengthNode getHead() {
+ return head;
+ }
+
+ public void step()
+ {
+ switch(direction)
+ {
+ case 1: //up
+ head = new LengthNode(head.getX(), head.getY() - PIX_PER_STEP, head);
+ break;
+ case 2: //down
+ head = new LengthNode(head.getX(), head.getY() + PIX_PER_STEP, head);
+ break;
+ case 3: //left
+ head = new LengthNode(head.getX() - PIX_PER_STEP, head.getY(), head);
+ break;
+ case 4: //right
+ head = new LengthNode(head.getX() + PIX_PER_STEP, head.getY(), head);
+ break;
+ }
+
+ if(!isVisible)
+ intvisibleStepCount++;
+ if(intvisibleStepCount == 300)
+ isVisible = true;
+ }
+
+
+
+ public boolean loosed(Player other, int maxWidth, int maxHeight)
+ {
+ //====player hit himself===
+ for(LengthNode p = head.getNext(); p.getNext() != null ; p = p.getNext())
+ if(head.sameValues(p))
+ return true;
+ //===player hit other player====
+ for(LengthNode p = other.getHead(); p.getNext() != null ; p = p.getNext())
+ if(head.sameValues(p))
+ return true;
+ //=== player hit border of grid ==
+ if(head.getX() < 0 || head.getY() < 0 || head.getX() > maxWidth + THIKNES || head.getY() > maxHeight + THIKNES)
+ return true;
+
+ return false;
+ }
+
+
+ public void draw(Graphics g)
+ {
+ g.setColor(color);
+ LengthNode p = head;
+ if(isVisible)
+ for(;p != null; p=p.getNext())
+ g.fillRect(p.getX(), p.getY(), THIKNES, THIKNES); //All Player
+ else //just head and body flicking
+ if(flicker){
+ for(;p != null; p=p.getNext())
+ g.fillRect(p.getX(), p.getY(), THIKNES, THIKNES);
+ flicker = false;
+ }else{
+ g.fillRect(p.getX(), p.getY(), THIKNES, THIKNES);
+ int flickerOdds = (int)(Math.random() * 10);
+ if(flickerOdds < 1)
+ flicker = true;
+ }
+ }
+
+}
+
+
+
+
diff --git a/src/Game/WellcomePanel.java b/src/Game/WellcomePanel.java
new file mode 100644
index 0000000..7372abc
--- /dev/null
+++ b/src/Game/WellcomePanel.java
@@ -0,0 +1,27 @@
+package Game;
+import java.awt.Color;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+
+
+public class WellcomePanel extends JPanel{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2L;
+ ImageIcon wlcm;
+
+ public WellcomePanel(){
+ ClassLoader loader = ContolersPanel.class.getClassLoader();
+ setBackground(Color.BLACK);
+ wlcm = new ImageIcon(loader.getResource("wellcome.png"));
+
+ add(new JLabel(wlcm));
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/TESTER1.java b/src/TESTER1.java
new file mode 100644
index 0000000..18fae6b
--- /dev/null
+++ b/src/TESTER1.java
@@ -0,0 +1,17 @@
+import Game.GameFrame;
+import Game.GamePanel;
+
+
+public class TESTER1 {
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+
+ GameFrame f = new GameFrame();
+ f.addKeyListener(f.gamePanel);
+
+ }
+
+}
diff --git a/src/ctrl.png b/src/ctrl.png
new file mode 100644
index 0000000..5478915
Binary files /dev/null and b/src/ctrl.png differ
diff --git a/src/wellcome.png b/src/wellcome.png
new file mode 100644
index 0000000..e426c72
Binary files /dev/null and b/src/wellcome.png differ