0

我正在尝试制作“Lights out”c++ 控制台游戏,但我遇到了问题:我使用数字占卜来判断它是开灯还是关灯,例如:

if(a1/2){a1s="*";}else{a1s="o";};

,但是,此语句在使用一次后失败:如果您从车外开始,它仍然有效。有没有办法“刷新” if 语句再次起作用。谢谢。:) 顺便提一句。这是代码:

#include <iostream>

using namespace std;

int main()
{
string zaidimas,l,a1s,b1s,c1s,d1s,e1s,a2s,b2s,c2s,d2s,e2s,a3s,b3s,c3s,d3s,e3s,a4s,b4s,c4s,d4s,e4s,a5s,b5s,c5s,d5s,e5s; 
zaidimas = "veikia";

int a1,b1,c1,d1,e1,a2,b2,c2,d2,e2,a3,b3,c3,d3,e3,a4,b4,c4,d4,e4,a5,b5,c5,d5,e5;

a1=b1=c1=d1=e1=a2=b2=c2=d2=e2=a3=b3=c3=d3=e3=a4=b4=c4=d4=e4=a5=b5=c5=d5=e5=1;

cout<<string( 100, '\n' ); 

while(zaidimas=="veikia")
{
{ 
    if(a1/2){a1s="*";}else{a1s="o";};
    if(a2/2){a2s="*";}else{a2s="o";};
    if(a3/2){a3s="*";}else{a3s="o";};
    if(a4/2){a4s="*";}else{a4s="o";};
    if(a5/2){a5s="*";}else{a5s="o";};
    if(b1/2){b1s="*";}else{b1s="o";};
    if(b2/2){b2s="*";}else{b2s="o";};
    if(b3/2){b3s="*";}else{b3s="o";};
    if(b4/2){b4s="*";}else{b4s="o";};
    if(b5/2){b5s="*";}else{b5s="o";};
    if(c1/2){c1s="*";}else{c1s="o";};
    if(c2/2){c2s="*";}else{c2s="o";};
    if(c3/2){c3s="*";}else{c3s="o";};
    if(c4/2){c4s="*";}else{c4s="o";};
    if(c5/2){c5s="*";}else{c5s="o";};
    if(d1/2){d1s="*";}else{d1s="o";};
    if(d2/2){d2s="*";}else{d2s="o";};
    if(d3/2){d3s="*";}else{d3s="o";};
    if(d4/2){d4s="*";}else{d4s="o";};
    if(d5/2){d5s="*";}else{d5s="o";};
    if(e1/2){e1s="*";}else{e1s="o";};
    if(e2/2){e2s="*";}else{e2s="o";};
    if(e3/2){e3s="*";}else{e3s="o";};
    if(e4/2){e4s="*";}else{e4s="o";};
    if(e5/2){e5s="*";}else{e5s="o";};
    }





cout<<"  ABCDE"<<endl;
cout<<"1 "<<a1<<b1s<<c1s<<d1s<<e1s<<endl;
cout<<"2 "<<a2s<<b2s<<c2s<<d2s<<e2s<<endl;
cout<<"3 "<<a3s<<b3s<<c3s<<d3s<<e3s<<endl;
cout<<"4 "<<a4s<<b4s<<c4s<<d4s<<e4s<<endl;
cout<<"5 "<<a5s<<b5s<<c5s<<d5s<<e5s<<endl;

cin>>l;

{ 
if(l=="a1"){a1++;b1++;a2++;}
else if(l=="a2"){a2++;b2++;a1++;a3++;}
else if(l=="a3"){a3++;b3++;a4++;a2++;}
else if(l=="a4"){a4++;b4++;a3++;a5++;}
else if(l=="a5"){a5++;b5++;a4++;}
else if(l=="b1"){b1++;a1++;c1++;b2++;}
else if(l=="b2"){b2++;a2++;c2++;b3++;b1++;}
else if(l=="b3"){b3++;a3++;c3++;b4++;b2++;}
else if(l=="b4"){b4++;a4++;c4++;b3++;b5++;}
else if(l=="b5"){b5++;a5++;c5++;b4++;}
else if(l=="c1"){c1++;b1++;d1++;c2++;}
else if(l=="c2"){c2++;b2++;d2++;c3++;c1++;}
else if(l=="c3"){c3++;b3++;d3++;c4++;c2++;}
else if(l=="c4"){c4++;b4++;d4++;c5++;c3++;}
else if(l=="c5"){c5++;b5++;d5++;c4++;}
else if(l=="d1"){c1++;e1++;d2++;d1++;}
else if(l=="d2"){c2++;d2++;e2++;d3++;d1++;}
else if(l=="d3"){c3++;d3++;e3++;d4++;d2++;}
else if(l=="d4"){c4++;d4++;e4++;d3++;d5++;}
else if(l=="d5"){c5++;d5++;e5++;d4++;}
else if(l=="e1"){d1++;e1++;e2++;}
else if(l=="e2"){d2++;e2++;e1++;e3++;}
else if(l=="e3"){d3++;e3++;e2++;e4++;}
else if(l=="e4"){d4++;e4++;e3++;e5++;}
else if(l=="e5"){d5++;e5++;e4++;}
}

cout<<string( 100, '\n' ); 



}
return 0;

}

(Zaidimas 代表 Game,l 代表 Square,a1s a2s 等代表 A 行第 1 行符号(* 或 o),veikia 代表 Running)

4

3 回答 3

2

在这种情况下,您可能希望使用模数。

您不断增加变量,因此在第一次使用后,它们将始终 > 0,从而导致操作返回 true。

if(a1/2){a1s="*";}else{a1s="o";};

您可以确保将 a1 在 0 和 1 之间切换(并丢失 /2),或者在使用时坚持使用 ++,而不是这样做

if(a1%2){a1s="*";}else{a1s="o";};
于 2013-09-11T15:41:53.013 回答
2

使用%而不是/获得余数模 2,当您增加数字时,它将在 0 和 1 之间切换。

于 2013-09-11T15:43:11.237 回答
2

您还可以使用:

if(a1&1){a1s="*";}else{a1s="o";};

只看最不重要的位。

于 2013-09-11T15:49:23.090 回答