java貪食蛇遊戲
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
import java.util.Random;
public class MainClass extends JFrame
{ ControlSnake control;
Toolkit kit;Dimension dimen;
public static void main(String[] args)
{
new MainClass("貪食蛇");
}
public MainClass(String s) {
super(s);
control = new ControlSnake();
control.setFocusable(true);
kit = Toolkit.getDefaultToolkit();
dimen = kit.getScreenSize();
add(control);
setLayout(new BorderLayout());
setLocation(dimen.width/3, dimen.height/3);
setSize(FWIDTH, FHEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false);
setVisible(true);
}
public static final int FWIDTH = 400;
public static final int FHEIGHT = 450;}
class ControlSnake extends JPanel implements ActionListener {
Random rand;
ArrayList<Point> list, listBody;
String str, str1;
static boolean key;
int x, y, dx, dy, fx, fy, flag;
int snakeBody;
int speed;
public ControlSnake() { snakeBody = 1;
str = "上UP下DOWN左RIGHT右LEFT方向鍵控制 P鍵暫停";
str1 = "現在的長度爲:" + snakeBody;
key = true; flag = 1;
speed = 170;rand = new Random();
list = new ArrayList<Point>();
listBody = new ArrayList<Point>();
x = 5;
y = 5;
list.add(new Point(x, y));
listBody.add(list.get(0));
dx = 10;
dy = 0;
fx = rand.nextInt(30) * 10 + 5;
fy = rand.nextInt(30) * 10 + 5;
setBackground(Color.WHITE);
setSize(new Dimension(400, 500));
final Timer time = new Timer(speed, this);
time.start();
addKeyListener
(new KeyAdapter()
{ public void keyPressed(KeyEvent e)
{if (e.getKeyCode() == 37) { dx = -10;
dy = 0;
} else if (e.getKeyCode() == 38)
{ dx = 0;
dy = -10;}
else if (e.getKeyCode() == 39)
{ dx = 10;
dy = 0;
} else if (e.getKeyCode() == 40)
{ dx = 0;
dy = 10;
} else if
(e.getKeyCode() == 80)
{ if (flag % 2 == 1)
{ time.stop();
}if (flag % 2 == 0)
{ time.start(); } flag++;
} } });
}
public void paint(Graphics g)
{ g.setColor(Color.white);
g.fillRect(0, 0, 305, 305);
g.setColor(Color.DARK_GRAY);
g.drawLine(3, 3, 305, 3);
g.drawLine(3, 3, 3, 305);
g.drawLine(305, 3, 305, 305);
g.drawLine(3, 305, 305, 305);
g.setColor(Color.pink);
for (int i = 0; i < listBody.size(); i++)
{g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);
}g.fillRect(x, y, 9, 9);
g.setColor(Color.orange); g.fillRect(fx, fy, 9, 9);
g.setColor(Color.DARK_GRAY);
str1 = "現在的長度爲:" + snakeBody;
g.drawString(str, 10, 320);
g.drawString(str1, 10, 335);
}public void actionPerformed(ActionEvent e)
{ x += dx;
y+= dy;
if (makeOut() == false)
{ JOptionPane.showConfirmDialog(null,"重新開始?");
speed = 700;
snakeBody = 1;
x = 5;
y = 5;
list.clear();
list.add(new Point(x, y));
listBody.clear();
listBody.add(list.get(0));
dx = 10;
dy = 0;
} addPoint(x, y);
if (x == fx && y == fy)
{speed = (int) (speed * 0.8);
if (speed < 200)
{ speed = 100; }
fx = rand.nextInt(30) * 10 + 5;
fy = rand.nextInt(30) * 10 + 5;
snakeBody=snakeBody+5;
}
repaint();
} public void addPoint(int xx, int yy)
{
if(list.size() < 100)
{
list.add(new Point(xx, yy));}
else
{list.remove(0); list.add(new Point(xx, yy)); }
if (snakeBody == 1) {listBody.remove(0);
listBody.add(0, list.get(list.size() - 1));
}
else {listBody.clear();
if (list.size() < snakeBody)
{for (int i = list.size() - 1; i > 0; i--)
{ listBody.add(list.get(i)); }}
else { for (int i = list.size() - 1;
listBody.size() < snakeBody; i--)
{listBody.add(list.get(i));
} } } }
public boolean makeOut()
{if ((x < 3 || y < 3) || (x > 305 || y > 305)) { return false; }
for (int i = 0;
i < listBody.size() - 1; i++)
{for (int j = i + 1; j < listBody.size();
j++) {if (listBody.get(i).equals(listBody.get(j)))
{ return false; } } } return true;}}
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
import java.util.Random;
public class MainClass extends JFrame
{ ControlSnake control;
Toolkit kit;Dimension dimen;
public static void main(String[] args)
{
new MainClass("貪食蛇");
}
public MainClass(String s) {
super(s);
control = new ControlSnake();
control.setFocusable(true);
kit = Toolkit.getDefaultToolkit();
dimen = kit.getScreenSize();
add(control);
setLayout(new BorderLayout());
setLocation(dimen.width/3, dimen.height/3);
setSize(FWIDTH, FHEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false);
setVisible(true);
}
public static final int FWIDTH = 400;
public static final int FHEIGHT = 450;}
class ControlSnake extends JPanel implements ActionListener {
Random rand;
ArrayList<Point> list, listBody;
String str, str1;
static boolean key;
int x, y, dx, dy, fx, fy, flag;
int snakeBody;
int speed;
public ControlSnake() { snakeBody = 1;
str = "上UP下DOWN左RIGHT右LEFT方向鍵控制 P鍵暫停";
str1 = "現在的長度爲:" + snakeBody;
key = true; flag = 1;
speed = 170;rand = new Random();
list = new ArrayList<Point>();
listBody = new ArrayList<Point>();
x = 5;
y = 5;
list.add(new Point(x, y));
listBody.add(list.get(0));
dx = 10;
dy = 0;
fx = rand.nextInt(30) * 10 + 5;
fy = rand.nextInt(30) * 10 + 5;
setBackground(Color.WHITE);
setSize(new Dimension(400, 500));
final Timer time = new Timer(speed, this);
time.start();
addKeyListener
(new KeyAdapter()
{ public void keyPressed(KeyEvent e)
{if (e.getKeyCode() == 37) { dx = -10;
dy = 0;
} else if (e.getKeyCode() == 38)
{ dx = 0;
dy = -10;}
else if (e.getKeyCode() == 39)
{ dx = 10;
dy = 0;
} else if (e.getKeyCode() == 40)
{ dx = 0;
dy = 10;
} else if
(e.getKeyCode() == 80)
{ if (flag % 2 == 1)
{ time.stop();
}if (flag % 2 == 0)
{ time.start(); } flag++;
} } });
}
public void paint(Graphics g)
{ g.setColor(Color.white);
g.fillRect(0, 0, 305, 305);
g.setColor(Color.DARK_GRAY);
g.drawLine(3, 3, 305, 3);
g.drawLine(3, 3, 3, 305);
g.drawLine(305, 3, 305, 305);
g.drawLine(3, 305, 305, 305);
g.setColor(Color.pink);
for (int i = 0; i < listBody.size(); i++)
{g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);
}g.fillRect(x, y, 9, 9);
g.setColor(Color.orange); g.fillRect(fx, fy, 9, 9);
g.setColor(Color.DARK_GRAY);
str1 = "現在的長度爲:" + snakeBody;
g.drawString(str, 10, 320);
g.drawString(str1, 10, 335);
}public void actionPerformed(ActionEvent e)
{ x += dx;
y+= dy;
if (makeOut() == false)
{ JOptionPane.showConfirmDialog(null,"重新開始?");
speed = 700;
snakeBody = 1;
x = 5;
y = 5;
list.clear();
list.add(new Point(x, y));
listBody.clear();
listBody.add(list.get(0));
dx = 10;
dy = 0;
} addPoint(x, y);
if (x == fx && y == fy)
{speed = (int) (speed * 0.8);
if (speed < 200)
{ speed = 100; }
fx = rand.nextInt(30) * 10 + 5;
fy = rand.nextInt(30) * 10 + 5;
snakeBody=snakeBody+5;
}
repaint();
} public void addPoint(int xx, int yy)
{
if(list.size() < 100)
{
list.add(new Point(xx, yy));}
else
{list.remove(0); list.add(new Point(xx, yy)); }
if (snakeBody == 1) {listBody.remove(0);
listBody.add(0, list.get(list.size() - 1));
}
else {listBody.clear();
if (list.size() < snakeBody)
{for (int i = list.size() - 1; i > 0; i--)
{ listBody.add(list.get(i)); }}
else { for (int i = list.size() - 1;
listBody.size() < snakeBody; i--)
{listBody.add(list.get(i));
} } } }
public boolean makeOut()
{if ((x < 3 || y < 3) || (x > 305 || y > 305)) { return false; }
for (int i = 0;
i < listBody.size() - 1; i++)
{for (int j = i + 1; j < listBody.size();
j++) {if (listBody.get(i).equals(listBody.get(j)))
{ return false; } } } return true;}}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.