#5
by usao » 5年前
仕事でもないのに画像認識とかは,やっぱつれぇので,かわりにプレイヤーを2人用意した.
プレイヤー1はパーを出しやすいが,対するプレイヤー2はグーを出しにくい.
こいつは熱い勝負になりそうだぜ!
コード:
//じゃんけん用各種
enum HAND{ G=0, C=1, P=2 }; //グー,チョキ,パー
enum RESULT{ WIN=0, DRAW=1, LOSE=2 };
inline RESULT Judge( HAND a, HAND b ) //bに対するaの勝敗を判定
{ //考えるの面倒だから表引き
static const RESULT R[] = { DRAW, WIN, LOSE, LOSE, DRAW, WIN, WIN, LOSE, DRAW };
return R[ a*3 + b ];
}
//2人のプレイヤー
namespace
{
std::mt19937 RND( std::random_device().operator()() );
HAND Player1()
{
static const HAND H[4] = { G,C,P,P };
return H[ std::uniform_int_distribution<int>( 0, 3 )( RND ) ];
}
HAND Player2()
{
HAND cond = ( HAND )std::uniform_int_distribution<int>( 0, 2 )( RND );
return ( cond==G ? ( HAND )std::uniform_int_distribution<int>( 0, 2 )( RND ) : cond );
}
}
3本先取がどうの,というつまらない部分はまぁ適当にやればよくね?
コード:
int main(void)
{
const char Hand[] = "GCP";
const std::string ResultMsg[3] = { "P1 win", "draw", "P2 win" };
unsigned int Counter[3] = { 0,0,0 };
const unsigned int Thresh = 3;
while( Counter[0]<Thresh && Counter[2]<Thresh )
{
auto h1 = Player1();
auto h2 = Player2();
auto j = Judge( h1, h2 );
++Counter[j];
std::cout << Hand[h1] << " vs " << Hand[h2] << " ... " << ResultMsg[j] << std::endl;
}
std::cout << "---" << std::endl;
for( int i=0; i<3; ++i ){ std::cout << "Num of " << ResultMsg[i] << " = " << Counter[i] << std::endl; }
std::cin.ignore();
return 0;
}
果たして「それなりのお礼」を書き込んでいただくに足るであろうか?
仕事でもないのに画像認識とかは,やっぱつれぇので,かわりにプレイヤーを2人用意した.
プレイヤー1はパーを出しやすいが,対するプレイヤー2はグーを出しにくい.
こいつは熱い勝負になりそうだぜ!
[code]
//じゃんけん用各種
enum HAND{ G=0, C=1, P=2 }; //グー,チョキ,パー
enum RESULT{ WIN=0, DRAW=1, LOSE=2 };
inline RESULT Judge( HAND a, HAND b ) //bに対するaの勝敗を判定
{ //考えるの面倒だから表引き
static const RESULT R[] = { DRAW, WIN, LOSE, LOSE, DRAW, WIN, WIN, LOSE, DRAW };
return R[ a*3 + b ];
}
//2人のプレイヤー
namespace
{
std::mt19937 RND( std::random_device().operator()() );
HAND Player1()
{
static const HAND H[4] = { G,C,P,P };
return H[ std::uniform_int_distribution<int>( 0, 3 )( RND ) ];
}
HAND Player2()
{
HAND cond = ( HAND )std::uniform_int_distribution<int>( 0, 2 )( RND );
return ( cond==G ? ( HAND )std::uniform_int_distribution<int>( 0, 2 )( RND ) : cond );
}
}
[/code]
3本先取がどうの,というつまらない部分はまぁ適当にやればよくね?
[code]
int main(void)
{
const char Hand[] = "GCP";
const std::string ResultMsg[3] = { "P1 win", "draw", "P2 win" };
unsigned int Counter[3] = { 0,0,0 };
const unsigned int Thresh = 3;
while( Counter[0]<Thresh && Counter[2]<Thresh )
{
auto h1 = Player1();
auto h2 = Player2();
auto j = Judge( h1, h2 );
++Counter[j];
std::cout << Hand[h1] << " vs " << Hand[h2] << " ... " << ResultMsg[j] << std::endl;
}
std::cout << "---" << std::endl;
for( int i=0; i<3; ++i ){ std::cout << "Num of " << ResultMsg[i] << " = " << Counter[i] << std::endl; }
std::cin.ignore();
return 0;
}
[/code]
果たして「それなりのお礼」を書き込んでいただくに足るであろうか?