java画乌龟_用java代码画乌龟,还要能让它爬。

2016-03-18 回答

import java.awt.borderlayout;

import java.awt.color;

import java.awt.dimension;

import java.awt.graphics;

import java.awt.graphics2d;

import java.awt.event.mouseevent;

import java.awt.event.mouselistener;

import javax.swing.jframe;

import javax.swing.jpanel;

publicclass test extends jframe

{

/** serial */

privatestaticfinallongserialversionuid = 1l;

booleanmousetag = false;

booleancrosstag = false;

intepointx = 0;

intepointy = 0;

inttype = 0;

intxdir = 10;

intxdir1 = 21;

intydir1 = 113;

intxdir2 = 10;

intydir2 = 110;

jpanel panel = null;

jpanel carpanel = null;

thread drawthread = null;

thread carthread = null;

public test()

{

panel = new jpanel()

{

/** serial */

privatestaticfinallongserialversionuid = 1l;

@override

publicvoid paint(graphics g)

{

super.paint(g);

graphics2d g2 = (graphics2d) g;

g2.drawstring("你是我的小龟!", 200, 20);

// 十字路口

g2.drawline(138, 0, 138, 90);

g2.drawline(0, 90, 138, 90);

g2.drawline(0, 150, 138, 150);

g2.drawline(138, 150, 138, 270);

g2.drawline(330, 0, 330, 90);

g2.drawline(330, 90, 490, 90);

g2.drawline(330, 150, 330, 270);

g2.drawline(330, 150, 490, 150);

switch (type)

{

case 0:

g2.setcolor(color.red);

g2.fillroundrect(10, 10, 22, 22, 90, 90);

g2.setcolor(color.green);

g2.fillroundrect(10, 35, 22, 22, 90, 90);

g2.setcolor(color.yellow);

g2.fillroundrect(10, 60, 22, 22, 90, 90);

break;

case 1:

g2.setcolor(color.green);

g2.fillroundrect(10, 10, 22, 22, 90, 90);

g2.setcolor(color.red);

g2.fillroundrect(10, 35, 22, 22, 90, 90);

g2.setcolor(color.yellow);

g2.fillroundrect(10, 60, 22, 22, 90, 90);

break;

case 2:

g2.setcolor(color.green);

g2.fillroundrect(10, 10, 22, 22, 90, 90);

g2.setcolor(color.yellow);

g2.fillroundrect(10, 35, 22, 22, 90, 90);

g2.setcolor(color.red);

g2.fillroundrect(10, 60, 22, 22, 90, 90);

break;

default:

break;

}

// car

g2.setcolor(color.green);

g2.filloval(xdir1, ydir1, 8, 8);

g2.setcolor(color.black);

g2.filloval(xdir2, ydir2, 12, 12);

// mouse round

if (mousetag)

{

g2.setcolor(color.red);

g2.drawoval(epointx - 12, epointy - 35, 20, 20);

g2.drawline((xdir1 + xdir2) / 2 + 6, (ydir2 + 6),

epointx - 6, epointy - 25);

xdir1 = (xdir1 + xdir2) / 2 + 6;

ydir1 = (ydir1 + 6);

}

if (crosstag)

{

g2.setcolor(color.red);

g2.drawstring("哎哟!", xdir1, ydir1);

}

}

};

drawthread = new thread()

{

@override

publicvoid run()

{

while (true)

{

try

{

thread.sleep(1000);

if (type == 0)

{

type = 1;

}

elseif (type == 1)

{

type = 2;

}

elseif (type == 2)

{

type = 0;

}

panel.repaint(0, 0, 50, 100);

}

catch (interruptedexception e)

{

e.printstacktrace();

}

}

}

};

add(panel, borderlayout.center);

if (drawthread.getstate() == thread.state.runnable)

{

return;

}

else

{

drawthread.start();

}

// ///

carthread = new thread()

{

@override

publicvoid run()

{

while (true)

{

try

{

// 自由开,遇到障碍物拐弯

freeruncar();

thread.sleep(50);

repaint();

}

catch (interruptedexception e)

{

}

}

}

privatevoid freeruncar()

{

// 前进方向

if (epointx > xdir2)

{

xdir1 = xdir2 + 8;

if (xdir2 > 480)

xdir2 = 0;

xdir2 += 1;

}

elseif (epointx  480)

xdir2 = 0;

xdir2 -= 1;

}

elseif (epointx == xdir2)

{

xdir1 = xdir2;

if (xdir2 > 480)

xdir2 = 0;

xdir2 -= 1;

}

if (epointy - 25 > ydir2)

{

ydir1 = ydir2 + 8;

if (ydir2 > 330)

ydir2 = 0;

ydir2 += 1;

}

elseif (epointy - 25  330)

ydir2 = 0;

ydir2 -= 1;

}

elseif (epointy - 25 == ydir2)

{

ydir1 = ydir2;

if (ydir2 > 330)

ydir2 = 0;

ydir2 -= 1;

}

// 碰撞检测 138, 90/ 138, 150/330, 90/330, 150

if (xdir1 <= 138 && ydir1 <= 90)

{

crosstag = true;

}

elseif (xdir1 <= 138 && ydir1 >= 150)

{

crosstag = true;

}

elseif (xdir1 >= 330 && ydir1 <= 90)

{

crosstag = true;

}

elseif (xdir1 >= 330 && ydir1 >= 150)

{

crosstag = true;

}

else

{

crosstag = false;

}

if (crosstag)

{

epointx = 250;

}

}

};

if (carthread.getstate() == thread.state.runnable)

{

return;

}

else

{

carthread.start();

}

// 鼠标thread

final thread mousethread = new thread()

{

@override

publicvoid run()

{

while (true)

{

if (mousetag)

{

}

}

}

@override

publicvoid interrupt()

{

mousetag = false;

}

};

if (mousethread.getstate() == thread.state.runnable)

{

return;

}

else

{

mousethread.start();

}

this.addmouselistener(new mouselistener()

{

@override

publicvoid mouseclicked(mouseevent e)

{

//system.out.println(e.getx() + ", " + e.gety());

}

@override

publicvoid mousereleased(mouseevent e)

{

epointx = e.getpoint().x;

epointy = e.getpoint().y;

mousetag = false;

}

@override

publicvoid mousepressed(mouseevent e)

{

epointx = e.getpoint().x;

epointy = e.getpoint().y;

mousetag = true;

}

@override

publicvoid mouseexited(mouseevent e)

{

}

@override

publicvoid mouseentered(mouseevent e)

{

}

});

}

publicstaticvoid main(string[] args)

{

test test = new test();

test.setsize(new dimension(500, 300));

test.setlocationrelativeto(null);

test.setdefaultcloseoperation(jframe.exit_on_close);

test.setresizable(false);

test.setvisible(true);

}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值