gpt4 book ai didi

c++ - 需要帮助为 Arduino 创建无限数组 (c/c++)

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:19 25 4
gpt4 key购买 nike

我正在尝试制作 Simon Says 的 arduino 拷贝,这是一款 child 游戏,您可以按照之前出现的相同顺序按下颜色,并使用操纵杆在学校进行独立学习。我认为到目前为止我所拥有的将会或将会工作但是我制作的数组给了我“错误:'setOrder'的存储大小未知”这是有道理的因为我已经将它声明为“int setOrder [];”,但这正是我想要的。一个数组,它在创建时没有变量,但可以随着游戏的进行添加变量......这是我到目前为止在我的代码中所拥有的,请告诉我它的外观,以及我如何制作这样的数组。谢谢!!

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) 您的主要游戏区域后的第一行,您使用 sizeof(setOrder) 运行 for 循环,但没有将数据放入setOrder 首先。即使这确实可以编译,从逻辑上讲,您的代码也总是会跳过循环。一旦你弄清楚了 vector (我很确定你正在寻找的是什么),你可能想要将其更改为根据预定义的最大值检查你的 setOrder vector 的大小(在该最大值处点玩家获胜?)。

这是一个 tutorial on vectors I found from google .

此外,这里还有一些其他可能的错误/建议:

  • 将您的循环分解成几个您可以调用的子函数,这样阅读您的代码就不是一个巨大的障碍。这也将使查找错误变得更加容易,因为您可以检查每个功能是否正常工作,一次检查一个功能。
  • 当您检查 if (play = 1) 时,您实际上使用的是赋值运算符 =,而不是条件检查 == .您将 1 的值分配给 play,而不是检查 play 是否等于 1 .
  • 您使用的 sizeof(setOrder) 不正确。 sizeof(X) 返回X 占用的字节数,不一定是X 中的元素数。如果您使用 vector ,则有一个 vector.size() 函数可以返回 vector 中元素的数量
  • 当您检查玩家的 Action 时,您调用 analogRead(xAxis) 四次 - 每个方向一次。玩家的第一次输入总是会在第一次调用时被检查。如果为假,玩家将需要提供另一个输入才能进入第二个 if 语句。

关于c++ - 需要帮助为 Arduino 创建无限数组 (c/c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22702503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com