Ich habe ein Problem mit meinem Programmcode. Ich wollte das Videospiel Pong programmieren und bin damit auch soweit fertig geworden. Abgesehen von einigen Unstimmigkeiten habe ich aber noch ein grösseres problem: Das Bild flackert wenn ich das Programm starte und wenn ich selbst etwas bewege dann sogar noch mehr. Ich weiß, dass es am "delay" liegt aber nicht wie man es verhindern kann. Wäre Super wenn mir da jemand helfen könnte.
Hier der Code:
#include <Adafruit_SSD1306.h>
#include <splash.h>
#include <Adafruit_GFX.h>
#include <Adafruit_GrayOLED.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <gfxfont.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int x=63;
int y=31;
int vy=((random(0,2)*2-1)*1,1);
int vx=((random(0,2)*2-1)*1,1);
int D=2;
int A=25;
int B=35;
int G=35;
int F=25;
const int X_Pin=A0;
const int X2_Pin=A2;
int b=0;
int m=0;
int h=10; //zum ändern von paddel aus
void setup() {
// put your setup code here, to run once:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
// put your main code here, to run repeatedly:
display.setTextColor(WHITE);
display.setCursor(54,0);
display.print(b);
display.setCursor(72,0);
display.print(m);
//SPIELER 1
display.drawLine(0,F,0,G,WHITE);
display.display();
if(analogRead(X_Pin)>1000){
display.clearDisplay();
F=F+D;
G=G+D;
display.drawLine(0,F,0,G, WHITE);
display.display();
}
if(analogRead(X_Pin)<500){
display.clearDisplay();
F=F-D;
G=G-D;
display.drawLine(0,F,0,G, WHITE);
display.display();
}
display.drawLine(0,F,0,G, WHITE);
if(F<1){
F=1;
G=F+h;}
if(G>62){
G=62;
F=G-h;}
//SPIELER 2
display.drawLine(127,A,127,B,WHITE);
display.display();
if(analogRead(X2_Pin)>1000){
display.clearDisplay();
A=A+D;
B=B+D;
display.drawLine(127,A,127,B, WHITE);
display.display();
}
if(analogRead(X2_Pin)<500){
display.clearDisplay();
A=A-D;
B=B-D;
display.drawLine(127,A,127,B, WHITE);
display.display();
}
display.drawLine(127,A,127,B, WHITE);
if(A<1){
A=1;
B=A+h;}
if(B>62){
A=B-h;
B=62;}
//BALL
display.drawPixel(x,y,WHITE);
display.clearDisplay();
x=x+vx;
y=y+vy;
display.drawPixel(x,y,WHITE);
if(y>62){
vy=-vy;
}
if(y<1){
vy=-vy;
}
if(x>125){
if(A<=y&&B>=y){
vx=-vx;
}
}
if(x<2){
if(F<=y&&G>=y){
vx=-vx;
} }
x=x+vx;
y=y+vy;
//hier war ball
if(x<1){
x=63;
y=31;
display.drawPixel(x,y,WHITE);
m=m+1;
delay(500);
}
if(x>125){
x=63;
y=31;
display.drawPixel(x,y,WHITE);
b=b+1;
delay(500);
}
if(b==11){
display.clearDisplay();
delay(100);
display.setCursor(40,26);
display.print("Spieler 1");
display.setCursor(30,38);
display.print("hat gewonnen!");
b=b-b;
m=m-m;
display.display();
delay(5000);
}
if(m==11){
display.clearDisplay();
display.setCursor(40,26);
display.print("Spieler 2");
display.setCursor(30,38);
display.print("hat gewonnen!");
b=b-b;
m=m-m;
display.display();
delay(5000);
}
display.display();
}