游戏窗口类
package com.tcs; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random; public class GamePanel extends JPanel { //绘制面板 //定义蛇结构 int length;//蛇的长度 //蛇横坐标 int [] snakex=new int[600];//蛇的横坐标 //蛇的纵坐标 int [] snakey=new int[600];//蛇的纵坐标 String fx;//初始方向 int foodx;//食物的横坐标 int foody;//食物的纵坐标 int source;//分数 int lv; //等级 int m;//初始速度 Random random=null; //按下空格开始 boolean isstart; //失败判定 boolean isdel; Timer timer=null; public GamePanel() { //获得焦点事件 this.setFocusable(true); timer=new Timer(500, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(isstart==true && isdel==false){ if(foodx==snakex[0]&&foody==snakey[0]){ length=length+1; source+=10; random=new Random(); foodx=25+25*random.nextInt(34); foody=75+25*random.nextInt(24); } if (length>10){ lv=1; m=800; }else if(length>20){ lv=2; m=600; } //前一节身体向后一节身体移动 for(int i=length-1;i>0;i--){ snakex[i]=snakex[i-1]; snakey[i]=snakey[i-1]; repaint(); } //向右 if(fx.equals("right")){ snakex[0]=snakex[0]+25; //边界判断 if(snakex[0]>850){snakex[0]=25;} repaint(); } else if(fx.equals("left")){ snakex[0]=snakex[0]-25; //边界判断 if(snakex[0]<25){snakex[0]=850;} repaint(); } else if(fx.equals("up")){ snakey[0]=snakey[0]-25; //边界判断 if(snakey[0]<75){snakey[0]=650;} repaint(); } else if(fx.equals("down")){ snakey[0]=snakey[0]+25; //边界判断 if(snakey[0]>650){snakey[0]=75;} repaint(); } //重画 for (int i=1;i<length;i++){ if (snakex[0]==snakex[i] && snakey[0]==snakey[i]){ isdel=true; } } repaint(); } timer.start(); } }); init(); //获得键盘监听事件 this.addKeyListener(new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { int i=e.getKeyChar(); if(i==KeyEvent.VK_SPACE){ if(isdel){ isdel=false; init(); }else { isstart=!isstart; } repaint(); } //上 if (i==119){ fx="up"; } //下 if (i==115){ fx="down"; } //左 if (i==97){ fx="left"; } //右 if (i==100){ fx="right"; } } } ); } public void init(){ length=3; snakex[0]=100;snakey[0]=100; snakex[1]=75; snakey[1]=100; snakex[2]=50; snakey[2]=100; fx="right";//定义蛇头的初始方向向右 foodx=300; foody=300; isstart=false; //初始化食物,边界加上游戏界面内的随机一个坐标 random=new Random(); foodx=25+25*random.nextInt(34); foody=75+25*random.nextInt(24); timer.start(); isdel=false; source=0; lv=0; m=1000; } @Override //游戏中所有的内容都由这个画笔绘画 protected void paintComponent(Graphics g) { super.paintComponent(g);//清屏 g.setColor(Color.black); g.fillRect(25,75,850,650);//游戏界面 GameDate.food.paintIcon(this,g,foodx,foody); g.setColor(Color.black); g.setFont(new Font("微软雅黑",Font.BOLD,40)); g.drawString("成长记录",300,45); //分数 g.setColor(Color.black); g.setFont(new Font("微软雅黑",Font.BOLD,18)); g.drawString("长度:"+length,750,35); g.drawString("分数:"+source,750,50); g.drawString("等级:"+lv,750,75); if (fx.equals("right")){ GameDate.imageIconKEY_RIGHT.paintIcon(this,g,snakex[0],snakey[0]); }else if(fx.equals("left")){ GameDate.imageIconKEY_LEFT.paintIcon(this,g,snakex[0],snakey[0]); }else if(fx.equals("up")){ GameDate.imageIconKEY_UP.paintIcon(this,g,snakex[0],snakey[0]); }else if(fx.equals("down")){ GameDate.imageIconKEY_DOWN.paintIcon(this,g,snakex[0],snakey[0]); } for (int i=1;i<length;i++){ //画蛇的身体 GameDate.body.paintIcon(this,g,snakex[i],snakey[i]); } if (!isstart){ g.setColor(Color.white); g.setFont(new Font("微软雅黑",Font.BOLD,40)); g.drawString("按下空格开始游戏",300,300); } if(isdel){ g.setColor(Color.red); g.setFont(new Font("微软雅黑",Font.BOLD,40)); g.drawString("按下空格重新开始游戏",300,300); } } }
获取图片的类
package com.tcs; import javax.swing.*; import java.net.URL; public class GameDate { public static final URL KEY_UP =GameDate.class.getResource("20210609002744177.png"); public static ImageIcon imageIconKEY_UP=new ImageIcon(KEY_UP); public static final URL KEY_DOWN =GameDate.class.getResource("20210609002803353.png"); public static ImageIcon imageIconKEY_DOWN=new ImageIcon(KEY_DOWN); public static final URL KEY_RIGHT =GameDate.class.getResource("20210609002818339.png"); public static ImageIcon imageIconKEY_RIGHT=new ImageIcon(KEY_RIGHT); public static final URL KEY_LEFT =GameDate.class.getResource("20210609002812556.png"); public static ImageIcon imageIconKEY_LEFT=new ImageIcon(KEY_LEFT); public static final URL FOOD=GameDate.class.getResource("20210609002727267.png"); public static ImageIcon food=new ImageIcon(FOOD); public static final URL SNAKE_BODY=GameDate.class.getResource("20210609002708755.png"); static ImageIcon body=new ImageIcon(SNAKE_BODY); }