From 1cee384c1d9c9909fef3a90c8549973742e68cbb Mon Sep 17 00:00:00 2001
From: CataM2000 <83291573+CatalinMoldovan2000@users.noreply.github.com>
Date: Fri, 16 Jun 2023 17:06:54 +0300
Subject: [PATCH 1/2] Final version of the DriftEvent with 2 participants
---
.gitignore | 29 ++++++
.idea/.gitignore | 3 +
.idea/misc.xml | 6 ++
.idea/modules.xml | 8 ++
.idea/vcs.xml | 6 ++
DriftEvent.iml | 11 +++
.../drift/AggressiveDriftStrategy.java | 8 ++
src/com/example/drift/DriftCompetition.java | 32 ++++++
src/com/example/drift/DriftEvent.java | 13 +++
src/com/example/drift/DriftEventObserver.java | 5 +
src/com/example/drift/DriftParticipant.java | 67 +++++++++++++
src/com/example/drift/DriftStrategy.java | 5 +
src/com/example/drift/Main.java | 97 +++++++++++++++++++
.../example/drift/SmoothDriftStrategy.java | 8 ++
src/com/example/drift/Spectator.java | 14 +++
15 files changed, 312 insertions(+)
create mode 100644 .gitignore
create mode 100644 .idea/.gitignore
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/vcs.xml
create mode 100644 DriftEvent.iml
create mode 100644 src/com/example/drift/AggressiveDriftStrategy.java
create mode 100644 src/com/example/drift/DriftCompetition.java
create mode 100644 src/com/example/drift/DriftEvent.java
create mode 100644 src/com/example/drift/DriftEventObserver.java
create mode 100644 src/com/example/drift/DriftParticipant.java
create mode 100644 src/com/example/drift/DriftStrategy.java
create mode 100644 src/com/example/drift/Main.java
create mode 100644 src/com/example/drift/SmoothDriftStrategy.java
create mode 100644 src/com/example/drift/Spectator.java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f68d109
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,29 @@
+### IntelliJ IDEA ###
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..15cec4b
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..eb66407
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DriftEvent.iml b/DriftEvent.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/DriftEvent.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/com/example/drift/AggressiveDriftStrategy.java b/src/com/example/drift/AggressiveDriftStrategy.java
new file mode 100644
index 0000000..8507a37
--- /dev/null
+++ b/src/com/example/drift/AggressiveDriftStrategy.java
@@ -0,0 +1,8 @@
+package com.example.drift;
+
+public class AggressiveDriftStrategy implements DriftStrategy {
+ @Override
+ public void drift() {
+ System.out.println("Performing aggressive drift!");
+ }
+}
diff --git a/src/com/example/drift/DriftCompetition.java b/src/com/example/drift/DriftCompetition.java
new file mode 100644
index 0000000..fb39f05
--- /dev/null
+++ b/src/com/example/drift/DriftCompetition.java
@@ -0,0 +1,32 @@
+package com.example.drift;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DriftCompetition {
+ private List observers;
+
+ public DriftCompetition() {
+ observers = new ArrayList<>();
+ }
+
+ public void addObserver(DriftEventObserver observer) {
+ observers.add(observer);
+ }
+
+ public void removeObserver(DriftEventObserver observer) {
+ observers.remove(observer);
+ }
+
+ public void notifyObservers(DriftEvent event) {
+ for (DriftEventObserver observer : observers) {
+ observer.update(event);
+ }
+ }
+
+ public void startCompetition() {
+ System.out.println();
+ System.out.println("The drift competition has started!");
+ notifyObservers(new DriftEvent("Drift competition started! Prepare for the battle!"));
+ }
+}
diff --git a/src/com/example/drift/DriftEvent.java b/src/com/example/drift/DriftEvent.java
new file mode 100644
index 0000000..d2d0b15
--- /dev/null
+++ b/src/com/example/drift/DriftEvent.java
@@ -0,0 +1,13 @@
+package com.example.drift;
+
+public class DriftEvent {
+ private String message;
+
+ public DriftEvent(String message) {
+ this.message = message;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}
diff --git a/src/com/example/drift/DriftEventObserver.java b/src/com/example/drift/DriftEventObserver.java
new file mode 100644
index 0000000..2b21899
--- /dev/null
+++ b/src/com/example/drift/DriftEventObserver.java
@@ -0,0 +1,5 @@
+package com.example.drift;
+
+public interface DriftEventObserver {
+ void update(DriftEvent event);
+}
diff --git a/src/com/example/drift/DriftParticipant.java b/src/com/example/drift/DriftParticipant.java
new file mode 100644
index 0000000..fde53b1
--- /dev/null
+++ b/src/com/example/drift/DriftParticipant.java
@@ -0,0 +1,67 @@
+package com.example.drift;
+
+import java.util.Random;
+//Clasa de participanti la drift
+public class DriftParticipant {
+ private String name;//Nume
+ private DriftStrategy driftStrategy;
+ private int score;//Scor
+
+ //Participant
+ public DriftParticipant(String name) {
+ this.name = name;
+ this.score = 0;
+ }
+
+ //Alegerea strategiei de drift
+ public void chooseRandomStrategy() {
+ Random random = new Random();
+ int strategyChoice = random.nextInt(2);
+
+ if (strategyChoice == 0) {
+ driftStrategy = new AggressiveDriftStrategy();
+ } else {
+ driftStrategy = new SmoothDriftStrategy();
+ }
+ }
+
+ //Drift start
+ public void performDrift() {
+ System.out.println(name + " is performing drift:");
+
+ // Verificare pentru strategia agresivă
+ if (driftStrategy instanceof AggressiveDriftStrategy) {
+ Random random = new Random();
+ int accidentChance = random.nextInt(10);
+
+ if (accidentChance == 0) {
+ System.out.println(name + " had an accident!");
+ score -= 20; // Scădere scor în caz de accident
+ return;
+ }
+ }
+
+ // Verificare pentru strategia lină
+ if (driftStrategy instanceof SmoothDriftStrategy) {
+ Random random = new Random();
+ int carStopChance = random.nextInt(10);
+
+ if (carStopChance == 0) {
+ System.out.println(name + "'s car stopped working!");
+ score -= 10; // Scădere scor în caz de oprire a mașinii
+ return;
+ }
+ }
+
+ driftStrategy.drift();
+ score += (driftStrategy instanceof AggressiveDriftStrategy) ? 15 : 10; // Incrementare scor în funcție de strategie
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getScore() {
+ return score;
+ }
+}
diff --git a/src/com/example/drift/DriftStrategy.java b/src/com/example/drift/DriftStrategy.java
new file mode 100644
index 0000000..dd75a34
--- /dev/null
+++ b/src/com/example/drift/DriftStrategy.java
@@ -0,0 +1,5 @@
+package com.example.drift;
+
+public interface DriftStrategy {
+ void drift();
+}
diff --git a/src/com/example/drift/Main.java b/src/com/example/drift/Main.java
new file mode 100644
index 0000000..f5f85e3
--- /dev/null
+++ b/src/com/example/drift/Main.java
@@ -0,0 +1,97 @@
+package com.example.drift;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+ public static void main(String[] args) {
+ // Observer Pattern
+ DriftCompetition driftCompetition = new DriftCompetition();
+ Spectator spectator1 = new Spectator("Alex");
+ Spectator spectator2 = new Spectator("Andrei");
+ driftCompetition.addObserver(spectator1);
+ driftCompetition.addObserver(spectator2);
+ driftCompetition.startCompetition();
+
+ // Strategy Pattern
+ List participants = new ArrayList<>();
+ participants.add(new DriftParticipant("Anton"));
+ participants.add(new DriftParticipant("Paul"));
+
+ // Alegeri random pentru strategiile de drift utilizate de participanti
+ for (DriftParticipant participant : participants) {
+ participant.chooseRandomStrategy();
+ }
+
+ // Incepe runda si se calculeaza scorul
+ for (int i = 0; i < 5; i++) {
+ System.out.println("\nRound " + (i + 1) + " begins:");
+
+ for (DriftParticipant participant : participants) {
+ participant.performDrift();
+ }
+ }
+
+ // Afisare scoreboard și selectare castigator
+ System.out.println("\nFinal Scores:");
+
+ int maxScore = Integer.MIN_VALUE;
+ List winners = new ArrayList<>();
+
+ for (DriftParticipant participant : participants) {
+ int score = participant.getScore();
+ System.out.println(participant.getName() + ": " + score);
+
+ if (score > maxScore) {
+ maxScore = score;
+ winners.clear();
+ winners.add(participant);
+ } else if (score == maxScore) {
+ winners.add(participant);
+ }
+ }
+
+ // Verifică dacă există egalitate
+ if (winners.size() > 1) {
+ System.out.println("\nIt's a tie! The competition will be reorganized.");
+
+ // Reorganizează concursul până când se determină un câștigător unic
+ while (winners.size() > 1) {
+ System.out.println("\nReorganizing the competition...");
+
+ // Alegere random a strategiilor pentru participanții cu scorul maxim
+ for (DriftParticipant winner : winners) {
+ winner.chooseRandomStrategy();
+ }
+
+ // Incepe runda si se calculeaza scorul
+ for (int i = 0; i < 5; i++) {
+ System.out.println("\nRound " + (i + 1) + " begins:");
+
+ for (DriftParticipant winner : winners) {
+ winner.performDrift();
+ }
+ }
+
+ maxScore = Integer.MIN_VALUE;
+ winners.clear();
+
+ // Calculare scoruri actualizate și determinare câștigător
+ for (DriftParticipant participant : participants) {
+ int score = participant.getScore();
+ System.out.println(participant.getName() + ": " + score);
+
+ if (score > maxScore) {
+ maxScore = score;
+ winners.clear();
+ winners.add(participant);
+ } else if (score == maxScore) {
+ winners.add(participant);
+ }
+ }
+ }
+ }
+
+ System.out.println("\nThe winner is: " + winners.get(0).getName());
+ }
+}
\ No newline at end of file
diff --git a/src/com/example/drift/SmoothDriftStrategy.java b/src/com/example/drift/SmoothDriftStrategy.java
new file mode 100644
index 0000000..ef3299b
--- /dev/null
+++ b/src/com/example/drift/SmoothDriftStrategy.java
@@ -0,0 +1,8 @@
+package com.example.drift;
+
+public class SmoothDriftStrategy implements DriftStrategy {
+ @Override
+ public void drift() {
+ System.out.println("Performing smooth drift!");
+ }
+}
diff --git a/src/com/example/drift/Spectator.java b/src/com/example/drift/Spectator.java
new file mode 100644
index 0000000..1252f77
--- /dev/null
+++ b/src/com/example/drift/Spectator.java
@@ -0,0 +1,14 @@
+package com.example.drift;
+// Spectatorii
+public class Spectator implements DriftEventObserver {
+ private String name;
+
+ public Spectator(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public void update(DriftEvent event) {
+ System.out.println(name + " received drift event: " + event.getMessage());
+ }
+}
From 0d077b5e165a92e8ac0eefb6d655279c98b47663 Mon Sep 17 00:00:00 2001
From: CataM2000 <83291573+CatalinMoldovan2000@users.noreply.github.com>
Date: Fri, 16 Jun 2023 17:41:27 +0300
Subject: [PATCH 2/2] Commit message
---
.idea/misc.xml | 6 ++
.idea/workspace.xml | 77 ++++++++++++++++++
.../drift/AggressiveDriftStrategy.class | Bin 0 -> 611 bytes
.../com/example/drift/DriftCompetition.class | Bin 0 -> 1715 bytes
.../com/example/drift/DriftEvent.class | Bin 0 -> 484 bytes
.../example/drift/DriftEventObserver.class | Bin 0 -> 188 bytes
.../com/example/drift/DriftParticipant.class | Bin 0 -> 2201 bytes
.../com/example/drift/DriftStrategy.class | Bin 0 -> 147 bytes
.../DriftEvent/com/example/drift/Main.class | Bin 0 -> 3458 bytes
.../example/drift/SmoothDriftStrategy.class | Bin 0 -> 595 bytes
.../com/example/drift/Spectator.class | Bin 0 -> 1277 bytes
11 files changed, 83 insertions(+)
create mode 100644 .idea/misc.xml
create mode 100644 .idea/workspace.xml
create mode 100644 out/production/DriftEvent/com/example/drift/AggressiveDriftStrategy.class
create mode 100644 out/production/DriftEvent/com/example/drift/DriftCompetition.class
create mode 100644 out/production/DriftEvent/com/example/drift/DriftEvent.class
create mode 100644 out/production/DriftEvent/com/example/drift/DriftEventObserver.class
create mode 100644 out/production/DriftEvent/com/example/drift/DriftParticipant.class
create mode 100644 out/production/DriftEvent/com/example/drift/DriftStrategy.class
create mode 100644 out/production/DriftEvent/com/example/drift/Main.class
create mode 100644 out/production/DriftEvent/com/example/drift/SmoothDriftStrategy.class
create mode 100644 out/production/DriftEvent/com/example/drift/Spectator.class
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..cc6eae0
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..6427dc9
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1686922147476
+
+
+ 1686922147476
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/DriftEvent/com/example/drift/AggressiveDriftStrategy.class b/out/production/DriftEvent/com/example/drift/AggressiveDriftStrategy.class
new file mode 100644
index 0000000000000000000000000000000000000000..51833e9a8b7e888fd04b96a29a67ad3f8ce8e953
GIT binary patch
literal 611
zcmZ{i%T5A85JhkC8o*Hz#V0E4Koe)_0%Kw{u85Lg*f-dYP3A$G!RTk{LK7E$fFEV7
z9t=v5O;xJv_PLd={``9X0C0k89tk8Zq->;-Ar$)JK{%cWT<5ymm%WIPIZ=U%P6^3c
zy^}*0ISY9k3$Ul;?WbWReO84dzEo<)AQd_-t%9f>X({|h7E6S3OX|B&`zmlN!gaMA
z4%LIK+-h|f@i+ynSSZ?9#TsGt9}2-57^WAnO>OKG56mXaY}7jz)(Q1q=sWUJ_ybQm
zG2A(uxLp`C){98GPZl-_`?K;X5g~OR-b%u9Qw8#BO!Rs`cx5#meD~B_2P9MC1
zp5yj5N7Dw9*x_i81t?>eE5hF7@^K6Uaxbuoi?3Mz1(+XWFj-iCAh`)-pSuZEz5!oq
BkCOlZ
literal 0
HcmV?d00001
diff --git a/out/production/DriftEvent/com/example/drift/DriftCompetition.class b/out/production/DriftEvent/com/example/drift/DriftCompetition.class
new file mode 100644
index 0000000000000000000000000000000000000000..512def27ec22ad4857438b1c1c6dffd8f8b6324b
GIT binary patch
literal 1715
zcmah}ZBrXn7(JJyEZJ-ULjkKHT`HD@zC`O=HEFelR$EiRhEnUdo8$splikebhAE%@
z75)N0>nIF5bXglBppe=++?4<&pGFw=j{FCpI?6mP{h|Z#t^d*cW?&d
z0@KgrzRcI9znkBvJX2LIFkbY0Pu~)VWpmpWCIn_Wo7&o|=WmChJScfBZNow=fg~IY
zXB|vpO5kEOXyny%*=W{Pz7~2rI=^Pt)u7Q-+S6X(3nYR{ONIL?Y>~axM>e2^BwjU-^2YXG#*wSaEO}S9pkavnI6?Sj?72^%ip530yv!VBtdtADK*a$347vh=8vP2e+u>zxb@@kAW%W~iDnRPIg?x|)(I
zQtP@R_f6a}2`}1A=$eDO#?L7~(B95LWHs}bD0{oU)a{Ta-x!F5$zpM&=MhNZR)M2m
z4QfP~DtW$IZ#OC`+>(_#E2&aYmGx~Idgi%TjO#s*+)Jn7ul5Zkc9MyY$OLkulMrpB
zxeR>J%ap*S)3}DRN4ClCcN5_VoKYs70-2Er>^xi6vij{q+3cNix-+AJvk2JbpdD7#
zJJpa5U
z@B+*0SE)WXh9Ca@)98=Ec#-P#&0zuaSmF)2jPo5_D$@HNV9u^R%UoB
QUlsep<#lqz_XH@v}71n7Hr*{3zp{
zf?+}8=FB~J&OP_>{qy++V1z>(8gvVWg9c27?u;+FpYlBM@1mKAD+Y5Ub6H(5=tDPb
zVh2qNwu2TNhNHO1eDTb)r&RdUQa)7vmBQ<#$f?xI#C*;Z!O#mf#*?a)d2-HhFx<|%
zA%k&QOsS?5$XwhmvPhKoJW6YqBIaqxOR4xeX;hDL&Tt(3Hw$&M6H(p#&C?&c+r3FM
zDHdfc#!_|bY*sl_)8mAe*XV4Fkk+S2qqu=x!ZxunarJL|A7I|;JFM4Q(;;j_Cp2Ne
zf;wWC*kGl`9(u&6u6AYQwvYbW)2ElwU&DKY^+JILWoOpOR&C>~1Zx{QYpojm0(_ZZ
AC;$Ke
literal 0
HcmV?d00001
diff --git a/out/production/DriftEvent/com/example/drift/DriftEventObserver.class b/out/production/DriftEvent/com/example/drift/DriftEventObserver.class
new file mode 100644
index 0000000000000000000000000000000000000000..96deaaa1f457d5838937b9dc7beb3a14f7c34811
GIT binary patch
literal 188
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
literal 0
HcmV?d00001
diff --git a/out/production/DriftEvent/com/example/drift/SmoothDriftStrategy.class b/out/production/DriftEvent/com/example/drift/SmoothDriftStrategy.class
new file mode 100644
index 0000000000000000000000000000000000000000..70032535e598ca0485a55ebb6035db96eeaec781
GIT binary patch
literal 595
zcmZva%T5A85JhkC8o*HyeBcvY7}15ZbOCXraYfVw!@hwAn#@d_p)vYdy3oXhAK*tB
zt4HG_u&GLQ-9ER{)$bp#ZvdLu%OioLgOrOjGKAt-+zHPY;n2J4j%CjfGEEgKb4p0o
z4?8(zk#mrDu>kjQ3{u*=j#OycCXym(WU)l3T+3*nqd}<6w=j-_wC7??rIyOD~3d
z?bzwu8nIRwIec(XAyj9j|3rk;neIzMp`}83ISslpx)EKUPf9J_6MjcT%GTe9DKkd6ab(Um#cWBVT1!zyo#u+HnVnYYGqgDa0SaZVq-fF9%a
yCP&)_lGx(tehILR9j*wwKbKEp7?68{Q(AmR;TK?kh{a^#{DI_tAXV-rQ2PXf6NxJT
literal 0
HcmV?d00001
diff --git a/out/production/DriftEvent/com/example/drift/Spectator.class b/out/production/DriftEvent/com/example/drift/Spectator.class
new file mode 100644
index 0000000000000000000000000000000000000000..bbe37157abea50c1d3ba4383df7642a97546a04e
GIT binary patch
literal 1277
zcmaJ>?M@Rx6g|_HZdsQPp@7JT1wq@QtluJwm{=v66fr5OKm0Y_j%8uLvO8_$O?(ZF
zV!{s}z=ty4?KZSz8-DEU+{wA;-gEDr`TOtu4}cxKQjtPhK}N#}vJ8{Qyu)>yyDj~o
zaV$*9klnFdOYSnHi>3M~au`*hYPbfCVZrnqU3}$^ZwtK{SYM=G^T~@#FJQ>H+z|{@
z)jnxW2A110Mlp^F1(O=CW9m}W+G!|-L&3Z@#h!^>El>YQev-TecMKJI%qW=EFozoq
zi^(M3M5(;(2$wk2mXP}*40(%k$rnq>Y^JCbH#IC^kzvl^C!*rHCYPTqc|^NVa#w~7
zTg9Yj@?;3Tie=nVP|&b~Rfg$qH7-kHQ2a=s?ULppaY}UsYYb~wDLrU}BIt;y?iH^|
zS|_TOD?YTHh6oOM!|ry%Gr3*offd=k!;Cz#NZwL4Nq*5wgT|okH@PH|mEsU&zu-ox
z&M+e4+Am)XrRLPUc3_GYaDQLOBd-}wWbsJFV?0stG-}v0
zs!4yiEVtvG2tA&$xQBb(q)|L&_%>M89xx_-$K9qa!nLaBowR);+0ucNOOA)9z8C`k
zJb;hykTEzEJ&Fpq?V2Tpk;4|lJSzmk6jnzx3*Bo}=oWChz!`cRSotTEjWbN2V;(reQlC9~
tqd*x=V{Cvqf5Du`J=`b8G&TvBf{q9D&(X<4`kvzjSt{+e>A~B@{C_`@P8a|H
literal 0
HcmV?d00001