贪吃蛇小游戏
Data代码
Data
```java
public class Data {
public static URL headerurl = Data. class . getResource ( "/statics/header.png" ) ;
public static ImageIcon header = new ImageIcon ( headerurl) ;
public static URL upUrl = Data. class . getResource ( "/statics/up.png" ) ;
public static ImageIcon up = new ImageIcon ( upUrl) ;
public static URL downUrl = Data. class . getResource ( "/statics/down.png" ) ;
public static ImageIcon down = new ImageIcon ( downUrl) ;
public static URL leftUrl = Data. class . getResource ( "/statics/left.png" ) ;
public static ImageIcon left = new ImageIcon ( leftUrl) ;
public static URL rightUrl = Data. class . getResource ( "/statics/right.png" ) ;
public static ImageIcon right = new ImageIcon ( rightUrl) ;
public static URL bodyUrl = Data. class . getResource ( "/statics/body.png" ) ;
public static ImageIcon body = new ImageIcon ( bodyUrl) ;
public static URL foodUrl = Data. class . getResource ( "/statics/food.png" ) ;
public static ImageIcon food = new ImageIcon ( foodUrl) ;
}
GamePanel代码
public class GamePanel extends JPanel implements KeyListener , ActionListener {
int length;
int[ ] snakeX= new int [ 600 ] ;
int[ ] snakeY= new int [ 500 ] ;
String fx ;
boolean isStar = false ;
Timer timer = new Timer ( 100 , this ) ;
int foodx;
int foody;
Random random = new Random ( ) ;
boolean isFalse = false ;
int score;
public GamePanel ( ) {
init ( ) ;
this . setFocusable ( true ) ;
this . addKeyListener ( this ) ;
}
public void init ( ) {
length = 3 ;
snakeX[ 0 ] = 100 ; snakeY[ 0 ] = 100 ;
snakeX[ 1 ] = 75 ; snakeY[ 1 ] = 100 ;
snakeX[ 2 ] = 50 ; snakeY[ 2 ] = 100 ;
fx= "R" ;
timer. start ( ) ;
foodx= 25 + 25 * random. nextInt ( 34 ) ;
foody = 75 + 25 * random. nextInt ( 24 ) ;
score= 0 ;
}
@Override
protected void paintComponent ( Graphics g) {
super . paintComponent ( g) ;
this . setBackground ( Color. WHITE ) ;
Data. header. paintIcon ( this , g, 25 , 11 ) ;
g. fillRect ( 25 , 75 , 850 , 600 ) ;
if ( fx. equals ( "R" ) ) {
Data. right. paintIcon ( this , g, snakeX[ 0 ] , snakeY[ 0 ] ) ;
} else if ( fx. equals ( "L" ) ) {
Data. left. paintIcon ( this , g, snakeX[ 0 ] , snakeY[ 0 ] ) ;
} else if ( fx. equals ( "U" ) ) {
Data. up. paintIcon ( this , g, snakeX[ 0 ] , snakeY[ 0 ] ) ;
} else if ( fx. equals ( "D" ) ) {
Data. down. paintIcon ( this , g, snakeX[ 0 ] , snakeY[ 0 ] ) ;
}
for ( int i = 1 ; i < length ; i++ ) {
Data. body. paintIcon ( this , g, snakeX[ i] , snakeY[ i] ) ;
}
g. setColor ( Color. white) ;
g. setFont ( new Font ( "微软雅黑" , Font. BOLD , 18 ) ) ;
g. drawString ( "长度:" + length, 750 , 35 ) ;
g. drawString ( "分数:" + score, 750 , 50 ) ;
Data. food. paintIcon ( this , g, foodx, foody) ;
if ( isStar== false ) {
g. setColor ( Color. WHITE ) ;
g. setFont ( new Font ( "微软雅黑" , Font. BOLD , 40 ) ) ;
g. drawString ( "按下空格开始游戏" , 300 , 300 ) ;
}
if ( isFalse) {
g. setColor ( Color. RED ) ;
g. setFont ( new Font ( "微软雅黑" , Font. BOLD , 40 ) ) ;
g. drawString ( "按下空格重新开始游戏" , 200 , 300 ) ;
}
}
@Override
public void keyPressed ( KeyEvent e) {
int keyCode = e. getKeyCode ( ) ;
if ( keyCode== KeyEvent. VK_SPACE ) {
if ( isFalse) {
isFalse= false ;
init ( ) ;
} else {
isStar = ! isStar;
}
repaint ( ) ;
}
if ( keyCode== KeyEvent. VK_LEFT ) {
fx= "L" ;
} else if ( keyCode== KeyEvent. VK_RIGHT )
{
fx= "R" ;
} else if ( keyCode== KeyEvent. VK_UP )
{
fx= "U" ;
} else if ( keyCode== KeyEvent. VK_DOWN )
{
fx= "D" ;
}
}
@Override
public void actionPerformed ( ActionEvent e) {
if ( isStar && isFalse== false ) {
for ( int i = length; i > 0 ; i-- ) {
snakeX[ i] = snakeX[ i- 1 ] ;
snakeY[ i] = snakeY[ i- 1 ] ;
}
if ( fx. equals ( "R" ) ) {
snakeX[ 0 ] = snakeX[ 0 ] + 25 ;
if ( snakeX[ 0 ] > 850 ) { snakeX[ 0 ] = 25 ; }
} else if ( fx. equals ( "L" ) ) {
snakeX[ 0 ] = snakeX[ 0 ] - 25 ;
if ( snakeX[ 0 ] < 25 ) { snakeX[ 0 ] = 850 ; }
} else if ( fx. equals ( "U" ) ) {
snakeY[ 0 ] = snakeY[ 0 ] - 25 ;
if ( snakeY[ 0 ] < 75 ) { snakeY[ 0 ] = 650 ; }
} else if ( fx. equals ( "D" ) ) {
snakeY[ 0 ] = snakeY[ 0 ] + 25 ;
if ( snakeY[ 0 ] > 650 ) { snakeY[ 0 ] = 75 ; }
}
if ( snakeX[ 0 ] == foodx&& snakeY[ 0 ] == foody) {
length++ ;
score = score+ 10 ;
foodx= 25 + 25 * random. nextInt ( 34 ) ;
foody = 75 + 25 * random. nextInt ( 24 ) ;
}
for ( int i = 1 ; i < length ; i++ ) {
if ( snakeX[ 0 ] == snakeX[ i] && snakeY[ 0 ] == snakeY[ i] ) {
isFalse= true ;
}
}
repaint ( ) ;
}
timer. start ( ) ;
}
@Override
public void keyTyped ( KeyEvent e) {
}
@Override
public void keyReleased ( KeyEvent e) {
}
}
StartGame代码
public class StarGame {
public static void main ( String[ ] args) {
JFrame frame = new JFrame ( "贪吃蛇小游戏!" ) ;
frame. setBounds ( 10 , 10 , 900 , 720 ) ;
frame. setResizable ( false ) ;
frame. setDefaultCloseOperation ( WindowConstants. EXIT_ON_CLOSE ) ;
frame. add ( new GamePanel ( ) ) ;
frame. setVisible ( true ) ;
} }