Translate

2016年8月19日 星期五

JAVA遊戲製作中

LOVELAB

lovelab遊戲製作中

package wwwwq;

import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class abc extends Frame{
  int x,y;
  static Random rana0 = new Random();
  static Random ranb0 = new Random();
  static Random direct0 = new Random();
  
  static int [] a={0,0,0,0,0};
  static int [] b={0,0,0,0,0};
  static int [] pda={0,0,0,0,0};
  static int [] pdb={0,0,0,0,0};
  static int [] nda={0,0,0,0,0};
  static int [] ndb={0,0,0,0,0};
  static int [] da={0,0,0,0,0};
  static int [] db={0,0,0,0,0};
  static int [] dir={0,0,0,0,0};
  Image bufferPage=null;
  
  public abc(){
   
   super("4654s");
   setSize(800,800);
   setVisible(true);
   //setBackground(Color.blue);
   
   this.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
            System.exit(0);
           }
          });
   enableEvents(AWTEvent.WINDOW_EVENT_MASK);
   enableEvents(AWTEvent.MOUSE_EVENT_MASK);
   t.start();
   //new Thread().start();
  }
 public static void main(String[] args)  {
    new abc();         
    
    //a[0]=rana0.nextInt(800);
    //System.out.println(":"+a[0]);
    
    //da[0]=((400-a[0])/10);
    //System.out.println(":"+da[0]);
    
    //b[0]=ranb0.nextInt(800);
    //System.out.println(":"+b[0]);
    //db[0]=((400-b[0])/10);
    //System.out.println(":"+db[0]);
    
    
    dir[0]=direct0.nextInt(4);
    System.out.println(":"+dir[0]);
    if(dir[0]==0){a[0]=0;b[0]=ranb0.nextInt(800);db[0]=((400-b[0])/100);da[0]=((400-a[0])/100);}
    if(dir[0]==1){a[0]=800;b[0]=ranb0.nextInt(800);db[0]=((400-b[0])/100);da[0]=((400-a[0])/100);}
    if(dir[0]==2){b[0]=0;a[0]=rana0.nextInt(800);da[0]=((400-a[0])/100);db[0]=((400-b[0])/100);}
    if(dir[0]==3){b[0]=800;a[0]=rana0.nextInt(800);da[0]=((400-a[0])/100);db[0]=((400-b[0])/100);}
    System.out.println(":"+a[0]);
    System.out.println(":"+da[0]);
    System.out.println(":"+b[0]);
    System.out.println(":"+db[0]);
    
    
    
    
    
    
  }
 public void processMouseEvent(MouseEvent e){
  if(e.getID()==MouseEvent.MOUSE_PRESSED){
   x=e.getX();
   y=e.getY();   
  }   
 }
 Thread t = new Thread() {
 public void run(){
 
 
  while(dir[0]==0){
   repaint();
   a[0]=a[0]+4;
   b[0]=b[0]+db[0];
   try{Thread.sleep(50);}
   catch(InterruptedException e){;}   
  }
  while(dir[0]==1){
  repaint();
  a[0]=a[0]-4;
  b[0]=b[0]+db[0];
  try{Thread.sleep(50);}
  catch(InterruptedException e){;}   
 }
  while(dir[0]==2){
  repaint();
  a[0]=a[0]+da[0];
  b[0]=b[0]+4;
  try{Thread.sleep(50);}
  catch(InterruptedException e){;}   
 }
  while(dir[0]==3){
  repaint();
  a[0]=a[0]+da[0];
  b[0]=b[0]-4;
  try{Thread.sleep(50);}
  catch(InterruptedException e){;}   
 }
 }
 };
 
 public void update(Graphics g){
paint(g);
}
 
 public void paint(Graphics g){
Graphics bufferg;
if(bufferPage==null)
{bufferPage=createImage(800,800);}
bufferg=bufferPage.getGraphics();
   BufferedImage image = null;
  try {
   image = ImageIO.read(new File("D:\\test\\jtest2\\Penguins.jpg"));
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  bufferg.setColor(Color.white);
  bufferg.fillRect(0, 0, 800, 800);
  bufferg.drawImage(image, a[0],b[0],50,50,this);
        
  bufferg.dispose();
  g.drawImage(bufferPage, getInsets().left,getInsets().top, this);
  
  
  //if(x<=a[0]+50 && x>a[0]-50){a[0]=80000;b[0]=800;}
  
  
 }
}

PS1:圖形移動到中間的解決方法(藉由運算da)
PS2:圖形消除閃爍問題
PS3:閃爍殘影問題(藉由把緩衝頁背景圖白再印出即可)