Mercurial > hg > ristipolku
view Ristipolku.java @ 7:70714c229e23
More work.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 28 Jan 2011 20:23:21 +0200 |
parents | be0bf7544069 |
children | d8e7fd8f3ccf |
line wrap: on
line source
/* * Ristipolku * (C) Copyright 2011 Matti 'ccr' Hämäläinen <ccr@tnsp.org> * * Ohjelmointiprojekti 2010-2011 Java-kurssille T740306. */ import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import java.awt.image.*; import java.awt.event.*; import javax.swing.*; import javax.imageio.*; import java.util.*; import java.io.*; import game.*; class PathInfo { public int in, inX, inY, out, outX, outY; public PathInfo(int in, int inX, int inY, int out, int outX, int outY) { this.in = in; this.inX = inX; this.inY = inY; this.out = out; this.outX = outX; this.outY = outY; } } class GameBoard { public static final int boardSize = 9; public static final int boardMiddle = 4; Piece[][] board; Piece current; int moveX, moveY, movePoint; public GameBoard() { board = new Piece[boardSize][boardSize]; board[boardMiddle][boardMiddle] = new Piece(PieceType.START); moveX = boardMiddle; moveY = boardMiddle - 1; movePoint = 0; } public void paint(Graphics2D g, int sx, int sy, float scale) { for (int y = 0; y < boardSize; y++) for (int x = 0; x < boardSize; x++) if (board[x][y] != null) { AffineTransform save = g.getTransform(); board[x][y].paint(g, sx + (x * scale), sy + (y * scale), scale - scale / 10); g.setTransform(save); } } private boolean isEmpty(int x, int y) { return (x >= 0 && x < boardSize && y >= 0 && y < boardSize && board[x][y] == null); } private Piece getPiece(int x, int y) { if (x >= 0 && x < boardSize && y >= 0 && y < boardSize) return board[x][y]; else return null; } public void pieceRotate(boolean dir) { current.rotate(dir); } public PathInfo resolvePath(int startX, int startY, int startPoint) { int x = startX, y = startY; int point; Piece curr = getPiece(startX, startY); if (curr == null) return null; while (curr != null) { } return new PathInfo(startPoint, startX, startY, point, x, y); } public void pieceFinishTurn() { if (current != null) { current.setType(PieceType.LOCKED); PathInfo i = resolvePath(moveX, moveY, movePoint); if (i != null) { } } if (isEmpty(moveX, moveY)) { current = new Piece(PieceType.ACTIVE); lauta.setPiece(moveX, moveY, current); } } } public class Ristipolku extends JApplet implements KeyListener { GameBoard lauta = null; BufferedImage lautaBG = null; public void init() { getContentPane().setBackground(Color.white); try { lautaBG = ImageIO.read(new File("background.jpg")); } catch (IOException e) { JOptionPane.showMessageDialog(null, "Could not load background image.", "Initialization error", JOptionPane.ERROR_MESSAGE); } lauta = new GameBoard(); addKeyListener(this); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); lauta.paint(g2, 100, 150, 60); } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: case KeyEvent.VK_UP: lauta.pieceRotate(false); break; case KeyEvent.VK_RIGHT: case KeyEvent.VK_DOWN: lauta.pieceRotate(true); break; case KeyEvent.VK_ENTER: lauta.pieceFinishTurn(); break; } } }