Kapitán Spiccato a Major Espressivo
Skočit na navigaci
Skočit na vyhledávání
15. nov. 2024
Arduino a displej 8x8:
rozsvietenie rámčeka:
#include "MaxLedControl.h"
LedControl lc=LedControl(11,13,7,1);
void setup() {
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
}
void loop() {
int r, c, stav;
for (stav = 1; stav >= 0; stav--)
{
for (r = 0; r < 8; r++)
{
lc.setLed(0,r,0,stav);
delay(300);
}
for (c = 1; c < 8; c++)
{
lc.setLed(0,7,c,stav);
delay(300);
}
for (r = 6; r >= 0; r--)
{
lc.setLed(0,r,7,stav);
delay(300);
}
for (c = 6; c > 0; c--)
{
lc.setLed(0,0,c,stav);
delay(300);
}
}
}
Riadenie LED pomocou joysticku:
#include "MaxLedControl.h"
LedControl lc=LedControl(11,13,7,1);
int x = 3;
int y = 3;
void setup() {
Serial.begin(9600);
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
pinMode(5, OUTPUT);
digitalWrite(5, 1);
lc.setLed(0,x,y,1);
}
void loop() {
if (digitalRead(14))
{
Serial.println("click");
}
int osx = analogRead(1);
int osy = analogRead(2);
Serial.print(osx);
Serial.print(" ");
Serial.println(osy);
if ((osx < 400) && (x > 0))
{
lc.setLed(0,x,y,0);
x--;
lc.setLed(0,x,y,1);
delay(500);
}
if ((osx > 630) && (x < 7))
{
lc.setLed(0,x,y,0);
x++;
lc.setLed(0,x,y,1);
delay(500);
}
if ((osy < 400) && (y > 0))
{
lc.setLed(0,x,y,0);
y--;
lc.setLed(0,x,y,1);
delay(500);
}
if ((osy > 630) && (y < 7))
{
lc.setLed(0,x,y,0);
y++;
lc.setLed(0,x,y,1);
delay(500);
}
}
Prvé misie:
Nová verzia hry:
#include "MaxLedControl.h"
LedControl lc=LedControl(11,13,7,1);
int x = 3;
int y = 3;
int cielx, ciely;
int uroven;
long rychlost_prisery;
int cas_kroku;
int px, py;
int pocitadlo, zasviet, najviac;
unsigned long odblokovany_cas = 0;
int ppoc, pvid;
void start_hry()
{
x = 3;
y = 3;
lc.clearDisplay(0);
do {
cielx = rand() % 8;
ciely = rand() % 8;
} while ((cielx == x) && (ciely == y));
px = 7;
py = 7;
zobraz_uroven();
lc.clearDisplay(0);
lc.setLed(0,x,y,1);
}
void setup() {
Serial.begin(9600);
lc.shutdown(0,false);
lc.setIntensity(0,8);
pinMode(5, OUTPUT);
digitalWrite(5, 1);
srand(analogRead(6));
najviac = 100;
zasviet = 90 ;
pocitadlo = 0;
uroven = 1;
cas_kroku = 250;
ppoc = 0;
pvid = 1;
rychlost_prisery = 1000;
start_hry();
}
void prehral()
{
for (int i = 0; i < 8; i++)
{
for (int r = 0; r < 8; r++)
for (int s = 0; s < 8; s++)
if ((abs(r-y) <= i) && (abs(s - x) <= i))
lc.setLed(0,s,r,1);
delay(250);
}
}
void zobraz_uroven()
{
for (int i = 0; i < uroven; i++)
{
lc.setLed(0,i % 8,i / 8,1);
delay(200);
}
delay(300);
}
void smajl()
{
lc.clearDisplay(0);
lc.setLed(0,1,1,1);
lc.setLed(0,2,1,1);
lc.setLed(0,6,1,1);
lc.setLed(0,5,1,1);
lc.setLed(0,3,3,1);
lc.setLed(0,4,4,1);
lc.setLed(0,3,4,1);
lc.setLed(0,4,3,1);
lc.setLed(0,2,7,1);
lc.setLed(0,3,7,1);
lc.setLed(0,4,7,1);
lc.setLed(0,5,7,1);
lc.setLed(0,1,6,1);
lc.setLed(0,6,6,1);
uroven++;
cas_kroku = cas_kroku * 7 / 8;
rychlost_prisery = rychlost_prisery * 7 / 8;
ppoc = 0;
}
void loop() {
ppoc++;
if (ppoc == rychlost_prisery) ppoc = 0;
if (ppoc == rychlost_prisery / 2)
{
lc.setLed(0,px,py,0);
if (pvid) do {
if (uroven > 1) // pri vyssich urovniach sa prisera hybe niekedy smerom k hracovi
{
if (rand() % uroven > 0) // v polovici pripadov sa pohne k hracovi
{
if (rand() & 1) // nahodne sa pohne bud po riadku alebo po stlpci
{
if (px > x) px--; // pohyb v stlpci smerom k hracovi
else if (px < x) px++;
}
else
{
if (py > y) py--; // pohyb v riadku smerom k hracovi
else if (py < y) py++;
}
break; // ak sme sa uz pohli k hracovi, nehybeme sa nahodne
}
}
// ak je uroven = 1, alebo je nahodna polovica, tak sa pohne iba nahodne
px += rand() % 3 - 1;
if (px > 7) px = 7;
if (px < 0) px = 0;
py += rand() % 3 - 1;
if (py > 7) py = 7;
if (py < 0) py = 0;
} while (0);
if (pvid) lc.setLed(0,px,py,1);
else lc.setLed(0,px,py,0);
pvid = 1 - pvid;
}
pocitadlo++;
if (pocitadlo == najviac) {
pocitadlo = 0;
lc.setLed(0,cielx,ciely,0);
}
if (pocitadlo == zasviet) lc.setLed(0,cielx,ciely,1);
if (digitalRead(14))
{
Serial.println("click");
}
int osy = analogRead(1);
int osx = analogRead(2);
if ((x==px) && (y==py))
{
prehral();
delay(1000);
start_hry();
}
if (millis() < odblokovany_cas) return;
if ((osy < 400) && (y > 0)) //pohyb svetielka
{
lc.setLed(0,x,y,0);
y--;
lc.setLed(0,x,y,1);
odblokovany_cas = millis() + cas_kroku;
}
if ((osy > 630) && (y < 7)) // dolu
{
lc.setLed(0,x,y,0);
y++;
lc.setLed(0,x,y,1);
odblokovany_cas = millis() + cas_kroku;
}
if ((osx < 400) && (x > 0))
{
lc.setLed(0,x,y,0);
x--;
lc.setLed(0,x,y,1);
odblokovany_cas = millis() + cas_kroku;
}
if ((osx > 630) && (x < 7))
{
lc.setLed(0,x,y,0);
x++;
lc.setLed(0,x,y,1);
odblokovany_cas = millis() + cas_kroku;
}
if ((x==cielx) && (y == ciely))
{
smajl();
delay(1000);
start_hry();
}
}