大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Java小游戲源代碼之貪吃蛇

Java小游戲源代碼之貪吃蛇

更新時間:2021-05-11 10:16:31 來源:動力節點 瀏覽1053次

Java貪吃蛇小游戲之啟動界面

package snakeGame;
/* Test類的主要任務是設計程序運行后的界面,包括 程序啟動的界面和游戲運行界面。
 * 程序啟動的界面包括背景圖片和進入運行界面的Button,點擊按鈕之后程序關閉啟動界面進入到運行界面,
 * 運行界面設置在SnakeGame類中,Test類大體設置了運行界面的大小可見與否等。
 */
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Start    extends JFrame implements ActionListener  {	   
	static  JFrame frame = new  JFrame( );
	public static void main(String[] args) {	
    	 new  Start();                                         
    }
	public  Start(){                                                 //設置啟動界面
		 frame.setUndecorated(true);                                //用于取消邊框背景
         frame.setLayout (null);
         frame.setSize(1600,900);
         frame.setLocation(300, 100);
         frame.setLocationRelativeTo (null);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setVisible(true);
         AddButton();
         AddPicture();            
	}  	
	//定義進入游戲按鈕	
	public  void  AddButton() {	                                      
		RButton  enterButton =new RButton("進入游戲");
        enterButton.setFont(new Font("華文行楷", Font.BOLD, 35));
        enterButton.setForeground(Color.red);
        enterButton.setBounds (700,  600 , 200, 100);
        enterButton.setBackground(Color.white);      
        frame.add(enterButton);
        enterButton.addActionListener(this); 
        //定義按鍵         
	}
  //加入背景圖片
	public  void  AddPicture() {	                                           	
		ImageIcon img = new ImageIcon("F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\timg.jpg");
        JLabel Label= new JLabel(img);
        Label.setBounds(0,0,img.getIconWidth(),img.getIconHeight());            //設置大小
        frame.getLayeredPane().add(Label,new Integer(Integer.MIN_VALUE));      //設置圖片底層和按鈕在容器中的順序   
        JPanel  jp  =(JPanel)frame.getContentPane();   
        jp.setOpaque(false);                                                   //設置透明與否
	}
	
	/*設置按鈕的監聽器事件
	 * 進入按鈕的監聽器事件的主要功能是當點擊按鈕以后,程序關掉啟動界面,并轉入運行界面。
	 * 主要實現原理是定義一個新界面的類,作為運行界面,然后定義一個關掉啟動界面的方法,然后在監聽器事件中,
	 * 調用關掉界面的方法,實例化運行界面 
	 */
	@Override	 
	public void actionPerformed(ActionEvent e) {                                  
		new  pushButtonMusic ();		 
		// TODO 自動生成的方法存根
		closeThis();		                                                       //關掉新界面的方法
	    try {	    
			new Frame2 ();                                                         //實例化運行界面
		} catch (InterruptedException e1) {
			// TODO 自動生成的 catch 塊
			e1.printStackTrace();
		}  //創建新的窗體,以達到切換窗體的效果
	}	
	 private void closeThis() {
		// TODO 自動生成的方法存根
		 frame.dispose();
	}
	 /*
	  * 游戲運行界面,實例化SnakeGame類,并加入到運行界面中
	  */
	 class  Frame2 extends JFrame      {  		 	 		   		  			  
		     JFrame    frame1 = new  JFrame(); //游戲圖形界面            
		      public   Frame2() throws InterruptedException{			  				 					    		  		  
			  frame1.setUndecorated(true);
			  frame1.setBounds(200,70,1600,900);		           		 
			//  frame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			  frame1.setVisible(true);			  
	          SnakeGame sn = new SnakeGame();	         
	          frame1.add(sn);
	          sn.requestFocus();//布局的中間	         	         
			}			 
      }	 
}

Java貪吃蛇小游戲之運行界面:

