贪食蛇代码
package basic;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
import java.util.Arrays;
import java.util.Random;
public class SnakeDemo01{
public static void main(String[] args) {
JFrame jf = new JFrame("贪食蛇");
jf.setBounds(10,10,900,720);
jf.add(new SnakePanel());
jf.setVisible(true);
}
}
class SnakePanel extends JPanel implements KeyListener, ActionListener{
Timer timer = new Timer(100,this);
boolean isFail = false;
boolean isStart = false;
char direct='R';
int[] snakeX = new int[600];
int[] snakeY = new int[500];
int score;
int foodX;
int foodY;
Random r = new Random();
public int len;
public SnakePanel(){
super();
init();
this.setFocusable(true);
this.addKeyListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//System.out.println("1");
this.setBackground(Color.white);
Data.headi1.paintIcon(this,g,25,11);
g.fillRect(25,75,850,600);
switch(direct){
case 'L':
Data.lefti1.paintIcon(this,g,snakeX[0],snakeY[0]);
break;
case 'R':
Data.righti1.paintIcon(this,g,snakeX[0],snakeY[0]);
break;
case 'U':
Data.upi1.paintIcon(this,g,snakeX[0],snakeY[0]);
break;
case 'D':
Data.downi1.paintIcon(this,g,snakeX[0],snakeY[0]);
break;
}
for(int i=1;i<len;i++){
Data.bodyi1.paintIcon(this,g,snakeX[i],snakeY[i]);
}
Data.foodi1.paintIcon(this,g,foodX,foodY);
if(!isStart){
g.setColor(Color.black);
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.drawString("按下空格开始游戏",300,300);
}
if(isFail){
g.setColor(Color.black);
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.drawString("Game Over\n按下空格重新开始",300,300);
}
timer.start();
}
public void init(){
len = 3;
snakeX[0] = 100;
snakeY[0] = 100;
snakeX[1] = 75;
snakeY[1] = 100;
snakeX[2] = 50;
snakeY[2] = 100;
do{
foodX = 25+25*r.nextInt(34);
foodY = 75+25*r.nextInt(24);
}
while((foodX==snakeX[0]&&foodY==snakeY[0])||(foodX==snakeX[1]&&foodY==snakeY[1])||(foodX==snakeX[2]&&foodY==snakeY[2]));
score = 0;
direct='R';
}
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println(2);
if(isStart&&!isFail){
for(int i=len-1;i>0;i--){
snakeX[i]=snakeX[i-1];
snakeY[i]=snakeY[i-1];
}
switch(direct){
case 'L':
snakeX[0]-=25;
if(snakeX[0]<25){
isFail = !isFail;
}
break;
case 'R':
snakeX[0]+=25;
if(snakeX[0]>855){
isFail = !isFail;
}
break;
case 'U':
snakeY[0]-=25;
if(snakeY[0]<75){
isFail = !isFail;
}
break;
case 'D':
snakeY[0]+=25;
if(snakeY[0]>650){
isFail = !isFail;
}
break;
}
//吃点
if(snakeX[0]==foodX&&snakeY[0]==foodY){
len++;
score+=10;
boolean flag = false;
do{
foodX = 25 + 25* r.nextInt(34);
foodY = 75 + 25* r.nextInt(24);
for(int i=0;i<len;i++){
if(foodX==snakeX[i]&&foodY==snakeY[i]){
flag=true;
break;
}
}
}while(flag);
}
for(int i=1;i<len;i++){
if(snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){
isFail=!isFail;
break;
}
}
repaint();
}
timer.start();
}
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode==KeyEvent.VK_SPACE){
if(isFail){
isFail = !isFail;
init();
}else{
isStart = !isStart;
}
repaint();
}
switch (keyCode){
case KeyEvent.VK_LEFT:
if(direct!='L'&&direct!='R'){
direct = 'L';
}
break;
case KeyEvent.VK_RIGHT:
if(direct!='L'&&direct!='R'){
direct = 'R';
}
break;
case KeyEvent.VK_UP:
if(direct!='U'&&direct!='D'){
direct = 'U';
}
break;
case KeyEvent.VK_DOWN:
if(direct!='U'&&direct!='D'){
direct = 'D';
}
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
//留空
}
@Override
public void keyTyped(KeyEvent e) {
//留空
}
}
class Data{
public static URL head = SnakeDemo01.class.getResource("statics/header.png");
public static URL left = SnakeDemo01.class.getResource("statics/left.png");
public static URL right = SnakeDemo01.class.getResource("statics/right.png");
public static URL up = SnakeDemo01.class.getResource("statics/up.png");
public static URL down = SnakeDemo01.class.getResource("statics/down.png");
public static URL food = SnakeDemo01.class.getResource("statics/food.png");
public static URL body = SnakeDemo01.class.getResource("statics/body.png");
public static ImageIcon headi1 = new ImageIcon(head);
public static ImageIcon lefti1 = new ImageIcon(left);
public static ImageIcon righti1 = new ImageIcon(right);
public static ImageIcon upi1 = new ImageIcon(up);
public static ImageIcon downi1 = new ImageIcon(down);
public static ImageIcon foodi1 = new ImageIcon(food);
public static ImageIcon bodyi1 = new ImageIcon(body);
}