Java画陆龟

这个乌龟很有意思大家可以玩一玩。


package utils;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
// 画乌龟,网上拷贝
public class Test1 {
	public static void main(String args[]) {
		JFrame w = new JFrame();
		w.setSize(800, 600);
		w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		w.setBackground(Color.CYAN);
		MyPanel mp = new MyPanel();
		mp.setBackground(Color.CYAN);
		w.add(mp);
		mp.addMouseMotionListener(mp);
		mp.addMouseListener(mp);
		w.setVisible(true);
	}
}

class MyPanel extends JPanel implements MouseMotionListener, MouseListener {
	private static final long serialVersionUID = 1L;
	int x = 100;
	int y = 100;
	boolean isRight = true;

	public void paint(Graphics g) {
		super.paint(g);
		// 画乌龟正面
		g.setColor(new Color(50, 200, 0));
		// 画四肢
		g.fillOval(x, y, 35, 50);
		g.fillOval(x + 105, y, 35, 50);
		g.fillOval(x, y + 110, 35, 50);
		g.fillOval(x + 105, y + 110, 35, 50);
		if (isRight == false) {
			g.setColor(Color.RED);
			// 画背面脚掌
			g.fillOval(x + 5, y + 15, 15, 15);
			g.fillOval(x + 5, y + 8, 5, 5);// 周围的小圆
			g.fillOval(x + 14, y + 5, 5, 5);// 周围的小圆
			g.fillOval(x + 20, y + 13, 5, 5);// 周围的小圆
			g.fillOval(x + 120, y + 15, 15, 15);
			g.fillOval(x + 5 + 110, y + 10, 5, 5);// 周围的小圆
			g.fillOval(x + 14 + 110, y + 5, 5, 5);// 周围的小圆
			g.fillOval(x + 20 + 112, y + 10, 5, 5);// 周围的小圆
			g.fillOval(x + 3, y + 128, 15, 15);
			g.fillOval(x + 5, y + 8 + 135, 5, 5);// 周围的小圆
			g.fillOval(x + 12, y + 5 + 142, 5, 5);// 周围的小圆
			g.fillOval(x + 20, y + 13 + 130, 5, 5);// 周围的小圆
			g.fillOval(x + 120, y + 125, 15, 15);
			g.fillOval(x + 5 + 110, y + 8 + 135, 5, 5);// 周围的小圆
			g.fillOval(x + 12 + 110, y + 5 + 142, 5, 5);// 周围的小圆
			g.fillOval(x + 20 + 110, y + 13 + 130, 5, 5);// 周围的小圆
		}
		g.setColor(new Color(50, 200, 0));
		g.fillOval(x + 50, y - 40, 40, 60); // 画龟头
		if (isRight) {
			// 画眼白
			g.setColor(Color.WHITE);
			g.fillOval(x + 55, y - 30, 10, 10);
			g.fillOval(x + 79, y - 30, 10, 10);
			// 画眼黑
			g.setColor(Color.BLACK);
			g.fillOval(x + 55, y - 30, 6, 6);
			g.fillOval(x + 79, y - 30, 6, 6);
		} else {
			g.setColor(Color.RED);// 画红嘴
			g.fillOval(x + 59, y - 26, 23, 25);
			g.setColor(new Color(50, 200, 0));// 遮盖露出月牙红嘴
			g.fillOval(x + 58, y - 35, 25, 25);
			g.setColor(Color.BLACK);
			g.drawLine(x + 65, y - 35, x + 62, y - 30);
			g.drawLine(x + 73, y - 35, x + 77, y - 30);
		}
		if (isRight) {
			g.setColor(new Color(50, 200, 0));// 画尾巴
			g.fillOval(x + 65, y + 130, 35, 90);
			g.setColor(Color.CYAN);
			g.fillOval(x + 75, y + 130, 30, 100);
		} else {
			g.setColor(new Color(50, 200, 0));// 画尾巴
			g.fillOval(x + 45, y + 130, 35, 90);
			g.setColor(Color.CYAN);
			g.fillOval(x + 39, y + 130, 30, 100);
		}
		g.setColor(new Color(50, 160, 50));
		// 画龟身
		g.fillOval(x, y, 140, 160);
		// 画龟身大圈
		if (isRight) {
			g.setColor(new Color(50, 200, 0));
			// 画龟身小圈
			g.fillOval(x + 10, y + 10, 120, 140);
			g.setColor(Color.BLACK);
			g.drawLine(x + 50, y + 60, x + 90, y + 60);
			g.drawLine(x + 50, y + 100, x + 90, y + 100);
			g.drawLine(x + 50, y + 60, x + 30, y + 80);
			g.drawLine(x + 90, y + 60, x + 110, y + 80);
			g.drawLine(x + 50, y + 100, x + 30, y + 80);
			g.drawLine(x + 90, y + 100, x + 110, y + 80);
			g.drawLine(x + 50, y + 60, x + 30, y + 28);
			g.drawLine(x + 90, y + 60, x + 110, y + 28);
			g.drawLine(x + 30, y + 80, x + 11, y + 75);
			g.drawLine(x + 110, y + 80, x + 129, y + 75);
			g.drawLine(x + 50, y + 100, x + 38, y + 140);
			g.drawLine(x + 90, y + 100, x + 102, y + 140);
		} else {
			g.setColor(new Color(255, 230, 230));
			// 画龟身小圈
			g.fillOval(x + 10, y + 10, 120, 140);
			g.setColor(Color.BLACK);
			g.drawLine(x + 50, y + 60, x + 90, y + 60);// 六边形上线
			g.drawLine(x + 50, y + 100, x + 90, y + 100);// 六边形下线
			// g.drawLine(x+50,y+60,x+30,y+80);//六边形上左
			// g.drawLine(x+90,y+60,x+110,y+80); //六边形上右
			// g.drawLine(x+50,y+100,x+30,y+80); //六边形下左
			// g.drawLine(x+90,y+100,x+110,y+80); //六边形下右
			g.drawLine(x + 30, y + 80, x + 110, y + 80);
			g.drawLine(x + 50, y + 60, x + 30, y + 28);
			g.drawLine(x + 90, y + 60, x + 110, y + 28);
			g.drawLine(x + 30, y + 80, x + 11, y + 75);
			g.drawLine(x + 110, y + 80, x + 129, y + 75);
			g.drawLine(x + 50, y + 100, x + 38, y + 140);
			g.drawLine(x + 90, y + 100, x + 102, y + 140);
		}
		// 写提示语
		g.setColor(Color.red);
		g.drawString("主人快点我", x + 40, y + 85);
	}

	public void mouseDragged(MouseEvent arg0) {
		x = arg0.getX() - 80;
		y = arg0.getY() - 70;
		this.repaint();
	}

	public void mouseMoved(MouseEvent arg0) {
	}

	public void mousePressed(MouseEvent arg0) {
		System.out.println("鼠标按下");
		if ((arg0.getX() > x) && (arg0.getX() < (x + 140))
				&& (arg0.getY() > (y - 40)) && (arg0.getY() < (y + 160))) {
			isRight = false;
			this.repaint();
		}
	}

	public void mouseClicked(MouseEvent e) {
	}

	public void mouseEntered(MouseEvent e) {
	}

	public void mouseExited(MouseEvent e) {
	}

	public void mouseReleased(MouseEvent e) {
		System.out.println("鼠标释放");
		isRight = true;
		this.repaint();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值