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