#include <iostream> #include <bitset> using namespace std; bool isPoisen = false; bool isStone = false; bool isParalysis = false; bool isDead = false; unsigned char status = 0; //00000000 8bitのフラグを用意、右4ビットで死麻石毒 const unsigned char poison = 1 << 0;//毒 //1を左に0ビットシフト 0001 => 0001 const unsigned char stone = 1 << 1;//石化 //1を左に1ビットシフト 0001 => 0010 const unsigned char paralysis = 1 << 2;//麻痺 //1を左に2ビットシフト 0001 => 0100 const unsigned char dead = 1 << 3;//死 //1を左に3ビットシフト 0001 => 1000 void bitkusaiIki() { //ff的な臭い息 ビットフラグ版 int stat = rand() % 6; switch (stat) { //フラグをセットするときは、ORを使う case 0:status = status | poison; break; case 1:status = status | stone; break; case 2:status = status | paralysis; break; case 3:status = status | dead; break; case 4:status = status | poison | paralysis; break; //毒と、麻痺が同時に起こる case 5:status = status | poison | paralysis | stone; break; //毒と麻痺と石化が同時に起こる default:break; } } void setState(const unsigned char sstate) { status = status | sstate; //フラグを立てるときは OR } bool getState(const unsigned char sstate) { return(status & sstate); //フラグを確認するときは AND } void unsetState(const unsigned char sstate) { status = status & ~sstate; //フラグを下げるときは AND NOT } void kusaiIki() { //ff的な臭い息 フラグ変数版 int stat = rand() % 4; switch (stat) { case 0:isPoisen = true; break; case 1:isStone = true; break; case 2:isParalysis = true; break; case 3:isDead = true; break; default:break; } } void lastChance() { int stat = rand() % 100; if (stat == 7) { unsetState(dead); } } void printState() { cout << "あなたの状態" << endl; cout << " 毒:" << getState(poison) << endl; cout << "石化:" << getState(stone) << endl; cout << "麻痺:" << getState(paralysis) << endl; cout << " 死:" << getState(dead) << endl; } int main() { //cout << "status=" << bitset<8>(status) << endl; //cout << "poison=" << bitset<8>(poison) << endl; //cout << "stone=" << bitset<8>(stone) << endl; //cout << "paralysis=" << bitset<8>(paralysis) << endl; //cout << "dead=" << bitset<8>(dead) << endl; //status = status | poison | stone; // 00000000 // 00000001 // 00000010 のOR //cout << "status=" << bitset<8>(status) << endl; //status = status & ~(stone) & ~(poison); ////フラグを下げるときは & ~(下げるフラグ) //cout << "status=" << bitset<8>(status) << endl; srand((unsigned int)time(nullptr)); while (!getState(dead)) { bitkusaiIki(); printState(); getchar(); } cout << "ラストチャンス" << endl; lastChance(); if (!getState(dead)) { cout << "生き返った!" << endl; printState(); } else { cout << "ゲームオーバー" << endl; } }