-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDP_2_Players_Game.m
More file actions
105 lines (98 loc) · 3.09 KB
/
DP_2_Players_Game.m
File metadata and controls
105 lines (98 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
clear all
close all
clc
nodes(1:100,1:100) = -10;
winner(1:100,1:100) = -10;
step(1:100,1:100) = '-';
m1 = 'Please enter the distance between of the 2 players!:';
A = input(m1);
m2 = 'Please enter the size of the big step D:';
D = input(m2);
m3 = 'Please enter the size of the small step d:';
d = input(m3);
n = ceil(A/d + 1); % Defining the depth of each matrix
nodes(1,1) = A; % Setting the 1st entry of the array to the distance between of the 2 players
for i=2:1:n % For each level of the tree
for j=1:1:n % For each node on each level of the tree
if(nodes(i-1,j) ~= -10) % Checking if the node is not -1
nodes(i,j) = nodes(i-1,j)-D; % Value of distance after a big step
nodes(i,j+1) = nodes(i-1,j)-d; % Value of distance after a small step
end
end
end
nodes(1:n,1:n)
for i=n:-1:1
for j=n:-1:1
if mod(i,2)==1 % For levels 1,3,5,7,9,...
if nodes(i,j)<=0
if nodes(i,j)~=-10 & nodes(i,j)>-5
winner(i,j) = 1; % Player 1 wins!
end
else
if winner(i+1,j)<0 | winner(i+1,j+1)<0
winner(i,j) = 2; % Player 2 wins!
elseif winner(i+1,j)>0 & winner(i+1,j+1)>0
winner(i,j) = 1; % Player 1 wins!
end
end
else % For levels 2,4,6,8,10,...
if nodes(i,j)<=0
if nodes(i,j)~=-10 & nodes(i,j)>-D
winner(i,j) = 2; % Player 2 wins!
end
else
if winner(i+1,j)>0 | winner(i+1,j+1)>0
winner(i,j) = 1; % Player 1 wins
elseif winner(i+1,j)<0 & winner(i+1,j+1)<0
winner(i,j) = 2;
end
end
end
end
end
winner(1:n,1:n)
for i=1:1:n
for j=1:1:n
if mod(i,2)==1
if winner(i,j)==1 % >0 Player 1
step(i,j) = 'd';
else
if winner(i,j)==-10
step(i,j) = '-';
elseif winner(i+1,j)==2 % <0 Player 2
step(i,j) = 'D';
else
step(i,j) = 'd';
end
end
else
if winner(i,j)==1 % >0 Player 1
if winner(i+1,j)==1 % >0 Player 1
step(i,j) = 'D';
else
step(i,j) = 'd';
end
else
if winner(i,j)==-10
step(i,j) = '-';
else
step(i,j) = 'd';
end
end
end
end
end
step(1:n,1:n)
for i=1:1:n
if mod(i,2)==1
player = 1;
else
player = 2;
end
Level = sprintf('%d - Plays the player: %d', i, player)
for j=1:1:n
if nodes(i,j)~=-1 & nodes(i,j)>-D
Node_Distance = sprintf('%d, Optimal Step:%c', nodes(i,j), step(i,j))
end
end
end