📄 sprite.java
字号:
/** By Kristi Thompson and Sean McLaughlin
*
* April 10 & 11, 1997
*
* CISC 235 - Information Structures (Winter 1997) taught by David Alex Lamb
*
* Dept of Computer Science
* Queen's University, Kingston
*
* kristi@merlan.ca , seanster@merlan.ca
*
* http://qlink.queensu.ca/~3sm79/BplusTree
*
* Feel free to copy and modify this applet, but please give credit
* to the original author where appropriate
*
* This applet was inspired by and partly based upon the BST Search Tree Applet
* by James Stewart.
*
* http://www.dgp.toronto.edu/people/JamesStewart/applets/bst/bst-property.html
*
*/
import java.awt.*;
/** A Sprite is an animated moveable object This is an abstract class*/
abstract class Sprite extends java.awt.Canvas
{
static final int DEF_WIDTH = 20; // Size of an individual sprite
static final int DEF_HEIGHT = 20;
static final int DEF_SPACE_X = 10; // When a new sprite is created, move over this much
static final int DEF_SPACE_Y = 10; // When a new sprite is created, move over this much
static final int ANIM_PIX = 1; // # of pixels to move before redrawing
static final Color DEF_BACK_COLOR = Color.white;
static final Color DEF_LINE_COLOR = Color.black;
static final int DEF_SPEED = 250; // Pixels/sec
//////////////////////////////////////////////////////////////
int speed; // Pixels/sec
//////////////////////////////////////////////////////////////
/** //////////////////////////////////////////////////////////
//
// Constructor
//
*/
public Sprite()
{
speed = DEF_SPEED;
//width = DEF_WIDTH;
//height = DEF_HEIGHT;
//setBackground(DEF_BACK_COLOR);
//setColor(DEF_LINE_COLOR);
}
/** //////////////////////////////////////////////////////////
//
// paint
//
*/
public void paint( Graphics g )
{
// Draw the Outline
g.drawRect( bounds().x, bounds().y, bounds().width, bounds().height);
}
/** /////////////////////////////////////
//
// dmove_A - move a certain distance - in an animated manner though
//
*/
public void dmove_A( int dx, int dy )
{
int i;
int x, xo, xf, xdist;
int y, yo, yf, ydist;
int time, steps, delay, inc;
int rise, run;
double slope;
boolean Axis;
boolean xA = true, yA = false;
if ( dx == 0 && dy == 0 ) return; // Why bother?
if ( isShowing() == false )
{
dmove( dx, dy);
return;
}
x = bounds().x; // Our initial position
y = bounds().y;
xo = x; // Primitives don't copy handles do they?
yo = y;
xf = x + dx; // Our final position
yf = y + dy;
xdist = Math.abs(dx); // Distance to go
ydist = Math.abs(dy);
if ( ydist > xdist )
{
Axis = yA;
rise = dx;
run = dy;
}
else
{
Axis = xA;
rise = dy;
run = dx;
}
slope = (double) rise / run; // Run is the longer axis
time = run / speed; // Time to cover distance
steps = run / ANIM_PIX; // # of steps to cover distance
if ( steps < 1 )
{
delay = 0;
}
else
{
delay = (int) ((double) ((double) time / (double) steps) * 1000); // delay needed between steps to maintain speed
}
// Set the correct increment
// if the distance is negligible, don't even move until the final positioning
if ( run < 0 )
{
inc = -ANIM_PIX;
}
else
{
inc = ANIM_PIX;
}
// Move in Steps
for ( i = 1; i < steps; i++)
{
if ( Axis == xA )
{
x = x + inc;
y = yo + ((int) (i * inc * slope));
}
else
{
y = y + inc;
x = xo + ((int) ( (double) i * inc * slope));
}
move( x, y ); // Finally get to move!
repaint();
if ( isShowing() )
{
try
{
Thread.sleep( delay ); // Pause to maintain speed and give time to redraw
}
catch (InterruptedException e)
{}
}
}
move( xf, yf); // Move to the precise spot (needed if ANIM_PIX is large)
repaint();
}
/** ///////////////////////////////////
//
// move_A - move to a certain spot in an animated manner
//
*/
public void move_A( int x, int y )
{
dmove_A( x - bounds().x, y - bounds().y);
}
/** /////////////////////////////////////
//
// dmove - move a certain in a NON-animated manner though
//
*/
public void dmove( int dx, int dy )
{
move( bounds().x + dx, bounds().y + dy);
}
/** //////////////////////////////////////////////////////////
//
// resize self-adjust size according to object contents
//
*/
public void resize()
{
// Do nothing
}
/** //////////////////////////////////////////////////////////
//
// Move our bottom-leftmost child to the left edge, and all bottommost
// children against the right edge returned.
// and then centre ourselves
// between the immediate left child's leftmost edge, and the
// immediate right child's rightmost edge.
//
// If we don't have children, position ourselves at the left edge
//
// This of course constructs a tree shape.
*/
public int Reshape_Tree( int left) // Returns right edge
{
return (left);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -