From 97d3b53c7add5df47bece63078f27109e8cfecda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=9A=D1=83=D0=B7?= =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=BE=D0=B2?= Date: Wed, 25 Sep 2024 14:51:45 +0400 Subject: [PATCH 1/9] test lection_1 --- src/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Main.java b/src/Main.java index 7aeb918..9fc9538 100644 --- a/src/Main.java +++ b/src/Main.java @@ -9,7 +9,7 @@ public static void main(String[] args) { for (int i = 1; i <= 5; i++) { //TIP Press to start debugging your code. We have set one breakpoint // for you, but you can always add more by pressing . - System.out.println("i test git= " + i); + System.out.println("i lection_1 = " + i); } } } \ No newline at end of file From 4ac2670a98b787b693766060b64c90837a219c16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=9A=D1=83=D0=B7?= =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=BE=D0=B2?= Date: Wed, 25 Sep 2024 14:53:27 +0400 Subject: [PATCH 2/9] test lection 1 branch --- src/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Main.java b/src/Main.java index 9fc9538..7ecc08d 100644 --- a/src/Main.java +++ b/src/Main.java @@ -9,7 +9,7 @@ public static void main(String[] args) { for (int i = 1; i <= 5; i++) { //TIP Press to start debugging your code. We have set one breakpoint // for you, but you can always add more by pressing . - System.out.println("i lection_1 = " + i); + System.out.println("i wow test branch = " + i); } } } \ No newline at end of file From 7a777099158df7c88b1576b286a7946517795fc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=9A=D1=83=D0=B7?= =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=BE=D0=B2?= Date: Wed, 25 Sep 2024 14:54:28 +0400 Subject: [PATCH 3/9] test lection 1 branch --- src/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Main.java b/src/Main.java index 7ecc08d..c21554e 100644 --- a/src/Main.java +++ b/src/Main.java @@ -9,7 +9,7 @@ public static void main(String[] args) { for (int i = 1; i <= 5; i++) { //TIP Press to start debugging your code. We have set one breakpoint // for you, but you can always add more by pressing . - System.out.println("i wow test branch = " + i); + System.out.println("i wow test branch 2 = " + i); } } } \ No newline at end of file From 15a2a7bfd816944794444d9fadb9022ca759757c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=9A=D1=83=D0=B7?= =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=BE=D0=B2?= Date: Wed, 2 Oct 2024 15:25:10 +0400 Subject: [PATCH 4/9] =?UTF-8?q?=D0=BD=D0=B0=D0=B4=D0=BE=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20gun.mod,=20smg=20=D0=B8?= =?UTF-8?q?=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE=D0=B4=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=D1=82=D0=B2=D0=B8=D0=B5=20=D0=BC=D0=B5=D0=B6=D0=B4=D1=83=20Pla?= =?UTF-8?q?yer=20=D0=B8=20Weapon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/uiDesigner.xml | 124 +++++++++++++++++++++++++++++++++++++++++++ src/Main.java | 21 ++++---- src/gun.java | 58 ++++++++++++++++++++ src/modificate.java | 3 ++ src/player.java | 35 ++++++++++++ src/shooting.java | 4 ++ src/smg.java | 3 ++ src/weapon.java | 37 +++++++++++++ 8 files changed, 274 insertions(+), 11 deletions(-) create mode 100644 .idea/uiDesigner.xml create mode 100644 src/gun.java create mode 100644 src/modificate.java create mode 100644 src/player.java create mode 100644 src/shooting.java create mode 100644 src/smg.java create mode 100644 src/weapon.java diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Main.java b/src/Main.java index c21554e..bff6c06 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,15 +1,14 @@ -//TIP To Run code, press or -// click the icon in the gutter. public class Main { public static void main(String[] args) { - //TIP Press with your caret at the highlighted text - // to see how IntelliJ IDEA suggests fixing it. - System.out.printf("Hello and welcome!"); - - for (int i = 1; i <= 5; i++) { - //TIP Press to start debugging your code. We have set one breakpoint - // for you, but you can always add more by pressing . - System.out.println("i wow test branch 2 = " + i); - } + // пусть у нас есть 2D игра с видом сверху, шутер. + // есть игрок и оружие + // для упрощения у нас небудет карты, а будем в тупую опрашивать объекты игроков на их положение + + + + // доделать gun.mod, smg + + // подвязать взаимодействие player и weapon + // weapon.hit, gun.shoot, } } \ No newline at end of file diff --git a/src/gun.java b/src/gun.java new file mode 100644 index 0000000..45a70d7 --- /dev/null +++ b/src/gun.java @@ -0,0 +1,58 @@ +public class gun extends weapon implements shooting, modificate{ + + private int magazineSize = 0; + private int ammo = 0; + + + gun(String name,float range){ + super(name,range); + } + + gun(String name,float range, int magazineSize){ + super(name,range); + this.magazineSize = magazineSize; + } + + public void shoot(){ + if (ammo>0){ + ammo -= 1; + System.out.println("BANG!"); + } + else { + System.out.println("Cinn..."); + } + } + + + public void reload(){ + if(this.ammo>0 & magazineSize>0) { + setAmmo(this.magazineSize); + System.out.println("reload success"); + } + else{ + System.out.println("reload fail"); + } + } + + public void mod() { + + } + + protected void setAmmo(int ammo) { + this.ammo = ammo; + } + + public int getAmmo() { + return ammo; + } + + protected void setMagazineSize(int magazineSize) { + if (magazineSize>0) { + this.magazineSize = magazineSize; + } + } + + protected int getMagazineSize() { + return magazineSize; + } +} diff --git a/src/modificate.java b/src/modificate.java new file mode 100644 index 0000000..6be6f30 --- /dev/null +++ b/src/modificate.java @@ -0,0 +1,3 @@ +public interface modificate { + public void mod(); +} diff --git a/src/player.java b/src/player.java new file mode 100644 index 0000000..8ee96ff --- /dev/null +++ b/src/player.java @@ -0,0 +1,35 @@ +public class player { + private int healthPoint = 100; + coords cord = new coords(); + + protected class coords{ + private float posY=0; + private float posX=0; + + coords(){ + this.posX = 0; + this.posY = 0; + } + coords(float x,float y){ + this.posX = x; + this.posY = y; + } + + public float getPosX() { + return posX; + } + + public void setPosX(float posX) { + this.posX = posX; + } + + public float getPosY() { + return posY; + } + + public void setPosY(float posY) { + this.posY = posY; + } + } + +} diff --git a/src/shooting.java b/src/shooting.java new file mode 100644 index 0000000..31fdb08 --- /dev/null +++ b/src/shooting.java @@ -0,0 +1,4 @@ +public interface shooting { + public void shoot(); + public void reload(); +} diff --git a/src/smg.java b/src/smg.java new file mode 100644 index 0000000..98af752 --- /dev/null +++ b/src/smg.java @@ -0,0 +1,3 @@ +public class smg { + +} diff --git a/src/weapon.java b/src/weapon.java new file mode 100644 index 0000000..dc599a7 --- /dev/null +++ b/src/weapon.java @@ -0,0 +1,37 @@ +public class weapon{ + // это класс орижия + // оно способно наносить урон игроку (player) + // и имеет радиус применения + private String name = "weapon"; + private int damage = 0; + private float range = 0; + static int id = 1; + + + + public boolean hit(){ + return false; + }; + + weapon(String name){ + this.name = name; + } + + weapon(String name,float range){ + this.name = name; + this.range =range; + } + + protected void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public static int getId() { + return id; + } + +} \ No newline at end of file From 0d5946d93cf290ea5f29b1694318c59a405a9d43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=9A=D1=83=D0=B7?= =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=BE=D0=B2?= Date: Thu, 3 Oct 2024 00:25:15 +0400 Subject: [PATCH 5/9] =?UTF-8?q?*=20=D0=B8=D1=80=D1=80=D0=B0=D1=80=D1=85?= =?UTF-8?q?=D0=B8=D1=8F=20weapon=20->=20gun=20->=20smg=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=83=D1=87=D0=B0=D0=B5=D1=82=D1=81=D1=8F=202=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=BC=D0=BA=D0=B0=20*=20=D0=B8=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0=20=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=B6=D0=B4=D1=8B=D0=B9=20=D0=B8=D0=B7=20=D0=BD=D0=B8?= =?UTF-8?q?=D1=85=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD(shooting=20=D0=B2=20gun,=20=D0=B0=20modificate=20=D0=B2?= =?UTF-8?q?=20weapon)=20*=20=D0=B0=D0=B1=D1=81=D1=82=D1=80=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20ent?= =?UTF-8?q?ity=20c=20=D0=B0=D0=B1=D1=81=D1=82=D1=80=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B5?= =?UTF-8?q?=D0=B9=20printInfo()=20*=20=D0=9A=D0=90=D0=96=D0=94=D0=AB=D0=99?= =?UTF-8?q?=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20=D1=81=D0=BE=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=B8=D1=82=20>2=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9?= =?UTF-8?q?=20*=20=D0=B2=20=D0=BA=D0=B0=D0=B6=D0=B4=D0=BE=D0=BC=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=D0=B5=20=D0=B5=D1=81=D1=82=D1=8C=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=20?= =?UTF-8?q?*=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B8=D0=BD=D0=BA=D0=B0=D0=BF=D1=81=D1=83=D0=BB=D1=8F?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=B2=20entity,=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=20coords,=20=D0=B3=D0=B4=D0=B5=20=D1=81=D0=B5?= =?UTF-8?q?=D1=82=D1=82=D0=B5=D1=80=D1=8B=20posX=20posY=20=D1=8F=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D1=8E=D1=82=D1=81=D1=8F=20private=20*=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=B5=20=D0=B8=20=D0=BC=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=B2=20entity,=20counter=20=D0=B8=20displayCounter()?= =?UTF-8?q?=20*=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=B6=D0=B4=D0=BE=D0=BC=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B5=20*=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D1=8E=D1=82=20=D0=BA=D0=B0=D0=BA=D1=83=D1=8E-=D1=82=D0=BE=20?= =?UTF-8?q?=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D1=83=D1=8E=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=B8=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 58 ++++++++++++++++++++--- src/entity.java | 109 ++++++++++++++++++++++++++++++++++++++++++++ src/gun.java | 84 ++++++++++++++++++++++------------ src/modificate.java | 3 +- src/player.java | 86 +++++++++++++++++++++------------- src/shooting.java | 2 +- src/smg.java | 71 ++++++++++++++++++++++++++++- src/weapon.java | 69 ++++++++++++++++++++++------ 8 files changed, 398 insertions(+), 84 deletions(-) create mode 100644 src/entity.java diff --git a/src/Main.java b/src/Main.java index bff6c06..ddd4c52 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,14 +1,60 @@ public class Main { public static void main(String[] args) { - // пусть у нас есть 2D игра с видом сверху, шутер. - // есть игрок и оружие - // для упрощения у нас небудет карты, а будем в тупую опрашивать объекты игроков на их положение + /*✅ иррархия weapon -> gun -> smg получается 2 потомка + //✅ 2 интерфейса и каждый из них реализован(shooting в gun, а modificate в weapon) + //✅ абстрактный класс entity c абстрактной функцией printInfo() + //✅ КАЖДЫЙ класс содержит >2 полей + //✅ в каждом классе есть параметризированный конструктор + //✅ реализация инкапсуляции в entity, класс coords, где сеттеры posX posY являются private + //✅ статическое поле и метод в entity, counter и displayCounter() + //✅ методы в каждом классе + //✅ методы реализовывают какую-то сложную логику + */ + // у нас есть игрок и оружие + player Bob = new player("Bob"); + Bob.printInfo(); + player BigBob = new player("Big Bob", 200); + Bob.printInfo(); + // printInfo и displayInfo это по сути выполняют одно и тоже, но printInfo это унаследованный от абстрактного класса + weapon axe = new weapon("axe", 19); + axe.displayInfo(); - // доделать gun.mod, smg + gun pistol = new gun("p250", 14,10); + pistol.displayInfo(); + + smg p90 = new smg("P90",27,50,"auto"); + p90.displayInfo(); + + Bob.printInfo(); + BigBob.printInfo(); + System.out.println("Сущности созданны и получена информация о них\n"); + + Bob.attack(pistol, BigBob); + BigBob.printInfo(); + System.out.println("О нееет! Bob стреляет в BigBob'a!\n"); + + Bob.attack(axe, BigBob); + BigBob.printInfo(); + System.out.println("Ужас!!! Bob бьёт BigBob'a топором!\n"); + + if(!BigBob.getLive()){ + BigBob.setHealthPoint(200); + BigBob.setLive(true); + BigBob.printInfo(); + System.out.println("Возвращаем BigBob'a к жизни\n"); + } + else { + BigBob.printInfo(); + System.out.println(); + } + + + + Bob.attack(p90, BigBob); + BigBob.printInfo(); + System.out.println("О нееет! Bob расстреливает BigBob'a!\n"); - // подвязать взаимодействие player и weapon - // weapon.hit, gun.shoot, } } \ No newline at end of file diff --git a/src/entity.java b/src/entity.java new file mode 100644 index 0000000..1c99e71 --- /dev/null +++ b/src/entity.java @@ -0,0 +1,109 @@ + +public abstract class entity { + private String name = "Entity"; + private int healthPoint = 100; + + static int counter = 1; + private int id = counter; + entity.coords cord = new entity.coords(); + + entity() { + } + + entity(String name) { + this.name = name; + this.healthPoint = healthPoint; + } + + entity(int healthPoint) { + this.healthPoint = healthPoint; + } + + entity(String name, int healthPoint) { + this.name = name; + this.healthPoint = healthPoint; + this.healthPoint = healthPoint; + } + + entity(int posX, int posY) { + cord.setPosX(posX); + cord.setPosY(posY); + } + + entity(String name, int posX, int posY) { + this.name = name; + cord.setPosX(posX); + cord.setPosY(posY); + } + + entity(String name, int healthPoint, int posX, int posY) { + this.name = name; + this.healthPoint = healthPoint; + cord.setPosX(posX); + cord.setPosY(posY); + } + + //ИНКАПСУЛИРОВАННЫЙ класс координат + protected class coords { + private int posY; + private int posX; + + coords() { + this.posX = 0; + this.posY = 0; + } + + coords(int x, int y) { + this.posX = x; + this.posY = y; + } + public void changePos(int x,int y){ + setPosX(x); + setPosY(y); + } + public int getPosX() { + return posX; + } + + private void setPosX(int posX) { + this.posX = posX; + } + + public int getPosY() { + return posY; + } + + private void setPosY(int posY) { + this.posY = posY; + } + } + + //Абстрактная функция + public abstract void printInfo(); + + public int getId() { + return id; + } + + public static void displayCounter() { + + System.out.printf("Counter: %d \n", counter); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getHealthPoint() { + return healthPoint; + } + + protected void setHealthPoint(int healthPoint) { + this.healthPoint = healthPoint; + } + +} diff --git a/src/gun.java b/src/gun.java index 45a70d7..da70929 100644 --- a/src/gun.java +++ b/src/gun.java @@ -1,53 +1,81 @@ -public class gun extends weapon implements shooting, modificate{ - - private int magazineSize = 0; - private int ammo = 0; +public class gun extends weapon implements shooting { + private int magazineSize = 1; + private int ammo = 1; + gun(){ + super("Gun"); + } + gun(String name) { + super(name); + } - gun(String name,float range){ - super(name,range); + gun(String name, int damage) { + super(name, damage); } - gun(String name,float range, int magazineSize){ - super(name,range); + gun(String name, int damage, int magazineSize) { + super(name); + setDamage(damage); this.magazineSize = magazineSize; + this.ammo = magazineSize; } - - public void shoot(){ - if (ammo>0){ - ammo -= 1; - System.out.println("BANG!"); + @Override + public void displayInfo(){ + System.out.printf("Name: %s, Damage: %d, id: %d, MagSize:%d, Ammo: %d\n",getName(),getDamage(),getId(),getMagazineSize(),getAmmo()); + } + @Override + public int attack(player attacker, player prey) { //переопределяем функцию из класса родителя различие в выводе в else + if (((getDamage() >= prey.getHealthPoint()) & getAmmo()>0) | prey.getLive()==false) { + setAmmo(getAmmo()-1);//прозводим выстрел + prey.setLive(false); + prey.setHealthPoint(0); + System.out.printf("Player \"%s\" KILL player \"%s\"(%dhp) by %d damage using \"%s\"(%d/%d)\n", attacker.getName(), prey.getName(), prey.getHealthPoint(), getDamage(), getName(),getAmmo(),getMagazineSize()); + return 1;//если убил, то возвращает 1 + } else if ((getDamage() < prey.getHealthPoint()) & getAmmo()>0){ + setAmmo(getAmmo()-1); + prey.setHealthPoint(prey.getHealthPoint() - getDamage()); + System.out.printf("Player \"%s\" SHOOT player \"%s\"(%dhp) by %d damage using \"%s\"(%d/%d)\n", attacker.getName(), prey.getName(), prey.getHealthPoint(), getDamage(), getName(),getAmmo(),getMagazineSize()); + return 0;// если ранил, то 2 } else { - System.out.println("Cinn..."); + System.out.println("NoAmmo!"); + return 2; //если осечка, то 0 } } - - public void reload(){ - if(this.ammo>0 & magazineSize>0) { - setAmmo(this.magazineSize); - System.out.println("reload success"); - } - else{ - System.out.println("reload fail"); - } + @Override + public int shoot(player attacker, player prey) {//переопределяем функцию из интерфейса + return attack(attacker, prey); } - public void mod() { + @Override + public void reload() {//переопределяем функцию из интерфейса для использования protected функций + setAmmo(getMagazineSize()); + System.out.printf("%s reload!\n",getName()); + + } + public void remade(String name,int damage,int magazineSize){// переделка класса используя protected функции + setDamage(damage); + setName(name); + setMagazineSize(magazineSize); } - protected void setAmmo(int ammo) { - this.ammo = ammo; + protected void setAmmo(int ammo) {// используется только для перезарядки(reload) + if (ammo>0 & ammo<=getMagazineSize()) { + this.ammo = ammo; + } + else { + this.ammo = 0; + } } public int getAmmo() { return ammo; } - protected void setMagazineSize(int magazineSize) { - if (magazineSize>0) { + protected void setMagazineSize(int magazineSize) { // используется для remade + if (magazineSize > 0) { this.magazineSize = magazineSize; } } diff --git a/src/modificate.java b/src/modificate.java index 6be6f30..fc10946 100644 --- a/src/modificate.java +++ b/src/modificate.java @@ -1,3 +1,4 @@ public interface modificate { - public void mod(); + public void rename(String name); + public void remade(String name,int damage); } diff --git a/src/player.java b/src/player.java index 8ee96ff..a880988 100644 --- a/src/player.java +++ b/src/player.java @@ -1,35 +1,57 @@ -public class player { - private int healthPoint = 100; - coords cord = new coords(); - - protected class coords{ - private float posY=0; - private float posX=0; - - coords(){ - this.posX = 0; - this.posY = 0; - } - coords(float x,float y){ - this.posX = x; - this.posY = y; - } - - public float getPosX() { - return posX; - } - - public void setPosX(float posX) { - this.posX = posX; - } - - public float getPosY() { - return posY; - } - - public void setPosY(float posY) { - this.posY = posY; - } +public class player extends entity { + // наследуемся от абстрактного класса entity + private Boolean isLive = true; // состояние жизни у игрока + + player() { + super("Player"); + } + + player(String name) { + super(name); + } + + player(String name, int posX, int posY) { + super(name); + } + + player(String name, int healthPoint) { + super(healthPoint); + setName(name); + } + + public void setPos(int x, int y) { + cord.changePos(x,y); + } + + public int[] getPos() { + int posX = cord.getPosX(); + int posY = cord.getPosY(); + int[] arr = {posX, posY}; + System.out.printf("player \"%s\" has posX: %d | posY: %d\n", getName(), posX, posY); + return arr; + } + + protected void setHealthPoint(int healthPoint) { + super.setHealthPoint(healthPoint); + } + + @Override + public void printInfo() { // переопределяем функцию из абстрактного класса + System.out.printf("Player \"%s\", posX: %d, posY: %d, Hp: %d, is live: %s\n", getName(), cord.getPosX(), cord.getPosY(), getHealthPoint(), getLive()); + // в стоит ли дальше использовать в подобных функицях get'ры и set'ры этого же класса? Отпишите пожалуйста! + } + + public int attack(weapon wp, player prey) { + //атакуем жертву(prey) используя оружие(wp) + return wp.attack(this, prey); + } + + public Boolean getLive() { + return isLive; + } + + public void setLive(Boolean live) { + isLive = live; } } diff --git a/src/shooting.java b/src/shooting.java index 31fdb08..73e3ecd 100644 --- a/src/shooting.java +++ b/src/shooting.java @@ -1,4 +1,4 @@ public interface shooting { - public void shoot(); + public int shoot(player attacker, player prey); public void reload(); } diff --git a/src/smg.java b/src/smg.java index 98af752..b45beb4 100644 --- a/src/smg.java +++ b/src/smg.java @@ -1,3 +1,72 @@ -public class smg { +public class smg extends gun { + mode fireMode = mode.AUTO; + + enum mode { + SEMI, + AUTO + } + + smg() { + super("Smg"); + } + + smg(String name) { + super(name); + } + + smg(String name, int damage) { + super(name, damage); + } + + smg(String name, int damage, int magazineSize) { + super(name, damage, magazineSize); + } + + smg(String name, String strFireMode) { + super(name); + switch (strFireMode) { + case "semi": this.fireMode = mode.SEMI; break; + case "auto": this.fireMode = mode.AUTO; break; + } + } + + smg(String name, int damage, String strFireMode) { + super(name, damage); + switch (strFireMode) { + case "semi": this.fireMode = mode.SEMI; break; + case "auto": this.fireMode = mode.AUTO; break; + } + } + + smg(String name, int damage, int magazineSize, String strFireMode) { + super(name, damage,magazineSize); + switch (strFireMode) { + case "semi": this.fireMode = mode.SEMI; break; + case "auto": this.fireMode = mode.AUTO; break; + } + } + @Override + public void displayInfo(){ + String mode=""; + switch (fireMode) { + case SEMI: mode = "semi"; break; + case AUTO: mode = "auto"; break; + } + System.out.printf("Name: %s, Damage: %d, id: %d, MagSize:%d, Ammo: %d, Mode: %s\n",getName(),getDamage(),getId(),getMagazineSize(),getAmmo(),mode); + } + @Override + public int attack(player attacker, player prey) {//переопределяем функцию из интерфейса + switch (fireMode) { + case SEMI: return attack(attacker, prey); + case AUTO: + int temp = 0; + while (temp == 0){// стреляем пока не кончатся патроны, или не умрет цель + temp = super.attack(attacker, prey); + } + return temp; + + default: return attack(attacker, prey); + } + } } diff --git a/src/weapon.java b/src/weapon.java index dc599a7..db9ea67 100644 --- a/src/weapon.java +++ b/src/weapon.java @@ -1,25 +1,64 @@ -public class weapon{ - // это класс орижия +public class weapon implements modificate { + // это класс оружия // оно способно наносить урон игроку (player) - // и имеет радиус применения - private String name = "weapon"; - private int damage = 0; - private float range = 0; - static int id = 1; + private String name = "weapon"; + private int damage = 1; + static int counter = 1; + private int id = counter; + weapon() { + this.id = counter++; + } - public boolean hit(){ - return false; - }; + weapon(String name) { + this.id = counter++; + this.name = name; + } - weapon(String name){ + weapon(String name, int damage) { + this.id = counter++; this.name = name; + this.damage = damage; } - - weapon(String name,float range){ + public void displayInfo(){ + System.out.printf("Name: %s, Damage: %d, id: %d\n",getName(),getDamage(),getId()); + } + public static void displayCounter() { + + System.out.printf("Counter: %d \n", counter); + } + + public int attack(player attacker, player prey) { + if (getDamage() >= prey.getHealthPoint()) { + prey.setLive(false); + prey.setHealthPoint(0); + System.out.printf("Player \"%s\" KILL player \"%s\" by %d damage using \"%s\"\n", attacker.getName(), prey.getName(), getDamage(), getName()); + return 1;//если убил, то возвращает 1 + } else { + prey.setHealthPoint(prey.getHealthPoint() - getDamage());// вычитаем из нынешнего HP вычитаем урон оружия. + System.out.printf("Player \"%s\" HURT player \"%s\" by %d damage using \"%s\"\n", attacker.getName(), prey.getName(), getDamage(), getName()); + return 0;// если ранил, то 2 + } + } + + @Override + public void rename(String name) { this.name = name; - this.range =range; + } + + @Override + public void remade(String name,int damage){//переопределяем функцию из интерфейса для использования protected функций + setDamage(damage); + setName(name); + } + + public int getDamage() { + return damage; + } + + protected void setDamage(int damage) { + this.damage = damage; } protected void setName(String name) { @@ -30,7 +69,7 @@ public String getName() { return name; } - public static int getId() { + public int getId() { return id; } From 86843a43efa0f5b93dc398c1071d6090fe4adaf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=9A=D1=83=D0=B7?= =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=BE=D0=B2?= Date: Wed, 16 Oct 2024 18:41:12 +0400 Subject: [PATCH 6/9] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?,=20=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B0=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 118 +++++++++++++++++++++++++++--------------------- src/weapon.java | 76 ------------------------------- 2 files changed, 67 insertions(+), 127 deletions(-) delete mode 100644 src/weapon.java diff --git a/src/Main.java b/src/Main.java index ddd4c52..55b475b 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,60 +1,76 @@ +import java.util.regex.Pattern; + public class Main { - public static void main(String[] args) { - /*✅ иррархия weapon -> gun -> smg получается 2 потомка - //✅ 2 интерфейса и каждый из них реализован(shooting в gun, а modificate в weapon) - //✅ абстрактный класс entity c абстрактной функцией printInfo() - //✅ КАЖДЫЙ класс содержит >2 полей - //✅ в каждом классе есть параметризированный конструктор - //✅ реализация инкапсуляции в entity, класс coords, где сеттеры posX posY являются private - //✅ статическое поле и метод в entity, counter и displayCounter() - //✅ методы в каждом классе - //✅ методы реализовывают какую-то сложную логику + public static void main(String[] args) throws Exception { + /*✅ + //✅ Создать статический метод который принимает на вход три параметра: login, password и confirmPassword. + //✅ Login должен содержать только латинские буквы, цифры и знак подчеркивания. + //✅ Длина login должна быть меньше 20 символов. Если login не соответствует этим требованиям, необходимо выбросить WrongLoginException. + //✅ Password должен содержать только латинские буквы, цифры и знак подчеркивания. Длина password должна быть меньше 20 символов. + Также password и confirmPassword должны быть равны. Если password не соответствует этим требованиям, необходимо выбросить + WrongPasswordException. + //✅ WrongPasswordException и WrongLoginException - пользовательские классы исключения с двумя конструкторами + //✅ один по умолчанию, второй принимает сообщение исключения и передает его в конструктор класса Exception. + //✅ Обработка исключений проводится внутри метода. + //✅ Используем multi-catch block. + //✅ Метод возвращает true, если значения верны или false в другом случае. */ - // у нас есть игрок и оружие - player Bob = new player("Bob"); - Bob.printInfo(); - - player BigBob = new player("Big Bob", 200); - Bob.printInfo(); - // printInfo и displayInfo это по сути выполняют одно и тоже, но printInfo это унаследованный от абстрактного класса - weapon axe = new weapon("axe", 19); - axe.displayInfo(); - - gun pistol = new gun("p250", 14,10); - pistol.displayInfo(); - - smg p90 = new smg("P90",27,50,"auto"); - p90.displayInfo(); - - Bob.printInfo(); - BigBob.printInfo(); - System.out.println("Сущности созданны и получена информация о них\n"); - - Bob.attack(pistol, BigBob); - BigBob.printInfo(); - System.out.println("О нееет! Bob стреляет в BigBob'a!\n"); - - Bob.attack(axe, BigBob); - BigBob.printInfo(); - System.out.println("Ужас!!! Bob бьёт BigBob'a топором!\n"); + String login = "Default_Login"; + String password = "Default_Password123"; + String confirmPassword = "Default_Password123"; + if (args.length == 3){ + login = args[0]; + password = args[1]; + confirmPassword = args[2]; + } - if(!BigBob.getLive()){ - BigBob.setHealthPoint(200); - BigBob.setLive(true); - BigBob.printInfo(); - System.out.println("Возвращаем BigBob'a к жизни\n"); + System.out.println(authentification(login,password,confirmPassword)); + } + public static boolean authentification(String login,String password, String confirmPassword) throws Exception{ + boolean auth = false; + try { + // используем регулярное выражение \w для проверки логина и пароля + boolean loginCheck = Pattern.compile("\\w").matcher(login).find() && login.length()<20; + boolean passwordCheck = Pattern.compile("\\w").matcher(password).find() && login.length()<20 && (password.equals(confirmPassword)); + if (loginCheck && passwordCheck) { + auth = true; + System.out.println("You authorizated!"); + } + else if (!loginCheck) { + throw new WrongLoginException(); + } + else if(!passwordCheck) { + throw new WrongPasswordException(); + } } - else { - BigBob.printInfo(); - System.out.println(); + catch (WrongLoginException LoginException){ + auth = false; + System.out.println("ERR: "+ LoginException.getMessage()); } + catch (WrongPasswordException PasswordException){ + auth = false; + System.out.println("ERR: "+ PasswordException.getMessage()); + } + finally { + return auth; + } + } - - - Bob.attack(p90, BigBob); - BigBob.printInfo(); - System.out.println("О нееет! Bob расстреливает BigBob'a!\n"); - + static class WrongLoginException extends Exception{ + WrongLoginException(){ + super("Wrong login!"); + } + WrongLoginException(String message){ + super(message); + } + } + static class WrongPasswordException extends Exception{ + WrongPasswordException(){ + super("Wrong password!"); + } + WrongPasswordException(String message){ + super(message); + } } } \ No newline at end of file diff --git a/src/weapon.java b/src/weapon.java deleted file mode 100644 index db9ea67..0000000 --- a/src/weapon.java +++ /dev/null @@ -1,76 +0,0 @@ -public class weapon implements modificate { - // это класс оружия - // оно способно наносить урон игроку (player) - - private String name = "weapon"; - private int damage = 1; - static int counter = 1; - private int id = counter; - - weapon() { - this.id = counter++; - } - - weapon(String name) { - this.id = counter++; - this.name = name; - } - - weapon(String name, int damage) { - this.id = counter++; - this.name = name; - this.damage = damage; - } - public void displayInfo(){ - System.out.printf("Name: %s, Damage: %d, id: %d\n",getName(),getDamage(),getId()); - } - public static void displayCounter() { - - System.out.printf("Counter: %d \n", counter); - } - - public int attack(player attacker, player prey) { - if (getDamage() >= prey.getHealthPoint()) { - prey.setLive(false); - prey.setHealthPoint(0); - System.out.printf("Player \"%s\" KILL player \"%s\" by %d damage using \"%s\"\n", attacker.getName(), prey.getName(), getDamage(), getName()); - return 1;//если убил, то возвращает 1 - } else { - prey.setHealthPoint(prey.getHealthPoint() - getDamage());// вычитаем из нынешнего HP вычитаем урон оружия. - System.out.printf("Player \"%s\" HURT player \"%s\" by %d damage using \"%s\"\n", attacker.getName(), prey.getName(), getDamage(), getName()); - return 0;// если ранил, то 2 - } - } - - @Override - public void rename(String name) { - this.name = name; - } - - @Override - public void remade(String name,int damage){//переопределяем функцию из интерфейса для использования protected функций - setDamage(damage); - setName(name); - } - - public int getDamage() { - return damage; - } - - protected void setDamage(int damage) { - this.damage = damage; - } - - protected void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public int getId() { - return id; - } - -} \ No newline at end of file From 7764bee981b0d3fedbd57d123673898b7e031d0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=9A=D1=83=D0=B7?= =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=BE=D0=B2?= Date: Wed, 16 Oct 2024 18:42:01 +0400 Subject: [PATCH 7/9] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5=D0=BC?= =?UTF-8?q?=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5=20=D0=B8=D0=B7=20lectur?= =?UTF-8?q?e=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entity.java | 109 -------------------------------------------- src/gun.java | 86 ---------------------------------- src/modificate.java | 4 -- src/player.java | 57 ----------------------- src/shooting.java | 4 -- src/smg.java | 72 ----------------------------- 6 files changed, 332 deletions(-) delete mode 100644 src/entity.java delete mode 100644 src/gun.java delete mode 100644 src/modificate.java delete mode 100644 src/player.java delete mode 100644 src/shooting.java delete mode 100644 src/smg.java diff --git a/src/entity.java b/src/entity.java deleted file mode 100644 index 1c99e71..0000000 --- a/src/entity.java +++ /dev/null @@ -1,109 +0,0 @@ - -public abstract class entity { - private String name = "Entity"; - private int healthPoint = 100; - - static int counter = 1; - private int id = counter; - entity.coords cord = new entity.coords(); - - entity() { - } - - entity(String name) { - this.name = name; - this.healthPoint = healthPoint; - } - - entity(int healthPoint) { - this.healthPoint = healthPoint; - } - - entity(String name, int healthPoint) { - this.name = name; - this.healthPoint = healthPoint; - this.healthPoint = healthPoint; - } - - entity(int posX, int posY) { - cord.setPosX(posX); - cord.setPosY(posY); - } - - entity(String name, int posX, int posY) { - this.name = name; - cord.setPosX(posX); - cord.setPosY(posY); - } - - entity(String name, int healthPoint, int posX, int posY) { - this.name = name; - this.healthPoint = healthPoint; - cord.setPosX(posX); - cord.setPosY(posY); - } - - //ИНКАПСУЛИРОВАННЫЙ класс координат - protected class coords { - private int posY; - private int posX; - - coords() { - this.posX = 0; - this.posY = 0; - } - - coords(int x, int y) { - this.posX = x; - this.posY = y; - } - public void changePos(int x,int y){ - setPosX(x); - setPosY(y); - } - public int getPosX() { - return posX; - } - - private void setPosX(int posX) { - this.posX = posX; - } - - public int getPosY() { - return posY; - } - - private void setPosY(int posY) { - this.posY = posY; - } - } - - //Абстрактная функция - public abstract void printInfo(); - - public int getId() { - return id; - } - - public static void displayCounter() { - - System.out.printf("Counter: %d \n", counter); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getHealthPoint() { - return healthPoint; - } - - protected void setHealthPoint(int healthPoint) { - this.healthPoint = healthPoint; - } - -} diff --git a/src/gun.java b/src/gun.java deleted file mode 100644 index da70929..0000000 --- a/src/gun.java +++ /dev/null @@ -1,86 +0,0 @@ -public class gun extends weapon implements shooting { - - private int magazineSize = 1; - private int ammo = 1; - gun(){ - super("Gun"); - } - gun(String name) { - super(name); - } - - gun(String name, int damage) { - super(name, damage); - } - - gun(String name, int damage, int magazineSize) { - super(name); - setDamage(damage); - this.magazineSize = magazineSize; - this.ammo = magazineSize; - } - @Override - public void displayInfo(){ - System.out.printf("Name: %s, Damage: %d, id: %d, MagSize:%d, Ammo: %d\n",getName(),getDamage(),getId(),getMagazineSize(),getAmmo()); - } - @Override - public int attack(player attacker, player prey) { //переопределяем функцию из класса родителя различие в выводе в else - if (((getDamage() >= prey.getHealthPoint()) & getAmmo()>0) | prey.getLive()==false) { - setAmmo(getAmmo()-1);//прозводим выстрел - prey.setLive(false); - prey.setHealthPoint(0); - System.out.printf("Player \"%s\" KILL player \"%s\"(%dhp) by %d damage using \"%s\"(%d/%d)\n", attacker.getName(), prey.getName(), prey.getHealthPoint(), getDamage(), getName(),getAmmo(),getMagazineSize()); - return 1;//если убил, то возвращает 1 - } else if ((getDamage() < prey.getHealthPoint()) & getAmmo()>0){ - setAmmo(getAmmo()-1); - prey.setHealthPoint(prey.getHealthPoint() - getDamage()); - System.out.printf("Player \"%s\" SHOOT player \"%s\"(%dhp) by %d damage using \"%s\"(%d/%d)\n", attacker.getName(), prey.getName(), prey.getHealthPoint(), getDamage(), getName(),getAmmo(),getMagazineSize()); - return 0;// если ранил, то 2 - } - else { - System.out.println("NoAmmo!"); - return 2; //если осечка, то 0 - } - } - - @Override - public int shoot(player attacker, player prey) {//переопределяем функцию из интерфейса - return attack(attacker, prey); - } - - @Override - public void reload() {//переопределяем функцию из интерфейса для использования protected функций - setAmmo(getMagazineSize()); - System.out.printf("%s reload!\n",getName()); - - } - - public void remade(String name,int damage,int magazineSize){// переделка класса используя protected функции - setDamage(damage); - setName(name); - setMagazineSize(magazineSize); - } - - protected void setAmmo(int ammo) {// используется только для перезарядки(reload) - if (ammo>0 & ammo<=getMagazineSize()) { - this.ammo = ammo; - } - else { - this.ammo = 0; - } - } - - public int getAmmo() { - return ammo; - } - - protected void setMagazineSize(int magazineSize) { // используется для remade - if (magazineSize > 0) { - this.magazineSize = magazineSize; - } - } - - protected int getMagazineSize() { - return magazineSize; - } -} diff --git a/src/modificate.java b/src/modificate.java deleted file mode 100644 index fc10946..0000000 --- a/src/modificate.java +++ /dev/null @@ -1,4 +0,0 @@ -public interface modificate { - public void rename(String name); - public void remade(String name,int damage); -} diff --git a/src/player.java b/src/player.java deleted file mode 100644 index a880988..0000000 --- a/src/player.java +++ /dev/null @@ -1,57 +0,0 @@ -public class player extends entity { - // наследуемся от абстрактного класса entity - private Boolean isLive = true; // состояние жизни у игрока - - player() { - super("Player"); - } - - player(String name) { - super(name); - } - - player(String name, int posX, int posY) { - super(name); - } - - player(String name, int healthPoint) { - super(healthPoint); - setName(name); - } - - public void setPos(int x, int y) { - cord.changePos(x,y); - } - - public int[] getPos() { - int posX = cord.getPosX(); - int posY = cord.getPosY(); - int[] arr = {posX, posY}; - System.out.printf("player \"%s\" has posX: %d | posY: %d\n", getName(), posX, posY); - return arr; - } - - protected void setHealthPoint(int healthPoint) { - super.setHealthPoint(healthPoint); - } - - @Override - public void printInfo() { // переопределяем функцию из абстрактного класса - System.out.printf("Player \"%s\", posX: %d, posY: %d, Hp: %d, is live: %s\n", getName(), cord.getPosX(), cord.getPosY(), getHealthPoint(), getLive()); - // в стоит ли дальше использовать в подобных функицях get'ры и set'ры этого же класса? Отпишите пожалуйста! - } - - public int attack(weapon wp, player prey) { - //атакуем жертву(prey) используя оружие(wp) - return wp.attack(this, prey); - } - - public Boolean getLive() { - return isLive; - } - - public void setLive(Boolean live) { - isLive = live; - } - -} diff --git a/src/shooting.java b/src/shooting.java deleted file mode 100644 index 73e3ecd..0000000 --- a/src/shooting.java +++ /dev/null @@ -1,4 +0,0 @@ -public interface shooting { - public int shoot(player attacker, player prey); - public void reload(); -} diff --git a/src/smg.java b/src/smg.java deleted file mode 100644 index b45beb4..0000000 --- a/src/smg.java +++ /dev/null @@ -1,72 +0,0 @@ -public class smg extends gun { - mode fireMode = mode.AUTO; - - enum mode { - SEMI, - AUTO - } - - smg() { - super("Smg"); - } - - smg(String name) { - super(name); - } - - smg(String name, int damage) { - super(name, damage); - } - - smg(String name, int damage, int magazineSize) { - super(name, damage, magazineSize); - } - - smg(String name, String strFireMode) { - super(name); - switch (strFireMode) { - case "semi": this.fireMode = mode.SEMI; break; - case "auto": this.fireMode = mode.AUTO; break; - } - } - - smg(String name, int damage, String strFireMode) { - super(name, damage); - switch (strFireMode) { - case "semi": this.fireMode = mode.SEMI; break; - case "auto": this.fireMode = mode.AUTO; break; - } - } - - smg(String name, int damage, int magazineSize, String strFireMode) { - super(name, damage,magazineSize); - switch (strFireMode) { - case "semi": this.fireMode = mode.SEMI; break; - case "auto": this.fireMode = mode.AUTO; break; - } - } - @Override - public void displayInfo(){ - String mode=""; - switch (fireMode) { - case SEMI: mode = "semi"; break; - case AUTO: mode = "auto"; break; - } - System.out.printf("Name: %s, Damage: %d, id: %d, MagSize:%d, Ammo: %d, Mode: %s\n",getName(),getDamage(),getId(),getMagazineSize(),getAmmo(),mode); - } - @Override - public int attack(player attacker, player prey) {//переопределяем функцию из интерфейса - switch (fireMode) { - case SEMI: return attack(attacker, prey); - case AUTO: - int temp = 0; - while (temp == 0){// стреляем пока не кончатся патроны, или не умрет цель - temp = super.attack(attacker, prey); - } - return temp; - - default: return attack(attacker, prey); - } - } - -} From b9d783f2e70f1b97d86d45c21355d69f7510ef0d Mon Sep 17 00:00:00 2001 From: dezonnov1 <138213121+dezonnov1@users.noreply.github.com> Date: Wed, 13 Nov 2024 18:56:07 +0400 Subject: [PATCH 8/9] Delete .idea directory --- .idea/.gitignore | 3 -- .idea/misc.xml | 6 --- .idea/modules.xml | 8 --- .idea/uiDesigner.xml | 124 ------------------------------------------- .idea/vcs.xml | 6 --- 5 files changed, 147 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/uiDesigner.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 07115cd..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 65e8411..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946..0000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 7737f0f7c37117ce4819c06a5cf77bca6b4caa83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=9A=D1=83=D0=B7?= =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=BE=D0=B2?= Date: Wed, 13 Nov 2024 20:22:09 +0400 Subject: [PATCH 9/9] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/Account.java | 90 +++++++++++++++++++++++++++++++++ src/Main.java | 82 ++++++------------------------ src/WrongLoginException.java | 11 ++++ src/WrongPasswordException.java | 11 ++++ 5 files changed, 129 insertions(+), 66 deletions(-) create mode 100644 src/Account.java create mode 100644 src/WrongLoginException.java create mode 100644 src/WrongPasswordException.java diff --git a/.gitignore b/.gitignore index f68d109..1a3879a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ ### IntelliJ IDEA ### +.idea/ out/ !**/src/main/**/out/ !**/src/test/**/out/ diff --git a/src/Account.java b/src/Account.java new file mode 100644 index 0000000..9c96a10 --- /dev/null +++ b/src/Account.java @@ -0,0 +1,90 @@ +import java.util.regex.Pattern; + +public class Account { + static int counter =1; + private int id = counter; + + + + private String name; + + /** + * Конструктор по умолчанию + */ + public Account(){ + this.name = "user"; + } + + /** + * Конструктор с name + * @param name имя пользователя + */ + public Account(String name) { + this.name = name; + } + + /** + * Геттер ID + * @return ID пользователя + */ + public int getId() { + return id; + } + + /** + * Сетер + * @param name имя пользователя + */ + public void setName(String name) { + this.name = name; + } + + /** + * Геттер + * @return имя пользователя + */ + public String getName() { + return name; + } + + /** + * Функция Аунтификации пользователя + * @param login Длина должна быть меньше 20 символов и должен содержать только латинские буквы, + * цифры и знак подчеркивания. + * @param password Длина должна быть меньше 20 символов и должен содержать только латинские буквы, + * цифры и знак подчеркивания. + * @param confirmPassword Должен быть равен password и длина должна быть меньше 20 символов, + * должен содержать только латинские буквы, цифры и знак подчеркивания. + * @return Boolean состояние авторизации + * @throws WrongLoginException Выбрасывается если login длиннее 20 символов и содержит, + * что-то кроме латинских букв, цифр и знаков подчеркивания. + * @throws WrongPasswordException Выбрасывается если password и confirmPassword неравны и\или + * длиннее 20 символов, содержит, что-то кроме латинских букв, + * цифр и знаков подчеркивания. + */ + public static boolean authentification(String login,String password, String confirmPassword) throws Exception{ + boolean auth = false; + try { + boolean loginCheck = Pattern.compile("[A-Za-z0-9]+").matcher(login).find() && login.length()<20; + boolean passwordCheck = Pattern.compile("[A-Za-z0-9]+").matcher(password).find() + && login.length()<20 && (password.equals(confirmPassword)); + if (loginCheck && passwordCheck) { + auth = true; + System.out.println("You authorizated!"); + } + else if (!loginCheck) { + throw new WrongLoginException("Неверный логин!"); + } + else if(!passwordCheck) { + throw new WrongPasswordException("Неверный пароль!"); + } + } + catch (WrongLoginException | WrongPasswordException e){ + auth = false; + System.out.println("ERR: "+ e.getMessage()); + } + finally { + return auth; + } + } +} diff --git a/src/Main.java b/src/Main.java index 55b475b..f2e95a8 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,76 +1,26 @@ -import java.util.regex.Pattern; - +/** Класс main + //✅ Создать статический метод который принимает на вход три параметра: login, password и confirmPassword. + //✅ Login должен содержать только латинские буквы, цифры и знак подчеркивания. + //✅ Длина login должна быть меньше 20 символов. Если login не соответствует этим требованиям, необходимо выбросить WrongLoginException. + //✅ Password должен содержать только латинские буквы, цифры и знак подчеркивания. Длина password должна быть меньше 20 символов. + Также password и confirmPassword должны быть равны. Если password не соответствует этим требованиям, необходимо выбросить + WrongPasswordException. + //✅ WrongPasswordException и WrongLoginException - пользовательские классы исключения с двумя конструкторами + //✅ один по умолчанию, второй принимает сообщение исключения и передает его в конструктор класса Exception. + //✅ Обработка исключений проводится внутри метода. + //✅ Используем multi-catch block. + //✅ Метод возвращает true, если значения верны или false в другом случае. + */ public class Main { public static void main(String[] args) throws Exception { - /*✅ - //✅ Создать статический метод который принимает на вход три параметра: login, password и confirmPassword. - //✅ Login должен содержать только латинские буквы, цифры и знак подчеркивания. - //✅ Длина login должна быть меньше 20 символов. Если login не соответствует этим требованиям, необходимо выбросить WrongLoginException. - //✅ Password должен содержать только латинские буквы, цифры и знак подчеркивания. Длина password должна быть меньше 20 символов. - Также password и confirmPassword должны быть равны. Если password не соответствует этим требованиям, необходимо выбросить - WrongPasswordException. - //✅ WrongPasswordException и WrongLoginException - пользовательские классы исключения с двумя конструкторами - //✅ один по умолчанию, второй принимает сообщение исключения и передает его в конструктор класса Exception. - //✅ Обработка исключений проводится внутри метода. - //✅ Используем multi-catch block. - //✅ Метод возвращает true, если значения верны или false в другом случае. - */ - String login = "Default_Login"; - String password = "Default_Password123"; + String password = "Default_Pыassword23"; String confirmPassword = "Default_Password123"; if (args.length == 3){ login = args[0]; password = args[1]; confirmPassword = args[2]; } - - System.out.println(authentification(login,password,confirmPassword)); + System.out.println("Состояние вашей авторизации: "+Account.authentification(login,password,confirmPassword)); } - public static boolean authentification(String login,String password, String confirmPassword) throws Exception{ - boolean auth = false; - try { - // используем регулярное выражение \w для проверки логина и пароля - boolean loginCheck = Pattern.compile("\\w").matcher(login).find() && login.length()<20; - boolean passwordCheck = Pattern.compile("\\w").matcher(password).find() && login.length()<20 && (password.equals(confirmPassword)); - if (loginCheck && passwordCheck) { - auth = true; - System.out.println("You authorizated!"); - } - else if (!loginCheck) { - throw new WrongLoginException(); - } - else if(!passwordCheck) { - throw new WrongPasswordException(); - } - } - catch (WrongLoginException LoginException){ - auth = false; - System.out.println("ERR: "+ LoginException.getMessage()); - } - catch (WrongPasswordException PasswordException){ - auth = false; - System.out.println("ERR: "+ PasswordException.getMessage()); - } - finally { - return auth; - } - } - - static class WrongLoginException extends Exception{ - WrongLoginException(){ - super("Wrong login!"); - } - WrongLoginException(String message){ - super(message); - } - } - static class WrongPasswordException extends Exception{ - WrongPasswordException(){ - super("Wrong password!"); - } - WrongPasswordException(String message){ - super(message); - } - } -} \ No newline at end of file +} diff --git a/src/WrongLoginException.java b/src/WrongLoginException.java new file mode 100644 index 0000000..f9115ea --- /dev/null +++ b/src/WrongLoginException.java @@ -0,0 +1,11 @@ +/** + * Пользовательский класс ошибки для обозначения неверного логина + */ +public class WrongLoginException extends Exception { + public WrongLoginException() { + super(); + } + public WrongLoginException(String message) { + super(message); + } +} diff --git a/src/WrongPasswordException.java b/src/WrongPasswordException.java new file mode 100644 index 0000000..bf2e662 --- /dev/null +++ b/src/WrongPasswordException.java @@ -0,0 +1,11 @@ +/** + * Пользовательский класс ошибки для обозначения неверного пароля + */ +public class WrongPasswordException extends Exception { + public WrongPasswordException() { + super(); + } + public WrongPasswordException(String message) { + super(message); + } +}