From 1d96cc1359cbd9fdb677392dc0aa285c72fc6e0b Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 11 Jul 2015 21:20:56 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D0=B8=D0=B3?= =?UTF-8?q?=D1=80=D1=8B=20agar.own?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/game/agar.own | 76 +++++++++++++++++++++++++++++++ src/com/annimon/ownlang/Main.java | 10 ++-- 2 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 examples/game/agar.own diff --git a/examples/game/agar.own b/examples/game/agar.own new file mode 100644 index 0000000..3b96244 --- /dev/null +++ b/examples/game/agar.own @@ -0,0 +1,76 @@ +use "canvas" +use "math" +use "std" + +w = 800 h = 600 +w2 = w/2 h2 = h/2 +window("agar.io own clone", w, h) + +// поле +fieldWidth = 5000 +fieldHeight = 3000 +fieldX = rand(fieldWidth) - w2 +fieldY = rand(fieldHeight) - h2 + +// еда +NUM_FOOD = 350 +food = newarray(4, NUM_FOOD) + +for i = 0, i < NUM_FOOD, i = i + 1 { + food[0][i] = rand(fieldWidth) + food[1][i] = rand(fieldHeight) + food[2][i] = 6 + rand(2) + food[3][i] = rand(#ffffff) +} + +// игрок +playerSize = 8 +playerColor = rand(#ffffff) + +run = 1 +while run { + mouse = mousehover() + angle = atan2(mouse[1] - h2, mouse[0] - w2) + fieldX = fieldX + cos(angle) * 50/playerSize + fieldY = fieldY + sin(angle) * 50/playerSize + if (fieldX < -w2) fieldX = -w2 + else if (fieldX > fieldWidth - w2 - 1) fieldX = fieldWidth - w2 - 1 + if (fieldY < -h2) fieldY = -h2 + else if (fieldY > fieldHeight - h2 - 1) fieldY = fieldHeight - h2 - 1 + + // очистка экрана + color(#ffffff) + frect(0, 0, w, h) + // граница + color(#333333) + rect(-fieldX, -fieldY, fieldWidth, fieldHeight) + + for i = 0, i < NUM_FOOD, i = i + 1 { + dx = food[0][i] - fieldX - w2 + dy = food[1][i] - fieldY - h2 + rad = food[2][i] + playerSize + if ( (dx*dx + dy*dy) < (rad*rad) ) { + // есть столкновение + playerSize = playerSize + 1 + food[0][i] = rand(w) + food[1][i] = rand(h) + food[2][i] = 6 + rand(2) + food[3][i] = rand(#ffffff) + } + // отрисовка еды + color(food[3][i]) + circle(food[0][i] - fieldX, food[1][i] - fieldY, food[2][i]) + } + + // отрисовка игрока + color(playerColor) + circle(w2, h2, playerSize) + color(0) + drawstring(playerSize, w2-10, h2+4) + + repaint() + sleep(20) +} + + +def circle(cx, cy, rad) foval(cx-rad, cy-rad, 2*rad, 2*rad) \ No newline at end of file diff --git a/src/com/annimon/ownlang/Main.java b/src/com/annimon/ownlang/Main.java index 5b1d950..1d71c55 100644 --- a/src/com/annimon/ownlang/Main.java +++ b/src/com/annimon/ownlang/Main.java @@ -18,11 +18,15 @@ import java.util.List; public final class Main { public static void main(String[] args) throws IOException { - final String input = new String( Files.readAllBytes(Paths.get("visitor.own")), "UTF-8"); + final String file = "examples/game/agar.own"; + final String input = new String( Files.readAllBytes(Paths.get(file)), "UTF-8"); final List tokens = new Lexer(input).tokenize(); - for (Token token : tokens) { - System.out.println(token); + for (int i = 0; i < tokens.size(); i++) { + System.out.println(i + " " + tokens.get(i)); } +// for (Token token : tokens) { +// System.out.println(token); +// } final Statement program = new Parser(tokens).parse(); System.out.println(program.toString());