
import javax.swing.*; |
import java.awt.*; |
import java.awt.event.*; |
import java.io.*; |
import java.net.*; |
import java.applet.*; |
public class SnakeMap extends JPanel implements Runnable{ |
ImageIcon eatIcon = new ImageIcon("food.png"); |
ImageIcon heidong = new ImageIcon("heidong.png"); |
SnakeMap sm; |
Snake snake = new Snake(); |
public SnakeMap(){ |
sm = this; |
//构造组件 |
JLabel jlTitle = new JLabel(); |
jlTitle = new JLabel(new ImageIcon("title.jpg"),JLabel.CENTER); |
JLabel jlLgio = new JLabel(); |
jlLgio = new JLabel(new ImageIcon("lgio.png"),JLabel.CENTER); |
JLabel jlMap = new JLabel(); |
jlMap = new JLabel(new ImageIcon("map5.jpg"),JLabel.CENTER); |
JButton newGame = new JButton("开始"); |
newGame.setBackground(new Color(168,132,98)); |
newGame.setForeground(new Color(128,64,0)); |
newGame.setFont(new Font("华文行楷",1,30 )); |
JButton stopGame = new JButton("退出"); |
stopGame.setBackground(new Color(168,132,98)); |
stopGame.setForeground(new Color(128,64,0)); |
stopGame.setFont(new Font("华文行楷",1,30 )); |
JLabel jlScore = new JLabel("分数:"); |
jlScore.setForeground(new Color(128,64,0)); |
jlScore.setFont(new Font("华文行楷",1,22 )); |
//JLabel jlHard = new JLabel("难度"); |
//jlHard.setForeground(new Color(128,64,0)); |
//jlHard.setFont(new Font("华文行楷",1,22 )); |
//JSlider slider = new JSlider(5,20); |
//slider.setBackground(new Color(168,132,98)); |
//slider.setSnapToTicks(true); |
//slider.setPaintTicks(false); |
//slider.setMajorTickSpacing(0); |
//slider.setMinorTickSpacing(0); |
//设定布局 |
setLayout(null); |
|
//添加组件 |
add(jlTitle); |
jlTitle.setBounds(0,0,800,70); |
add(newGame); |
newGame.setBounds(40, 120, 120, 40); |
add(jlScore); |
jlScore.setBounds(30,210,100,80); |
//add(jlHard); |
//jlHard.setBounds(30,220,70,40); |
add(stopGame); |
stopGame.setBounds(40,320,120,40); |
add(jlLgio); |
jlLgio.setBounds(15,370,180,230); |
add(jlMap); |
jlMap.setBounds(210,80,580,480); |
//add(slider); |
//slider.setBounds(100,230,100,20); |
|
//设置窗体颜色 |
this.setBackground(new Color(168,132,98)); |
//设置监听器 |
newGame.addActionListener(new ActionListener(){ |
public void actionPerformed(ActionEvent e){ |
//newGame.setEnabled(false); |
if(snake.start == false && snake.failed == true){ |
music(); |
snake.setup(); |
snake.start = true; |
requestFocus(true); |
} |
if(snake.start == true){ |
requestFocus(true); |
} |
if(snake.start == false && snake.failed == false){ |
snake.setup(); |
snake.start = true; |
snake.failed = true; |
requestFocus(true); |
} |
} |
}); |
stopGame.addActionListener(new ActionListener(){ |
public void actionPerformed(ActionEvent e){ |
System.exit(0); |
} |
}); |
//添加键盘监听 |
addKeyListener(new KeyAdapter(){ |
public void keyPressed(KeyEvent e){ |
if(snake.start && snake.failed){ |
if(e.getKeyCode() == KeyEvent.VK_UP && snake.j !=20 && snake.isMove == false){ |
snake.j = -20; |
snake.i = 0; |
snake.isMove = true; |
} |
if(e.getKeyCode() == KeyEvent.VK_DOWN && snake.j != -20 && snake.isMove == false){ |
snake.j = 20; |
snake.i = 0; |
snake.isMove = true; |
} |
if(e.getKeyCode() ==KeyEvent.VK_LEFT && snake.i != 20 && snake.isMove == false){ |
snake.i = -20; |
snake.j = 0; |
snake.isMove = true; |
} |
if(e.getKeyCode() == KeyEvent.VK_RIGHT && snake.i != -20 && snake.isMove == false){ |
snake.i = 20; |
snake.j = 0; |
snake.isMove = true; |
} |
if(e.getKeyCode() == KeyEvent.VK_SPACE && snake.pause == true) |
snake.pause = false; |
else if(e.getKeyCode() == KeyEvent.VK_SPACE && snake.pause == false){ |
snake.pause = true; |
Thread thread2 = new Thread(sm); |
thread2.start(); |
requestFocus(true); |
} |
} |
} |
}); |
Thread thread=new Thread(sm); |
thread.start(); |
} |
public void run(){ |
while(snake.pause){ |
snake.move(); |
repaint(); |
try{ |
Thread.sleep(400 - 50*snake.speed); |
}catch(Exception e){} |
} |
} |
|
/*if(snakex[0] == 370 && snakey[0] == 400){ |
snakex[0] = 610; |
snakey[0] = 280; |
} |
else if(snakex[0] == 610 && snakey[0] == 280){ |
snakex[0] = 370; |
snakey[0] = 400; |
}*/ |
|
public void music(){ |
try{ |
File f = new File("faded.wav"); |
URI uri = f.toURI(); |
URL url = uri.toURL(); |
AudioClip aau = Applet.newAudioClip(url); |
aau.loop(); |
}catch(Exception e){ |
e.printStackTrace(); |
} |
} |
//调用paint方法 |
public void paint(Graphics g){ |
super.paint(g); |
//画出地图 左上角(210,80) 右下角(790,560) |
g.drawRect(200,70,600,500); |
g.drawRect(210,80,580,480); |
g.fillRect(200,70,600,10); |
g.fillRect(200,70,10,500); |
g.fillRect(200,560,600,10); |
g.fillRect(790,70,10,500); |
//画出蛇、食物 |
if(snake.start && snake.failed){ |
eatIcon.paintIcon(this , g , snake.food.eatx , snake.food.eaty); |
heidong.paintIcon(this , g , 370 , 400); |
heidong.paintIcon(this , g , 610 , 280); |
g.setColor(new Color(255,0,0)); |
g.fillOval(snake.snakex[0] , snake.snakey[0] , 20 , 20); |
Graphics2D g1 = (Graphics2D) g; |
g1.setPaint(new GradientPaint(168,132,Color.CYAN,185,210,Color.MAGENTA,true)); |
for(int m = 1 ; m < snake.len ; m ++){ |
g.fillOval(snake.snakex[m] , snake.snakey[m] , 20 , 20); |
} |
g.setColor(new Color(128,64,0)); |
g.setFont(new Font("华文行楷",Font.BOLD, 30)); |
g.drawString(""+snake.score, 100, 260); |
} |
if (!snake.failed){ |
g.setColor(new Color(128,64,0)); |
g.setFont(new Font("华文行楷",Font.BOLD, 30)); |
g.drawString(""+snake.score, 100, 200); |
g.setColor(new Color(168,132,98)); |
g.setFont(new Font("arial",Font.BOLD, 30)); |
g.drawString("Game Over ! Press start to restart", 200, 300); |
} |
} |
} |



