用java开发贪吃蛇游戏

来源:互联网 发布:什么叫大数据时代赚钱 编辑:程序博客网 时间:2024/06/03 19:04

跟着网易云课堂上轻课java公开课上学习的开发贪吃蛇游戏,比较简单。

开发环境为JDK和eclipse

实现的功能是蛇吃食物增加长度,游戏开始结束,键盘控制游戏开始暂停蛇的走向。

先附上效果图。


下面看代码

父类

public class Snake {public static void main(String[] args) {//画出白色窗口JFrame frame=new JFrame();frame.setBounds(10, 10, 900, 720);frame.setResizable(false);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//画布加到窗户里面SnakePanel panel=new SnakePanel();frame.add(panel);//设置让其展现出来frame.setVisible(true);}}



子类

package snake;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Random;import javax.swing.ImageIcon;import javax.swing.JPanel;import javax.swing.Timer;public class SnakePanel extends JPanel implements KeyListener,ActionListener{ImageIcon up=new ImageIcon("up.png");ImageIcon down=new ImageIcon("down.png");ImageIcon right=new ImageIcon("right.png");ImageIcon left=new ImageIcon("left.png");ImageIcon title=new ImageIcon("title.jpg");ImageIcon food=new ImageIcon("food.png");ImageIcon body=new ImageIcon("body.png");int[] snakex=new int[750];int[] snakey=new int[750];//食物的坐标Random rand=new Random();int foodx=rand.nextInt(34)*25+25;int foody=rand.nextInt(24)*25+75;int len=3;int score=0;String fangxiang="R";boolean isStarted=false;//构造函数boolean isFailed=false;Timer timer=new Timer(100,this);public SnakePanel(){//设置可以获得焦点this.setFocusable(true);this.addKeyListener(this);//调用setupsetup();//启动timertimer.start();}//画笔 Graphics public void paint(Graphics g){this.setBackground(Color.WHITE);title.paintIcon(this, g, 25, 11);g.fillRect(25, 75, 850, 600);//画出蛇头if(fangxiang.equals("R")){right.paintIcon(this, g, snakex[0], snakey[0]);}else if(fangxiang.equals("L")){left.paintIcon(this, g, snakex[0], snakey[0]);}else if(fangxiang.equals("U")){up.paintIcon(this, g, snakex[0], snakey[0]);}else if(fangxiang.equals("D")){down.paintIcon(this, g, snakex[0], snakey[0]);}//画出蛇的身体for(int i=1;i<len;i++){body.paintIcon(this, g, snakex[i], snakey[i]);}if(!isStarted){g.setColor(Color.WHITE);//设置字体g.setFont(new Font("arial",Font.BOLD,30));//画字符串g.drawString("Press Space to Start/Pause", 300, 300);}if(isFailed){g.setColor(Color.WHITE);//设置字体g.setFont(new Font("arial",Font.BOLD,30));//画字符串g.drawString("Game over,Press Space to Start/Pause", 300, 300);}food.paintIcon(this, g, foodx, foody);g.setColor(Color.WHITE);g.setFont(new Font("arial",Font.PLAIN,10));g.drawString("Score:"+score,800, 30);g.drawString("Length"+len, 800, 50);}public void setup(){isStarted=false;isFailed=false;len=3;snakex[0]=100;snakey[0]=100;snakex[1]=75;snakey[1]=100;snakex[2]=50;snakey[2]=100;}@Overridepublic void keyPressed(KeyEvent e) {int keyCode=e.getKeyCode();if(keyCode==KeyEvent.VK_SPACE){if(isFailed){setup();}else{isStarted=!isStarted;}}else if(keyCode==KeyEvent.VK_UP&&fangxiang!="D"){fangxiang="U";}else if(keyCode==KeyEvent.VK_DOWN&&fangxiang!="U"){fangxiang="D";}else if(keyCode==KeyEvent.VK_RIGHT&&fangxiang!="L"){fangxiang="R";}else if(keyCode==KeyEvent.VK_LEFT&&fangxiang!="R"){fangxiang="L";}}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void actionPerformed(ActionEvent e) {//再定一个闹钟timer.start();//2.移动数据//移动身体if(isStarted&&!isFailed){for(int i=len;i>0;i--){snakex[i]=snakex[i-1];snakey[i]=snakey[i-1];}    //移动头if(fangxiang.equals("R")){snakex[0]=snakex[0]+25;if(snakex[0]>850) snakex[0]=25;}else if(fangxiang.equals("L")){snakex[0]=snakex[0]-25;if(snakex[0]<25)snakex[0]=850;}else if(fangxiang.equals("U")){snakey[0]=snakey[0]-25;if(snakey[0]<75) snakey[0]=650;}else if(fangxiang.equals("D")){snakey[0]=snakey[0]+25;if(snakey[0]>650) snakey[0]=75;}//吃食物if(snakex[0]==foodx&&snakey[0]==foody){len++;score++;foodx=rand.nextInt(34)*25+25;foody=rand.nextInt(24)*25+75;}for(int i=1;i<len;i++){if(snakex[0]==snakex[i]&&snakey[0]==snakey[i]){isFailed=true;}}}//3.repaint()repaint();}}



原创粉丝点击