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 + + + + + + + \ 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