Make stone list on Board settable

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@23 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-04-30 15:05:01 +02:00
parent df2a40b16c
commit 3e6817388f
4 changed files with 49 additions and 27 deletions

View file

@ -1,4 +1,10 @@
package jrummikub.view;
import java.util.Map;
import jrummikub.model.Position;
import jrummikub.model.Stone;
public interface IBoard {
}
public void setStones(Map<Stone, Position> stones);
}

View file

@ -3,18 +3,22 @@ package jrummikub.view.impl;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Insets;
import java.util.Collections;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import jrummikub.model.Position;
import jrummikub.model.Stone;
import jrummikub.model.StoneColor;
import jrummikub.view.IBoard;
@SuppressWarnings("serial")
public class Board extends JPanel implements IBoard {
private final static ImageIcon background = new ImageIcon(Board.class.getResource("/jrummikub/resource/wood.png"));
private Map<Stone, Position> stones = Collections.emptyMap();
Board() {
super(true);
@ -34,14 +38,13 @@ public class Board extends JPanel implements IBoard {
background.paintIcon(this, g, xpos, 75);
}
// TODO Rest of painting code
// FIXME Test code
StonePainter.paintStone(g, new Stone(1, StoneColor.ORANGE, false),
0, 0, StonePainter.BOARD_SCALE);
StonePainter.paintStone(g, new Stone(10, StoneColor.BLUE, false),
1, 0, StonePainter.BOARD_SCALE);
StonePainter.paintStone(g, new Stone(5, StoneColor.RED, false),
0.5f, 1, StonePainter.BOARD_SCALE);
for (Map.Entry<Stone, Position> stone : stones.entrySet()) {
StonePainter.paintStone(g, stone.getKey(), stone.getValue(), StonePainter.BOARD_SCALE);
}
}
@Override
public void setStones(Map<Stone, Position> stones) {
this.stones = stones;
}
}

View file

@ -8,6 +8,7 @@ import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import jrummikub.model.Position;
import jrummikub.model.Stone;
import jrummikub.model.StoneColor;
@ -36,7 +37,7 @@ class StonePainter {
return null;
}
public static void paintStone(Graphics g, Stone stone, float x, float y, float scale) {
public static void paintStone(Graphics g, Stone stone, Position p, float scale) {
if (g instanceof Graphics2D) {
((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
@ -45,33 +46,33 @@ class StonePainter {
int width = (int)(DEFAULT_WIDTH*scale);
int height = (int)(DEFAULT_WIDTH*scale/ASPECT_RATIO);
int xpos = (int)(x*width);
int ypos = (int)(y*height);
int x = (int)(p.getX()*width);
int y = (int)(p.getY()*height);
// Paint background
g.setColor(BACKGROUND_COLOR);
g.fillRect(xpos, ypos, width, height);
g.fillRect(x, y, width, height);
// Paint bevel border
g.setColor(BACKGROUND_COLOR.brighter().brighter());
g.fillRect(xpos, ypos, 1, height);
g.fillRect(x, y, 1, height);
g.setColor(BACKGROUND_COLOR.brighter());
g.fillRect(xpos+1, ypos+1, 1, height-2);
g.fillRect(x+1, y+1, 1, height-2);
g.setColor(BACKGROUND_COLOR.brighter().brighter());
g.fillRect(xpos, ypos, width, 1);
g.fillRect(x, y, width, 1);
g.setColor(BACKGROUND_COLOR.brighter());
g.fillRect(xpos+1, ypos+1, width-2, 1);
g.fillRect(x+1, y+1, width-2, 1);
g.setColor(BACKGROUND_COLOR.darker().darker());
g.fillRect(xpos+width-1, ypos, 1, height);
g.fillRect(x+width-1, y, 1, height);
g.setColor(BACKGROUND_COLOR.darker());
g.fillRect(xpos+width-2, ypos+1, 1, height-2);
g.fillRect(x+width-2, y+1, 1, height-2);
g.setColor(BACKGROUND_COLOR.darker().darker());
g.fillRect(xpos, ypos+height-1, width, 1);
g.fillRect(x, y+height-1, width, 1);
g.setColor(BACKGROUND_COLOR.darker());
g.fillRect(xpos+1, ypos+height-2, width-2, 1);
g.fillRect(x+1, y+height-2, width-2, 1);
// Paint number
g.setFont(new Font("SansSerif", Font.BOLD, height/4));
@ -80,15 +81,15 @@ class StonePainter {
Rectangle2D stringRect = fm.getStringBounds(value, g);
g.setColor(getColor(stone.getColor()).darker());
g.drawString(value, (int)(xpos+width/2-stringRect.getWidth()/2)+1, ypos+height/4+(fm.getAscent()-fm.getDescent())/2+1);
g.drawString(value, (int)(x+width/2-stringRect.getWidth()/2)+1, y+height/4+(fm.getAscent()-fm.getDescent())/2+1);
g.setColor(getColor(stone.getColor()));
g.drawString(value, (int)(xpos+width/2-stringRect.getWidth()/2), ypos+height/4+(fm.getAscent()-fm.getDescent())/2);
g.drawString(value, (int)(x+width/2-stringRect.getWidth()/2), y+height/4+(fm.getAscent()-fm.getDescent())/2);
// Paint circle
g.setColor(BACKGROUND_COLOR.darker());
g.drawArc((int)(xpos+width/2-width*CIRCLE_WIDTH/2), (int)(ypos+height*0.65f-width*CIRCLE_WIDTH/2), (int)(width*CIRCLE_WIDTH), (int)(width*CIRCLE_WIDTH), 50, 170);
g.drawArc((int)(x+width/2-width*CIRCLE_WIDTH/2), (int)(y+height*0.65f-width*CIRCLE_WIDTH/2), (int)(width*CIRCLE_WIDTH), (int)(width*CIRCLE_WIDTH), 50, 170);
g.setColor(BACKGROUND_COLOR.brighter());
g.drawArc((int)(xpos+width/2-width*CIRCLE_WIDTH/2), (int)(ypos+height*0.65f-width*CIRCLE_WIDTH/2), (int)(width*CIRCLE_WIDTH), (int)(width*CIRCLE_WIDTH), -130, 170);
g.drawArc((int)(x+width/2-width*CIRCLE_WIDTH/2), (int)(y+height*0.65f-width*CIRCLE_WIDTH/2), (int)(width*CIRCLE_WIDTH), (int)(width*CIRCLE_WIDTH), -130, 170);
}
}

View file

@ -3,10 +3,15 @@ package jrummikub.view.impl;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.UIManager;
import jrummikub.model.Position;
import jrummikub.model.Stone;
import jrummikub.model.StoneColor;
import jrummikub.util.IListener;
import jrummikub.view.IPlayerPanel;
import jrummikub.view.ITable;
@ -82,6 +87,13 @@ public class View extends JFrame implements IView {
System.out.println("'End turn' fired");
}});
Map<Stone, Position> stones = new HashMap<Stone, Position>();
stones.put(new Stone(1, StoneColor.ORANGE, false), new Position(0, 0));
stones.put(new Stone(1, StoneColor.BLUE, false), new Position(1, 0));
stones.put(new Stone(1, StoneColor.RED, false), new Position(0.5f, 1));
view.getPlayerPanel().getBoard().setStones(stones);
view.setVisible(true);
}
}