我试着把西蒙说的《孩子们的游戏》做一个阿迪诺的复制品,在这个游戏中,你可以按他们之前出现的颜色顺序,用一个快乐棒在学校里进行独立学习。我认为到目前为止,我所拥有的将或将工作,但是我所创建的数组给了我“错误:存储大小'setOrder'是未知的”,这是有意义的,因为我已经声明它为“intsetorder[];”,但这正是我想要的。一个数组,它在创建时没有变量,但可以在游戏进行时添加变量。。。到目前为止,这是我的代码中的内容,请告诉我它的外观,以及如何生成这样的数组。谢谢您!!
int xAxis = A0;
int yAxis = A1;
int push = 6;
int blue = 9;
int yellow = 10;
int green = 11;
int red = 12;
int play = 0;
int setOrder[]; /* HERE IS THE PROBLEM */
void setup()
{
Serial.begin(9600);
pinMode(blue, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
pinMode(push, INPUT);
digitalWrite(push, HIGH);
}
void loop()
{
if(!digitalRead(push)){
play = 1;
Serial.println("start!");
}
if(play = 1){
for(int i = 0; i<=sizeof(setOrder); i++){
setOrder[i] = random(1, 4);
for(int j = 0; j<=sizeof(setOrder); j++){
int k = setOrder[j];
if(k=1){
digitalWrite(blue, HIGH); delay(750); digitalWrite(blue, LOW);
}
if(k=2){
digitalWrite(yellow, HIGH); delay(750); digitalWrite(yellow, LOW);
}
if(k=3){
digitalWrite(green, HIGH); delay(750); digitalWrite(green, LOW);
}
if(k=4){
digitalWrite(red, HIGH); delay(750); digitalWrite(red, LOW);
}
}
int playback[sizeof(setOrder)];
for(int l = 0; l<=sizeof(playback); l++){
//player presses RIGHT green led
if(analogRead(xAxis) > 600){
playback[l] = 4;
if(playback[l] == setOrder[l]){
digitalWrite(green, HIGH);
}
else{
digitalWrite(green, HIGH); digitalWrite(blue, HIGH); digitalWrite(yellow, HIGH); digitalWrite(red, HIGH);
play = 0;
break;
}
}
//player presses LEFT yellow led
if(analogRead(xAxis) < 400){
playback[l] = 2;
if(playback[l] == setOrder[l]){
digitalWrite(yellow, HIGH);
}
else{
digitalWrite(green, HIGH); digitalWrite(blue, HIGH); digitalWrite(yellow, HIGH); digitalWrite(red, HIGH);
play = 0;
break;
}
}
//player presses DOWN blue led
if(analogRead(yAxis) > 600){
playback[l] = 1;
if(playback[l] == setOrder[l]){
digitalWrite(blue, HIGH);
}
else{
digitalWrite(green, HIGH); digitalWrite(blue, HIGH); digitalWrite(yellow, HIGH); digitalWrite(red, HIGH);
play = 0;
break;
}
}
//player presses UP red led
if(analogRead(yAxis) < 400){
playback[l] = 3;
if(playback[l] == setOrder[l]){
digitalWrite(red, HIGH);
}
else{
digitalWrite(green, HIGH); digitalWrite(blue, HIGH); digitalWrite(yellow, HIGH); digitalWrite(red, HIGH);
play = 0;
break;
}
}
}
}
}
}
另外,我不确定我是否正确地使用了“break();”方法,如果有人能告诉我,那将是伟大的!再次感谢。
最佳答案
我建议你调查一下std::vector。
在检查主播放区域后的第一行上,使用if (play = 1)
运行for循环,而不首先将数据放入sizeof(setOrder)
中。即使这是编译的,逻辑上你的代码也总是跳过循环。一旦你找出了向量(我很确定是你要找的),你可能想把它修改为根据预定义的最大值来检查你的向量向量的大小(在哪一点上玩家获胜?).
这里有一个tutorial on vectors I found from google。
另外,这里还有一些其他可能的错误/建议:
将循环分解为几个可以调用的子函数,这样读取代码就不是一个巨大的块。这也将使查找错误变得更容易,因为您可以检查每个函数是否工作,一次一个函数。
检查setOrder
时,实际上使用的是赋值setOrder
运算符,而不是条件检查if (play = 1)
。您将=
的值指定给==
,而不是检查1
是否等于play
。
您使用的play
不正确。1
返回sizeof(setOrder)
占用的字节数,而不一定返回sizeof(X)
中的元素数。如果使用向量,则有一个vector.size()函数返回向量中的元素数
当你检查玩家的动作时,你会给每个方向打四次电话。玩家的第一个输入将在第一次呼叫中被检查。如果为false,则播放器将需要提供另一个输入以使其成为第二个If语句。