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();
}
}
}