package com. ai. snake ; import javax. swing. * ; public class StartGame { 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 ) ; }
}
package com. ai. snake ; 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 ;
public class GamePanel extends JPanel implements KeyListener , ActionListener { int length; int [ ] snakeX = new int [ 600 ] ; int [ ] snakeY = new int [ 500 ] ; String direction; boolean isStart = false ; Timer timer = new Timer ( 100 , this ) ; public GamePanel ( ) { init ( ) ; this . setFocusable ( true ) ; this . addKeyListener ( this ) ; timer. start ( ) ; } public void init ( ) { length = 3 ; snakeX[ 0 ] = 100 ; snakeY[ 0 ] = 100 ; snakeX[ 1 ] = 75 ; snakeY[ 1 ] = 100 ; snakeX[ 2 ] = 50 ; snakeY[ 2 ] = 100 ; direction = "R" ; } @Override protected void paintComponent ( Graphics g) { super . paintComponent ( g) ; this . setBackground ( Color . WHITE ) ; Data . header. paintIcon ( this , g, 15 , 5 ) ; g. fillRect ( 15 , 60 , 850 , 600 ) ; if ( direction. equals ( "R" ) ) { Data . right. paintIcon ( this , g, snakeX[ 0 ] , snakeY[ 0 ] ) ; } else if ( direction. equals ( "L" ) ) { Data . left. paintIcon ( this , g, snakeX[ 0 ] , snakeY[ 0 ] ) ; } else if ( direction. equals ( "U" ) ) { Data . up. paintIcon ( this , g, snakeX[ 0 ] , snakeY[ 0 ] ) ; } else if ( direction. 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] ) ; } if ( isStart == false ) { g. setColor ( Color . white) ; g. setFont ( new Font ( "微软雅黑" , Font . BOLD , 40 ) ) ; g. drawString ( "按下空格开始游戏" , 300 , 300 ) ; } } @Override public void keyPressed ( KeyEvent e) { int keyCode = e. getKeyCode ( ) ; if ( keyCode == KeyEvent . VK_ENTER ) ; { isStart = ! isStart; repaint ( ) ; } if ( keyCode== KeyEvent . VK_UP ) { direction = "U" ; } else if ( keyCode== KeyEvent . VK_DOWN ) { direction = "D" ; } else if ( keyCode== KeyEvent . VK_LEFT ) { direction = "L" ; } else if ( keyCode== KeyEvent . VK_RIGHT ) { direction = "R" ; } } @Override public void actionPerformed ( ActionEvent e) { if ( isStart) { for ( int i = length- 1 ; i > 0 ; i-- ) { snakeX[ i] = snakeX[ i- 1 ] ; snakeY[ i] = snakeY[ i- 1 ] ; } if ( direction. equals ( "R" ) ) { snakeX[ 0 ] = snakeX[ 0 ] + 25 ; if ( snakeX[ 0 ] > 850 ) { snakeX[ 0 ] = 25 ; } } else if ( direction. equals ( "L" ) ) { snakeX[ 0 ] = snakeX[ 0 ] - 25 ; if ( snakeX[ 0 ] < 15 ) { snakeX[ 0 ] = 850 ; } } else if ( direction. equals ( "U" ) ) { snakeY[ 0 ] = snakeY[ 0 ] - 25 ; if ( snakeY[ 0 ] < 55 ) { snakeY[ 0 ] = 630 ; } } else if ( direction. equals ( "D" ) ) { snakeY[ 0 ] = snakeY[ 0 ] + 25 ; if ( snakeY[ 0 ] > 650 ) { snakeY[ 0 ] = 60 ; } } repaint ( ) ; } timer. start ( ) ; } @Override public void keyReleased ( KeyEvent e) { } @Override public void keyTyped ( KeyEvent e) { } }
package com. ai. snake ; import javax. swing. * ;
import java. net. URL ;
public class Data { private static URL headerURL = Data . class . getResource ( "statics/header.jpg" ) ; public static ImageIcon header = new ImageIcon ( headerURL) ; public static URL upURL = Data . class . getResource ( "statics/up.jpg" ) ; public static URL downURL = Data . class . getResource ( "statics/down.jpg" ) ; public static URL leftURL = Data . class . getResource ( "statics/left.jpg" ) ; public static URL rightURL = Data . class . getResource ( "statics/right.jpg" ) ; public static ImageIcon up = new ImageIcon ( upURL) ; public static ImageIcon down = new ImageIcon ( downURL) ; public static ImageIcon left = new ImageIcon ( leftURL) ; public static ImageIcon right = new ImageIcon ( rightURL) ; public static URL bodyURL = Data . class . getResource ( "statics/body.jpg" ) ; public static ImageIcon body = new ImageIcon ( bodyURL) ; public static URL foodURL = Data . class . getResource ( "statics/food.jpg" ) ; public static ImageIcon food = new ImageIcon ( foodURL) ; }