From eb5afa5df0942a18c91aa886a578af23329e53d5 Mon Sep 17 00:00:00 2001 From: zinchenko291 Date: Thu, 6 May 2021 23:47:06 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=81=D1=82=D0=B0=D0=BB=D0=BE=D1=81?= =?UTF-8?q?=D1=8C=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=20=D1=81=20=D0=BA=D0=B0=D0=BC=D0=B5=D1=80=D0=BE=D0=B9.?= =?UTF-8?q?=20=D0=9F=D1=80=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=BD=D0=B8=D0=BA=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Camera.pde | 14 ++++++++++++++ Chunk.pde | 26 +++++++++++++------------- Generator.pde | 14 ++++++++++++++ Render.pde | 18 ++++++++++++++++++ Settings.pde | 3 +++ Textures.pde | 13 +++++++++++++ World.pde | 31 ++++++++++++++++++++++++++++++- minecraft2D.pde | 6 ------ readme.md | 8 +++++++- textures/grass.png | Bin 0 -> 3048 bytes textures/sand.png | Bin 0 -> 1413 bytes textures/snow.png | Bin 0 -> 2130 bytes textures/stone.png | Bin 0 -> 449 bytes textures/water.png | Bin 0 -> 3356 bytes 14 files changed, 112 insertions(+), 21 deletions(-) create mode 100644 Settings.pde create mode 100644 textures/grass.png create mode 100644 textures/sand.png create mode 100644 textures/snow.png create mode 100644 textures/stone.png create mode 100644 textures/water.png diff --git a/Camera.pde b/Camera.pde index 5fb33da..915e564 100644 --- a/Camera.pde +++ b/Camera.pde @@ -1,2 +1,16 @@ class Camera { + private int x; + private int y; + + Camera(int x, int y) { + this.x = x; + this.y = y; + } + + public void setX(int x) { this.x = x; } + public void setY(int y) { this.y = y; } + + public PVector getXY() { + return new PVector(x, y); + } } diff --git a/Chunk.pde b/Chunk.pde index a7b9fca..24b39a0 100644 --- a/Chunk.pde +++ b/Chunk.pde @@ -1,23 +1,23 @@ class Chunk { private int x; private int y; - private int level; - - Chunk(int _x, int _y, int _level) { - x = _x; - y = _y; - level = _level; + private int hight; + + Chunk(int x, int y, int hight) { + this.x = x; + this.y = y; + this.hight = hight; } - - int getX() { + + public int getX() { return x; } - - int getY() { + + public int getY() { return y; } - - int getLevel() { - return level; + + public int getHight() { + return hight; } } diff --git a/Generator.pde b/Generator.pde index 5b9783a..f056187 100644 --- a/Generator.pde +++ b/Generator.pde @@ -1,3 +1,17 @@ class Generator { + private long seed; + private float noiseScale; + private int maxHight; + Generator(long seed, float noiseScale) { + this.seed = seed; + this.noiseScale = noiseScale; + } + + public Chunk generateChunk(int x, int y) { + noiseSeed(seed); + + int hight = (int)map(noise(x, y) * (1 / noiseScale), 0, 1, 0, maxHight); + return new Chunk(x, y, hight); + } } diff --git a/Render.pde b/Render.pde index f77a18e..fce6e54 100644 --- a/Render.pde +++ b/Render.pde @@ -1,3 +1,21 @@ class Render { + private Textures textures; + private World world; + Render(World world) { + this.textures = new Textures(); + this.world = world; + } + + public void renderChunk(int x, int y) { + Chunk chunk = world.getChunk(x, y); + + beginShape(); + texture(textures.getTexture(chunk.getHight())); + vertex(x * Settings.chunkSize, y * Settings.chunkSize, 0, 0); + vertex((1 + x) * Settings.chunkSize, y * Settings.chunkSize, Settings.chunkSize, 0); + vertex((1 + x) * Settings.chunkSize, (1 + y) * Settings.chunkSize, Settings.chunkSize, Settings.chunkSize); + vertex(x * Settings.chunkSize, (1 + y) * Settings.chunkSize, 0, Settings.chunkSize); + endShape(); + } } diff --git a/Settings.pde b/Settings.pde new file mode 100644 index 0000000..01620dc --- /dev/null +++ b/Settings.pde @@ -0,0 +1,3 @@ +static class Settings { + static public int chunkSize = 32; +} diff --git a/Textures.pde b/Textures.pde index a45ea09..4f43d08 100644 --- a/Textures.pde +++ b/Textures.pde @@ -1,3 +1,16 @@ class Textures { + private PImage[] textures; + Textures() { + this.textures = new PImage[] { + loadImage("textures/water.png"), + loadImage("textures/sand.png"), + loadImage("textures/grass.png"), + loadImage("textures/stone.png"), + loadImage("textures/snow.png") + }; + } + public PImage getTexture(int i){ + return textures[i]; + } } diff --git a/World.pde b/World.pde index 2568ca2..8afbf5d 100644 --- a/World.pde +++ b/World.pde @@ -1,3 +1,32 @@ class World { - + private ArrayList> chunks; + private Generator gen; + + World(long seed, float noiseScale) { + this.gen = new Generator(seed, noiseScale); + this.chunks = new ArrayList>(); + } + + public void setChunk(Chunk chunk, int x, int y) { + try { + chunks.get(x).add(y, chunk); + } + catch(Exception e) { + chunks.add(x, new ArrayList()); + } + finally { + chunks.get(x).add(y, chunk); + } + } + + public Chunk getChunk(int x, int y) { + try { + chunks.get(x).get(y); + } + catch(Exception e) { + Chunk newChunk = gen.generateChunk(x, y); + setChunk(newChunk, x, y); + } + return chunks.get(x).get(y); + } } diff --git a/minecraft2D.pde b/minecraft2D.pde index 0cb5dc9..ec86aea 100644 --- a/minecraft2D.pde +++ b/minecraft2D.pde @@ -1,9 +1,3 @@ -Generator gen; -Render render; -Camera camera; -Textures textures; -World world; - void settings() { size(800, 800, P2D); } diff --git a/readme.md b/readme.md index 24e4364..4e07eac 100644 --- a/readme.md +++ b/readme.md @@ -2,4 +2,10 @@ Попытка сделать minecraft 2D с видом сверху на processing. -В планах сделать генерируемый в реальном времени мир. Может быть добавить возможность сохранять миры. \ No newline at end of file +В планах сделать +- Генерируемый в реальном времени мир. +- Добавить возможность сохранять миры. +- Сделать систему логирования. +- Возможность управления камерой стрелочками. + +Осталось доделать класс камеры, дальше только надеяться на рабочий прототип. diff --git a/textures/grass.png b/textures/grass.png new file mode 100644 index 0000000000000000000000000000000000000000..495961a4592fe9fbaeac7c995ab64d75b1da7c2c GIT binary patch literal 3048 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 Tr1*#s00000NkvXXu0mjf%POP8 literal 0 HcmV?d00001 diff --git a/textures/snow.png b/textures/snow.png new file mode 100644 index 0000000000000000000000000000000000000000..6026f6f43cc094572bbc22e80e22b0f27cee70db GIT binary patch literal 2130 zcmV-Y2(9;tP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvvg9ZX{O1&N1SB?b91JF6ZqUb{6yUY$^~6kc z`MtuHK@yo-D6{|iyPLo8VRmACND_0579XE|=7Jls^D{@XeteG)uUB|}$j$kJA#xbq ze2n{=Umy?Hg5;Ncd&*6!OOGr?>&2nasb#gc=E+jzc*a>rsQiY42cTO0YE4v{RmpF4BqZDUQMF_!~RF-i-F2rjw=YLGx6%lm-%NnQ{` zCAi>C2qA_PB;-({i#~=JV~Sd%N^;4kkYY+nQcgvjcnK0EiAa``IXjfFkYi3JOU}6z z7%fm;u)1JIDI0HY^IO>BmNwb)Rw}}$`WkAisY=bYG;XdT{ab9wG-!G{cis2UV^3Xr?&V}{vHE0;nmZ;e)bOuZpvZiA(8>LwotQU@#d+5@qAchEHp^+&^oZy)mKl%$V42(RL;A zL=%;w&dxAgeFfaX_Nn0&to<&DiCs#i>IB-u#dYZV`Xf(gDh& z%uZMB5zpos(4TJ z^7L%oEI*e}OffY4yG7)gbHh*TA3^?ZlULB2t8yOg!GDY6S39Gz@rASCmsl|qOdK2U zh%AFg!{t@%MplnHHIEn?HmkNwux|~lmYEp^s~?~o8TtcWIIzFF(L6kX!z0K?LbR)Y z`zwe0I%>gfaqh=qN#&74IHKL&mWZ}_@%oiJG$?)5- zW%Cc7%_LEX@2LC$000JJOGiWi000000Qp0^e*gdg32;bRa{vGi!vFvd!vV){sAK>D z00(qQO+^Re0|5>mI=jmiUH||Aut`KgR7l62R?CjVAPfYA1h@YGXZEykiTB{HHTacu zb3j#!$IqF#{#;inW!75EvxwxkTv$ZzWp!Vk7NPTd#8szz-*FJ3TeJ6dl~Q)>gI^-x zthFW381FWx@`31hRtoYJ`|VvAP(4oW)%;j{-YXX!u@;de^^F*7v*+{Rff&0jQALOZSjE)b z#Fg>*qtz2lRffJ6DT*r5=K8wLw@J5upu3~F3`5zlCn}VnOA^=&rAtQ-BBCV@6mKi((+z7G{N^lG*@!lvI6-A0X`wF85tQRB_;Ls_5J<*Krw<~vh=ZEKt-Gd9+AZi41D`Rn9+hYSOsXA zl&6bhh{k!`KMIIHl3ftm6bQ` zz5982vl(YOd!{Syxcj;MnVP&<_@?L-1zVN5-w_2*4sVol)Ur$#* Jmvv4FO#q!-t&so# literal 0 HcmV?d00001 diff --git a/textures/water.png b/textures/water.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa811c6c60cd7f3933b6bb40e31c1f7ebdc96c4 GIT binary patch literal 3356 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 literal 0 HcmV?d00001