fork download
  1. #include <iostream>
  2. #include <bitset>
  3.  
  4. using namespace std;
  5.  
  6. // たとえば、マップ上で水があって進めない状態のフラグ
  7. const unsigned MAP_WATER = ( 1 << 16 );
  8. // たとえば、謎の力で進めない状態のフラグ
  9. const unsigned MAP_UNKNOWN_POW = ( 2 << 16 );
  10.  
  11. // 1 : 何か物がある
  12. // 0 : 普通の地面
  13. int map[ 4 * 4 ] =
  14. {
  15. 0, 0, 1, 0,
  16. 0, 0, 0, 1,
  17. 1, 0, 0, 0,
  18. 0, 1, 0, 0
  19. };
  20.  
  21. // たとえば、 map[ 2 * 4 ]上に水を置きたいとき
  22. void SetWaterFlag()
  23. {
  24. map[ 2 * 4 ] |= MAP_WATER;
  25. }
  26.  
  27. // 水がなくなって、通れないフラグを解除したいとき
  28. void ResetWaterFlag()
  29. {
  30. map[ 2 * 4 ] &= ~MAP_WATER;
  31. }
  32.  
  33. void SetUnknownPowerFlag()
  34. {
  35. map[ 3 * 1 ] |= MAP_UNKNOWN_POW;
  36. }
  37.  
  38. void ResetUnknownPowerFlag()
  39. {
  40. map[ 3 * 1 ] &= ~MAP_UNKNOWN_POW;
  41. }
  42.  
  43. void PlayerAction()
  44. {
  45. // プレイヤーの位置を水の上とした時
  46. // 分かりやすいように二進数で表示
  47.  
  48. cout << "map" << endl;
  49. cout << std::bitset< 32 >( map[ 2 * 4 ] ) << endl;
  50.  
  51. auto val = 0xFFFF0;
  52.  
  53. cout << "0xFFFF0" << endl;
  54. cout << std::bitset< 32 >( val ) << endl;
  55.  
  56. cout << ( 0xFFFF & map[ 2 * 4 ] ) << endl;
  57.  
  58. if( map[ 2 * 4 ] & MAP_WATER ) {
  59. cout << "水があっていけない" << endl;
  60. } else {
  61. cout << "いける" << endl;
  62. }
  63.  
  64. cout << "map" << endl;
  65. cout << std::bitset< 32 >( map[ 3 * 1 ] ) << endl;
  66.  
  67. if( map[ 3 * 1 ] & MAP_UNKNOWN_POW ) {
  68. cout << "謎の力があっていけない" << endl;
  69. } else {
  70. cout << "いける" << endl;
  71. }
  72. }
  73.  
  74. int main()
  75. {
  76. SetUnknownPowerFlag();
  77. SetWaterFlag();
  78.  
  79. PlayerAction();
  80.  
  81. ResetWaterFlag();
  82. ResetUnknownPowerFlag();
  83.  
  84. PlayerAction();
  85.  
  86. return 0;
  87. }
Success #stdin #stdout 0s 3232KB
stdin
Standard input is empty
stdout
map
00000000000000010000000000000001
0xFFFF0
00000000000011111111111111110000
1
水があっていけない
map
00000000000000100000000000000000
謎の力があっていけない
map
00000000000000000000000000000001
0xFFFF0
00000000000011111111111111110000
1
いける
map
00000000000000000000000000000000
いける