package snakeGame;
/*
 * SnakeGame類來設計貪吃蛇小游戲的運行界面,運行界面是貪吃蛇游戲的主體部分,  界面主要包括兩個方面的內容,
 * 一方面是運行界面的內容,貪吃蛇長度顯示,游戲說明,速度控制,游戲開始,暫停退出等按鈕。
 * 另一方面,主要包括貪吃蛇的形狀和移動,貪吃蛇移動區域,隨機點的定義
 * 運行界面的過程是這樣的:在開始姐愛你點擊進入游戲按鈕以后,程序運行到運行界面,開始播放背景音樂。
 * 點擊游戲說明按鈕,彈出一個對話框,說明游戲運行的操作過程。點擊開始按鈕以后,
 * 貪吃蛇開始向上移動,鼠標在向上區域點擊,貪吃蛇向上,向左區域點擊,貪吃蛇向左,依次賴推。
 * 當貪吃蛇碰到草莓時,吃掉它,蛇身變長,并有背景音樂顯示,長度顯示加一,
 * 點擊暫停按鈕游戲暫停,點擊退出按鈕后,退出游戲。
 * 當貪吃蛇撞到自己或者墻體的時候,貪吃蛇會死亡,然后彈出一個界面,重啟界面,用來決定游戲繼續進行或者退出游戲。
 * 貪吃蛇的形狀和移動通過數組的形式實現,在界面中,定義一個x軸和y軸定義的坐標系,定義一個數組,數組的移動就是貪吃蛇的移動,
 * 移動方式是貪吃蛇坐標的改變,可以通過鼠標控制或鍵盤控制來實現貪吃蛇的移動,
 * 隨機點產生是在坐標系中產生隨機數來實現,
 */
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Time;
import java.util.Date;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
import java.util.TimerTask;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.Timer;
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JApplet;
public class SnakeGame extends JPanel  implements ActionListener   {	 
      private final int length = 15;//定義活動范圍
      private final int width = 25;//定義活動范圍
      private final int unit = 45;//定義單位長度
      private final  int GameLOCX=40;
      private final  int  GameLOCY=40;
      private  final int GameWidth=width*unit;
      private  final  int GameLength=length*unit;
      //隨機點坐標   
      int newY1 =0 ; 
      int newX1 = 0 ;        
      int mousex=1;
      int mousey=1;
      //播放背景音樂
      AudioClip christmas = loadSound ("F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\Music\\backgroundMusic.wav");
      int direction = 1;//定義一個按下按鈕后要去的方向                 
      private ArrayList<SnakeNode> snake = new ArrayList<>();//定義蛇身的數組集合
      private int Direction;//定義蛇頭的方向
      private int Length ;//定義蛇身的長度
      private SnakeNode newNode = new SnakeNode(1,1,Color.BLACK);//定義隨機點          
       boolean  startFlag  =false;
      //定義按鈕,速度控制,開始暫停退出按鈕等
       RButton   SspeedButton , TspeedButton,FspeedButton,THspeedButton ,ShowButton; 
       RButton    startButton , stopButton , quitButton  ,reStartButton,closeButton;
       //定義標簽,長度顯示,方向顯示,按鈕提示等   
       JLabel  snakeScore, label1,  label3,label4;
       //初始速度控制
       private static int Difficult_Degree=1;
       //蛇的移動控制,利用線程來實現用鼠標控制,利用計時器來實現用鍵盤控制。
      Thread  tr= new Thread(new ThingsListener());
      Timer time = new Timer(1000, new ThingsListener1());//定義一個定時器對象,這里我們還要創建一個ThingsListener事件      
      public SnakeGame() {//初始化區域
    	 //循環播放背景音樂
    	  christmas.loop ();    	  
    	 // time.start(); 
         tr.start();   	 
    	  //定義按鍵
         //在容器中添加按鈕標簽等的時候,需要說明布局管理為空,不然的話,加進去的按鈕會按照一定的布局來實現,
    	  this.setLayout (null);
    	  //定義按鈕
         startButton = new  RButton("開始游戲"); 	 
		  stopButton =new  RButton("暫停游戲");
		  quitButton =new  RButton("退出游戲");		  
		  FspeedButton =new  RButton("速度一");		          
		  SspeedButton =new  RButton("速度二");
		  TspeedButton=new  RButton("速度三");
		  THspeedButton=new  RButton("速度四");		
	      ShowButton  =new   RButton("游戲指南");		  	
	      //定義標簽
		  snakeScore =new  JLabel("3");
		  label1 =new  JLabel("當前長度");		   		 
		  label3 =new  JLabel("速度設置");
		  label4 =new  JLabel( );          
		  //設置字體
		  startButton.setFont(new Font("華文行楷", Font.BOLD, 35));
		  stopButton.setFont(new Font("華文行楷", Font.BOLD, 35));
		  quitButton.setFont(new Font("華文行楷", Font.BOLD, 35));		 
		  FspeedButton.setFont(new Font("華文行楷", Font.BOLD, 15));
		  TspeedButton.setFont(new Font("華文行楷", Font.BOLD, 15));
		  SspeedButton.setFont(new Font("華文行楷", Font.BOLD, 15));
		  THspeedButton.setFont(new Font("華文行楷", Font.BOLD, 15));		 
		  ShowButton.setFont(new Font("華文行楷", Font.BOLD, 30));		  
		  label1.setFont(new Font("華文行楷", Font.BOLD, 35));
		  snakeScore.setFont(new Font("華文行楷", Font.BOLD, 50));		  		 	 
		  label3.setFont(new Font("華文行楷", Font.BOLD, 30));
		  label4.setFont(new Font("華文行楷", Font.BOLD, 35));
		 //定義按鈕標簽位置
	      startButton.setBounds (1390, 500 , 190, 90);
	      stopButton.setBounds (1390,  600 , 190, 90);
	      quitButton.setBounds (1390,  700 , 190, 90);
	      snakeScore.setBounds(1450, 70, 150, 90);
	      label1.setBounds(1390, 10, 190, 90);	      
	      ShowButton.setBounds(1390, 170, 190, 90);	     
	      label3.setBounds(1390, 270, 190, 90);
	      label4.setBounds(0, 0, 190, 90);         
	      FspeedButton.setBounds (1390, 350 , 85, 60);
	      SspeedButton.setBounds (1500,350 , 85, 60);
	      TspeedButton.setBounds (1390, 420 , 85, 60);
	      THspeedButton.setBounds (1500, 420 , 85, 60);	     
	      THspeedButton.setBackground(Color.green);
		  SspeedButton.setBackground(Color.blue);
		  TspeedButton.setBackground(Color.red);
	      FspeedButton.setBackground(Color.red);		  	      
	     // 添加 按鈕和標簽,用this關鍵字指向當前容器	   
         this.add(startButton);
         this.add(stopButton);
         this.add(quitButton);
         this.add(FspeedButton);
         this.add(SspeedButton);
         this.add(TspeedButton);
         this.add(THspeedButton);                         
         this.add(label1);
         this.add(snakeScore);        
         this.add( ShowButton);
         this.add(label3);
         this.add(label4);         
        // 添加三個按鍵的監聽事件
         startButton.addActionListener(this);
         stopButton.addActionListener(this);
         quitButton.addActionListener(this);            
         THspeedButton.addActionListener(this);
         SspeedButton.addActionListener(this);
         TspeedButton.addActionListener(this);
         FspeedButton.addActionListener(this);
          ShowButton.addActionListener(this);            
         snake.add(new SnakeNode(width/2,length/2 ,Color.red));
         snake.add(new SnakeNode(width/2,length/2+1 ,Color.blue));
         snake.add(new SnakeNode(width/2,length/2+2 ,Color.green));    	 
          Direction = 1;//定義初始方向為向上
          Length = 3;//蛇身長度為3
          CreateNode1();//產生隨機點
         // CreateNode2();
     /*//采用鍵盤控制的控制模式,利用鍵盤的上下左右鍵,來實現讓·direction的變化,從而使貪吃蛇能夠按照鍵盤的控制來實現移動
        this.addKeyListener(new KeyAdapter() {//捕捉鍵盤的按鍵事件 設置監聽器
            public void keyPressed(KeyEvent e) {            	 
                switch(e.getKeyCode()) {
                    case KeyEvent.VK_UP://按下向上,返回1
                        direction = 1;
                        break;
                    case KeyEvent.VK_DOWN://按下向下,返回-1
                        direction = -1;
                        break;
                    case KeyEvent.VK_LEFT://按下相左,返回2
                        direction = 2;
                        break;
                    case KeyEvent.VK_RIGHT://按下向右,返回-2
                        direction = -2;
                        break;
                    default:
                        break;
                }
                if(direction + Direction !=0) {//不能反向運動
                    Direction = direction;
                    Move(direction);
                    repaint();
                }
            }
        });
        */             
        //采用 鼠標控制的控制模式     通過監聽鼠標在容器中的位置,點擊上下左右區域,改變direction的值,即可實現貪吃蛇的移動,
          this.addMouseListener(new MouseAdapter(){  //匿名內部類,鼠標事件
              public void  mousePressed(MouseEvent e){ 
            	  int a=0;//鼠標完成點擊事件
                     //e.getButton就會返回點鼠標的那個鍵,左鍵還是右健,3代表右鍵
                       mousex = e.getX();  //得到鼠標x坐標
                       mousey = e.getY();  //得到鼠標y坐標
                       double  k=0.6;            //直線斜率
                       double  Y1=0.6*mousex;
                       double  Y2=-0.6*mousex+810;
                       double   X1=1.6*mousey;
                       double   X2=-1.6*mousey+1350;
                       if(mousex > X1&&mousex<X2&&mousey>0&&mousey<405) {   //第一象限  		向上
                    	   label4.setText( "向上" );
                       	a=1;   	 
                       }
                       if(mousex>X2&&mousex<X1&&mousey>405&&mousey<810) {  // 第二象限             向下
                    	   label4.setText( "  向下" );
                       	 a=2;
                           }
                 if(mousex>0&&mousex<675&&mousey>Y1&&mousey<Y2) {    //第三象限     向左
                    	   label4.setText( " 向左" );
                       	 a=3;
                            }   
                       if(mousex>675&&mousex<1350&&mousey>Y2&&mousey<Y1) {   //第四象限    向右
                    	   label4.setText( "  向右" );
                           a=4;
                           } 
                
                      switch( a) {
                      case  1://按下向上,返回1
                          direction = 1;
                          break;
                      case 2://按下向下,返回-1
                          direction = -1;
                          break;
                      case 3://按下相左,返回2
                          direction = 2;
                          break;
                      case 4://按下向右,返回-2
                          direction = -2;
                          break;
                      default:
                          break;
                  }
                      if(direction + Direction !=0) {//不能反向運動
                          Direction = direction;
                          Move(direction);
                            repaint();
                  }
                }
               
          });         
      } 
   /*定義蛇移動的方法  
    *   貪吃蛇的移動方法主要包括方向控制,碰到隨機點,碰到自己,碰到邊界以及設計貪吃蛇從前向后的移動
    * 
    */
      public void Move(int direction) {                 	 
        int FirstX = snake.get(0).getX();            //獲取蛇第一個點的橫坐標
        int FirstY = snake.get(0).getY();            //獲取蛇第一個點的縱坐標                  
        if(!startFlag) 
            return ; 
        //方向控制
        switch(direction) {
            case 1:
                FirstY--;
                break;
            case -1:
                FirstY++;
                break;
            case 2: 
                FirstX--;
                break;
            case -2:
                FirstX++;
                break;
            default:
                break;
        }
      //當碰到隨機點時
        if(FirstX == newNode.getX()&&FirstY == newNode.getY()) { 
        	new  eatFoodMusic();
            getNode();
            return;
        }
      //當碰到蛇身自己時
        for(int x = 0; x < Length; x++) { 
            if((FirstX==snake.get(x).getX())&&(FirstY == snake.get(x).getY())) {
            	startFlag=false;
            	new  DeadMusic();
            	 new  Restart();   
            	 christmas.stop ();
            }
        }
         //當貪吃蛇撞到邊界
        if(FirstX < 1  || FirstX >29  || FirstY < 1 || FirstY >18) {        	
        	startFlag=false;
        	new  DeadMusic();
        	new  Restart();
        	 christmas.stop ();
        //	new  Test();
        } 
        //定義循環,使得貪吃蛇從前向后移動
        for(int x = Length - 1; x > 0; x--) {
            snake.get(x).setX(snake.get(x-1).getX());
            snake.get(x).setY(snake.get(x-1).getY());
        }
        snake.get(0).setX(FirstX);
        snake.get(0).setY(FirstY);
        repaint();
    }    
      //獲取隨機點
	public void getNode() {                            
        snake.add(new SnakeNode());
        Length++;        
        for(int x = Length-1; x >0; x--) {
            snake.get(x).setX(snake.get(x-1).getX());
            snake.get(x).setY(snake.get(x-1).getY());
            snake.get(x).setColor(snake.get(x-1).getColor());
        }
        snakeScore.setText( ""+( Length ));         //定義蛇的長度
        snake.get(0).setX(newNode.getX());
        snake.get(0).setY(newNode.getY());
        snake.get(0).setColor(newNode.getColor());
        CreateNode1();//產生隨機點
       // CreateNode2();
        repaint();
        //當長度超過10的時候,產生鼓掌聲
        if(Length==10) {
        	new  applauseMusic();
        }
    }   
	public void CreateNode1() {                     //創造隨機點的方法                                             
           Boolean flag = true;
           while(flag) {
        	  newY1 = new Random().nextInt(15)+1;     
        	  newX1= new Random().nextInt(25)+1; 
        	  for(int x = 0; x < Length; x++) {
        	        if(snake.get(x).getX() == newX1 && snake.get(x).getY() == newY1) {
        	        flag = true;
        	        break;
        	        }
        	        flag = false; 
        	    }
        	//隨機點不能超出面板,并且不能出現在蛇身上
                   
              for(int i = 0; i < Length; i++) {
                  if(snake.get(i).getX()> 5&& snake.get(i).getX()<newX1  &&snake.get(i).getY() > 5
                		  && snake.get(i).getY()<newY1) {    
                      flag = true;
                      break;
                     }
                    flag= false;
              }
        }                
       Color color = new Color(new Random().nextInt(255),new Random().nextInt(255),new Random().nextInt(255));
        newNode.setColor(color);
        newNode.setX(newX1);                                
        newNode.setY(newY1);                  
    }	
/*
 * 這里是自己新建一個事件處理,每隔Timer的時間間隔,就開始移動Directon的位置,
 * 由因為Direction的位置是構造方法中定義好的,所以就會自動地移動方向。而每當玩家使用鍵盤時,Direction的值變化,之后每次自動移動的方向也隨之變化。
 * 
 * 
 */
	//定義內部類,貪吃蛇不斷移動	
	public class ThingsListener1 implements ActionListener {
	    public void actionPerformed(ActionEvent e) {
	        Move(direction);
	        }
	    }// 
	public AudioClip loadSound ( String filename )
    {
     URL url = null;
      try
   {
    url = new URL ("file:" + filename);
    }
   catch (MalformedURLException e)
   {}
   return JApplet.newAudioClip (url);
   }	
	/*
	 * 當startflag為真的時候,貪吃蛇在線程時間的脈沖下繼續移動,這個過程包含在if語句塊中,當程序啟動時,每隔1.2s就有一個響應, 
	 *上一個方法采用Timer, Timer的構造方法是Timer(int delay, ActionListner listener)通俗的說就是創建一個每 delay秒觸發一次動作的計時器,
	 * 每隔特定的時間就會觸發特定的事件。可以使用start方法啟動計時器。
	 * 優點在于形式簡單,缺點在于當采用速度控制的時候不易控制,而同樣作為時間觸發作用的線程控制可以實現這個目的,即通過控制時間來控制貪吃蛇的移動速度
	 * 之所以之前的設計有錯誤,在于while后面沒有用if進行startflag的檢驗,即startflag只有在真的條件下才可以移動,時間脈沖觸發下才可以移動。
	 * 
	 * 	 
	*/
	//定義線程類,使得貪吃蛇能夠在線程的控制下不斷移動
    class ThingsListener  implements  Runnable   {
		@Override
		public void run() {
			// TODO 自動生成的方法存根
			while( true) {
				if(startFlag) {      
				Move(Direction);
				repaint();
				}
				try {					
					Thread.sleep(1200/Difficult_Degree);
				}catch(InterruptedException  e){
					e.printStackTrace();
				}
			}	 		
		}//設置一個監聽器事件,用來控制蛇的不斷移動       
    }
   //定義圖像類,畫出貪吃蛇移動的運行界面,如貪吃蛇的形狀,背景圖片,蛇頭蛇尾等      
   //描述蛇函數的主體形狀,隨機點的形狀和蛇的形狀    
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);//加背景
        Image  im=Toolkit.getDefaultToolkit().getImage("F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\background1.jpg");
        g.drawImage(im, 0, 0, this.getWidth(), this.getHeight(), this);//畫出蛇頭
      		if(direction ==1||Direction==1){      			     			
      			Toolkit toolup = this.getToolkit();
      	        Image headup =  toolup.getImage( "F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\up.png");
      	        g.drawImage(headup,snake.get(0).getX()*unit, snake.get(0).getY()*unit, unit, unit,this);     	        
      		}else if(direction ==-1){     			      	
      			 Toolkit tooldown = this.getToolkit();
      	        Image headdown =  tooldown.getImage( "F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\down.png");
      	        g.drawImage(headdown,snake.get(0).getX()*unit, snake.get(0).getY()*unit, unit, unit,this);      	        
      		}else if(direction ==2){
            	Toolkit toolleft = this.getToolkit();
      	        Image headleft =  toolleft.getImage( "F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\left.png");
      	        g.drawImage(headleft,snake.get(0).getX()*unit, snake.get(0).getY()*unit, unit, unit,this);      		
      		}else if(direction ==-2){     			 
      			Toolkit toolright = this.getToolkit();
      	        Image headright =  toolright.getImage( "F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\right.png");
      	        g.drawImage(headright,snake.get(0).getX()*unit, snake.get(0).getY()*unit, unit, unit,this);
      	     	}      	      		
      	//畫出食物的形狀	      	 
        Toolkit tool1 = this.getToolkit();
        Image food=  tool1.getImage( "F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\food.png");
        g.drawImage(food,newNode.getX()*unit, newNode.getY()*unit, unit, unit,this);               
        Toolkit tool2 = this.getToolkit();
        Image food1=  tool2.getImage( "F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\food.png");
        g.drawImage(food1,newNode.getX()*unit, newNode.getY()*unit, unit, unit,this);                         
      //繪制指定矩形的邊框。矩形的左邊和右邊位于 x 和 x + width。頂邊和底邊位于 y 和 y + height。使用圖形上下文的當前顏色繪制該矩形。
        g.drawRect(40, 30, 1350, 810 );             
        for(int x = 1; x < Length-1; x++) {                   //利用循環,來繪制蛇的形狀
            g.setColor(snake.get(x).getColor());
            g.fillOval(snake.get(x).getX()*unit, snake.get(x).getY()*unit, unit, unit);   //給蛇的每一個節點畫橢圓                  
        }                     
          for(int x = Length-1; x < Length; x++) {        	       
        Toolkit toolright = this.getToolkit();
          Image headright =  toolright.getImage( "F:\\MYJAVA\\Myprogram\\Snakeexample\\src\\image\\body.png");
  	       g.drawImage(headright,snake.get(x).getX()*unit, snake.get(x).getY()*unit, unit,unit,this);//利用循環,來繪制蛇的形狀           
        }
   }                    
    //設置按鈕的監聽器事件
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO 自動生成的方法存根
		//按開始鍵
		if(e.getSource() == startButton) {
			new  pushButtonMusic ();
            startFlag = true;
            startButton.setEnabled(false);
            stopButton.setEnabled(true);             
        }//按暫停鍵
        if(e.getSource() == stopButton) {
        	new  pushButtonMusic ();
            startFlag = false;
            startButton.setEnabled(true);
            stopButton.setEnabled(false);             
     }
          //        退出程序
        if(e.getSource() == quitButton) {        	 
            System.exit(0);
        }//按游戲指南建
        if(e.getSource() ==  ShowButton) {
        	new  pushButtonMusic ();
        	 JDialog frame = new JDialog();//構造一個新的JFrame,作為新窗口。
             frame.setBounds( 600,300,815,515 );             
             JTextArea  Myarea=new  JTextArea(3,10);
              Myarea.setText( " \n " 
                     +"這個小游戲點擊開始按鈕后貪吃蛇開始移動, 鼠標前后左右移動\n"+"會使貪吃蛇也前后左右移動。\n"
                     + "你的任務是通過控制蛇的移動來吃掉小草莓,這樣貪吃蛇就長大了。\n"
                     +"點擊暫停游戲按鈕可以使得貪吃蛇停止移動,"
                     +"點擊退出游戲按鈕自然游\n"+"戲就結束啦!\n"
                     + "點擊速度一,速度二等按鈕就可以控制貪吃蛇的移動速度 \n" 
                     );			 
		     frame.setLayout(null);              
              Myarea.setBounds( 10,10,815,350);             			 
             Myarea.setFont(new Font("華文行楷",Font.BOLD,25));          
             frame.add(Myarea);           
             frame.setModalityType(JDialog.ModalityType.APPLICATION_MODAL);    // 設置模式類型。
             frame.setVisible(true);              
     }//按速度一鍵
        if(e.getSource() == FspeedButton) {
        	new speedButtonMusic ();
        	  Difficult_Degree= 2;                      	
     }//按速度二鍵
        if(e.getSource() == SspeedButton) {
        	new speedButtonMusic ();            
        	 Difficult_Degree=  3;        	
     }//按速度三鍵
        if(e.getSource() == TspeedButton) {
        	new speedButtonMusic ();
        	 Difficult_Degree= 4;        	        	
     }//按速度四鍵
        if(e.getSource() == THspeedButton) {
        	new  speedButtonMusic ();
        	 Difficult_Degree= 5;      	
     }
        this.requestFocus();
    } 	 
}

