Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
NetWorld
Project
Project
Details
Activity
Releases
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
LAIRD Timothy
NetWorld
Commits
9ab505fa
Commit
9ab505fa
authored
Apr 23, 2021
by
ewen.madec
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dice rolling animation
parent
a95aa518
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
179 additions
and
17 deletions
+179
-17
graphical-aspect.c
src/graphical-aspect.c
+160
-12
graphical-aspect.h
src/graphical-aspect.h
+1
-1
main-viewer.c
src/main-viewer.c
+4
-2
player.c
src/player.c
+13
-1
player.h
src/player.h
+1
-1
No files found.
src/graphical-aspect.c
View file @
9ab505fa
...
...
@@ -55,12 +55,12 @@ void Graphic_RecrutementPhase(Player * player, int screenWidth, int screenHeight
}
void
Graphic_AttackPhase
(
Player
*
player
,
int
screenWidth
,
int
screenHeight
,
Font
font
){
Rectangle
rec
=
{
screenWidth
-
300
,
100
,
300
,
4
0
0
};
Rectangle
rec
=
{
screenWidth
-
300
,
100
,
300
,
4
5
0
};
DrawRectangleLinesEx
(
rec
,
10
,
player
->
color
);
DrawTextEx
(
font
,
"Attack Phase"
,(
Vector2
){
screenWidth
-
265
,
120
},
23
.
0
,
3
.
0
,
player
->
color
);
DrawTextRec
(
font
,
" FIRST click on the node you want to attack from"
,
(
Rectangle
){
screenWidth
-
285
,
175
,
270
,
100
},
20
.
0
,
3
.
0
,
true
,
player
->
color
);
DrawTextRec
(
font
,
" THEN click on one of neighbouring node you want to attack"
,
(
Rectangle
){
screenWidth
-
285
,
295
,
270
,
100
},
20
.
0
,
3
.
0
,
true
,
player
->
color
);
DrawTextRec
(
font
,
" click Next Turn once finished"
,
(
Rectangle
){
screenWidth
-
285
,
415
,
270
,
100
},
20
.
0
,
3
.
0
,
true
,
player
->
color
);
DrawTextRec
(
font
,
" click Next Turn once finished
all your attacks
"
,
(
Rectangle
){
screenWidth
-
285
,
415
,
270
,
100
},
20
.
0
,
3
.
0
,
true
,
player
->
color
);
}
void
Graphic_WhoseTurnIsIt
(
Player
*
player
,
int
screenWidth
,
int
screenHeight
,
Font
font
){
...
...
@@ -180,6 +180,7 @@ int Graphic_ChooseNumberOfAttackers(Player * attacker, Player * defender, Node *
char
*
str_i
=
malloc
(
sizeof
(
int
));
sprintf
(
str_i
,
"%d"
,
i
);
DrawTextEx
(
font
,
str_i
,
(
Vector2
){
nbAttackerRectangle
[
i
].
x
+
55
,
nbAttackerRectangle
[
i
].
y
+
5
},
70
.
0
,
3
.
0
,
WHITE
);
free
(
str_i
);
if
(
CheckCollisionPointRec
(
mousePosition
,
nbAttackerRectangle
[
i
])){
DrawRectangleLinesEx
(
nbAttackerRectangle
[
i
],
5
,
GREEN
);
}
...
...
@@ -204,7 +205,7 @@ int Graphic_ChooseNumberOfAttackers(Player * attacker, Player * defender, Node *
//--------------------------------------------------------------------------------------
}
void
diceRolling
(
Player
*
attacker
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
int
nbOfAttackers
,
Font
font
)
void
diceRolling
(
Player
*
attacker
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
int
nbOfAttackers
,
int
*
listOfDices
,
Font
font
)
{
printf
(
"dice rolling begin
\n
"
);
...
...
@@ -219,6 +220,8 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
//Texture2D diceTexture = LoadTexture("diceRolling.png"); // Texture loading
Texture2D
diceTexture
=
LoadTextureFromImage
(
texture
);
int
defendersCount
=
targetNode
->
soldiers
>=
3
?
2
:
1
;
int
attackersCount
=
nbOfAttackers
;
Rectangle
frameRec
=
{
0
.
0
f
,
0
.
0
f
,
(
float
)
diceTexture
.
width
,
(
float
)
diceTexture
.
height
/
9
};
int
currentFrame
=
0
;
...
...
@@ -226,7 +229,8 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
int
framesCounter
=
0
;
int
framesSpeed
=
7
;
int
frameExit
=
0
;
// Number of spritesheet frames shown by second
bool
endAnimation
=
false
;
bool
endAnimationDice
=
false
;
bool
endDisplayResult
=
false
;
SetTargetFPS
(
60
);
// Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
...
...
@@ -238,21 +242,23 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
Vector2
*
positionDiceAttacker
=
malloc
(
20
*
sizeof
(
Vector2
));
Vector2
*
positionDiceDefender
=
malloc
(
20
*
sizeof
(
Vector2
));
for
(
int
i
=
0
;
i
<
nbOfAttackers
;
i
++
){
positionDiceAttacker
[
i
]
=
(
Vector2
){
200
+
(
i
)
*
2
50
,
screenHeight
-
500
};
positionDiceAttacker
[
i
]
=
(
Vector2
){
200
+
(
i
)
*
1
50
,
screenHeight
-
500
};
}
for
(
int
i
=
0
;
i
<
targetNode
->
soldiers
+
targetNode
->
soldiersToAdd
;
i
++
){
positionDiceDefender
[
i
]
=
(
Vector2
){
1000
+
(
i
)
*
250
,
screenHeight
-
500
};
for
(
int
i
=
0
;
i
<
defendersCount
+
1
;
i
++
){
positionDiceDefender
[
i
]
=
(
Vector2
){
1000
+
(
i
)
*
150
,
screenHeight
-
500
};
printf
(
"position dice defender %d x : %f
\n
"
,
i
,
positionDiceDefender
[
i
].
x
);
printf
(
"position dice defender %d y : %f
\n
"
,
i
,
positionDiceDefender
[
i
].
y
);
}
// Main game loop
while
(
!
endAnimation
)
// Detect window close button or ESC key
while
(
!
endAnimation
Dice
)
// Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
framesCounter
++
;
//
frameExit++;
//printf("%d frame before Exit \n", frameExit);
if
(
frameExit
==
200
)
endAnimation
=
true
;
frameExit
++
;
//printf("%d frame before Exit
0
\n", frameExit);
if
(
frameExit
==
200
)
endAnimation
Dice
=
true
;
if
(
framesCounter
>=
(
60
/
framesSpeed
))
{
framesCounter
=
0
;
...
...
@@ -277,19 +283,161 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
for
(
int
i
=
0
;
i
<
nbOfAttackers
;
i
++
){
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceAttacker
[
i
],
WHITE
);
}
for
(
int
i
=
0
;
i
<
targetNode
->
soldiers
+
targetNode
->
soldiersToAdd
;
i
++
){
for
(
int
i
=
0
;
i
<
defendersCount
;
i
++
){
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceDefender
[
i
],
WHITE
);
}
EndDrawing
();
//----------------------------------------------------------------------------------
}
currentFrame
=
0
;
framesCounter
=
0
;
framesSpeed
=
7
;
endDisplayResult
=
false
;
while
(
!
endDisplayResult
)
// Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
framesCounter
++
;
frameExit
++
;
//printf("%d frame before Exit1 \n", frameExit);
if
(
frameExit
==
450
)
endDisplayResult
=
true
;
if
(
framesCounter
>=
(
60
/
framesSpeed
))
{
framesCounter
=
0
;
currentFrame
++
;
if
(
currentFrame
>
8
)
currentFrame
=
0
;
frameRec
.
y
=
(
float
)
currentFrame
*
(
float
)
diceTexture
.
height
/
9
;
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing
();
ClearBackground
(
RAYWHITE
);
DrawTextEx
(
font
,
whoseTurnToAttack
,
(
Vector2
){
250
,
200
}
,
30
.
0
,
3
.
0
,
attacker
->
color
);
DrawTextEx
(
font
,
whoseTurnToDefend
,
(
Vector2
){
screenWidth
-
700
,
200
},
30
.
0
,
3
.
0
,
defender
->
color
);
DrawTextEx
(
font
,
" attacker"
,
(
Vector2
){
250
+
MeasureTextEx
(
font
,
"Player X "
,
30
.
0
,
3
.
0
).
x
,
210
}
,
15
.
0
,
3
.
0
,
attacker
->
color
);
DrawTextEx
(
font
,
" defender"
,
(
Vector2
){
screenWidth
-
700
+
MeasureTextEx
(
font
,
"Player X "
,
30
.
0
,
3
.
0
).
x
,
210
},
15
.
0
,
3
.
0
,
defender
->
color
);
for
(
int
i
=
0
;
i
<
nbOfAttackers
;
i
++
){
switch
(
listOfDices
[
i
])
{
case
1
:
frameRec
.
y
=
9
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceAttacker
[
i
],
WHITE
);
DrawTextEx
(
font
,
"1"
,
(
Vector2
){
positionDiceAttacker
[
i
].
x
+
30
,
positionDiceAttacker
[
i
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
2
:
frameRec
.
y
=
1
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceAttacker
[
i
],
WHITE
);
DrawTextEx
(
font
,
"2"
,
(
Vector2
){
positionDiceAttacker
[
i
].
x
+
30
,
positionDiceAttacker
[
i
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
3
:
frameRec
.
y
=
2
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceAttacker
[
i
],
WHITE
);
DrawTextEx
(
font
,
"3"
,
(
Vector2
){
positionDiceAttacker
[
i
].
x
+
30
,
positionDiceAttacker
[
i
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
4
:
frameRec
.
y
=
3
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceAttacker
[
i
],
WHITE
);
DrawTextEx
(
font
,
"4"
,
(
Vector2
){
positionDiceAttacker
[
i
].
x
+
30
,
positionDiceAttacker
[
i
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
5
:
frameRec
.
y
=
4
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceAttacker
[
i
],
WHITE
);
DrawTextEx
(
font
,
"5"
,
(
Vector2
){
positionDiceAttacker
[
i
].
x
+
30
,
positionDiceAttacker
[
i
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
6
:
frameRec
.
y
=
5
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceAttacker
[
i
],
WHITE
);
DrawTextEx
(
font
,
"6"
,
(
Vector2
){
positionDiceAttacker
[
i
].
x
+
30
,
positionDiceAttacker
[
i
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
default
:
break
;
}
//DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
}
for
(
int
i
=
nbOfAttackers
;
i
<
nbOfAttackers
+
defendersCount
+
1
;
i
++
){
switch
(
listOfDices
[
i
])
{
case
1
:
frameRec
.
y
=
9
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceDefender
[
i
-
nbOfAttackers
],
WHITE
);
DrawTextEx
(
font
,
"1"
,
(
Vector2
){
positionDiceDefender
[
i
-
nbOfAttackers
].
x
+
30
,
positionDiceDefender
[
i
-
nbOfAttackers
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
2
:
frameRec
.
y
=
1
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceDefender
[
i
-
nbOfAttackers
],
WHITE
);
DrawTextEx
(
font
,
"2"
,
(
Vector2
){
positionDiceDefender
[
i
-
nbOfAttackers
].
x
+
30
,
positionDiceDefender
[
i
-
nbOfAttackers
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
3
:
frameRec
.
y
=
2
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceDefender
[
i
-
nbOfAttackers
],
WHITE
);
DrawTextEx
(
font
,
"3"
,
(
Vector2
){
positionDiceDefender
[
i
-
nbOfAttackers
].
x
+
30
,
positionDiceDefender
[
i
-
nbOfAttackers
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
4
:
frameRec
.
y
=
3
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceDefender
[
i
-
nbOfAttackers
],
WHITE
);
DrawTextEx
(
font
,
"4"
,
(
Vector2
){
positionDiceDefender
[
i
-
nbOfAttackers
].
x
+
30
,
positionDiceDefender
[
i
-
nbOfAttackers
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
5
:
frameRec
.
y
=
4
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceDefender
[
i
-
nbOfAttackers
],
WHITE
);
DrawTextEx
(
font
,
"5"
,
(
Vector2
){
positionDiceDefender
[
i
-
nbOfAttackers
].
x
+
30
,
positionDiceDefender
[
i
-
nbOfAttackers
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
case
6
:
frameRec
.
y
=
5
*
(
float
)
diceTexture
.
height
/
9
;
DrawTextureRec
(
diceTexture
,
frameRec
,
positionDiceDefender
[
i
-
nbOfAttackers
],
WHITE
);
DrawTextEx
(
font
,
"6"
,
(
Vector2
){
positionDiceDefender
[
i
-
nbOfAttackers
].
x
+
30
,
positionDiceDefender
[
i
-
nbOfAttackers
].
y
+
100
},
50
.
0
,
3
.
0
,
BLACK
);
break
;
default
:
break
;
}
}
int
remainingAttackers
=
attackersCount
;
for
(
int
index
=
0
;
index
<
fmin
(
defendersCount
,
attackersCount
);
index
++
){
if
(
listOfDices
[
index
]
>
listOfDices
[
index
+
attackersCount
]){
//targetNode->soldiers--;
//printf("Defenders lose a soldier\n");
DrawTextEx
(
font
,
"Defenders lose a soldier"
,
(
Vector2
){
screenWidth
/
2
-
MeasureTextEx
(
font
,
"Defenders lose a soldier"
,
50
.
0
,
3
.
0
).
x
/
2
,
600
},
50
.
0
,
3
.
0
,
BLACK
);
}
else
{
//originNode->soldiers--;
//remainingAttackers--;
//printf("Attackers lose a soldier\n");
DrawTextEx
(
font
,
"Attackers lose a soldier"
,
(
Vector2
){
screenWidth
/
2
-
MeasureTextEx
(
font
,
"Attackers lose a soldier"
,
50
.
0
,
3
.
0
).
x
/
2
,
600
},
50
.
0
,
3
.
0
,
BLACK
);
}
}
if
(
targetNode
->
soldiers
<=
0
){
//printf("Node has been conquered\n");
DrawTextEx
(
font
,
"Node has been conquered"
,
(
Vector2
){
screenWidth
/
2
-
MeasureTextEx
(
font
,
"Node has been conquered"
,
50
.
0
,
3
.
0
).
x
/
2
,
700
},
50
.
0
,
3
.
0
,
BLACK
);
//Player_remove_Node(defender, targetNode);
//Player_add_Node(self, targetNode);
//targetNode->soldiers = attackersCount;
//originNode->soldiers -= attackersCount;
}
EndDrawing
();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
// Texture unloading
//CloseWindow();
free
(
whoseTurnToAttack
);
free
(
whoseTurnToDefend
);
free
(
positionDiceAttacker
);
free
(
positionDiceDefender
);
// Close window and OpenGL context
UnloadTexture
(
diceTexture
);
...
...
src/graphical-aspect.h
View file @
9ab505fa
...
...
@@ -19,7 +19,7 @@ void Graphic_MouseHoverNodeChooseAttacker(Player * player, Vector2 mousePosition
void
Graphic_MouseHoverNodeChooseTarget
(
Node
*
originNode
,
Vector2
mousePosition
,
Panel
*
panel
);
void
Graphic_RectuementBeginTurn
(
int
screenWidth
,
int
screenHeight
,
Font
font
);
int
Graphic_ChooseNumberOfAttackers
(
Player
*
attacker
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
Font
font
);
void
diceRolling
(
Player
*
attacker
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
int
nbOfAttackers
,
Font
font
);
void
diceRolling
(
Player
*
attacker
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
int
nbOfAttackers
,
int
*
listOfDices
,
Font
font
);
...
...
src/main-viewer.c
View file @
9ab505fa
...
...
@@ -159,8 +159,10 @@ void game_update(NetWorld * world, Player * players, Font font, Panel * panel)
else
if
(
Node_are_connected
(
originNode
,
currentNode
)
&&
(
originNode
->
soldiers
>
1
)
&&
originNode
->
canAttack
){
printf
(
"Engagine attack on target Node
\n
"
);
int
nbOfAttackers
=
Graphic_ChooseNumberOfAttackers
(
currentPlayer
,
&
(
players
[
nodePlayerID
]),
originNode
,
currentNode
,
font
);
Player_attack_Node
(
currentPlayer
,
&
(
players
[
nodePlayerID
]),
originNode
,
currentNode
,
nbOfAttackers
);
//diceRolling(currentPlayer, &(players[nodePlayerID]), originNode, currentNode, nbOfAttackers ,font);
int
*
listOfDices
=
Player_attack_Node
(
currentPlayer
,
&
(
players
[
nodePlayerID
]),
originNode
,
currentNode
,
nbOfAttackers
);
int
defendersCount
=
currentNode
->
soldiers
>=
3
?
2
:
1
;
diceRolling
(
currentPlayer
,
&
(
players
[
nodePlayerID
]),
originNode
,
currentNode
,
nbOfAttackers
,
listOfDices
,
font
);
free
(
listOfDices
);
}
else
{
printf
(
"Failed to attack target : Origin has already attacked, nodes aren't connected or origin node has too few soldiers
\n
"
);
...
...
src/player.c
View file @
9ab505fa
...
...
@@ -155,7 +155,8 @@ void Player_confirm_recrutement(Player * self){
};
void
Player_attack_Node
(
Player
*
self
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
int
numberOfAttackers
){
int
*
Player_attack_Node
(
Player
*
self
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
int
numberOfAttackers
){
int
*
listOfDices
=
malloc
(
20
*
sizeof
(
int
));
int
attackersCount
=
numberOfAttackers
;
int
defendersCount
=
targetNode
->
soldiers
>=
3
?
2
:
1
;
int
attDiceRolls
[
attackersCount
];
...
...
@@ -190,6 +191,12 @@ void Player_attack_Node(Player * self, Player * defender, Node * originNode, Nod
}
}
}
for
(
int
index
=
0
;
index
<
attackersCount
;
index
++
){
listOfDices
[
index
]
=
attDiceRolls
[
index
];
}
for
(
int
index
=
0
;
index
<
defendersCount
;
index
++
){
listOfDices
[
index
+
attackersCount
]
=
defDiceRolls
[
index
];
}
printf
(
"Attackers dice rolls :
\t
"
);
for
(
int
index
=
0
;
index
<
attackersCount
;
index
++
){
...
...
@@ -224,4 +231,9 @@ void Player_attack_Node(Player * self, Player * defender, Node * originNode, Nod
}
originNode
->
canAttack
=
false
;
return
listOfDices
;
}
void
Delete_Player_attack_Node
(
int
*
listOfDices
){
free
(
listOfDices
);
}
src/player.h
View file @
9ab505fa
...
...
@@ -87,7 +87,7 @@ void Player_select_Node(Player * self, Vector2 mousePos);
void
Player_unselect_Node
(
Player
*
self
,
Vector2
mousePos
);
void
Player_attack_Node
(
Player
*
self
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
int
numberOfAttackers
);
int
*
Player_attack_Node
(
Player
*
self
,
Player
*
defender
,
Node
*
originNode
,
Node
*
targetNode
,
int
numberOfAttackers
);
void
Player_confirm_recrutement
(
Player
*
self
);
...
...
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