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
Commits
03fbb656
Commit
03fbb656
authored
2 years ago
by
Justin Klein
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parent
34888263
No related branches found
No related tags found
1 merge request
!1
Der große Merge
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/RunGame.java
+278
-0
278 additions, 0 deletions
src/RunGame.java
with
278 additions
and
0 deletions
src/RunGame.java
0 → 100644
+
278
−
0
View file @
03fbb656
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
();
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment