#include <Button.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>
#define veripin 8
#define depopin 9
#define saatpin 10
#define ldrpin 4
#define buzzerpin 6
#define OLED_ADDR 0x3C
#define OLED_RESET 4
Button yukariBtn(2);
Button secmeBtn(5);
Button asagiBtn(3);
Button atesetmeBtn(7);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const unsigned char PROGMEM uzaygemisi [] = {
0xff, 0xc0, 0xf3, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xfb, 0xc0, 0xe1, 0xc0, 0xfc, 0xc0,
0xff, 0xc0
};
void setup() {
pinMode(veripin, OUTPUT);
pinMode(saatpin, OUTPUT);
pinMode(depopin, OUTPUT);
pinMode(A0, INPUT);
pinMode(ldrpin, INPUT);
pinMode(buzzerpin, OUTPUT);
yukariBtn.begin();
secmeBtn.begin();
asagiBtn.begin();
atesetmeBtn.begin();
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.display();
display.clearDisplay();
}
String engeller [3] = {"Meteor", "UzayCopu", "Dokunulmazlik"};
String oduller [2] = {"Can", "Silah"};
int oyunbasla = 0;
int gemikonum = 0;
int oyun1 = 0;
int oyun2 = 0;
byte menuSayac = 1;
bool mermi = false;
int zorluk = 0;
int z = 0;
int silah = 3;
int can = 3;
static int score = 0;
byte leds;
bool oyunvar = false;
int meteorx = 117; int meteory = 0;
int uzaycopux = 117; int uzaycopuy = 0;
int canx = 117; int cany = 0;
int silahx = 117; int silahy = 0;
int dokunulmazlikx = 117; int dokunulmazliky = 0;
int secim = 0;
int kaymahizi = 1;
int sayi = 0;
int flag = 0;
int engelhareket = 0;
int engelhiz = 1;
int engelhiz1 = 10;
int kaymahizi1 = 5;
int siyah = 0;
int beyaz = 1;
int mermikonumx = 0;
int mermikonumy = 0;
static int engelsayac = 0;
int sayac = 0;
static unsigned long eskiZaman = 0;
static unsigned long yeniZaman = 0;
unsigned long gamestart = 0;
unsigned long rndm = 0;
unsigned long zaman = 0;
void loop() {
display.clearDisplay();
if (oyunbasla == 0 && zorluk == 0 && z == 0) {
buttonhareket();
Menu();
menuSecim();
}
if (oyunbasla == 1 && zorluk == 0 && z == 0) {
basla(siyah, beyaz);
canled();
}
if (oyunbasla == 0 && zorluk == 1 && z == 0) {
zorluksec();
}
if (oyunbasla == 0 && zorluk == 1 && z == 1) {
if (oyun1 == 1 )
{
basla(siyah, beyaz);
canled();
}
if (oyun2 == 1) {
basla2(siyah, beyaz);
canled();
}
}
if (can == 0) {
oyunbasla = 0;
zorluk = 0;
z = 0;
display.clearDisplay();
menuYinele();
}
}
void menuYinele() {
oyunbasla = 0;
gemikonum = 0;
oyun1 = 0;
oyun2 = 0;
menuSayac = 1;
mermi = false;
zorluk = 0;
z = 0;
silah = 3;
can = 3;
score = 0;
leds;
oyunvar = false;
meteorx = 117; meteory = 0;
uzaycopux = 117; uzaycopuy = 0;
canx = 117; cany = 0;
silahx = 117; silahy = 0;
dokunulmazlikx = 117; dokunulmazliky = 0;
secim = 0;
kaymahizi = 1;
sayi = 0;
flag = 0;
engelhareket = 0;
engelhiz = 1;
engelhiz1 = 10;
kaymahizi1 = 5;
siyah = 0;
beyaz = 1;
mermikonumx = 0;
mermikonumy = 0;
engelsayac = 0;
sayac = 0;
}
void hareket() {
int konum = analogRead(A0);
konum = map(konum, 0, 1023, 0, 53);
gemikonum = konum;
}
void Menu() {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10, 0);
display.println("Menu");
display.setTextSize(1);
display.setCursor(10, 20);
display.println("Baslat");
display.setCursor(10, 30);
display.println("Zorluk");
display.setCursor(2, (menuSayac * 10) + 10);
display.println(">");
display.display();
}
void buttonhareket() {
display.clearDisplay();
if (yukariBtn.pressed()) {
if (menuSayac <= 1)
menuSayac = 2;
else
menuSayac--;
}
if (asagiBtn.pressed()) {
if (menuSayac >= 2)
menuSayac = 1;
else
menuSayac++;
}
}
void menuSecim() {
if (menuSayac == 1 && secmeBtn.pressed()) {
oyunbasla = 1;
}
else if (menuSayac == 2 && secmeBtn.pressed())
{ zorluk = 1;
menuSayac = 1;
}
}
void zorluksec() {
display.clearDisplay();
if (yukariBtn.pressed()) {
if (menuSayac <= 1)
menuSayac = 2;
else
menuSayac--;
}
if (asagiBtn.pressed()) {
if (menuSayac >= 2)
menuSayac = 1;
else
menuSayac++;
}
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10, 0);
display.println("Zorluk");
display.setTextSize(1);
display.setCursor(10, 20);
display.println("Zorluk 1");
display.setCursor(10, 30);
display.println("Zorluk 2");
display.setCursor(2, (menuSayac * 10) + 10);
display.println(">");
if (menuSayac == 1 && secmeBtn.pressed()) {
oyun1 = 1;
z = 1;
}
else if (menuSayac == 2 && secmeBtn.pressed())
{ oyun2 = 1;
z = 1;
}
display.display();
}
void sayaccan() {
digitalWrite(depopin, LOW);
shiftOut(veripin, saatpin, LSBFIRST, leds);
digitalWrite(depopin, HIGH);
}
void canled() {
leds = 0;
sayaccan();
if (can == 0)
oyunvar = false;
if (can == 1) {
if (silah == 0) {
bitSet(leds, 4);
sayaccan();
}
if (silah == 1)
{ bitSet(leds, 1);
sayaccan();
bitSet(leds, 4);
sayaccan();
}
else if (silah == 2) {
bitSet(leds, 1);
sayaccan();
bitSet(leds, 2);
sayaccan();
bitSet(leds, 4);
sayaccan();
}
else if (silah == 3) {
bitSet(leds, 1);
sayaccan();
bitSet(leds, 2);
sayaccan();
bitSet(leds, 3);
sayaccan();
bitSet(leds, 4);
sayaccan();
}
}
else if (can == 2) {
if (silah == 0) {
bitSet(leds, 4);
sayaccan();
bitSet(leds, 5);
sayaccan();
}
if (silah == 1)
{ bitSet(leds, 1);
sayaccan();
bitSet(leds, 4);
sayaccan();
bitSet(leds, 5);
sayaccan();
}
else if (silah == 2) {
bitSet(leds, 1);
sayaccan();
bitSet(leds, 2);
sayaccan();
bitSet(leds, 4);
sayaccan();
bitSet(leds, 5);
sayaccan();
}
else if (silah == 3) {
bitSet(leds, 1);
sayaccan();
bitSet(leds, 2);
sayaccan();
bitSet(leds, 3);
sayaccan();
bitSet(leds, 4);
sayaccan();
bitSet(leds, 5);
sayaccan();
}
}
else if (can == 3) {
if (silah == 0) {
bitSet(leds, 4);
sayaccan();
bitSet(leds, 5);
sayaccan();
bitSet(leds, 6);
sayaccan();
}
if (silah == 1)
{ bitSet(leds, 1);
sayaccan();
bitSet(leds, 4);
sayaccan();
bitSet(leds, 5);
sayaccan();
bitSet(leds, 6);
sayaccan();
}
else if (silah == 2) {
bitSet(leds, 1);
sayaccan();
bitSet(leds, 2);
sayaccan();
bitSet(leds, 4);
sayaccan();
bitSet(leds, 5);
sayaccan();
bitSet(leds, 6);
sayaccan();
}
else if (silah == 3) {
bitSet(leds, 1);
sayaccan();
bitSet(leds, 2);
sayaccan();
bitSet(leds, 3);
sayaccan();
bitSet(leds, 4);
sayaccan();
bitSet(leds, 5);
sayaccan();
bitSet(leds, 6);
sayaccan();
}
}
}
void basla(int siyah, int beyaz)
{
hareket();
display.drawBitmap(0, gemikonum, uzaygemisi, 10, 10, 1);
if (sayac == 0) {
gamestart = millis();
rndm = random(400, 1200);
sayac = 1;
}
zaman = millis();
if ((zaman - eskiZaman ) > 8000)
{
eskiZaman = zaman;
engelhiz = engelhiz + 1;
}
if ((rndm + gamestart) < zaman) {
sayac = 0;
secim = secim + 1;
if (secim == 1) {
meteorx = 117;
meteory = engelhareket;
engelsayac++;
} if (secim == 2) {
uzaycopux = 117;
uzaycopuy = engelhareket;
engelsayac++;
}
if (secim == 3) {
dokunulmazlikx = 117;
dokunulmazliky = engelhareket;
}
}
if (secim > 0) {
display.fillCircle(meteorx, meteory, 6, beyaz);
meteorx = meteorx - kaymahizi;
}
if ( secim > 1)
{
display.fillCircle(uzaycopux, uzaycopuy, 3, beyaz);
uzaycopux = uzaycopux - kaymahizi;
}
if ( secim > 2)
{
display.drawCircle(dokunulmazlikx, dokunulmazliky, 3, beyaz);
dokunulmazlikx = dokunulmazlikx - kaymahizi;
}
if (flag == 0) {
engelhareket = engelhareket + engelhiz;
}else
{
engelhareket = engelhareket - engelhiz;
}
if (engelhareket >= 54)
flag = 1;
if (engelhareket <= 10)
flag = 0;
if (dokunulmazlikx < 1) {
secim = 0;
dokunulmazlikx = 200;
}
if ((uzaycopuy <= (gemikonum + 15 )) && ( uzaycopuy >= (gemikonum - 15) ) )
{
if (uzaycopux <= 10 && uzaycopux >= 0 )
{ digitalWrite(buzzerpin, HIGH);
delay(100);
digitalWrite(buzzerpin, LOW);
delay(100);
can--;
uzaycopux = 117; uzaycopuy = -50;
}
}
if ((meteory <= (gemikonum + 15 )) && ( meteory >= (gemikonum - 15) ))
if (meteorx <= 10 && meteorx >= 0 )
{
digitalWrite(buzzerpin, HIGH);
delay(100);
digitalWrite(buzzerpin, LOW);
delay(100);
can--;
meteorx = -50; meteory = -50;
}
if (engelsayac == 14) {
can++;
silah++;
if (can > 3)
can = 3;
if (silah > 3)
silah = 3;
engelsayac = 0;
}
if (atesetmeBtn.pressed() && mermi == false) {
if (silah < 0)
silah = 0;
if (silah > 0)
{ mermi = true;
mermikonumx = 0;
mermikonumy = gemikonum + 3;
silah--;
}
}
if (mermi == true) {
mermikonumx = mermikonumx + 3;
display.writeFillRect(mermikonumx, mermikonumy, 10, 1, 1);
}
if (mermikonumx > 128)
{
mermi = false;
mermikonumx = 0;
}
display.display();
}
void basla2(int siyah, int beyaz) {
hareket();
display.drawBitmap(0, gemikonum, uzaygemisi, 10, 10, beyaz);
if (sayac == 0) {
gamestart = millis();
rndm = random(400, 1200);
sayac = 1;
}
zaman = millis();
if ((zaman - eskiZaman ) > 5000)
{
eskiZaman = zaman;
engelhiz1 = engelhiz1 + 1;
}
if ((rndm + gamestart) < zaman) {
sayac = 0;
secim = secim + 1;
if (secim == 1) {
meteorx = 117;
meteory = engelhareket;
engelsayac++;
} if (secim == 2) {
uzaycopux = 117;
uzaycopuy = engelhareket;
engelsayac++;
}
if (secim == 3) {
dokunulmazlikx = 117;
dokunulmazliky = engelhareket;
}
}
if (secim > 0) {
display.fillCircle(meteorx, meteory, 6, beyaz);
meteorx = meteorx - kaymahizi1;
}
if ( secim > 1)
{
display.fillCircle(uzaycopux, uzaycopuy, 3, beyaz);
uzaycopux = uzaycopux - kaymahizi1;
}
if ( secim > 2)
{
display.drawCircle(dokunulmazlikx, dokunulmazliky, 3, beyaz);
dokunulmazlikx = dokunulmazlikx - kaymahizi1;
}
if (flag == 0) {
engelhareket = engelhareket + engelhiz1;
}
else
{
engelhareket = engelhareket - engelhiz1;
}
if (engelhareket >= 35)
flag = 1;
if (engelhareket <= 15)
flag = 0;
if (dokunulmazlikx < 1) {
secim = 0;
dokunulmazlikx = 200;
}
if ((uzaycopuy <= (gemikonum + 15 )) && ( uzaycopuy >= (gemikonum - 15) ) )
{
if (uzaycopux <= 10 && uzaycopux >= 0 )
{ digitalWrite(buzzerpin, HIGH);
delay(100);
digitalWrite(buzzerpin, LOW);
delay(100);
can--;
canled();
uzaycopux = 117; uzaycopuy = -50;
}
}
if ((meteory <= (gemikonum + 15 )) && ( meteory >= (gemikonum - 15) ))
if (meteorx <= 10 && meteorx >= 0 )
{ digitalWrite(buzzerpin, HIGH);
delay(100);
digitalWrite(buzzerpin, LOW);
delay(100);
can--;
canled();
meteorx = -50; meteory = -50;
}
if (engelsayac == 14) {
can++;
silah++;
if (can > 3)
can = 3;
if (silah > 3)
silah = 3;
engelsayac = 0;
}
if (atesetmeBtn.pressed() && mermi == false) {
if (silah < 0)
silah = 0;
if (silah > 0)
{ mermi = true;
mermikonumx = 0;
mermikonumy = gemikonum + 3;
silah--;
}
}
if (mermi == true) {
mermikonumx = mermikonumx + 3;
display.writeFillRect(mermikonumx, mermikonumy, 10, 1, 1);
}
if (mermikonumx > 128)
{
mermi = false;
mermikonumx = 0;
}
display.display();
}