以上就是動力節點小編介紹的"Java小游戲源代碼之貪吃蛇",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: a级精品九九九大片免费看 a级毛片高清免费视频 | 日韩伦理一区二区三区 | 国产一区二区三区国产精品 | 精品日本一区二区 | 色噜噜狠狠成人中文小说 | 亚洲精品久久久久久动漫剧情 | 午夜亚洲国产理论秋霞 | 久久综合狠狠综合久久 | 一区二区精品在线观看 | 四虎成人免费视频 | 免费不卡毛片 | 日本不卡毛片一二三四 | 手机看片日韩 | 在线播放精品 | 99久久免费观看 | 搡的我好爽视频在线观看 | 国产一二三区精品 | 成人精品一区二区不卡视频 | 九九视频免费看 | 亚洲国产精品67194成人 | 精品成人| 天天干天天色天天 | 四虎影视国产精品 | 国产精品天天干 | 欧美一级成人毛片影院 | 麻豆精品成人免费国产片 | 久久成人免费观看草草影院 | 国产精品第一页爽爽影院 | 黄色片在线免费观看视频 | 国产精品福利视频 | 成人精品网| 欧美日韩国产综合一区二区三区 | 日韩se| 99资源站| 免费一级毛片在线视频观看 | 日日操天天 | 95视频在线观看在线分类h片 | 欧美国产亚洲精品a第一页 欧美国产亚洲精品高清不卡 | 日韩女同视频 | 国产99精品在线观看 | 97视频|