Probleme mit if abfragen

if(p1&&p2==ap1&&ap2){
...
}

das ist mein code und ich weiß nicht warum es nicht funktioniert
Die Variablen habe ich alle am Anfang festgelegt

Das ist wahrscheinlich nicht Ihr vollständiger Code... Bitte erklären Sie, was nicht funktioniert...

Beschreibe doch mal in Worten, wann der Ausdruck wahr werden soll?
Da scheint ein Verständnisproblem vorzuliegen.

Gruß Tommy

void setup() {
  Serial.begin(115200);
  byte p1 = 3, p2 = 1, ap1 = 1, ap2 = 3;

  if (p1 && p2 == ap1 && ap2) {
    Serial.print("Ich funktioniert.");
  } else {
    Serial.print("Nein.");
  }
}

void loop() {}

alles funktioniert außer diese if abfrage sie will nicht reagieren und führt den code in den Klammern nicht aus
in den klammern steht b1=false;
willst du den kompletten code ist halt sehr lang

es soll den code in den klammern ausführen wenn p1 und p2 gleich groß sind wie ap1 und ap2

Ja...

Ansonsten zeigt der Code von @xfpd deutlich, dass es sehr gut funktioniert

Der Teil der nicht funktioniert ist ganz unten
Mein Lehrer meinte ich soll Snake programmieren:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

int h;
int n;
int l;
int r;

int hr;
int vr;

bool hb;
bool vb;

int p1=4;
int p2=0;

int ap1;
int ap2;

bool apfel_;

int punkte;

LiquidCrystal_I2C Lcd(0x27,16,2);

void setup() {
  Serial.begin(9600);

  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);

  randomSeed(analogRead(A1));
  
  Lcd.init();
  Lcd.backlight();
  Lcd.setCursor(p1,p2);
  Lcd.print("#");

  hb=true;
  hr=1;
  vb=0;
  apfel_=false;
}

void loop() {
  if(apfel_==false) Serial.println("0");

  if(apfel_==true) Serial.println(1);

  n=digitalRead(8);
  h=digitalRead(9);
  l=digitalRead(10);
  r=digitalRead(11);

  bewegen();

  spielfeld();
}

void eingabe() {
  if(r==0) {
    hb=true;
    vb=false;
    hr=1;
  }
  if(l==0) {
    hb=true;
    vb=false;
    hr=0;
  }
  if(h==0) {
    hb=false;
    vb=true;
    vr=1;
  }
  if(n==0) {
    hb=false;
    vb=true;
    vr=0;
  }
}

void bewegen() {
  eingabe();

  if(hb==true) {
    if(hr==1){
      p1=p1+1;
    }
    if(hr==0){
      p1=p1-1;
    }
  }
  if(vb==true) {
    if(vr==1){
      p2=p2+1;
    }
    if(vr==0){
      p2=p2-1;
    }
  }
  
  Lcd.clear();
  Lcd.setCursor(p1,p2);
  Lcd.print("#");

  apfel();

  delay(250);
}

void neustart() {
  p1=4;
  p2=0;

  vr=0;
  hr=1;

  vb=false;
  hb=true;

  apfel_=false;

  Lcd.clear();
  Lcd.setCursor(0,0);
  Lcd.print("Du hast Verloren!");
  Lcd.setCursor(3,1);
  Lcd.print("Punkte:");
  Lcd.setCursor(10,1);
  Lcd.print(punkte);

  delay(3000);

  punkte=0;
  
  Lcd.setCursor(p1,p2);
  Lcd.print("#");
  }

void spielfeld() {
  if(p1==16) {
    neustart();
    }
  if(p1==-1) {
    neustart();
    }
  if(p2==2) {
    neustart();
    }
  if(p2==-1) {
    neustart();
    }
  }

void apfel() {
  if(apfel_==false){
    ap1=random(1,15);
    ap2=random(0,2);

    apfel_=true;
  }
  if(apfel_==true){
    Lcd.setCursor(ap1, ap2);
    Lcd.print("1");
    if(p1&&p2==ap1&&ap2){
      apfel_=false;
      punkte++;
    }
  }
}

meinst Du

if (p1 == ap1 && p2 == ap2)

oder etwas Anderes?

Gruß Tommy

1 Like

Funktioniert danke

Der Ausdruck wird wie folgt ausgewertet

(p1 && (p2 == ap1)) && ap2

P1 wird zu wahr ausgewertet UND p2 hat denselben Wert wie ap1 UND ap2 wird zu wahr ausgewertet

auch danke an dich

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.