#include <U8g2lib.h>
#include <TimerOne.h>
#include <avr/pgmspace.h>
// önişlemci tanımları *********************
#define yukaribtn 8
#define asagibtn 6
#define sagbtn 5
#define solbtn 4
#define selectbtn 2
#define resetbtn 3
#define analogbtn 7
#define abtn 10
#define bbtn 9
#define buzzer 11
#define deneme 13
#define debounceDelay 50
// *****************************************
// notalar
#define do_ 261
#define re 294
#define mi 329
#define fa 349
#define sola 392
#define la 440
#define si 493
#define DO_ 523
#define tikses 125
#define hizsesi 1000
#define sarki1NotaSayisi 63
#define sarki2NotaSayisi 7
//ekran kütüphanesini ekler
U8G2_SSD1306_128X64_NONAME_F_HW_I2C display(U8G2_R0);
//*************************************
// sınıfları oluşturur
class Grafik {
public:
int x;
int y;
uint8_t yukseklik;
uint8_t genislik;
char *grafik;
Grafik(int xa, int ya, uint8_t gen, uint8_t yuk, char *graf) {
x = xa;
y = ya;
yukseklik = yuk;
genislik = gen;
grafik = graf;
}
void grafikCiz(int xb, int yb) {
x = xb;
y = yb;
display.drawXBMP( x, y, genislik, yukseklik, grafik);
}
void grafikCiz() {
display.drawXBMP( x, y, genislik, yukseklik, grafik);
}
void grafikDegistir(char *graf, uint8_t gen, uint8_t yuk) {
grafik = graf;
yukseklik = yuk;
genislik = gen;
}
};
class Dusman: public Grafik {
using Grafik::Grafik;
public:
bool carpismaVarmi(Grafik *ikinciObje) {
bool result;
if (this -> x + this-> genislik >= ikinciObje->x &&
this-> x <= ikinciObje->x + ikinciObje->genislik &&
this-> y + this-> yukseklik >= ikinciObje->y &&
this-> y <= ikinciObje->y + ikinciObje->yukseklik
) {
result = true;
return result;
} else {
result = false;
return result;
}
}
};
//***************************************************
// Buton değikenlerini oluşturur
bool yukari = false;
bool asagi = false;
bool sag = false;
bool sol = false;
bool resetbuton = false;
bool selectbuton = false;
bool analogbuton = false;
bool kirmizibtn = false;
bool mavibtn = false;
//*************************************
//grafikleri oluşturur
static const unsigned char logo[] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xDB, 0xB6, 0x19,
0xDB, 0x37, 0xFB, 0xBE, 0x61, 0xE3, 0xFB, 0xBE, 0xEF, 0xFB, 0x1E, 0x00,
0x60, 0xDB, 0xB6, 0x1B, 0xDB, 0x76, 0xDB, 0xB6, 0x61, 0x63, 0xDB, 0x36,
0x6C, 0xDB, 0x0C, 0x00, 0x60, 0xDB, 0xB6, 0x1F, 0xDB, 0xF6, 0x1B, 0xB6,
0x61, 0x63, 0xDB, 0x36, 0x6C, 0x18, 0x0C, 0x00, 0x60, 0xF3, 0xB6, 0x1D,
0xCF, 0xB6, 0x73, 0xB6, 0x61, 0xE3, 0x79, 0x36, 0xEC, 0x71, 0x0C, 0x00,
0x60, 0x63, 0xB6, 0x19, 0xDB, 0x36, 0xC3, 0xB6, 0x61, 0x63, 0xD8, 0x36,
0x6C, 0xC0, 0x0C, 0x00, 0x60, 0x63, 0xB6, 0x19, 0xDB, 0x36, 0xC3, 0xB6,
0x61, 0x63, 0xD8, 0x36, 0x6C, 0xC0, 0x0C, 0x00, 0x60, 0x63, 0xB6, 0x19,
0xDB, 0x36, 0xDB, 0xB6, 0x61, 0x63, 0xD8, 0xB6, 0x6D, 0xDB, 0x0C, 0x00,
0xE0, 0x63, 0xBE, 0x19, 0xDB, 0x37, 0xFB, 0xBE, 0xEF, 0x63, 0xD8, 0xBE,
0xEF, 0xFB, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x31, 0x06, 0x93, 0xA2, 0xF7, 0x11,
0x3D, 0xF7, 0xA2, 0x23, 0xA5, 0x8B, 0x00, 0x00, 0x00, 0x52, 0x4A, 0x89,
0x94, 0xB6, 0x40, 0x10, 0x85, 0x10, 0x22, 0x21, 0x2D, 0x89, 0x00, 0x00,
0x00, 0x5E, 0x0A, 0x8F, 0xF7, 0xAA, 0x43, 0xE0, 0x1C, 0x73, 0x14, 0x21,
0x35, 0x51, 0x00, 0x00, 0x00, 0x52, 0x4A, 0x89, 0x94, 0xA2, 0x40, 0x40,
0x04, 0x14, 0x14, 0x21, 0x25, 0x51, 0x00, 0x00, 0x00, 0x92, 0x31, 0x89,
0x94, 0xA2, 0x47, 0x40, 0xBC, 0xF3, 0x88, 0xC3, 0xA4, 0x23, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x13, 0x05, 0x20,
0x86, 0x80, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0xB4, 0x05, 0x30, 0xC9, 0x40, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x88, 0x53, 0x85, 0x2B, 0xA9, 0x5C, 0x22, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x14, 0x05, 0x78,
0xE9, 0x41, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0x13, 0x3D, 0x20, 0x86, 0x80, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x98, 0x74, 0x2E,
0x32, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0xA5, 0x25, 0x61, 0x4B, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0xBD, 0x26, 0xA6, 0x7A, 0x0D, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xA5, 0x24, 0x28,
0x4A, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0xA4, 0x74, 0x27, 0x4A, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x09, 0x00,
0x09, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x18, 0x07, 0xE7,
0x40, 0x04, 0x9F, 0x49, 0xEE, 0x12, 0xC9, 0x7D, 0x29, 0x1D, 0x63, 0x00,
0x20, 0xA5, 0x00, 0x29, 0xC1, 0x06, 0x44, 0x4A, 0x41, 0x16, 0x29, 0x10,
0x69, 0xA5, 0x14, 0x00, 0x20, 0xA5, 0x00, 0xE9, 0x40, 0x05, 0xC4, 0x7B,
0x46, 0x1A, 0xC9, 0x10, 0xA9, 0xA5, 0xD7, 0x00, 0x20, 0xA5, 0x00, 0xA9,
0x40, 0x04, 0x44, 0x4A, 0x48, 0x12, 0x09, 0x11, 0x29, 0xA5, 0x94, 0x00,
0xE0, 0x18, 0x27, 0x27, 0x41, 0x24, 0x44, 0x4A, 0xE7, 0x12, 0xE6, 0x10,
0x26, 0x9D, 0x64, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};
static const unsigned char araba[] PROGMEM = {
0x3C, 0xF0, 0x00, 0xFE, 0xFF, 0x01, 0x7F, 0xFD, 0x03, 0xDF, 0xE7, 0x02,
0xDF, 0xC7, 0x03, 0xDF, 0xC7, 0x03, 0xDF, 0xE7, 0x02, 0x7F, 0xFD, 0x03,
0xFE, 0xFF, 0x01, 0x3C, 0xF0, 0x00
};
static const unsigned char dusmanArabaG[] PROGMEM = {
0x1C, 0x70, 0x00, 0xFE, 0xFF, 0x00, 0xF3, 0xFD, 0x01, 0xE3, 0x79, 0x03,
0xC3, 0xF1, 0x03, 0xC3, 0xF1, 0x03, 0xE3, 0x79, 0x03, 0xF3, 0xFD, 0x01,
0xFE, 0xFF, 0x00, 0x1C, 0x70, 0x00
};
static const unsigned char carp [] PROGMEM = {
0x11, 0x02, 0x11, 0x01, 0xFE, 0x00, 0x92, 0x00, 0xFE, 0x00, 0xFF, 0x03,
0xC6, 0x00, 0x54, 0x00, 0x7C, 0x00, 0x13, 0x01
};
//******************************
// müzik notları
const unsigned int sarki[] PROGMEM = {mi, mi, fa, sola, sola, fa, mi, re, do_, do_, re,
mi, mi, re, re, mi, mi, fa, sola, sola, fa, mi, re, do_, do_, re, mi, re, do_, do_, re,
re, mi, do_, re, mi, fa, mi, do_, re, mi, fa, mi, re, do_, re, sola, mi, mi, mi,
fa, sola, sola, fa, mi, re, do_, do_, re, mi, re, do_, do_
};
const unsigned int sarki1[] PROGMEM {do_, re, re, do_, si, la, do_, do_};
//**************************
//global değikenlerin oluşturulması
unsigned long lastDebounceTime = 0; // dugme surelerini ayarlar
uint8_t oyunDurum = 0;
uint8_t menuDurum = 1;
bool sesDurum = 1;
uint8_t notaNo = 0;
uint8_t notaSayisi = 50;
uint8_t hiz = 0;
int yolPoz = 0;
uint8_t kalanHak = 3;
uint8_t puan;
//************************
//oyun 2 global değikenler
bool yeniOyun = 1;
uint8_t yatayx = 0;
uint8_t dikeyy = 0;
uint8_t operatorler[4][2] = {0};
uint8_t operand1[4][2] = {0};
uint8_t operand2[4][2] = {0};
uint8_t islemSonuclar[4][2] = {0};
uint8_t secilenX;
uint8_t secilenY;
int matSure = 0;
unsigned long matSonSure = 0;
uint8_t bilinen = 0;
char islem = ' ';
//**********
int arabaKonum[] = {15, 30, 45};
Dusman dusman1(random(128, 250), arabaKonum[random(0, 3)], 18, 10, dusmanArabaG);
Dusman dusman2(random(128, 250), arabaKonum[random(0, 3)], 18, 10, dusmanArabaG);
Grafik arabam(10, 40, 18, 10, araba);
Dusman* dusmanlar[] = {&dusman1, &dusman2};
// setup bölümü
void setup() {
pinMode(yukaribtn, INPUT_PULLUP);
pinMode(asagibtn, INPUT_PULLUP);
pinMode(sagbtn, INPUT_PULLUP);
pinMode(solbtn, INPUT_PULLUP);
pinMode(selectbtn, INPUT_PULLUP);
pinMode(resetbtn, INPUT_PULLUP);
pinMode(analogbtn, INPUT_PULLUP);
pinMode(abtn, INPUT_PULLUP);
pinMode(bbtn, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
pinMode(deneme, OUTPUT);
butonReset();
randomSeed(analogRead(0));
display.begin();
display.setFont(u8g2_font_ncenB12_tr);
attachInterrupt(1, menuyeDon, CHANGE);
Timer1.initialize(500000);
Timer1.attachInterrupt(muzikCal);
display.clearBuffer();
display.drawXBMP( 0, 0, 128, 64, logo);
display.sendBuffer();
delay(2000);
}
// loop bölümü
void loop() {
butonKontrol();
if (selectbuton) {
sesKes();
}
display.clearBuffer();
switch (oyunDurum) {
case 0:
menuleriOlustur();
break;
case 1:
oyun1Olustur();
break;
case 2:
oyun2Olustur();
break;
}
display.sendBuffer();
butonReset();
}
//butonları kontrol eden fonksiyon
void butonKontrol() {
if ((millis() - lastDebounceTime) > debounceDelay) {
if (!digitalRead(yukaribtn)) yukari = true;
if (!digitalRead(asagibtn)) asagi = true;
if (!digitalRead(sagbtn)) sag = true;
if (!digitalRead(solbtn)) sol = true;
if (!digitalRead(resetbtn)) resetbuton = true;
if (!digitalRead(selectbtn)) selectbuton = true;
if (!digitalRead(analogbtn)) analogbuton = true;
if (!digitalRead(abtn)) kirmizibtn = true;
if (!digitalRead(bbtn)) mavibtn = true;
lastDebounceTime = millis();
}
}
//**************************
//butonları resetleyen fonksiyon
void butonReset() {
yukari = false;
asagi = false;
sag = false;
sol = false;
resetbuton = false;
selectbuton = false;
analogbuton = false;
kirmizibtn = false;
mavibtn = false;
}
//**************************
// çarpışmaları kontrol eden fonksiyon
bool carpismaVarmi(Grafik *birinciObje, Grafik *ikinciObje) {
bool result;
if (birinciObje->x + birinciObje->genislik >= ikinciObje->x &&
birinciObje->x <= ikinciObje->x + ikinciObje->genislik &&
birinciObje->y + birinciObje->yukseklik >= ikinciObje->y &&
birinciObje->y <= ikinciObje->y + ikinciObje->yukseklik
) {
result = true;
return result;
} else {
result = false;
return result;
}
}
//**************************
//menuleri oluşturan fonksiyon
void menuleriOlustur() {
if (yukari) {
if (menuDurum == 2) {
menuDurum = 1;
sesCal(tikses, 20);
}
}
if (asagi) {
if (menuDurum == 1) {
menuDurum = 2;
sesCal(tikses, 20);
}
}
if (menuDurum == 1) {
notaSayisi = sarki1NotaSayisi;
display.drawStr(0, 10, "oyun seciniz..");
display.drawStr(10, 33, "> Araba Y.");
display.drawStr(10, 53, "Matematik");
} else if (menuDurum == 2) {
notaSayisi = sarki2NotaSayisi;
display.drawStr(0, 10, "oyun seciniz..");
display.drawStr(10, 33, " Araba Y.");
display.drawStr(10, 53, "> Matematik");
}
if (kirmizibtn) {
sesCal(100, 70);
notaNo = 0;
oyunDurum = menuDurum;
display.setFont(u8g2_font_ncenB08_tr);
kalanHak = 3;
}
}
//**********************
void oyun1Olustur() {
display.drawStr(0, 8, "hak: ");
display.setCursor(25, 8);
display.print(kalanHak);
display.drawStr(75, 8, "puan: ");
display.setCursor(110, 8);
display.print(puan);
if (kalanHak > 0) {
if (yukari) {
if (arabam.y > 13) {
arabam.y -= 2;
sesCal(hizsesi, 10);
}
}
if (asagi) {
if (arabam. y < 50) {
arabam. y += 2;
sesCal(hizsesi, 10);
}
}
if (kirmizibtn) {
if (hiz <= 8) {
hiz += 2;
}
sesCal(100 + hiz * 3, 25);
}
//yolları çizer
if (yolPoz < -15) {
yolPoz = 5;
} else {
yolPoz -= hiz;
}
yolCiz(yolPoz, 25, 12, 6);
if (carpismaVarmi(dusmanlar[0], dusmanlar[1])) {
dusmanlar[1]->x += 10;
}
//arabaları çizer
arabam. grafikCiz();
//dusman kontrolleri
for (int i = 0; i < 2; i++) {
dusmanlar[i]-> grafikCiz();
if (dusmanlar[i]-> x >= -15 && hiz > 0) {
dusmanlar[i]-> x -= ( (hiz - 3) + random(1, 6));
} else if (dusmanlar[i]->x > -15 && hiz == 0) {
dusmanlar[i]->x += ( random(1, 6));
}
else if (dusmanlar[i]->x < -15 ) {
puan++;
dusmanlar[i]->x = random(128, 200);
if (carpismaVarmi(dusmanlar[0], dusmanlar[1])) {
dusmanlar[1]->x += 15;
}
dusmanlar[i]->y = arabaKonum[random(0, 3)]; // arabaların konumları
}
if (dusmanlar[i]->carpismaVarmi(&arabam)) {
kalanHak -= 1;
sesCal(3000, 150);
dusmanlar[i]->grafikDegistir(carp, 10, 10);
dusmanlar[i]->grafikCiz();
display.updateDisplay();
delay(150);
dusmanlar[i]->grafikDegistir(dusmanArabaG, 18, 10);
dusmanlar[i]->grafikCiz();
display.updateDisplay();
dusmanlar[i]-> x = 128 + random(0, 50);
if (carpismaVarmi(dusmanlar[0], dusmanlar[1])) {
dusmanlar[1]->x += 15;
}
}
}
if (hiz > 0) {
if (!kirmizibtn) {
sesCal(150 - hiz * 5, 20);
}
hiz--;
}
} else {
// 3 kere çarparsan
display.drawStr(30, 30, "Oyun Bitti");
if (mavibtn) {
kalanHak = 3;
puan = 0;
}
}
}
void yolCiz(int xpos, int ypos, int uzunluk, int kactane) {
display.drawHLine(0, 9, 128);
display.drawHLine(0, 63, 128);
for (int i = 0; i < kactane; i++) {
for ( int j = 0; j < 2; j++) {
display.drawHLine(xpos + i * 30, ypos + 3 + j * 16, uzunluk);
}
}
}
/// ikinci oyunun kodları***********************
void oyun2Olustur() {
if (bilinen < 8) {
if (yeniOyun == 1) {
delay(100);
butonReset();
for (uint8_t i = 0; i < 4; i++) {
for (uint8_t j = 0; j < 2; j++) {
islemleriAyarla(i, j);
}
}
soruSec();
yeniOyun = 0;
matSonSure = millis();
}
if (millis() - matSonSure > 1000) {
matSure++;
matSonSure = millis();
}
display.setFont(u8g2_font_ncenB08_tr);
display.setDrawColor(1);
display.setCursor(75, 9);
display.print("Sure: ");
display.setCursor(105, 9);
display.print(matSure);
display.setFont(u8g2_font_ncenB12_tr);
if (yukari) {
if (dikeyy > 0) {
dikeyy--;
delay(50);
}
}
if (asagi) {
if (dikeyy < 1) {
dikeyy++;
delay(50);
}
}
if (sag) {
if (yatayx < 3) {
yatayx++;
delay(50);
}
}
if (sol) {
if (yatayx > 0) {
yatayx--;
delay(50);
}
}
soruYaz();
for (uint8_t i = 0; i < 2; i++) {
for (uint8_t j = 0; j < 4; j++) {
if (i == dikeyy && j == yatayx) {
display.setDrawColor(1);
display.drawRFrame(30 * j + (j * 2), 20 * i + (i * 2) + 20, 30, 20, 2);
display.setCursor(30 * j + (j * 2) + 5, 20 * i + (i * 2) + 35);
if (islemSonuclar[yatayx][dikeyy] != 0) {
display.print(islemSonuclar[yatayx][dikeyy]);
} else {
display.print(" X");
}
} else {
display.setDrawColor(1);
display.drawRBox(30 * j + (j * 2), 20 * i + (i * 2) + 20, 30, 20, 2);
display.setDrawColor(0);
display.setCursor(30 * j + (j * 2) + 5, 20 * i + (i * 2) + 35);
if (islemSonuclar[j][i] != 0) {
display.print(islemSonuclar[j][i]);
} else {
display.print("ok");
}
}
}
}
if (kirmizibtn) {
secimKontrol();
delay(30);
}
} else {
display.clearBuffer();
display.setCursor(10, 20);
display.print("Tebrikler ");
display.setCursor(10, 40);
display.print("Sure: ");
display.setCursor(60, 40);
display.print(matSure);
if (mavibtn) {
yeniden();
}
}
}
void islemleriAyarla(uint8_t xpos, uint8_t ypos) {
uint8_t op1 = 0;
uint8_t op2 = 0;
uint8_t snc = 0;
uint8_t hangiIslem = random(1, 3);
switch (hangiIslem) {
case 1:
operatorler[xpos][ypos] = hangiIslem;
snc = random(7, 99);
op1 = random(6, snc - 1);
op2 = snc - op1;
break;
case 2:
int temp = 1;
operatorler[xpos][ypos] = hangiIslem;
op1 = random(2, 11);
op2 = random(2, 10);
snc = op1 * op2;
break;
}
operatorler[xpos][ypos] = hangiIslem;
operand1[xpos][ypos] = op1;
operand2[xpos][ypos] = op2;
islemSonuclar[xpos][ypos] = snc;
}
void soruSec() {
uint8_t randx;
uint8_t randy;
if (bilinen != 8) {
while (true) {
randx = random(0, 4);
randy = random(0, 2);
if (islemSonuclar[randx][randy] != 0) {
secilenX = randx;
secilenY = randy;
break;
}
}
}
}
void soruYaz() {
display.setDrawColor(1);
display.setFont(u8g2_font_ncenB12_tr);
display.setCursor(0, 13);
display.print(operand1[secilenX][secilenY]);
display.setCursor(22, 13);
if (operatorler[secilenX][secilenY] == 1) {
islem = '+';
} else if (operatorler[secilenX][secilenY] == 2) {
islem = 'x';
} else if (operatorler[secilenX][secilenY] == 3) {
islem = '-';
} else {
islem = '/';
}
display.print(islem);
display.setCursor(38, 13);
display.print(operand2[secilenX][secilenY]);
}
void secimKontrol() {
display.setDrawColor(1);
if (islemSonuclar[secilenX][secilenY] == islemSonuclar[yatayx][dikeyy]) {
display.setFont(u8g2_font_ncenB08_tr);
display.setDrawColor(1);
display.setCursor(75, 18);
display.print("Tebrikler");
display.setFont(u8g2_font_ncenB12_tr);
delay(300);
islemSonuclar[secilenX][secilenY] = 0;
bilinen ++;
soruSec();
} else {
if (islemSonuclar[yatayx][dikeyy] != 0) {
display.setFont(u8g2_font_ncenB08_tr);
display.setDrawColor(1);
display.setCursor(75, 18);
display.print("Yanlis");
matSure += 5;
delay(300);
display.setFont(u8g2_font_ncenB12_tr);
}
}
}
void yeniden() {
bilinen = 0;
yeniOyun = 1;
matSure = 0;
yatayx = 0;
dikeyy = 0;
}
//menuye donme fonksiyonu
void menuyeDon() {
display.setFont(u8g2_font_ncenB12_tr);
display.setDrawColor(1);
oyunDurum = 0;
menuDurum = 1;
yeniden();
}
//***********************
void sesKes() {
sesDurum = !sesDurum;
}
void sesCal(int ritim, int sure) {
if (sesDurum) {
tone(buzzer, ritim, sure);
}
}
void muzikCal() {
if (sesDurum) {
if (oyunDurum == 0) {
tone(buzzer, pgm_read_word(&sarki[notaNo]), 200);
if (notaNo < notaSayisi) {
notaNo++;
}
else {
notaNo = 0;
}
}
if (oyunDurum == 2) {
tone(buzzer, pgm_read_word(&sarki1[notaNo]), 100);
if (notaNo < notaSayisi) {
notaNo++;
}
else {
notaNo = 0;
}
}
}
}