/**************************************************************************
dev: roberto
29/05/2022 - v3 - Menu com opcoes e desenho no jogar com creditos subindo
(eu tava usando varias variaveis e agora conseguir mudar para uma só)nos creditos
30/05/2022 - v4 - implementando funcao sair e aparecer opcao para escolher jogador
no jogar
**************************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
char alfabeto [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
byte i;
// Prototipos das funcões
void print_menu(void);
int botao(int cursor);
void movecursor(byte cursor);
void mover_cursor2(byte cursor);
byte cursor2(int cursor);
void Escolher_jogador(void);// depois vai ser inteira para retornar a pontuacao
void Jogar(void);
void Raking (void);
void opc2(byte cursor);
void opc(int cursor);
void setup() {
Serial.begin(9600);
pinMode(12, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.clearDisplay();
}
void loop() {
byte cursor = 0;
//Serial.println(botaoB);
print_menu();
cursor = botao(cursor);
opc(cursor);
// Clear display buffer
delay(1);
}
void print_menu(void)
{
// vai imprimir na tela as opcoes do menu
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.print(F("The Skateboard"));
display.setCursor(10, 20);
display.print(F("JOGAR"));
display.setCursor(10, 30);
display.print(F("RANKING"));
display.setCursor(10, 40);
display.print(F("CREDITOS"));
display.setCursor(10, 50);
display.print(F("SAIR"));
display.display();
}
int botao(int cursor)
{
byte b1b = 1;
byte b2 = 1;
byte b2b = 1;
// mudar cursor
// Confirmar escolha
while(b1b == 1)
{
b2 = digitalRead(11);
delay(1);
b2b = digitalRead(11);
//Serial.println(b2);
//Serial.println(b1b);
//Serial.println(cursor);
if((b2b-b2)==1)//codigo para mover o cursor
{
if(cursor>3)
{
cursor = 1;//quando ele for maior que 3 ele vai voltar a ser 1 voltando na primeira opcao
}
else
{
cursor++;//se o botão for apertado e não for maior que 3 ele add no cursor
}
movecursor(cursor);// switch parar mover cursor
delay(10);
}
b1b = digitalRead(12);
}
return cursor;
}
void movecursor (byte cursor)
{
//Serial.println(cursor);
switch(cursor)
{// cada case vai preencher o anterior com uma seta preta e adicionar uma branca na opcao que ele está
case 1:
display.setTextColor(SSD1306_BLACK);
display.setCursor(3, 50);
display.print(F(">"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(3, 20);
display.print(F(">"));
break;
case 2:
display.setTextColor(SSD1306_BLACK);
display.setCursor(3, 20);
display.print(F(">"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(3, 30);
display.print(F(">"));
break;
case 3:
display.setTextColor(SSD1306_BLACK);
display.setCursor(3, 30);
display.print(F(">"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(3, 40);
display.print(F(">"));
break;
case 4:
display.setTextColor(SSD1306_BLACK);
display.setCursor(3, 40);
display.print(F(">"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(3, 50);
display.print(F(">"));
break;
}
display.display();
}
void Escolher_jogador (void)//funcao para escolher em qual nome quer Iniciar no jogo
//depois que escolher selecionar limpa tela mostra o desenho e espera 30segundos
{
display.clearDisplay();
display.display();
byte b1 = 1;
i = 0;
display.setCursor(0,20);
display.print(F("Jogar com: "));
display.display();
/*
byte cursor = 0;
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 10);
display.print(F("Roberto"));
display.setCursor(10, 20);
display.print(F("Maria"));
display.setCursor(10, 30);
display.print(F("Carlos"));
display.display();
cursor = cursor2(cursor);
opc2(cursor);
*/
delay(100);
b1 = digitalRead(11);
while(b1 == 1)
{
b1 = digitalRead(11);
byte a = 1;
byte b = 1;
//Serial.println(digitalRead(7));
a = digitalRead(12);
delay(5);
b = digitalRead(12);
if (( a - b) == 1) {
display.fillRect(60,20,10,10,SSD1306_BLACK);
display.display();
display.setCursor(60,20);
display.print(alfabeto[i]);
display.display();
//tft.print(alfabeto[i]); printar no monitor
i++;
}
if(i>=26){
i=0;
}
}
delay(100);
b1 = digitalRead(11);
i=0;
while(b1 == 1)
{
b1 = digitalRead(11);
byte a = 1;
byte b = 1;
//Serial.println(digitalRead(7));
a = digitalRead(12);
delay(5);
b = digitalRead(12);
if (( a - b) == 1) {
display.fillRect(67,20,10,10,SSD1306_BLACK);
display.display();
display.setCursor(67,20);
display.print(alfabeto[i]);
display.display();
//tft.print(alfabeto[i]); printar no monitor
i++;
}
if(i>=26){
i=0;
}
}
delay(100);
b1 = digitalRead(11);
i=0;
while(b1 == 1)
{
b1 = digitalRead(11);
byte a = 1;
byte b = 1;
//Serial.println(digitalRead(7));
a = digitalRead(12);
delay(5);
b = digitalRead(12);
if (( a - b) == 1) {
display.fillRect(74,20,10,10,SSD1306_BLACK);
display.display();
display.setCursor(74,20);
display.print(alfabeto[i]);
display.display();
//tft.print(alfabeto[i]); printar no monitor
i++;
}
if(i>=26){
i=0;
}
}
//switch(cursor)// no futuro terá um switch case que iniciará com usuario escolhido
Jogar();
}
void Raking(void)//printar os nomes e as pontuacoes
{
byte b1 = 1;
while(b1 == 1)
{
b1 = digitalRead(11);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 10);
display.print(F("1- Roberto - 700"));
display.setCursor(10, 20);
display.print(F("2- Maria - 600"));
display.setCursor(10, 30);
display.print(F("3- Carlos - 400"));
display.display();
}
}
void Creditos(void)
{
display.clearDisplay();
byte b1 = 1;
byte x =110;
while(b1 == 1)
{
display.setTextColor(SSD1306_BLACK);
display.setCursor(1,x-40);
display.print(F("Creditos a:"));
display.setTextColor(SSD1306_WHITE);
if(x>50 && x<110)
{
display.setCursor(1,x-50);
display.print(F("Creditos a:"));
}
display.setTextColor(SSD1306_BLACK);
display.setCursor(1,x-30);
display.print(F("Roberto"));
display.setTextColor(SSD1306_WHITE);
if(x>40 && x<100)
{
display.setCursor(1,x-40);
display.print(F("Roberto"));
}
display.setTextColor(SSD1306_BLACK);
display.setCursor(1,x-20);
display.print(F("Thiago"));
display.setTextColor(SSD1306_WHITE);
if(x>30 && x<90)
{
display.setCursor(1,x-30);
display.print(F("Thiago"));
}
display.display();
delay(900);
if(x == 50)
{
display.setTextColor(SSD1306_BLACK);
display.setCursor(1,1);
display.print(F("Creditos a:"));
display.display();
}
if(x == 40)
{
display.setTextColor(SSD1306_BLACK);
display.setCursor(1,1);
display.print(F("Roberto"));
display.display();
}
if(x == 30)
{
display.setTextColor(SSD1306_BLACK);
display.setCursor(1,1);
display.print(F("Thiago"));
display.display();
}
x = x - 10;
if(x==10)
{
b1=0;
}
}
b1=1;
}
void Sair(void)//limpar a tela exibir saindo e esperando 30segundos
{
display.clearDisplay();
display.display();
display.setCursor(1,1);
display.print(F("Saindo..."));
display.display();
delay(30000);
}
void opc2(byte cursor)
{
switch(cursor)
{
case 1:
//jogador 1
Jogar();
break;
case 2:
//jogador 2
Jogar();
break;
case 3:
//jogador 3
Jogar();
break;
}
}
void opc(int cursor)
{
switch(cursor)
{
case 1:
Escolher_jogador();// para escolha de usuario e
break;
case 2:
Raking();//
break;
case 3:
Creditos();//
break;
case 4:
Sair();//
break;
}
}
byte cursor2(byte cursor)//para mover a setar no jogar
{
byte b1b = 1;
byte b2 = 1;
byte b2b = 1;
// mudar cursor
// Confirmar escolha
delay(500);
while(b1b == 1)
{
b2 = digitalRead(11);
delay(1);
b2b = digitalRead(11);
b1b = digitalRead(12);
//Serial.println(b2);
//Serial.println(b1b);
//Serial.println(cursor);
if((b2b-b2)==1)//codigo para mover o cursor
{
if(cursor>2)
{
cursor = 1;//quando ele for maior que 3 ele vai voltar a ser 1 voltando na primeira opcao
}
else
{
cursor++;//se o botão for apertado e não for maior que 3 ele add no cursor
}
mover_cursor2(cursor);// switch parar mover cursor
delay(10);
}
}
return cursor;
}
void mover_cursor2(byte cursor)
{
switch(cursor)//para imprimir a seta movendo no jogar
{// cada case vai preencher o anterior com uma seta preta e adicionar uma branca na opcao que ele está
case 1:
display.setTextColor(SSD1306_BLACK);
display.setCursor(3, 30);
display.print(F(">"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(3, 10);
display.print(F(">"));
break;
case 2:
display.setTextColor(SSD1306_BLACK);
display.setCursor(3, 10);
display.print(F(">"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(3, 20);
display.print(F(">"));
break;
case 3:
display.setTextColor(SSD1306_BLACK);
display.setCursor(3, 20);
display.print(F(">"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(3, 30);
display.print(F(">"));
break;
}
display.display();
}
void Jogar(void)
{
display.clearDisplay();
byte cabeca_1[8]={B11110,B10100,B10000,B10000,B10000,B11110,B00000,B00000};
byte cabeca_2[8]={B00111,B00101,B00001,B00001,B01101,B00111,B00000,B00000};
byte tronco[8]={B01110,B01110,B01110,B01110,B00000,B00000,B00000,B00000};
byte pernas[8]={B00000,B00000,B00000,B01110,B01010,B01010,B00000,B00000};
//PREDIO 1 byte const_1[8]={B11111,B10101,B11111,B10101,B11111,B10101,B11111,B00000}; void capitao_1(){ tela.drawBitmap(10,40,capacete_1,8,8,SSD1306_WHITE); tela.drawBitmap(10,43,armadura_1,8,8,SSD1306_WHITE); tela.drawBitmap(6,43,braco_1,8,8,SSD1306_WHITE);
display.drawBitmap(10,35,cabeca_1,8,8,SSD1306_WHITE);
display.drawBitmap(12,35,cabeca_2,8,8,SSD1306_WHITE);
display.drawBitmap(11,41,tronco,8,8,SSD1306_WHITE);
display.drawBitmap(11,41,pernas,8,8,SSD1306_WHITE);
display.display();
delay(10000);
display.clearDisplay();
display.drawRect(10,35,6,6,SSD1306_WHITE);
display.drawRect(8,36,7,1,SSD1306_WHITE);
display.drawRect(12,37,1,1,SSD1306_WHITE);
display.drawRect(14,37,1,1,SSD1306_WHITE);
display.drawRect(12,39,2,1,SSD1306_WHITE);
display.drawRect(10,42,5,1,SSD1306_WHITE);
display.drawRect(9,42,1,1,SSD1306_WHITE);
display.drawRect(15,42,1,1,SSD1306_WHITE);
display.fillRect(11,41,3,4,SSD1306_WHITE);
display.drawRect(11,45,3,3,SSD1306_WHITE);
display.drawRect(12,46,1,2,SSD1306_BLACK);
display.drawRect(11,48,1,1,SSD1306_WHITE);
display.drawRect(13,48,1,1,SSD1306_WHITE);
display.drawRect(6,48,2,1,SSD1306_WHITE);
display.drawRect(17,48,2,1,SSD1306_WHITE);
display.drawRect(7,49,11,1,SSD1306_WHITE);
display.drawRect(9,50,1,3,SSD1306_WHITE);
display.drawRect(8,51,3,1,SSD1306_WHITE);
display.drawRect(9,51,1,1,SSD1306_WHITE);
display.drawRect(15,50,1,3,SSD1306_WHITE);
display.drawRect(14,51,3,1,SSD1306_WHITE);
display.drawRect(15,51,1,1,SSD1306_WHITE);
display.display();
delay(10000);
}