Skocz do zawartości

Pomocna odpowiedź

Napisano (edytowany)

Gra napisana na telefonie - przewijanie tekstu 'FORBOT' zostało napisane w C, programem CodingC, pozostała część gry została napisana w C++ w programie Cxxdroid.

Struktura programu nieco chaotyczna - po prostu na telefonie jak popełnisz błąd to następnie nie chce się tego zmieniać , prościej jest  brnąć dalej i dopisać nakładkę 🙂

Nie zamierzałem tej gry pisać na telefonie, ale sprawdzając jedną rzecz (i przy okazji ucząc się języka C) wyszedł mi przypadkowo 1 poziom. No to dopisałem poziom 2 i 3. Miałem nieco pod górkę , poniewż w tym czasie nie miałem dostępu do internetu i jak czegoś nie wiedziałem (a jest tego wiele ) to musiałem w domu sprawdzać i następnie znowu w pracy pisać 🙂

A o to prosty kod (nie jest wolny od błędów - tutaj ciekawa rzecz - na telefonie działa perfekcyjnie)

#include <LedControl.h>
LedControl lc=LedControl(12,10,11,1);
unsigned long ulCzas;  // zmienna ktora moze nigdy nie byc potrzebna
byte t8[8];   // tablica diod 8 do wyświetlania w lini
byte zWynik;  // 3 - gracz wygrywa , 27 - komputer
int t3x3[3][3]; // tablica gry
bool t8x8[8][8]; // tablica do wyswietlania
int zPozX = 0; int zPozY = 0;      // poczatkowa pozycja wyboru pola
bool bRuch = true;      // kto gra 1 - gracz
const byte cNie = (A0); const byte cTak(A1); // przyciski zatwierdz, idz dalej
bool bTak, bNie, bGra=false;
byte zPoziom = 1; 

void setup() {
  Serial.begin(9600);
  lc.shutdown(0,false);      lc.clearDisplay(0);     ulCzas = millis();
  pinMode(cTak, INPUT_PULLUP);    pinMode(cNie, INPUT_PULLUP); randomSeed(analogRead(0));
  fPowitanie(); fZerujTablice;
}
// -----------------------------------------------------------------------------    
void loop() { 
  //  lc.setLed(0,0,0,false); true
  //  lc.setColumn(0,0,B10100000);   Serial.println(zPoziom); 
  //  lc.setRow(0,0,B10100000);      lc.setLed(0,0,0,true);
  //  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
  //fWyswietlTwarz(1); delay(100); fWyswietlTwarz(2); delay(100);
  //fWyswietlTwarz(3); delay(100);
   
  if (bGra == false) fPoziom();// wyswietlenie poziomu jezeli gry nie ma;
  lc.clearDisplay(0);  fWyswietlSiatke(); fZerujTablice(); delay(500);
   for (int i=0; i<9; i++) {   // petla gry
    if (bRuch == true) {
   fPierszeWolne();
   fWyborPola();               // wybor pola przez gracza
   fWyswietlRuch();            // wyswietlanie zaznaczenia i komputer i gracz 
                       }       // koniec warunku grania dla gracza
    if (bRuch == false) {
     if (zPoziom == 1) fPoziom1();   
     fWyswietlRuch();                  
                        }      // koniec warunku dla CPU
  
   delay(500);
   bRuch = !bRuch;             // zamiana kolejnosci gry
   if (fWynik() == 3) {fWyswietlTwarz(1); break;}
   if (fWynik() == 27){fWyswietlTwarz(3); break;}
    
  
   } // dla petli for gluwnej gry
   if ((fWynik() !=3)  && (fWynik() !=27)) fWyswietlTwarz(2); delay(2000);
   Serial.print ("fWynik() - "); Serial.println(fWynik());
   fZerujTablice;
   delay(4000);
}
// ---------------------------------------------------------------------------------
int fWynik() {
  int zLiczX = 0; int zLiczY = 0; int ii = 0; int jj = 0;
  bool bStop = false;
  for (int y=0; y<3; y++){
   for (int x=0; x<3; x++) {
    if (bStop == false)    {
    zLiczX += t3x3 [y] [x];
    zLiczY += t3x3 [x] [y];
                           } // dla ifa stop liczenia
    
   if ((zLiczX == 3) || (zLiczX == 27)) bStop = true;
   if ((zLiczY == 3) || (zLiczY == 27)) bStop = true;
                        

                        
   } // dla petli x 
   if (bStop == false) { zLiczX =0; zLiczY = 0;}
  }  // dla petli y
  if ((zLiczX == 3) || (zLiczY == 3))  return 3;
  if ((zLiczX == 27) || (zLiczY == 27)) return 27;
} // koniec fWynik

void fPoziom1() {
   do {
    zPozY = random(0,3); zPozX = random(0,3);
     }
   while(fWolne(zPozY,zPozX)== false);
   t3x3 [zPozY] [zPozX] = 9;

  delay(400);
} // koniec funkcji fPoziom1


void fPierszeWolne() {
  for (int y=2; y > -1; y--) {
    for (int x=2; x > -1; x--){
      if (t3x3 [y] [x] == 0) { zPozY = y; zPozX = x;}
    } // petla x
  } // petla y
 
} // koniec fPierwszeWolne


