会动的乌龟

Haigui.java
代码如下:

package day4;

import javax.swing.JFrame;

public class Haigui {
	public static void main(String[] args){

	JFrame frame = new JFrame();
	frame.setTitle("忍者神龟");
	frame.setSize(1400,800);
	frame.setLocationRelativeTo(null);
	
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	TJPanel tj =new TJPanel();
	frame.add(tj);
	
	frame.addMouseListener(tj);
	tj.addMouseListener(tj);
	//添加键盘的监听事件
	frame.addKeyListener(tj);
	tj.addKeyListener(tj);
	
	
	
	
	frame.setVisible(true);
	}
}

TJPanel.java

package day4;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JPanel;
import javax.swing.colorchooser.ColorChooserComponentFactory;

public class TJPanel extends JPanel implements KeyListener,MouseListener,Runnable{
	
	int o=600;
	int p=450;
	
	
	
	//乌龟的初始位置
	int x=300;
	int y=400;
	//脚的初始位置
	int k1=300,t1=400;
	int k2=300,t2=400;
	int k3=300,t3=400;
	int k4=300,t4=400;
	
	
	
	//加水的波纹
	int[] a=new int[300];//300个x坐标
	int[] b=new int[300];//300个y坐标
	
	//定义一个position
	//当position==0的时候,乌龟的左上脚和右下角同时向前移动
	int position=0;
	
	
	
	
	//构造方法:方法名和类同名:无任何返回值类型:无参构造 
	public TJPanel(){
		//随机产生位置
		for(int i=0;i<a.length;i++)
		{
			a[i]=(int) (Math.random()*1400);
			b[i]=(int)  (Math.random()*800);
	}
		Thread t=new Thread(this);
		t.start();//启动线程
	}
	
	
	
	@Override
	public void paint(Graphics g) {              //alt+/   快捷
		// TODO Auto-generated method stub
		super.paint(g);
		this.setBackground(Color.CYAN);
		
		//画矩形
				g.setColor(Color.black);
				g.fillRect(o, p-200, 20, 20);
		
		//画波纹
		g.setColor(Color.BLUE);
		for(int i=0;i<a.length;i++)
		{
		g.drawString("~~~~~~", a[i], b[i]);
		}
		//加舌头
		g.setColor(Color.red);
		g.fillOval(x+30 ,y-10, 10, 30);
		//加头
		g.setColor(Color.green);
		g.fillOval(x, y, 70, 100);
		//加眼睛
		g.setColor(Color.black);
		g.fillOval(x+10, y+30, 10, 20);
		g.fillOval(x+50, y+30, 10, 20);
		
		
		
		//画脚
		//左上
		g.setColor(Color.green);
		g.fillOval(k1-85, t1+76, 60,70);
		//右上if
		g.setColor(Color.green);
		g.fillOval(k2+85, t2+76, 60,70);
		//左下
		g.setColor(Color.green);
		g.fillOval(k3-85, t3+235, 60,70);
		//右下
		g.setColor(Color.green);
		g.fillOval(k4+85, t4+235, 60,70);
		//加乌龟壳
		g.setColor(Color.orange);
		g.fillOval(x-66, y+66, 200, 230);
		//壳加文字
		g.setColor(Color.red);
	
		//设置字体大小
		Font font=new Font(Font.DIALOG,Font.BOLD,30);
		g.setFont(font);
		g.drawString("大乌龟", x-10, y+180);
		
		
		
		
		
		
		
		
	    //g.drawRect(30, 100, 400, 600);
	    //画实心
	    
	    //画圆或椭圆
		/*g.setColor(Color.blue);
		g.drawOval(40, 300, 100, 100);
	    g.fillOval(30, 450, 200, 100);
	    //奥迪车标
	    g.drawOval(40, 600, 30, 30);
	    g.drawOval(60, 600, 30, 30);
	    g.drawOval(80, 600, 30, 30);
	    g.drawOval(100, 600, 30, 30);
	    //画线段
	    g.drawLine(20, 50, 400, 800);
		
		*/
		
		
		
	}


	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void keyPressed(KeyEvent e) {
		
		
	//System.out.println("点击了按钮");
	if(e.getKeyCode()==KeyEvent.VK_UP){
		System.out.println("点击了上方向键");
		
		repaint();
		p=p-5;
		y=y-10;
		if(position==0){
			t1=t1-20;
			t4=t4-20;
		}
		if(position==1){
			t2=t2-20;
			t3=t3-20;
		}
		if(t1<t2){
			if(x!=k1){
				x=k1=k2=k3=k4;
			}
			position=1;
		}
		if(t1>=t2){
			if(x!=k1){
				x=k1=k2=k3=k4;
			}
			position=0;
		}
		
		
		
	}
	
	if(e.getKeyCode()==KeyEvent.VK_DOWN){
		System.out.println("点击了下方向键");
		
		repaint();
		p=p-5;
		y=y+10;
		if(position==0){
			t1=t1+20;
			t4=t4+20;
		}
		if(position==1){
			t2=t2+20;
			t3=t3+20;
		}
		if(t1>t2){
			if(x!=k1){
				x=k1=k2=k3=k4;
			}
			position=1;
		}
		if(t1<=t2){
			if(x!=k1){
				x=k1=k2=k3=k4;
			
			}position=0;
		}
		
	}
	if(e.getKeyCode()==KeyEvent.VK_RIGHT){
		System.out.println("点击了右方向键");
		repaint();
		o=o+5;
		x=x+10;
		if(position==0){
			k1=k1+20;
			k4=k4+20;
		}
		if(position==1){
			k2=k2+20;
			k3=k3+20;
		}
		if(k1>k2){
			if(y!=k1){
				y=t1=t2=t3=t4;
			}
			position=1;
		}
		if(k1<=k2){
			if(y!=k1){
				y=t1=t2=t3=t4;
			
			position=0;}
		}
	}
	if(e.getKeyCode()==KeyEvent.VK_LEFT){
		System.out.println("点击了左方向键");
		
		repaint();
		o=o+5;
		x=x-10;
		if(position==0){
			k1=k1-20;
			k4=k4-20;
		}
		if(position==1){
			k2=k2-20;
			k3=k3-20;
		}
		if(k1<k2){
			if(y!=k1){
				y=t1=t2=t3=t4;
			
			position=1;
		}}
		if(k1>=k2){
			if(y!=k1){
				y=t1=t2=t3=t4;
			
			position=0;}
		}}
	
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

   //使用方法
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		//System.out.println("11111");
		x=e.getX();
		y=e.getY();
		repaint();//重绘 重复调用paint方法
		k1=e.getX();
		t1=e.getY();
		k2=e.getX();
		t2=e.getY();
		k3=e.getX();
		t3=e.getY();
		k4=e.getX();
		t4=e.getY();
		
		
	}


	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void run() {
		
		//System.out.println("线程启动");
		while(true){
		for (int i = 0; i < a.length; i++) {
			a[i]--;
			if(a[i]<0){
				a[i]=1400;
			}			
		}
		try {
			Thread.sleep(10);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		repaint();
	}
	
	}

}

猜你喜欢

转载自blog.csdn.net/xuexi____/article/details/90044815