/** * @(#)fish.BigMouthFish.java 2008-7-31 * Copy Right Information : Tarena * Project : fish * JDK version used : jdk1.6.4 * Comments : 大嘴鱼类 * Version : 1.0 * Sr Date Modified By Why & What is modified * 1. 2008-7-31 小猪 新建 **/ package fish; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; /** * 大嘴鱼类<br> * 此类继承AcitonListener,实现AcitonPerformed方法,练习ActionListener的另一种实现方法<br> * 此类还练习定时器Timer的使用<br> * 此类还练习图形类Graphics的使用<br> * 2008-7-31 * @author 达内科技[Tarena Training Group] * @version 1.0 * @since JDK1.6(建议) */ public class BigMouthFish implements ActionListener{ /** 大嘴鱼嘴的方向:0-上 */ public static int UP = 0; /** 大嘴鱼嘴的方向:1-右 */ public static int RIGHT = 1; /** 大嘴鱼嘴的方向:2-下 */ public static int DOWN = 2; /** 大嘴鱼嘴的方向:3-左 */ public static int LEFT = 3; /** 大嘴鱼的身体大小,以size为半径画圆 */ public int size = 50; /** 大嘴鱼现在的方向(以嘴的方向为基准) */ public int direction = RIGHT; /** 大嘴鱼身体的颜色 */ private Color color = Color.CYAN; /** 大嘴鱼的位置x */ public int posx = 80; /** 大嘴鱼的位置y */ public int posy = 80; /** 大嘴鱼的速度,鱼每次前进的像素 */ public int speed = 4; /** 大嘴鱼眼睛的大小 */ private int eyesize = size/5; /** 大嘴鱼眼睛的位置x */ private int eyeposx = posx+size/2; /** 大嘴鱼眼睛的位置y */ private int eyeposy = posy+size/5; /** 大嘴鱼眼睛的颜色 */ private Color eyecolor = Color.RED; /** 大嘴鱼嘴的最大角度的一半 */ private int maxMonth = 30; /** 大嘴鱼现在嘴角的角度 */ private int monthsize = 30; /** 大嘴鱼的嘴是否张开 */ private boolean isOpen = true; private Timer time = null; /** * 大嘴鱼缺省构造函数.<br> * 创建一个位置为(200,200),大小为50,方向为右,颜色为Color.CYAN,速度为10的大嘴鱼 */ public BigMouthFish() { //this的使用。 this(200,200,50,RIGHT,Color.CYAN,4); } /** * 根据位置、大小、方向、颜色、速度构造一个大嘴鱼。 * @param posx 大嘴鱼的位置x。 * @param posy 大嘴鱼的位置y。 * @param size 大嘴鱼的大小。 * @param direction 大嘴鱼的方向:0-上;1-右;2-下;3-左。出入错误时,默认改为1。 * @param color 大嘴鱼的颜色。 * @param speed 大嘴鱼的速度。 */ public BigMouthFish(int posx,int posy,int size,int direction,Color color,int speed) { this.posx = posx; this.posy = posy; this.size = size; if(direction==1 || direction==2 || direction==3 || direction==4) this.direction = direction; this.color = color; this.speed = speed; eyesize = size/7; initEye(); time = new Timer(FishPool.reTime,this); time.start(); } /** * 大嘴鱼移动。根据鱼的方向移动鱼。 */ public void move(){ switch (direction) { case 0: posy--; break; case 1: posx++; break; case 2: posy++; break; case 3: posx--; break; default: break; } } /** * 改变大嘴鱼身体的颜色。 * @param color 欲改变大嘴鱼身体的颜色 */ public void changeColor(Color color){ this.color = color; } /** * 改变大嘴鱼的方向 * @param direction 欲改变大嘴鱼的方向 */ public void changeDir(int direction){ this.direction = direction; } /** * 使用画笔绘画大嘴鱼.大嘴鱼的头像:一个扇形的是鱼脸,上面有一个小圆是眼睛<br> * 1.保存画笔颜色<br> * 2.绘制大嘴鱼的脸<br> * 3.绘制大嘴鱼的眼睛<br> * 4.恢复画笔颜色<br> * @param g 画笔 */ public void paint(Graphics g){ //保存画笔的颜色 Color c = g.getColor(); //绘制鱼脸 g.setColor(color); //从(posx,posy)点开始,绘制宽为size,高为size,开始角度为(direction%2==0?(direction+1):(direction-1))*90+monthsize,弧度为360-2*maxMonth的弧形 g.fillArc(posx, posy, size, size, (direction%2==0?(direction+1):(direction-1))*90+monthsize, 360-2*monthsize); //绘制鱼眼 initEye(); g.setColor(eyecolor); g.fillOval(eyeposx, eyeposy, eyesize, eyesize); //恢复画笔颜色 g.setColor(c); } /** * 大嘴鱼张嘴闭嘴事件<br> * 此处只负责鱼的角度的变化,不负责鱼的重绘。 * 重绘在鱼池中实现。<br> * 这样的好处:保证鱼的绘制和步伐分开。显示层和逻辑层单独处理。(面向对象的责任问题)。 * @param e 事件对象 */ public void actionPerformed(ActionEvent e) { if(isOpen){ monthsize -= 2; if(monthsize<=0) isOpen = false; }else{ monthsize += 2; if(monthsize>=maxMonth) isOpen = true; } } /** * 方向改变时,眼睛的改变。 */ private void initEye(){ switch (direction) { case 0: eyeposx = posx+size/7; eyeposy = posy+size/2-eyesize; break; case 1: eyeposx = posx+size/2; eyeposy = posy+size/7; break; case 2: eyeposx = posx+size*5/7; eyeposy = posy+size/2; break; case 3: eyeposx = posx+size/2-eyesize; eyeposy = posy+size/7; break; default: break; } } }
最近下载更多
520131 LV5
2023年6月27日
微信网友_6438918626938880 LV1
2023年4月19日
酒非儿 LV6
2023年2月22日
xiaokang1 LV10
2023年1月11日
qwewrouy LV1
2022年5月29日
云水幕 LV1
2022年1月15日
978806986 LV16
2021年11月30日
1584160851 LV1
2021年8月6日
Guan008 LV4
2021年6月29日
养乐多 LV3
2021年4月25日
最近浏览更多
米继宝是憨憨 LV4
1月29日
pangzhihui LV14
2023年12月14日
15066671558
2023年10月10日
暂无贡献等级
18176866431 LV4
2023年8月28日
520131 LV5
2023年6月27日
LITIANYU084414 LV11
2023年6月16日
17683946472 LV9
2023年6月8日
海棠花瘦 LV9
2023年5月25日
luo110012 LV9
2023年5月15日
微信网友_6438918626938880 LV1
2023年4月19日