From 1fb395142653fc93630db924411e962c875f7cbb Mon Sep 17 00:00:00 2001 From: Cooper Timewell Date: Wed, 18 Mar 2020 22:53:39 +1100 Subject: [PATCH] Initial commit --- .gitignore | 4 + data/Cabin-Regular.ttf | Bin 0 -> 103720 bytes data/full_pack_2025.ttf | Bin 0 -> 10060 bytes data/stage1.rvb | 8 ++ src/Cell.java | 30 +++++++ src/CellIterator.java | 36 +++++++++ src/Grid.java | 169 ++++++++++++++++++++++++++++++++++++++++ src/Main.java | 76 ++++++++++++++++++ 8 files changed, 323 insertions(+) create mode 100644 .gitignore create mode 100644 data/Cabin-Regular.ttf create mode 100644 data/full_pack_2025.ttf create mode 100644 data/stage1.rvb create mode 100644 src/Cell.java create mode 100644 src/CellIterator.java create mode 100644 src/Grid.java create mode 100644 src/Main.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..08db6d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.settings/ +bin +.classpath +.project diff --git a/data/Cabin-Regular.ttf b/data/Cabin-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fda45da6074ddad23a4cb3e50d8a7829627d0bbb GIT binary patch literal 103720 zcmd?S34ByV@(14CZ?2r=PRPaN4g?_(E&(ARa*I(QB63PVjDQHJcp=~}x-Oyux~{tD zD&mERtS6!(B66t+h=|C22^exf60W@ex9YulGm`^xcYpuSXaE11q^DlL>gww1s_N=v z-Uum#h(KZ!?j8gC^um=C@@Y3dUA=l-(=%>U{HMrjj_ZP61=kIH=9L@h`T-%PJkx97 z;O;j)q!$P=ElP-x9@hCb&W=yM@&3>G42(S$q3jQ-|TeYB9b zEEU4ObK>aflWjdiP768yPr!Fi8a;9Bf_KaN;(Dn7r%e*cpp2KUgA$q{Vnjy~&~4~7Zqf7V zZiC$7hO2KtI-*~

9!p?REX#;_dfmr_DKS&1nZtyKvfr)4rS* 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%0AB?C0`{+$tm(3 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 eH>mvys_v7RcRk0mBRGD_1190=`1fC~y8-wB literal 0 HcmV?d00001 diff --git a/data/full_pack_2025.ttf b/data/full_pack_2025.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b4d7f58e9b905ae579cd1e99ff94ce0fee2ad72c GIT binary patch literal 10060 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 +D0->F3=water +H2->H16=road +H2->S2=road +H2=puppy red +H16=lion blue +S2=bunny red +H3=bunny blue \ No newline at end of file diff --git a/src/Cell.java b/src/Cell.java new file mode 100644 index 0000000..dd52059 --- /dev/null +++ b/src/Cell.java @@ -0,0 +1,30 @@ +import java.awt.*; + +public class Cell extends Rectangle { + // fields + final static int size = 45; + Color color = Color.WHITE; + boolean computerProvided; + + //constructors + public Cell(int x, int y){ + super(x,y,size,size); + } + + //methods + void paint(Graphics g, Point mousePos){ + g.setColor(color); + g.fillRect(x,y,size,size); + g.setColor(Color.BLACK); + g.drawRect(x,y,size,size); + //g.drawString(num+"", x+25, y+35); + } + + public boolean contains(Point p){ + if (p != null){ + return super.contains(p); + } else { + return false; + } + } +} \ No newline at end of file diff --git a/src/CellIterator.java b/src/CellIterator.java new file mode 100644 index 0000000..c4877bc --- /dev/null +++ b/src/CellIterator.java @@ -0,0 +1,36 @@ +import java.util.*; + +public class CellIterator implements Iterator { + Cell[][] data; + int outer; + int inner; + boolean runOut; + + public CellIterator(Cell[][] data){ + this.data = data; + outer = 0; + inner = 0; + runOut = false; + } + + @Override + public boolean hasNext() { + return !runOut; + } + + @Override + public Cell next() { + Cell ret = data[outer][inner]; + inner++; + if (inner >= data[outer].length){ + inner = 0; + outer++; + if (outer >= data.length){ + runOut = true; + } + } + + return ret; + } + +} \ No newline at end of file diff --git a/src/Grid.java b/src/Grid.java new file mode 100644 index 0000000..f0aa649 --- /dev/null +++ b/src/Grid.java @@ -0,0 +1,169 @@ +import java.awt.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Random; +import java.util.function.Consumer; + +class Grid implements Iterable { + static int cellAmount = 12; + static int cellSize = 45; + static int gridPadding = 10; + static Cell[][] cells = new Cell[cellAmount][cellAmount]; + static int countComplete = 0; + + // constructor + public Grid(){ + for(int x = 0; x < cells.length; x++){ + for(int y = 0; y < cells[x].length; y++){ + cells[x][y] = new Cell(position(x), position(y)); + } + } + } + + private int position(int a) { + return gridPadding + cellSize * a; + } + + // methods + public void paint(Graphics g, Point mousePos){ + g.setFont(new Font("Cabin-Regular", Font.PLAIN, 20)); + doToEachCell( (Cell c) -> c.paint(g, mousePos) ); + g.setColor(Color.GREEN); + g.fillRect(0,(gridPadding+(cellSize*cellAmount)+2),560,100); + g.setColor(Color.BLACK); + g.drawString("Solve", 270, (gridPadding+(cellSize*cellAmount)+55)); + } + + public void mouseClicked(int x, int y) { + for(int i = 0; i < cells.length; i++){ + for(int j = 0; j < cells[i].length; j++){ + if (cells[i][j].contains(x, y)) { + if(cells[i][j].color == Color.WHITE) { + cells[i][j].color = Color.RED; + countComplete++; + } + else if(cells[i][j].color == Color.RED) { + cells[i][j].color = Color.BLUE; + countComplete++; + } + else { + cells[i][j].color = Color.WHITE; + countComplete--; + } + } + } + } + if(y>=(gridPadding+(cellSize*cellAmount))) { + solve(); + } + } + + public static void solve() { + countComplete += threes(); + //while(countComplete != cellAmount * cellAmount) { + // countComplete+=threes(); + //} + } + + public static int threes() { + int changes = 0; + ArrayList cellAround = new ArrayList<>(); + for(int i = 0; i < cells.length; i++) { + for(int j = 0; j < cells[i].length; j++) { + cellAround.clear(); + cellAround = cellTwoAround(cells[i][j]); + for(int k = 0; k < cellAround.size(); k++) { + if(cellAround.get(k).color.equals(cells[i][j].color) && !(cells[i][j].color.equals(Color.WHITE))) { + if(cells[i][j].color.equals(Color.RED)) { + cellInbetween(cells[i][j], cellAround.get(k)).color = Color.BLUE; + } + else { + cellInbetween(cells[i][j], cellAround.get(k)).color = Color.RED; + } + changes++; + } + } + } + } + return changes; + } + + public static ArrayList cellTwoAround(Cell c) { + int i = getIJ(c)[0]; + int j = getIJ(c)[1]; + ArrayList cellsAround = new ArrayList<>(); + if(i - 2 >= 0) { + cellsAround.add(cells[i-2][j]); + } + if(i + 2 <= cellAmount - 1) { + cellsAround.add(cells[i+2][j]); + } + if(j - 2 >= 0) { + cellsAround.add(cells[i][j-2]); + } + if(j + 2 <= cellAmount-1) { + cellsAround.add(cells[i][j+2]); + } + return cellsAround; + } + + public static Cell cellInbetween(Cell a, Cell b) { + for(int i = 0; i < cells.length; i++) { + for(int j = 0; j < cells.length; j++) { + if(cells[i][j].equals(a)) { + if(i - 2 >= 0) { + if(cells[i-2][j].equals(b)) { + return cells[i-1][j]; + } + } + if(i + 2 <= cellAmount - 1) { + if(cells[i+2][j].equals(b)) { + return cells[i+1][j]; + } + } + if(j - 2 >= 0) { + if(cells[i][j-2].equals(b)) { + return cells[i][j-1]; + } + } + if(j + 2 <= cellAmount - 1) { + if(cells[i][j+2].equals(b)) { + return cells[i][j+1]; + } + } + } + } + } + return new Cell(-20,-20); + } + + public static int[] getIJ(Cell c) { + for(int i = 0; i < cells.length; i++){ + for(int j = 0; j < cells[i].length; j++){ + if (cells[i][j].equals(c)) { + int[] a = {i,j}; + return a; + } + } + } + return new int[0]; + } + + /** + * Takes a cell consumer (i.e. a function that has a single `Cell` argument and + * returns `void`) and applies that consumer to each cell in the grid. + * @param func The `Cell` to `void` function to apply at each spot. + */ + public void doToEachCell(Consumer func){ + for(Cell c : this){ + func.accept(c); + } + } + + @Override + public CellIterator iterator(){ + return new CellIterator(cells); + } + +} \ No newline at end of file diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 0000000..f2c0a87 --- /dev/null +++ b/src/Main.java @@ -0,0 +1,76 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.time.Duration; +import java.time.Instant; + +class Main extends JFrame { + + class App extends JPanel implements MouseListener { + + Grid grid; + + public App() { + int width = 560; + int height = 650; + setPreferredSize(new Dimension(width, height)); + this.addMouseListener(this); + grid = new Grid(); + } + + @Override + public void paint(Graphics g) { + grid.paint(g, getMousePosition()); + } + + @Override + public void mouseClicked(MouseEvent e) { + grid.mouseClicked(e.getX(), e.getY()); + } + + @Override + public void mousePressed(MouseEvent e) {} + + @Override + public void mouseReleased(MouseEvent e) {} + + @Override + public void mouseEntered(MouseEvent e) {} + + @Override + public void mouseExited(MouseEvent e) {} + + } + + public static void main(String[] args) throws Exception { + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + //ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new java.io.File("data/Cabin-Regular.ttf"))); + Main window = new Main(); + window.run(); + } + + private Main() { + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + App canvas = new App(); + this.setContentPane(canvas); + this.pack(); + this.setVisible(true); + } + + public void run() { + while (true) { + Instant startTime = Instant.now(); + this.repaint(); + Instant endTime = Instant.now(); + long howLong = Duration.between(startTime, endTime).toMillis(); + try{ + Thread.sleep(20l - howLong); + } catch (InterruptedException e){ + System.out.println("thread was interrupted, but who cares?"); + } catch (IllegalArgumentException e){ + System.out.println("application can't keep up with framerate"); + } + } + } +} \ No newline at end of file