Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
A
AP Lab 6
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Omid Sayfun
AP Lab 6
Commits
2bedad5a
Commit
2bedad5a
authored
Apr 19, 2019
by
Omid Sayfun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Applied OOP Principles
parent
32eac881
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
333 additions
and
274 deletions
+333
-274
Main.java
Main.java
+8
-274
Board.java
lab/game/Board.java
+267
-0
Police.java
lab/game/Police.java
+34
-0
Thief.java
lab/game/Thief.java
+24
-0
No files found.
Main.java
View file @
2bedad5a
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.*
;
import
java.io.IOException
;
import
java.io.IOException
;
import
lab.game.*
;
public
class
Main
{
public
class
Main
{
static
class
Board
{
public
int
n
;
public
int
m
;
public
Thief
thief
;
public
int
thiefMoves
;
public
int
policeMoves
;
public
ArrayList
<
Police
>
polices
;
public
Board
(
int
n
,
int
m
){
this
.
n
=
n
;
this
.
m
=
m
;
this
.
thief
=
null
;
this
.
polices
=
new
ArrayList
<
Police
>();
this
.
thiefMoves
=
0
;
this
.
policeMoves
=
0
;
}
public
Boolean
isTakenByThief
(
int
x
,
int
y
){
if
(
this
.
thief
!=
null
&&
this
.
thief
.
x
==
x
&&
this
.
thief
.
y
==
y
){
return
true
;
}
return
false
;
}
public
Boolean
isTakenByPolice
(
int
x
,
int
y
){
for
(
Police
t
:
this
.
polices
){
if
(
t
.
x
==
x
&&
t
.
y
==
y
){
return
true
;
}
}
return
false
;
}
public
Boolean
isFree
(
int
x
,
int
y
){
if
(
!
isTakenByThief
(
x
,
y
)
&&
!
isTakenByPolice
(
x
,
y
)
){
return
true
;
}
else
{
return
false
;
}
}
public
Boolean
isThiefInRange
(
int
x
,
int
y
){
if
(
Math
.
abs
(
this
.
thief
.
x
-
x
)
<=
2
&&
Math
.
abs
(
this
.
thief
.
y
-
y
)
<=
2
){
return
true
;
}
return
false
;
}
public
Boolean
timeMove
(){
Random
rand
=
new
Random
();
int
prevX
=
this
.
thief
.
x
;
int
prevY
=
this
.
thief
.
y
;
// Move Thief
while
(
true
){
int
xShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
this
.
thief
.
x
+
xShift
>=
0
&&
this
.
thief
.
x
+
xShift
<
this
.
n
){
break
;
}
xShift
=
rand
.
nextInt
(
3
)
-
1
;
}
int
yShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
this
.
thief
.
y
+
yShift
>=
0
&&
this
.
thief
.
y
+
yShift
<
this
.
m
){
break
;
}
yShift
=
rand
.
nextInt
(
3
)
-
1
;
}
this
.
thiefMoves
++;
// To Do: Check if thief went into police house
if
(
isTakenByPolice
(
this
.
thief
.
x
+
xShift
,
this
.
thief
.
y
+
yShift
)
){
this
.
thief
.
x
+=
xShift
;
this
.
thief
.
y
+=
yShift
;
return
false
;
}
else
{
this
.
thief
.
x
+=
xShift
;
this
.
thief
.
y
+=
yShift
;
break
;
}
}
// Move Polices
for
(
Police
p
:
this
.
polices
){
if
(
p
.
target
==
null
){
// Random Move
while
(
true
){
int
xShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
p
.
x
+
xShift
>=
0
&&
p
.
x
+
xShift
<
this
.
n
){
break
;
}
xShift
=
rand
.
nextInt
(
3
)
-
1
;
}
int
yShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
p
.
y
+
yShift
>=
0
&&
p
.
y
+
yShift
<
this
.
m
){
break
;
}
yShift
=
rand
.
nextInt
(
3
)
-
1
;
}
if
(
!
isTakenByPolice
(
p
.
x
+
xShift
,
p
.
y
+
yShift
)
){
p
.
x
+=
xShift
;
p
.
y
+=
yShift
;
if
(
isThiefInRange
(
p
.
x
,
p
.
y
)
){
for
(
Police
police
:
this
.
polices
){
police
.
target
=
this
.
thief
;
}
}
this
.
policeMoves
++;
break
;
}
}
}
else
{
// Move based on thought :D
int
xShiftThought
=
0
;
int
yShiftThought
=
0
;
if
(
prevX
-
p
.
x
!=
0
){
xShiftThought
=
(
prevX
-
p
.
x
)
/
Math
.
abs
(
prevX
-
p
.
x
);
}
if
(
prevY
-
p
.
y
!=
0
){
yShiftThought
=
(
prevY
-
p
.
y
)
/
Math
.
abs
(
prevY
-
p
.
y
);
}
if
(
!
isTakenByPolice
(
p
.
x
+
xShiftThought
,
p
.
y
+
yShiftThought
)
){
// Diagonal
p
.
x
+=
xShiftThought
;
p
.
y
+=
yShiftThought
;
this
.
policeMoves
++;
if
(
p
.
y
==
prevY
&&
p
.
x
==
prevX
){
return
false
;
}
}
else
if
(
!
isTakenByPolice
(
p
.
x
,
p
.
y
+
yShiftThought
)
){
// Y Axis
p
.
y
+=
yShiftThought
;
this
.
policeMoves
++;
if
(
p
.
y
==
prevY
&&
p
.
x
==
prevX
){
return
false
;
}
}
else
if
(
!
isTakenByPolice
(
p
.
x
+
xShiftThought
,
p
.
y
)
){
// X Axis
p
.
x
+=
xShiftThought
;
this
.
policeMoves
++;
if
(
p
.
y
==
prevY
&&
p
.
x
==
prevX
){
return
false
;
}
}
else
{
// Random Move
while
(
true
){
int
xShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
p
.
x
+
xShift
>=
0
&&
p
.
x
+
xShift
<
this
.
n
){
break
;
}
xShift
=
rand
.
nextInt
(
3
)
-
1
;
}
int
yShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
p
.
y
+
yShift
>=
0
&&
p
.
y
+
yShift
<
this
.
m
){
break
;
}
yShift
=
rand
.
nextInt
(
3
)
-
1
;
}
if
(
!
isTakenByPolice
(
p
.
x
+
xShift
,
p
.
y
+
yShift
)
){
p
.
x
+=
xShift
;
p
.
y
+=
yShift
;
this
.
policeMoves
++;
if
(
p
.
y
==
prevY
&&
p
.
x
==
prevX
){
return
false
;
}
break
;
}
}
}
}
}
return
true
;
}
public
void
print
(
int
t
){
System
.
out
.
println
(
"Time: "
+
t
);
for
(
int
i
=
0
;
i
<
n
;
i
++){
// Check Bounds
for
(
int
j
=
0
;
j
<
m
;
j
++){
if
(
isTakenByThief
(
i
,
j
)
){
System
.
out
.
print
(
"T "
);
}
else
if
(
isTakenByPolice
(
i
,
j
)
){
System
.
out
.
print
(
"P "
);
}
else
{
System
.
out
.
print
(
"- "
);
}
}
System
.
out
.
println
(
""
);
}
}
public
void
printFinal
(){
System
.
out
.
println
(
"\tThe Fucking Thief is caught!"
);
System
.
out
.
println
();
System
.
out
.
println
(
"Thief Moves: "
+
this
.
thiefMoves
);
System
.
out
.
println
(
"Police Moves: "
+
this
.
policeMoves
);
}
}
static
class
Thief
{
public
int
x
;
public
int
y
;
public
Thief
(
int
x
,
int
y
){
this
.
x
=
x
;
this
.
y
=
y
;
}
}
static
class
Police
{
public
int
x
;
public
int
y
;
public
Thief
target
;
public
Police
(
int
x
,
int
y
){
this
.
x
=
x
;
this
.
y
=
y
;
this
.
target
=
null
;
}
}
public
static
void
main
(
String
[]
args
)
throws
IOException
,
InterruptedException
{
public
static
void
main
(
String
[]
args
)
throws
IOException
,
InterruptedException
{
Scanner
sc
=
new
Scanner
(
System
.
in
);
Scanner
sc
=
new
Scanner
(
System
.
in
);
// Get Data
// Get Data
...
@@ -251,43 +13,15 @@ public class Main{
...
@@ -251,43 +13,15 @@ public class Main{
System
.
out
.
println
(
"Enter number of polices: "
);
System
.
out
.
println
(
"Enter number of polices: "
);
int
p
=
Integer
.
parseInt
(
sc
.
next
());
int
p
=
Integer
.
parseInt
(
sc
.
next
());
// Initialize Board
// Initialize Board
Board
mainBoard
=
new
Board
(
n
,
m
);
Board
mainBoard
=
new
Board
(
n
,
m
,
p
);
Random
rand
=
new
Random
();
mainBoard
.
initBoard
();
// Create Thief
// Start the game
boolean
flag
=
true
;
try
{
int
x
=
0
,
y
=
0
;
mainBoard
.
startGame
();
while
(
flag
){
x
=
rand
.
nextInt
(
n
);
y
=
rand
.
nextInt
(
m
);
flag
=
!
mainBoard
.
isFree
(
x
,
y
);
}
Thief
newThief
=
new
Thief
(
x
,
y
);
mainBoard
.
thief
=
newThief
;
// Create Polices
for
(
int
i
=
0
;
i
<
p
;
i
++){
flag
=
true
;
x
=
0
;
y
=
0
;
while
(
flag
){
x
=
rand
.
nextInt
(
n
);
y
=
rand
.
nextInt
(
m
);
flag
=
!(
mainBoard
.
isFree
(
x
,
y
)
&&
!
mainBoard
.
isThiefInRange
(
x
,
y
));
}
Police
newPolice
=
new
Police
(
x
,
y
);
mainBoard
.
polices
.
add
(
newPolice
);
}
}
// Print fucking board
catch
(
IOException
e
)
{
flag
=
true
;
e
.
printStackTrace
();
int
i
=
0
;
while
(
flag
){
new
ProcessBuilder
(
"cmd"
,
"/c"
,
"cls"
).
inheritIO
().
start
().
waitFor
();
mainBoard
.
print
(
i
);
flag
=
mainBoard
.
timeMove
();
TimeUnit
.
SECONDS
.
sleep
(
2
);
i
++;
}
}
new
ProcessBuilder
(
"cmd"
,
"/c"
,
"cls"
).
inheritIO
().
start
().
waitFor
();
mainBoard
.
printFinal
();
sc
.
close
();
sc
.
close
();
}
}
}
}
lab/game/Board.java
0 → 100644
View file @
2bedad5a
package
lab
.
game
;
import
java.util.*
;
import
java.util.concurrent.*
;
import
java.io.IOException
;
public
class
Board
{
private
int
n
;
private
int
m
;
private
int
c
;
private
Thief
thief
;
private
int
thiefMoves
;
private
int
policeMoves
;
private
ArrayList
<
Police
>
polices
;
public
Board
(
int
n
,
int
m
,
int
c
){
this
.
n
=
n
;
this
.
m
=
m
;
this
.
c
=
c
;
this
.
thief
=
null
;
this
.
polices
=
new
ArrayList
<
Police
>();
this
.
thiefMoves
=
0
;
this
.
policeMoves
=
0
;
}
public
void
setThief
(
Thief
t
){
this
.
thief
=
t
;
}
public
void
addPolice
(
Police
p
){
this
.
polices
.
add
(
p
);
}
public
void
initBoard
(){
Random
rand
=
new
Random
();
// Create Thief
boolean
flag
=
true
;
int
x
=
0
,
y
=
0
;
while
(
flag
){
x
=
rand
.
nextInt
(
this
.
n
);
y
=
rand
.
nextInt
(
this
.
m
);
flag
=
!
isFree
(
x
,
y
);
}
Thief
newThief
=
new
Thief
(
x
,
y
);
this
.
thief
=
newThief
;
// Create Polices
for
(
int
i
=
0
;
i
<
this
.
c
;
i
++){
flag
=
true
;
x
=
0
;
y
=
0
;
while
(
flag
){
x
=
rand
.
nextInt
(
this
.
n
);
y
=
rand
.
nextInt
(
this
.
m
);
flag
=
!(
isFree
(
x
,
y
)
&&
!
isThiefInRange
(
x
,
y
));
}
Police
newPolice
=
new
Police
(
x
,
y
);
this
.
polices
.
add
(
newPolice
);
}
}
public
void
startGame
()
throws
IOException
,
InterruptedException
{
boolean
flag
=
true
;
int
i
=
0
;
while
(
flag
){
new
ProcessBuilder
(
"cmd"
,
"/c"
,
"cls"
).
inheritIO
().
start
().
waitFor
();
this
.
print
(
i
);
flag
=
this
.
timeMove
();
TimeUnit
.
SECONDS
.
sleep
(
2
);
i
++;
}
new
ProcessBuilder
(
"cmd"
,
"/c"
,
"cls"
).
inheritIO
().
start
().
waitFor
();
this
.
printFinal
();
}
public
Boolean
isTakenByThief
(
int
x
,
int
y
){
if
(
this
.
thief
!=
null
&&
this
.
thief
.
getX
()
==
x
&&
this
.
thief
.
getY
()
==
y
){
return
true
;
}
return
false
;
}
public
Boolean
isTakenByPolice
(
int
x
,
int
y
){
for
(
Police
t
:
this
.
polices
){
if
(
t
.
getX
()
==
x
&&
t
.
getY
()
==
y
){
return
true
;
}
}
return
false
;
}
public
Boolean
isFree
(
int
x
,
int
y
){
if
(
!
isTakenByThief
(
x
,
y
)
&&
!
isTakenByPolice
(
x
,
y
)
){
return
true
;
}
else
{
return
false
;
}
}
public
Boolean
isThiefInRange
(
int
x
,
int
y
){
if
(
Math
.
abs
(
this
.
thief
.
getX
()
-
x
)
<=
2
&&
Math
.
abs
(
this
.
thief
.
getY
()
-
y
)
<=
2
){
return
true
;
}
return
false
;
}
public
Boolean
timeMove
(){
Random
rand
=
new
Random
();
int
prevX
=
this
.
thief
.
getX
();
int
prevY
=
this
.
thief
.
getY
();
// Move Thief
while
(
true
){
int
xShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
this
.
thief
.
getX
()
+
xShift
>=
0
&&
this
.
thief
.
getX
()
+
xShift
<
this
.
n
){
break
;
}
xShift
=
rand
.
nextInt
(
3
)
-
1
;
}
int
yShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
this
.
thief
.
getY
()
+
yShift
>=
0
&&
this
.
thief
.
getY
()
+
yShift
<
this
.
m
){
break
;
}
yShift
=
rand
.
nextInt
(
3
)
-
1
;
}
this
.
thiefMoves
++;
this
.
thief
.
setCoordinates
(
this
.
thief
.
getX
()
+
xShift
,
this
.
thief
.
getY
()
+
yShift
);
if
(
isTakenByPolice
(
this
.
thief
.
getX
()
+
xShift
,
this
.
thief
.
getY
()
+
yShift
)
){
return
false
;
}
else
{
break
;
}
}
// Move Polices
for
(
Police
p
:
this
.
polices
){
if
(
p
.
getTarget
()
==
null
){
// Random Move
while
(
true
){
int
xShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
p
.
getX
()
+
xShift
>=
0
&&
p
.
getX
()
+
xShift
<
this
.
n
){
break
;
}
xShift
=
rand
.
nextInt
(
3
)
-
1
;
}
int
yShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
p
.
getY
()
+
yShift
>=
0
&&
p
.
getY
()
+
yShift
<
this
.
m
){
break
;
}
yShift
=
rand
.
nextInt
(
3
)
-
1
;
}
if
(
!
isTakenByPolice
(
p
.
getX
()
+
xShift
,
p
.
getY
()
+
yShift
)
){
p
.
setCoordinates
(
p
.
getX
()
+
xShift
,
p
.
getY
()
+
yShift
);
if
(
isThiefInRange
(
p
.
getX
(),
p
.
getY
())
){
for
(
Police
police
:
this
.
polices
){
police
.
setTarget
(
this
.
thief
);
}
}
this
.
policeMoves
++;
break
;
}
}
}
else
{
// Move based on thought :D
int
xShiftThought
=
0
;
int
yShiftThought
=
0
;
if
(
prevX
-
p
.
getX
()
!=
0
){
xShiftThought
=
(
prevX
-
p
.
getX
())
/
Math
.
abs
(
prevX
-
p
.
getX
());
}
if
(
prevY
-
p
.
getY
()
!=
0
){
yShiftThought
=
(
prevY
-
p
.
getY
())
/
Math
.
abs
(
prevY
-
p
.
getY
());
}
if
(
!
isTakenByPolice
(
p
.
getX
()
+
xShiftThought
,
p
.
getY
()
+
yShiftThought
)
){
// Diagonal
p
.
setCoordinates
(
p
.
getX
()
+
xShiftThought
,
p
.
getY
()
+
yShiftThought
);
this
.
policeMoves
++;
if
(
p
.
getY
()
==
prevY
&&
p
.
getX
()
==
prevX
){
return
false
;
}
}
else
if
(
!
isTakenByPolice
(
p
.
getX
(),
p
.
getY
()
+
yShiftThought
)
){
// Y Axis
p
.
setCoordinates
(
p
.
getX
(),
p
.
getY
()
+
yShiftThought
);
this
.
policeMoves
++;
if
(
p
.
getY
()
==
prevY
&&
p
.
getX
()
==
prevX
){
return
false
;
}
}
else
if
(
!
isTakenByPolice
(
p
.
getX
()
+
xShiftThought
,
p
.
getY
())
){
// X Axis
p
.
setCoordinates
(
p
.
getX
()
+
xShiftThought
,
p
.
getY
());
this
.
policeMoves
++;
if
(
p
.
getY
()
==
prevY
&&
p
.
getX
()
==
prevX
){
return
false
;
}
}
else
{
// Random Move
while
(
true
){
int
xShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
p
.
getX
()
+
xShift
>=
0
&&
p
.
getX
()
+
xShift
<
this
.
n
){
break
;
}
xShift
=
rand
.
nextInt
(
3
)
-
1
;
}
int
yShift
=
rand
.
nextInt
(
3
)
-
1
;
while
(
true
){
if
(
p
.
getY
()
+
yShift
>=
0
&&
p
.
getY
()
+
yShift
<
this
.
m
){
break
;
}
yShift
=
rand
.
nextInt
(
3
)
-
1
;
}
if
(
!
isTakenByPolice
(
p
.
getX
()
+
xShift
,
p
.
getY
()
+
yShift
)
){
p
.
setCoordinates
(
p
.
getX
()
+
xShift
,
p
.
getY
()
+
yShift
);
this
.
policeMoves
++;
if
(
p
.
getY
()
==
prevY
&&
p
.
getX
()
==
prevX
){
return
false
;
}
break
;
}
}
}
}
}
return
true
;
}
public
void
print
(
int
t
){
System
.
out
.
println
(
"Time: "
+
t
);
for
(
int
i
=
0
;
i
<
n
;
i
++){
for
(
int
j
=
0
;
j
<
m
;
j
++){
if
(
isTakenByThief
(
i
,
j
)
){
System
.
out
.
print
(
"T "
);
}
else
if
(
isTakenByPolice
(
i
,
j
)
){
System
.
out
.
print
(
"P "
);
}
else
{
System
.
out
.
print
(
"- "
);
}
}
System
.
out
.
println
(
""
);
}
}
public
void
printFinal
(){
System
.
out
.
println
(
"\tThe Thief is caught!"
);
System
.
out
.
println
();
System
.
out
.
println
(
"Thief Moves: "
+
this
.
thiefMoves
);
System
.
out
.
println
(
"Police Moves: "
+
this
.
policeMoves
);
}
}
lab/game/Police.java
0 → 100644
View file @
2bedad5a
package
lab
.
game
;
public
class
Police
{
private
int
x
;
private
int
y
;
private
Thief
target
;
public
Police
(
int
x
,
int
y
){
this
.
x
=
x
;
this
.
y
=
y
;
this
.
target
=
null
;
}
public
void
setCoordinates
(
int
x
,
int
y
){
this
.
x
=
x
;
this
.
y
=
y
;
}
public
void
setTarget
(
Thief
t
){
this
.
target
=
t
;
}
public
int
getX
(){
return
this
.
x
;
}
public
int
getY
(){
return
this
.
y
;
}
public
Thief
getTarget
(){
return
this
.
target
;
}
}
lab/game/Thief.java
0 → 100644
View file @
2bedad5a
package
lab
.
game
;
public
class
Thief
{
private
int
x
;
private
int
y
;
public
Thief
(
int
x
,
int
y
){
this
.
x
=
x
;
this
.
y
=
y
;
}
public
void
setCoordinates
(
int
x
,
int
y
){
this
.
x
=
x
;
this
.
y
=
y
;
}
public
int
getX
(){
return
this
.
x
;
}
public
int
getY
(){
return
this
.
y
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment