Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygo-agent
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Biluo Shen
ygo-agent
Commits
987146ea
Commit
987146ea
authored
Feb 19, 2024
by
biluo.shen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add discard_hand
parent
15833b80
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
91 additions
and
71 deletions
+91
-71
assets/deck/Swordsoul.ydk
assets/deck/Swordsoul.ydk
+0
-56
assets/deck/TenyiSwordsoul.ydk
assets/deck/TenyiSwordsoul.ydk
+4
-0
xmake.lua
xmake.lua
+2
-1
ygoenv/ygoenv/ygopro/ygopro.h
ygoenv/ygoenv/ygopro/ygopro.h
+85
-14
No files found.
assets/deck/Swordsoul.ydk
deleted
100644 → 0
View file @
15833b80
#created by wxapp_ygo
#main
62849088
05141117
93490856
93490856
93490856
55273560
55273560
55273560
20001443
20001443
20001443
56495147
56495147
56495147
59438930
59438930
14558127
14558127
23434538
23434538
83764718
93850690
56465981
56465981
56465981
18144506
83308376
24224830
24224830
39730727
39730727
10045474
10045474
23068051
23068051
78836195
14821890
14821890
14821890
99137266
#extra
53971455
86682165
84815190
96633955
47710198
09464441
69248256
69248256
93039339
05402805
78917791
29301450
!side
\ No newline at end of file
assets/deck/TenyiSwordsoul.ydk
View file @
987146ea
...
@@ -52,4 +52,8 @@
...
@@ -52,4 +52,8 @@
69248256
69248256
83755611
83755611
43202238
43202238
32519092
32519092
32519092
78917791
!side
!side
xmake.lua
View file @
987146ea
...
@@ -4,7 +4,8 @@ add_repositories("my-repo repo")
...
@@ -4,7 +4,8 @@ add_repositories("my-repo repo")
add_requires
(
add_requires
(
"ygopro-core"
,
"pybind11 2.10.*"
,
"fmt 10.2.*"
,
"glog 0.6.0"
,
"ygopro-core"
,
"pybind11 2.10.*"
,
"fmt 10.2.*"
,
"glog 0.6.0"
,
"concurrentqueue 1.0.4"
,
"sqlitecpp 3.2.1"
,
"unordered_dense 4.4.*"
)
"sqlite3 3.43.0+200"
,
"concurrentqueue 1.0.4"
,
"unordered_dense 4.4.*"
,
"sqlitecpp 3.2.1"
)
-- target("dummy_ygopro")
-- target("dummy_ygopro")
...
...
ygoenv/ygoenv/ygopro/ygopro.h
View file @
987146ea
...
@@ -2,10 +2,12 @@
...
@@ -2,10 +2,12 @@
#define YGOENV_YGOPRO_YGOPRO_H_
#define YGOENV_YGOPRO_YGOPRO_H_
// clang-format off
// clang-format off
#include <numeric>
#include <stdexcept>
#include <stdexcept>
#include <string>
#include <string>
#include <fstream>
#include <fstream>
#include <shared_mutex>
#include <shared_mutex>
#include <iostream>
#include <fmt/core.h>
#include <fmt/core.h>
#include <fmt/ranges.h>
#include <fmt/ranges.h>
...
@@ -883,7 +885,8 @@ inline card_data db_query_card_data(const SQLite::Database &db, CardCode code) {
...
@@ -883,7 +885,8 @@ inline card_data db_query_card_data(const SQLite::Database &db, CardCode code) {
card_data
card
;
card_data
card
;
card
.
code
=
code
;
card
.
code
=
code
;
card
.
alias
=
query
.
getColumn
(
"alias"
);
card
.
alias
=
query
.
getColumn
(
"alias"
);
card
.
setcode
=
query
.
getColumn
(
"setcode"
).
getInt64
();
uint64_t
setcode
=
query
.
getColumn
(
"setcode"
).
getInt64
();
card
.
set_setcode
(
setcode
);
card
.
type
=
query
.
getColumn
(
"type"
);
card
.
type
=
query
.
getColumn
(
"type"
);
uint32_t
level_
=
query
.
getColumn
(
"level"
);
uint32_t
level_
=
query
.
getColumn
(
"level"
);
card
.
level
=
level_
&
0xff
;
card
.
level
=
level_
&
0xff
;
...
@@ -1311,6 +1314,9 @@ protected:
...
@@ -1311,6 +1314,9 @@ protected:
std
::
vector
<
std
::
string
>
revealed_
;
std
::
vector
<
std
::
string
>
revealed_
;
// discard hand cards
bool
discard_hand_
=
false
;
public:
public:
YGOProEnv
(
const
Spec
&
spec
,
int
env_id
)
YGOProEnv
(
const
Spec
&
spec
,
int
env_id
)
:
Env
<
YGOProEnvSpec
>
(
spec
,
env_id
),
:
Env
<
YGOProEnvSpec
>
(
spec
,
env_id
),
...
@@ -1442,10 +1448,51 @@ public:
...
@@ -1442,10 +1448,51 @@ public:
if
(
ha_p
<
0
)
{
if
(
ha_p
<
0
)
{
ha_p
=
n_history_actions_
-
1
;
ha_p
=
n_history_actions_
-
1
;
}
}
history_actions
[
ha_p
].
Zero
();
_set_obs_action
(
history_actions
,
ha_p
,
msg_
,
options_
[
idx
],
{},
_set_obs_action
(
history_actions
,
ha_p
,
msg_
,
options_
[
idx
],
{},
h_card_ids
[
idx
]);
h_card_ids
[
idx
]);
}
}
void
show_deck
(
const
std
::
vector
<
CardCode
>
&
deck
,
const
std
::
string
&
prefix
)
const
{
fmt
::
print
(
"{} deck:"
,
prefix
);
for
(
auto
code
:
deck
)
{
fmt
::
print
(
" {}"
,
c_get_card
(
code
).
name
());
}
fmt
::
print
(
"
\n
"
);
}
void
show_turn
()
const
{
fmt
::
println
(
"turn: {}, phase: {}, tplayer: {}"
,
turn_count_
,
phase_to_string
(
current_phase_
),
tp_
);
}
void
show_deck
(
PlayerId
player
)
const
{
fmt
::
print
(
"Player {}'s deck:
\n
"
,
player
);
show_deck
(
player
==
0
?
main_deck0_
:
main_deck1_
,
"Main"
);
show_deck
(
player
==
0
?
extra_deck0_
:
extra_deck1_
,
"Extra"
);
}
void
show_history_actions
(
PlayerId
player
)
const
{
const
auto
&
ha
=
player
==
0
?
history_actions_0_
:
history_actions_1_
;
// print card ids of history actions
for
(
int
i
=
0
;
i
<
n_history_actions_
;
++
i
)
{
fmt
::
print
(
"history {}
\n
"
,
i
);
uint8_t
msg_id
=
uint8_t
(
ha
(
i
,
_obs_action_feat_offset
()));
int
msg
=
_msgs
[
msg_id
-
1
];
fmt
::
print
(
"msg: {},"
,
msg_to_string
(
msg
));
for
(
int
j
=
0
;
j
<
spec_
.
config
[
"max_multi_select"
_
];
j
++
)
{
auto
v1
=
static_cast
<
CardId
>
(
ha
(
i
,
2
*
j
));
auto
v2
=
static_cast
<
CardId
>
(
ha
(
i
,
2
*
j
+
1
));
CardId
card_id
=
(
v1
<<
8
)
+
v2
;
fmt
::
print
(
" {}"
,
card_id
);
}
fmt
::
print
(
";"
);
for
(
int
j
=
_obs_action_feat_offset
()
+
1
;
j
<
ha
.
Shape
()[
1
];
j
++
)
{
fmt
::
print
(
" {}"
,
uint8_t
(
ha
(
i
,
j
)));
}
fmt
::
print
(
"
\n
"
);
}
}
void
Step
(
const
Action
&
action
)
override
{
void
Step
(
const
Action
&
action
)
override
{
// clock_t start = clock();
// clock_t start = clock();
...
@@ -2421,13 +2468,13 @@ private:
...
@@ -2421,13 +2468,13 @@ private:
players_
[
pl
]
->
notify
(
fmt
::
format
(
"{} equipped to {}."
,
c
,
t
));
players_
[
pl
]
->
notify
(
fmt
::
format
(
"{} equipped to {}."
,
c
,
t
));
}
}
}
else
if
(
msg_
==
MSG_HINT
)
{
}
else
if
(
msg_
==
MSG_HINT
)
{
if
(
!
verbose_
)
{
auto
hint_type
=
read_u8
();
dp_
=
dl_
;
return
;
}
auto
hint_type
=
int
(
read_u8
());
auto
player
=
read_u8
();
auto
player
=
read_u8
();
auto
value
=
read_u32
();
auto
value
=
read_u32
();
if
(
hint_type
==
HINT_SELECTMSG
&&
value
==
501
)
{
discard_hand_
=
true
;
}
// non-GUI don't need hint
// non-GUI don't need hint
return
;
return
;
if
(
hint_type
==
HINT_SELECTMSG
)
{
if
(
hint_type
==
HINT_SELECTMSG
)
{
...
@@ -3055,14 +3102,6 @@ private:
...
@@ -3055,14 +3102,6 @@ private:
auto
max
=
read_u8
();
auto
max
=
read_u8
();
auto
size
=
read_u8
();
auto
size
=
read_u8
();
if
(
min
>
spec_
.
config
[
"max_multi_select"
_
])
{
fmt
::
println
(
"min: {}, max: {}, size: {}"
,
min
,
max
,
size
);
throw
std
::
runtime_error
(
fmt
::
format
(
"Min > {} not implemented for select card"
,
spec_
.
config
[
"max_multi_select"
_
]));
}
max
=
std
::
min
(
max
,
uint8_t
(
spec_
.
config
[
"max_multi_select"
_
]));
std
::
vector
<
std
::
string
>
specs
;
std
::
vector
<
std
::
string
>
specs
;
specs
.
reserve
(
size
);
specs
.
reserve
(
size
);
if
(
verbose_
)
{
if
(
verbose_
)
{
...
@@ -3098,6 +3137,38 @@ private:
...
@@ -3098,6 +3137,38 @@ private:
}
}
}
}
if
(
min
>
spec_
.
config
[
"max_multi_select"
_
])
{
if
(
discard_hand_
)
{
// random discard
std
::
vector
<
int
>
comb
(
size
);
std
::
iota
(
comb
.
begin
(),
comb
.
end
(),
0
);
std
::
shuffle
(
comb
.
begin
(),
comb
.
end
(),
gen_
);
resp_buf_
[
0
]
=
min
;
for
(
int
i
=
0
;
i
<
min
;
++
i
)
{
resp_buf_
[
i
+
1
]
=
comb
[
i
];
}
set_responseb
(
pduel_
,
resp_buf_
);
discard_hand_
=
false
;
return
;
}
show_turn
();
show_deck
(
player
);
show_history_actions
(
player
);
show_deck
(
1
-
player
);
show_history_actions
(
1
-
player
);
fmt
::
println
(
"player: {}, min: {}, max: {}, size: {}"
,
player
,
min
,
max
,
size
);
std
::
cout
<<
std
::
flush
;
throw
std
::
runtime_error
(
fmt
::
format
(
"Min > {} not implemented for select card"
,
spec_
.
config
[
"max_multi_select"
_
]));
}
max
=
std
::
min
(
max
,
uint8_t
(
spec_
.
config
[
"max_multi_select"
_
]));
std
::
vector
<
std
::
vector
<
int
>>
combs
;
std
::
vector
<
std
::
vector
<
int
>>
combs
;
for
(
int
i
=
min
;
i
<=
max
;
++
i
)
{
for
(
int
i
=
min
;
i
<=
max
;
++
i
)
{
for
(
const
auto
&
comb
:
combinations
(
size
,
i
))
{
for
(
const
auto
&
comb
:
combinations
(
size
,
i
))
{
...
...
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