Mo betta progress!
git-svn-id: https://samskivert.googlecode.com/svn/trunk@348 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -0,0 +1,143 @@
|
|||||||
|
//
|
||||||
|
// $Id: AtlantiBoard.java,v 1.1 2001/10/10 03:35:02 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.venison;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import com.samskivert.swing.util.SwingUtil;
|
||||||
|
|
||||||
|
import com.threerings.cocktail.cher.dobj.DSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays the tiles that make up the Venison board.
|
||||||
|
*/
|
||||||
|
public class VenisonBoard
|
||||||
|
extends JPanel implements VenisonTileCodes
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Sets the tiles that are displayed by this board. Causes the board
|
||||||
|
* to recompute its size based on the new tile layout.
|
||||||
|
*
|
||||||
|
* @param tiles the set of {@link VenisonTile} objects to be displayed
|
||||||
|
* by this board.
|
||||||
|
*/
|
||||||
|
public void setTiles (DSet tiles)
|
||||||
|
{
|
||||||
|
_tiles = tiles;
|
||||||
|
|
||||||
|
// we need to recompute our desired dimensions and then have our
|
||||||
|
// parent adjust to our changed size
|
||||||
|
computeDimensions();
|
||||||
|
revalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public void paintComponent (Graphics g)
|
||||||
|
{
|
||||||
|
super.paintComponent(g);
|
||||||
|
|
||||||
|
// center the tile display if we are bigger than we need to be
|
||||||
|
int tx = (getWidth() - TILE_WIDTH * _width)/2;
|
||||||
|
int ty = (getHeight() - TILE_HEIGHT * _height)/2;
|
||||||
|
g.translate(tx, ty);
|
||||||
|
|
||||||
|
// iterate over our tiles, painting each of them
|
||||||
|
Iterator iter = _tiles.elements();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
VenisonTile tile = (VenisonTile)iter.next();
|
||||||
|
tile.paint(g, _origX, _origY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// undo our translations
|
||||||
|
g.translate(-tx, -ty);
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public Dimension getPreferredSize ()
|
||||||
|
{
|
||||||
|
if (_tiles == null) {
|
||||||
|
return new Dimension(100, 100);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return new Dimension(TILE_WIDTH * _width, TILE_HEIGHT * _height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines how big we want to be based on where the tiles have been
|
||||||
|
* laid out.
|
||||||
|
*/
|
||||||
|
protected void computeDimensions ()
|
||||||
|
{
|
||||||
|
int maxX = 0, maxY = 0;
|
||||||
|
int minX = 0, minY = 0;
|
||||||
|
|
||||||
|
// figure out what our boundaries are
|
||||||
|
Iterator iter = _tiles.elements();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
VenisonTile tile = (VenisonTile)iter.next();
|
||||||
|
if (tile.x > maxX) {
|
||||||
|
maxX = tile.x;
|
||||||
|
} else if (tile.x < minX) {
|
||||||
|
minX = tile.x;
|
||||||
|
}
|
||||||
|
if (tile.y > maxY) {
|
||||||
|
maxY = tile.y;
|
||||||
|
} else if (tile.y < minY) {
|
||||||
|
minY = tile.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// now we can compute our width and the origin offset
|
||||||
|
_origX = -minX;
|
||||||
|
_origY = -minY;
|
||||||
|
_width = maxX - minX + 1;
|
||||||
|
_height = maxY - minY + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Test code. */
|
||||||
|
public static void main (String[] args)
|
||||||
|
{
|
||||||
|
JFrame frame = new JFrame("Board test");
|
||||||
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
VenisonBoard board = new VenisonBoard();
|
||||||
|
|
||||||
|
TestDSet set = new TestDSet();
|
||||||
|
set.addTile(new VenisonTile(CITY_FOUR, false, NORTH, 0, 1));
|
||||||
|
set.addTile(new VenisonTile(CITY_THREE, false, NORTH, 1, 1));
|
||||||
|
set.addTile(new VenisonTile(CITY_THREE_ROAD, false, NORTH, 1, 2));
|
||||||
|
set.addTile(new VenisonTile(CITY_THREE, false, NORTH, -1, 0));
|
||||||
|
set.addTile(new VenisonTile(CITY_FOUR, false, NORTH, -2, 0));
|
||||||
|
board.setTiles(set);
|
||||||
|
|
||||||
|
frame.getContentPane().add(board, BorderLayout.CENTER);
|
||||||
|
frame.pack();
|
||||||
|
SwingUtil.centerWindow(frame);
|
||||||
|
frame.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static class TestDSet extends DSet
|
||||||
|
{
|
||||||
|
public TestDSet ()
|
||||||
|
{
|
||||||
|
super(VenisonTile.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addTile (VenisonTile tile)
|
||||||
|
{
|
||||||
|
add(tile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** A reference to our tile set. */
|
||||||
|
protected DSet _tiles;
|
||||||
|
|
||||||
|
/** The offset in tile coordinates of the origin. */
|
||||||
|
protected int _origX, _origY;
|
||||||
|
|
||||||
|
/** The width and height of the board in tile coordinates. */
|
||||||
|
protected int _width, _height;
|
||||||
|
}
|
||||||
@@ -22,6 +22,8 @@ public class VenisonController extends GameController
|
|||||||
|
|
||||||
protected void gameDidStart ()
|
protected void gameDidStart ()
|
||||||
{
|
{
|
||||||
|
super.gameDidStart();
|
||||||
|
|
||||||
Log.info("Venison game did start.");
|
Log.info("Venison game did start.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
//
|
//
|
||||||
// $Id: AtlantiObject.java,v 1.1 2001/10/09 20:27:35 mdb Exp $
|
// $Id: AtlantiObject.java,v 1.2 2001/10/10 03:35:02 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.venison;
|
package com.threerings.venison;
|
||||||
|
|
||||||
|
import com.threerings.cocktail.cher.dobj.DSet;
|
||||||
|
|
||||||
import com.threerings.parlor.data.GameObject;
|
import com.threerings.parlor.data.GameObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -10,4 +12,53 @@ import com.threerings.parlor.data.GameObject;
|
|||||||
*/
|
*/
|
||||||
public class VenisonObject extends GameObject
|
public class VenisonObject extends GameObject
|
||||||
{
|
{
|
||||||
|
/** The field name of the <code>tiles</code> field. */
|
||||||
|
public static final String TILES = "tiles";
|
||||||
|
|
||||||
|
/** A set containing all of the tiles that are in play in this
|
||||||
|
* game. */
|
||||||
|
public DSet tiles = new DSet(VenisonTile.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests that the <code>tiles</code> field be set to the specified
|
||||||
|
* value.
|
||||||
|
*/
|
||||||
|
public void setTiles (DSet value)
|
||||||
|
{
|
||||||
|
requestAttributeChange(TILES, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests that the specified element be added to the
|
||||||
|
* <code>tiles</code> set.
|
||||||
|
*/
|
||||||
|
public void addToTiles (DSet.Element elem)
|
||||||
|
{
|
||||||
|
requestElementAdd(TILES, elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests that the element matching the supplied key be removed from
|
||||||
|
* the <code>tiles</code> set.
|
||||||
|
*/
|
||||||
|
public void removeFromTiles (Object key)
|
||||||
|
{
|
||||||
|
requestElementRemove(TILES, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests that the specified element be updated in the
|
||||||
|
* <code>tiles</code> set.
|
||||||
|
*/
|
||||||
|
public void updateTiles (DSet.Element elem)
|
||||||
|
{
|
||||||
|
requestElementUpdate(TILES, elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
protected void toString (StringBuffer buf)
|
||||||
|
{
|
||||||
|
super.toString(buf);
|
||||||
|
buf.append(", tiles=").append(tiles);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
//
|
||||||
|
// $Id: AtlantiTile.java,v 1.1 2001/10/10 03:35:02 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.venison;
|
||||||
|
|
||||||
|
import java.awt.Graphics;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
|
||||||
|
import com.threerings.cocktail.cher.dobj.DSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a single tile in play on the Venison game board.
|
||||||
|
*/
|
||||||
|
public class VenisonTile
|
||||||
|
implements DSet.Element, VenisonTileCodes
|
||||||
|
{
|
||||||
|
/** The starting tile. */
|
||||||
|
public static final VenisonTile STARTING_TILE =
|
||||||
|
new VenisonTile(CITY_ONE_ROAD_STRAIGHT, false, NORTH, 0, 0);
|
||||||
|
|
||||||
|
/** The tile type. */
|
||||||
|
public int type;
|
||||||
|
|
||||||
|
/** Whether this tile has a shield on it. */
|
||||||
|
public boolean hasShield;
|
||||||
|
|
||||||
|
/** The tile's orientation. */
|
||||||
|
public int orientation;
|
||||||
|
|
||||||
|
/** The tile's x and y coordinates. */
|
||||||
|
public int x, y;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a tile with all of the supplied tile information.
|
||||||
|
*/
|
||||||
|
public VenisonTile (int type, boolean hasShield, int orientation,
|
||||||
|
int x, int y)
|
||||||
|
{
|
||||||
|
this.type = type;
|
||||||
|
this.hasShield = hasShield;
|
||||||
|
this.orientation = orientation;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a blank tile, suitable for unserialization.
|
||||||
|
*/
|
||||||
|
public VenisonTile ()
|
||||||
|
{
|
||||||
|
// nothing doing
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paints this tile to the specified graphics context at its assigned
|
||||||
|
* location, accounting for the supplied x and y offsets of the
|
||||||
|
* origin.
|
||||||
|
*
|
||||||
|
* @param g the graphics context to use when painting the tile.
|
||||||
|
* @param xoff the offset (in tile units) of the origin in the x
|
||||||
|
* direction.
|
||||||
|
* @param yoff the offset (in tile units) of the origin in the y
|
||||||
|
* direction.
|
||||||
|
*/
|
||||||
|
public void paint (Graphics g, int xoff, int yoff)
|
||||||
|
{
|
||||||
|
// compute our screen coordinates
|
||||||
|
int sx = (x + xoff) * TILE_WIDTH;
|
||||||
|
int sy = (y + yoff) * TILE_HEIGHT;
|
||||||
|
|
||||||
|
// draw a rectangle
|
||||||
|
g.drawRect(sx, sy, TILE_WIDTH, TILE_HEIGHT);
|
||||||
|
|
||||||
|
// and draw our tile id in the middle for now (we'll eventually
|
||||||
|
// draw tile images)
|
||||||
|
g.drawString(type + "/" + x + "/" + y, sx + 20, sy + 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public Object getKey ()
|
||||||
|
{
|
||||||
|
// our key is our coordinates conflated into one integer
|
||||||
|
return new Integer((x + 128) * 256 + y + 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public void writeTo (DataOutputStream out)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
out.writeInt(type);
|
||||||
|
out.writeBoolean(hasShield);
|
||||||
|
out.writeInt(orientation);
|
||||||
|
out.writeInt(x);
|
||||||
|
out.writeInt(y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
public void readFrom (DataInputStream in)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
type = in.readInt();
|
||||||
|
hasShield = in.readBoolean();
|
||||||
|
orientation = in.readInt();
|
||||||
|
x = in.readInt();
|
||||||
|
y = in.readInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
//
|
||||||
|
// $Id: TileCodes.java,v 1.1 2001/10/10 03:35:02 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.venison;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A repository for constants related to the tiles that are used in the
|
||||||
|
* game of Venison.
|
||||||
|
*/
|
||||||
|
public interface VenisonTileCodes
|
||||||
|
{
|
||||||
|
/** A four-sided city tile. */
|
||||||
|
public static final int CITY_FOUR = 1;
|
||||||
|
|
||||||
|
/** A three-sided city tile. */
|
||||||
|
public static final int CITY_THREE = 2;
|
||||||
|
|
||||||
|
/** A three-sided city tile with a road. */
|
||||||
|
public static final int CITY_THREE_ROAD = 3;
|
||||||
|
|
||||||
|
/** A two-sided city tile with city openings adjacent to one
|
||||||
|
* another. */
|
||||||
|
public static final int CITY_TWO = 4;
|
||||||
|
|
||||||
|
/** A two-sided city tile with city openings adjacent to one another
|
||||||
|
* and a road connecting the other two sides. */
|
||||||
|
public static final int CITY_TWO_ROAD = 5;
|
||||||
|
|
||||||
|
/** A two-sided city tile with city openings on opposite sides of the
|
||||||
|
* tile. */
|
||||||
|
public static final int CITY_TWO_ACROSS = 6;
|
||||||
|
|
||||||
|
/** A two-sided city tile with two separate city arcs adjacent to one
|
||||||
|
* another and not connected to each other. */
|
||||||
|
public static final int DISCONNECTED_CITY_TWO = 7;
|
||||||
|
|
||||||
|
/** A two-sided city tile with two separate city arcs on opposite
|
||||||
|
* sides of the tile. */
|
||||||
|
public static final int DISCONNECTED_CITY_TWO_ACROSS = 8;
|
||||||
|
|
||||||
|
/** A one-sided city tile. */
|
||||||
|
public static final int CITY_ONE = 9;
|
||||||
|
|
||||||
|
/** A one-sided city tile with a city arc on top and a right facing
|
||||||
|
* curved road segment beneath it. */
|
||||||
|
public static final int CITY_ONE_ROAD_RIGHT = 10;
|
||||||
|
|
||||||
|
/** A one-sided city tile with a city arc on top and a left facing
|
||||||
|
* curved road segment beneath it. */
|
||||||
|
public static final int CITY_ONE_ROAD_LEFT = 11;
|
||||||
|
|
||||||
|
/** A one-sided city tile with a city arc on top and a road tee
|
||||||
|
* beneath it. */
|
||||||
|
public static final int CITY_ONE_ROAD_TEE = 12;
|
||||||
|
|
||||||
|
/** A one-sided city tile with a city arc on top and straight road
|
||||||
|
* segment beneath it. */
|
||||||
|
public static final int CITY_ONE_ROAD_STRAIGHT = 13;
|
||||||
|
|
||||||
|
/** A cloister tile. */
|
||||||
|
public static final int CLOISTER = 14;
|
||||||
|
|
||||||
|
/** A cloister tile with a road extending from the cloister. */
|
||||||
|
public static final int CLOISTER_ROAD = 15;
|
||||||
|
|
||||||
|
/** A four-way road intersection. */
|
||||||
|
public static final int FOUR_WAY_ROAD = 16;
|
||||||
|
|
||||||
|
/** A three-way road intersection. */
|
||||||
|
public static final int THREE_WAY_ROAD = 17;
|
||||||
|
|
||||||
|
/** A straight road segment. */
|
||||||
|
public static final int STRAIGHT_ROAD = 18;
|
||||||
|
|
||||||
|
/** A curved road segment. */
|
||||||
|
public static final int CURVED_ROAD = 19;
|
||||||
|
|
||||||
|
/** A tile orientation constant indicating the tile is in its default
|
||||||
|
* orientation. */
|
||||||
|
public static final int NORTH = 0;
|
||||||
|
|
||||||
|
/** A tile orientation constant indicating the tile is rotated 90
|
||||||
|
* degrees clockwise from its default orientation. */
|
||||||
|
public static final int EAST = 1;
|
||||||
|
|
||||||
|
/** A tile orientation constant indicating the tile is rotated 180
|
||||||
|
* degrees clockwise from its default orientation. */
|
||||||
|
public static final int SOUTH = 2;
|
||||||
|
|
||||||
|
/** A tile orientation constant indicating the tile is rotated 270
|
||||||
|
* degrees clockwise from its default orientation. */
|
||||||
|
public static final int WEST = 3;
|
||||||
|
|
||||||
|
/** The tile image width in pixels. */
|
||||||
|
public static int TILE_WIDTH = 90;
|
||||||
|
|
||||||
|
/** The tile image height in pixels. */
|
||||||
|
public static int TILE_HEIGHT = 90;
|
||||||
|
}
|
||||||
@@ -1,18 +1,44 @@
|
|||||||
//
|
//
|
||||||
// $Id: AtlantiManager.java,v 1.1 2001/10/09 20:27:35 mdb Exp $
|
// $Id: AtlantiManager.java,v 1.2 2001/10/10 03:35:02 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.venison;
|
package com.threerings.venison;
|
||||||
|
|
||||||
|
import com.threerings.cocktail.cher.dobj.DSet;
|
||||||
import com.threerings.parlor.server.GameManager;
|
import com.threerings.parlor.server.GameManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main coordinator of the Venison game on the server side.
|
* The main coordinator of the Venison game on the server side.
|
||||||
*/
|
*/
|
||||||
public class VenisonManager extends GameManager
|
public class VenisonManager
|
||||||
|
extends GameManager
|
||||||
{
|
{
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
protected Class getPlaceObjectClass ()
|
protected Class getPlaceObjectClass ()
|
||||||
{
|
{
|
||||||
return VenisonObject.class;
|
return VenisonObject.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
protected void didStartup ()
|
||||||
|
{
|
||||||
|
super.didStartup();
|
||||||
|
|
||||||
|
// grab our own casted game object reference
|
||||||
|
_venobj = (VenisonObject)_gameobj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In preparation for starting the game, we clear out the tile set and
|
||||||
|
* put the starting tile into place.
|
||||||
|
*/
|
||||||
|
protected void gameWillStart ()
|
||||||
|
{
|
||||||
|
super.gameWillStart();
|
||||||
|
|
||||||
|
// clear out the tile set
|
||||||
|
_venobj.setTiles(new DSet(VenisonTile.class));
|
||||||
|
_venobj.addToTiles(VenisonTile.STARTING_TILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected VenisonObject _venobj;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user