Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
Inf2Pr_SoSe23_Gruppe03_UNO
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Inf2Pr_SoSe23_Gruppe03_UNO
Inf2Pr_SoSe23_Gruppe03_UNO
Merge requests
!1
Der große Merge
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Der große Merge
Frontend-patch-73a8
into
master
Overview
1
Commits
11
Pipelines
0
Changes
1
Merged
Justin Klein
requested to merge
Frontend-patch-73a8
into
master
2 years ago
Overview
1
Commits
11
Pipelines
0
Changes
1
Expand
/UnoKarten/BackSide.png
/UnoKarten/Blau_Acht.png
/UnoKarten/Blau_Aussetzen.png
/UnoKarten/Blau_Drei.png
/UnoKarten/Blau_Eins.png
/UnoKarten/Blau_Neun.png
/UnoKarten/Blau_Richtungswechsel.png
/UnoKarten/Blau_Sechs.png
/UnoKarten/Blau_Zwei.png
/UnoKarten/Blau_Sieben.png
/UnoKarten/Blau_Fuenf.png
/UnoKarten/Blau_Null.png
/UnoKarten/Gelb_Drei.png
/UnoKarten/Gelb_Aussetzen.png
/UnoKarten/Gelb_Eins.png
/UnoKarten/Blau_Zwei_Ziehen.png
/UnoKarten/Blau_Vier.png
/UnoKarten/Gelb_Acht.png
/UnoKarten/Gelb_Neun.png
/UnoKarten/Gelb_Fuenf.png
/UnoKarten/Gelb_Richtungswechsel.png
/UnoKarten/Gelb_Sechs.png
/UnoKarten/Gelb_Sieben.png
/UnoKarten/Gelb_Null.png
/UnoKarten/Gelb_Zwei.png
/UnoKarten/Gelb_Vier.png
/UnoKarten/Gelb_Zwei_Ziehen.png
/UnoKarten/Gruen_Acht.png
/UnoKarten/Gruen_Eins.png
/UnoKarten/Gruen_Drei.png
/UnoKarten/Gruen_Aussetzen.png
/UnoKarten/Gruen_Fuenf.png
/UnoKarten/Gruen_Richtungswechsel.png
/UnoKarten/Gruen_Null.png
/UnoKarten/Gruen_Neun.png
/UnoKarten/Gruen_Sechs.png
/UnoKarten/Gruen_Sieben.png
/UnoKarten/Gruen_Vier.png
/UnoKarten/Gruen_Zwei.png
/UnoKarten/Gruen_Zwei_Ziehen.png
/UnoKarten/Rot_Acht.png
/UnoKarten/Rot_Aussetzen.png
/UnoKarten/Rot_Fuenf.png
/UnoKarten/Rot_Neun.png
/UnoKarten/Rot_Null.png
/UnoKarten/Rot_Eins.png
/UnoKarten/Rot_Drei.png
/UnoKarten/Rot_Richtungswechsel.png
/UnoKarten/Rot_Sieben.png
/UnoKarten/Rot_Vier.png
/UnoKarten/Wild_Draw_Four.png
/UnoKarten/Wild_Draw_Four_Gelb.png
/UnoKarten/Rot_Zwei_Ziehen.png
/UnoKarten/Rot_Sechs.png
/UnoKarten/Rot_Zwei.png
/UnoKarten/Wild_Draw_Four_Blau.png
/UnoKarten/Wild_Draw_Four_Gruen.png
/UnoKarten/Wild_Draw_Four_Rot.png
/UnoKarten/Wild_Multicolor.png
/UnoKarten/Wild_Multicolor_Blau.png
/UnoKarten/Wild_Multicolor_Gelb.png
/UnoKarten/Wild_Multicolor_Gruen.png
/UnoKarten/Wild_Multicolor_Rot.png
1
0
Merge request reports
Viewing commit
03fbb656
Prev
Next
Show latest version
1 file
+
278
−
0
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
03fbb656
Upload New File
· 03fbb656
Justin Klein
authored
2 years ago
src/RunGame.java
0 → 100644
+
278
−
0
Options
public
class
RunGame
{
UnoDeck
deck
=
new
UnoDeck
();
Regelwerk
regel
=
new
Regelwerk
();
farbAuswahl
farbAuswahl
=
new
farbAuswahl
();
EndScreen
Ende
=
new
EndScreen
();
final
Object
lock
=
new
Object
();
final
Object
locked
=
new
Object
();
private
int
lenght
=
0
;
public
void
Start
()
{
PlayerNamesInput
Names
=
new
PlayerNamesInput
(
locked
);
synchronized
(
locked
)
{
try
{
locked
.
wait
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
//Es wird so Lange gewartet bis die Eingabe der Spieler Namen abgeschlossen ist
lenght
=
Names
.
getgroesse
();
if
(
lenght
>
4
)
{
deck
.
befuellen
();
deck
.
befuellen
();
}
else
{
deck
.
befuellen
();
}
//Bei mehr als 4 Spilern sind 108 Karten zu wenig, deswegen werden die Karten verdoppelt (116 Karten)!
deck
.
mischeHand
();
regel
.
wunschFestlegen
();
String
[]
PlayerNames
=
new
String
[
lenght
];
int
i
;
for
(
i
=
0
;
i
<
lenght
;
i
++)
{
PlayerNames
[
i
]
=
Names
.
getNames
(
i
);
}
SpielerHand
spielerhand
=
new
SpielerHand
(
lenght
,
PlayerNames
);
for
(
i
=
0
;
i
<
lenght
;
i
++)
{
spielerhand
.
befuelleSpieleHand
(
i
,
deck
,
7
);
spielerhand
.
zeigeHaende
(
i
);
}
regel
.
reihenfolgeFestlegen
(
lenght
);
//Die Spieler Namen werden verarbeitet und jeder Spieler bekommt die Hand gefüllt
GameLoop
(
spielerhand
);
}
public
void
GameLoop
(
SpielerHand
spielerHand
)
{
boolean
win
=
false
;
int
zug
=
1
;
int
legeKarte
;
int
spieler
;
int
reihen
=
0
;
UnoKarte
aktuelleKarte
=
regel
.
ersteKarte
(
deck
,
zug
,
deck
.
hand
.
size
());
boolean
geht
=
false
;
//Das boolean hilft bei der kontrolle ob die Karte legbar ist!!!!
UnoSpielfeld
spielFeld
=
new
UnoSpielfeld
(
aktuelleKarte
,
spielerHand
,
regel
,
lock
,
lenght
);
while
(!
win
)
{
reihen
=
regel
.
reihenfolge
();
spielFeld
.
colorPlayer
(
reihen
);
boolean
start
=
false
;
spielFeld
.
highZugStarten
();
while
(
start
!=
true
)
{
start
=
spielFeld
.
getzugStarten
();
try
{
Thread
.
sleep
(
100
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//Die Schleife Wartet bis der Zug vom Spiler gestartet wird
}
spielFeld
.
highZugStartenundo
();
spielFeld
.
KarteHinzufuegen
(
spielerHand
,
reihen
);
spielFeld
.
aktuelleKarte
(
aktuelleKarte
);
boolean
kartelegen
=
false
;
boolean
karteziehen
=
false
;
while
((
kartelegen
||
karteziehen
)
!=
true
)
{
try
{
Thread
.
sleep
(
100
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
kartelegen
=
spielFeld
.
getkartelegen
();
karteziehen
=
spielFeld
.
getkarteziehen
();
//Diese Schleife wartet bis der Spieler sich zwischen Karte Legen und Karte Ziehen entschieden hat
}
if
(
kartelegen
==
true
)
{
UnoKarte
neueKarte
=
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
get
(
spielFeld
.
getKartenIndex
());
geht
=
true
;
//Entscheidet der Spieler sich für das legen der Karte wird wird die zu legende Karte entnommen
if
(
geht
==
regel
.
karteLegbar
(
aktuelleKarte
,
neueKarte
,
deck
,
spielerHand
,
lenght
))
{
spielerHand
.
entferneKarteHand
(
spielFeld
.
getSpielerIndex
(),
spielFeld
.
getKartenIndex
()+
1
,
deck
,
zug
);
aktuelleKarte
=
neueKarte
;
farbAuswahl
.
farbAuswahl
(
aktuelleKarte
,
regel
,
spielFeld
);
geht
=
false
;
//Hier wird die Karte dann geprüft ob es möglich ist diese zu legen
}
else
{
//Ist es nicht möglich die Karte zu legen, läuft der Loop hier weiter
while
(
geht
==
true
){
kartelegen
=
false
;
karteziehen
=
false
;
while
((
kartelegen
||
karteziehen
)
!=
true
)
{
try
{
Thread
.
sleep
(
100
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
kartelegen
=
spielFeld
.
getkartelegen
();
karteziehen
=
spielFeld
.
getkarteziehen
();
//Diese Schleife prüft erneut ob der Spieler eine Karte Legen oder ziehen möchte
}
if
(
kartelegen
==
true
){
neueKarte
=
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
get
(
spielFeld
.
getKartenIndex
());
//Entscheidet der Spieler sich für das legen der Karte wird wird die zu legende Karte erneut entnommen
if
(
geht
==
regel
.
karteLegbar
(
aktuelleKarte
,
neueKarte
,
deck
,
spielerHand
,
lenght
))
{
spielerHand
.
entferneKarteHand
(
spielFeld
.
getSpielerIndex
(),
spielFeld
.
getKartenIndex
()+
1
,
deck
,
zug
);
aktuelleKarte
=
neueKarte
;
farbAuswahl
.
farbAuswahl
(
aktuelleKarte
,
regel
,
spielFeld
);
geht
=
false
;
//Hier wird erneut geprüft ob die zu legende Karte legbar ist
}
}
else
if
(
karteziehen
==
true
){
spielerHand
.
befuelleSpieleHand
(
spielFeld
.
getSpielerIndex
(),
deck
,
1
);
spielFeld
.
changeKarteziehen
(
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
get
(
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
size
()-
1
));
// Entscheidet der Spieler sich für das zihen der Karte wird ihm eine Karte hinzugefügt
synchronized
(
lock
)
{
try
{
lock
.
wait
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
while
(
geht
==
true
)
{
kartelegen
=
false
;
karteziehen
=
false
;
spielFeld
.
highLegen
();
spielFeld
.
highBehalten
();
while
((
kartelegen
||
karteziehen
)
!=
true
)
{
try
{
Thread
.
sleep
(
100
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
kartelegen
=
spielFeld
.
getneuekartelegen
();
karteziehen
=
spielFeld
.
getneuekartebehalten
();
//Hier wird entschieden ob der Spieler die neu gezogene Karte behalten möchte oder direkt legen möchte
}
spielFeld
.
highLegenundo
();
spielFeld
.
highBehaltenundo
();
if
(
karteziehen
==
true
)
{
spielFeld
.
changeKarteziehenundo
();
geht
=
false
;
//möchte der Spieler die Karte behalten passiert quasi nichts mehr
}
else
if
(
kartelegen
==
true
)
{
neueKarte
=
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
get
(
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
size
()
-
1
);
if
(
geht
==
regel
.
karteLegbar
(
aktuelleKarte
,
neueKarte
,
deck
,
spielerHand
,
lenght
))
{
aktuelleKarte
=
neueKarte
;
farbAuswahl
.
farbAuswahl
(
aktuelleKarte
,
regel
,
spielFeld
);
spielerHand
.
entferneKarteHand
(
spielFeld
.
getSpielerIndex
(),
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
size
(),
deck
,
zug
);
spielFeld
.
changeKarteziehenundo
();
//Hier findet die Prüfung ob die Karte legbar ist statt
}
geht
=
false
;
}
}
}
}
}
}
else
if
(
karteziehen
==
true
){
geht
=
true
;
spielerHand
.
befuelleSpieleHand
(
spielFeld
.
getSpielerIndex
(),
deck
,
1
);
spielFeld
.
changeKarteziehen
(
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
get
(
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
size
()-
1
));
synchronized
(
lock
)
{
try
{
lock
.
wait
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
while
(
geht
==
true
)
{
kartelegen
=
false
;
karteziehen
=
false
;
spielFeld
.
highBehalten
();
spielFeld
.
highLegen
();
while
((
kartelegen
||
karteziehen
)
!=
true
)
{
try
{
Thread
.
sleep
(
100
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
kartelegen
=
spielFeld
.
getneuekartelegen
();
karteziehen
=
spielFeld
.
getneuekartebehalten
();
//Hier wird erneut entschieden ob der Spieler die Karte behalten oder legen möchte
}
spielFeld
.
highBehaltenundo
();
spielFeld
.
highLegenundo
();
if
(
karteziehen
==
true
)
{
spielFeld
.
changeKarteziehenundo
();
geht
=
false
;
//Behält der Spieler die Karte, so passiert quasi nichts
}
else
if
(
kartelegen
==
true
)
{
UnoKarte
neueKarte
=
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
get
(
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
size
()
-
1
);
if
(
geht
==
regel
.
karteLegbar
(
aktuelleKarte
,
neueKarte
,
deck
,
spielerHand
,
lenght
))
{
aktuelleKarte
=
neueKarte
;
farbAuswahl
.
farbAuswahl
(
aktuelleKarte
,
regel
,
spielFeld
);
spielerHand
.
entferneKarteHand
(
spielFeld
.
getSpielerIndex
(),
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
size
(),
deck
,
zug
);
spielFeld
.
changeKarteziehenundo
();
//legt er sie wid sie überprüft oob dies auch möglich ist. Ist es nicht möglich behält der Spiler di Karte und der loop läuft weiter
}
geht
=
false
;
}
}
}
if
(
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
size
()
==
1
){
//besitzt der Spieler nur noch eine Karte, so muss er uno "Sagen"
//Dies passiert indem der spieler inerhalb von 2.5 Sekunden auf uno drücken muss, sonst bekommt er eine Karte als Strafe
spielFeld
.
highUno
();
boolean
eineKarte
=
false
;
try
{
Thread
.
sleep
(
2500
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
spielFeld
.
highUnoundo
();
eineKarte
=
spielFeld
.
getUno
();
if
(
eineKarte
==
true
){
spielFeld
.
aktuelleKarte
(
aktuelleKarte
);
spielFeld
.
Kartenausschalten
();
continue
;
}
else
{
spielerHand
.
befuelleSpieleHand
(
spielFeld
.
getSpielerIndex
(),
deck
,
1
);
}
}
//Besitzt ein Spiler keine Karten mehr, so wird der loop beendet und der EndScreen wird aufgerufen
if
(
spielerHand
.
spielerHaende
.
get
(
spielFeld
.
getSpielerIndex
()).
size
()
==
0
){
spielFeld
.
beenden
();
win
=
true
;
Ende
.
EndScreen
(
spielerHand
,
spielFeld
.
getSpielerIndex
());
}
spielFeld
.
changeKarteziehenundo
();
spielFeld
.
aktuelleKarte
(
aktuelleKarte
);
spielFeld
.
Kartenausschalten
();
}
}
}
Loading