void fWyswietlRuch() {
  
  if (bRuch == true) {lc.setLed(0,zPozY*3+1,zPozX*3,true);
                      lc.setLed(0,zPozY*3,zPozX*3+1,true);
  } // fla gracza warunek
  if (bRuch == false) {lc.setLed(0,zPozY*3+1,zPozX*3,  true);
                       lc.setLed(0,zPozY*3,  zPozX*3,  true);
                       lc.setLed(0,zPozY*3,  zPozX*3+1,true);
                       lc.setLed(0,zPozY*3+1,zPozX*3+1,true);
                      }
  
}

void fWyborPola() {//wybor pola przyciskami 
   
  lc.setLed(0,zPozY*3+1,zPozX*3,true);
  while (digitalRead(cTak) == true) {            // petla while
  if (digitalRead(cNie) == false) {
      delay(400); lc.setLed(0,zPozY*3+1,zPozX*3,false); 
  do {
  zPozX ++;
  if (zPozX>2) {zPozX = 0;zPozY++;}
  if (zPozY>2) zPozY = 0; } 
  while (t3x3 [zPozY] [zPozX] > 0);
   lc.setLed(0,zPozY*3+1,zPozX*3,true);
   } // dla ifa
  } // dla while
  t3x3 [zPozY] [zPozX] = 1; delay(500); // zapisz do tablicy 1 - ruch gracza
} // przyciski wyboru pola i zatwierdzenia


bool fWolne(int y, int x) {
     if (t3x3[y] [x] == 0) return true; else return false;
}// fla fWolne

void fWyswietlSiatke(){
  lc.setColumn(0,2,255); lc.setColumn(0,5,255);
  lc.setRow(0,2,255);    lc.setRow(0,5,255);  
} //dla fWyswietlSiatkie

void fPowitanie() {
  int zPozycja = 0;
  int tNapis []={0,0,0,0,0,0,0,0,127,72,72,0,62,65,65,62,0,127,76,59,0,
                 127,73,54,0,62,65,65,62,0,64,127,64,0,0,0,0,0,0,0,0};
  for (int y = 0; y < 32; y++){
    for (int x = 0; x < 8; x++) {
      zPozycja = y + x ;
      lc.setColumn(0,x,tNapis[zPozycja]);
    }// dla petli x
    zPozycja = 0;
    delay(90);
  } // dla petli y
}// dla fPowitanie


int fWyswietlTwarz(int x) {  
   t8[0] = B00000000; t8[1] = B01110111;
   t8[2] = B00100010; t8[3] = B00000000;
   t8[4] = B00000000; t8[5] = B00000000;
   t8[6] = B00000000; t8[7] = B00000000;
   
   if (x == 1) {
                 t8[4] = B01000010; t8[5] = B00100100;
                 t8[6] = B00011000; };
   if (x == 2) {                    t8[5] = B01111110; }  
   if (x == 3) { t8[4] = B00011000; t8[5] = B00100100;
                 t8[6] = B01000010; }          
  
  lc.setRow(0,0,t8[0]); lc.setRow(0,1,t8[1]); lc.setRow(0,2,t8[2]);
  lc.setRow(0,3,t8[3]); lc.setRow(0,4,t8[4]); lc.setRow(0,5,t8[5]);
  lc.setRow(0,6,t8[6]); lc.setRow(0,7,t8[7]);
  delay(2000);
}

int fWyswietlPoziom(int x)
{ 
  lc.setColumn(0,0,B01111110);  lc.setColumn(0,1,B01001000);
  lc.setColumn(0,2,B01001000);  lc.setColumn(0,3,B00110000);
  lc.setColumn(0,4,0);
  if (x == 1) {
   lc.setColumn(0,5,B00010000); lc.setColumn(0,6,B00100000); 
   lc.setColumn(0,7,B01111110);
   }
  if (x == 2) {
   lc.setColumn(0,5,B00100110); lc.setColumn(0,6,B01001010); 
   lc.setColumn(0,7,B00110010);
  }
  if (x == 3) {
   lc.setColumn(0,5,B01000010); lc.setColumn(0,6,B01010010);
   lc.setColumn(0,7,B00101100);
  }
}

void fPoziom() // wybor poziomu
{  
 //lc.clearDisplay(0);
 fWyswietlPoziom(zPoziom);
 while (digitalRead(cTak)) 
 {
  if (digitalRead(cNie) == 0)
  {  
    zPoziom= zPoziom + 1 ; delay(300); if (zPoziom > 3) zPoziom = 1; 
    fWyswietlPoziom(zPoziom);
  }
 }
 bGra = true; bRuch = true;
 
} // koniec fPoziom - wybor poziomu

void fZerujTablice() { // zeruje tablice gry i wyswietlacza i pozycja startowa kursora
  for (int y=0; y<3; y++){for (int x=0; x<3; x++){ t3x3[x] [y] = 0; }}
  for (int y=0; y<8; y++){for (int x=0; x<8; x++){ t8x8[x] [y] = 0; }}
  zPozX = 0; int zPozY = 0;
  zWynik = 0; 
} // koniec funkcji zeruj tabliceP4170001.zip

 

P4170001.zip

Edytowano przez Santiago

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...