I have another problem !!!
So far i made it that when i press space i spawn circles and they slowly go down. But when im in the last column and i press it spawns red circle, and when i press space again it spawns red circle again and it shouldnt !!! at every other column it normally spawns, first red then yellow and so on, but in the last one it doesn't do that...
here is the clip:
https://streamable.com/84yg8
This is Game cpp file
Code:
#include "game.h" #include "polje.h" #include "player.h" #include <QApplication> #include <QGraphicsRectItem> #include <QDebug> scene->setSceneRect(0,0,1310,700); setScene(scene); // == view->setScene(scene) setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOf f); //(znebimo se sliderjov na desni strani) == view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOf f) setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff) ; //(znebimo se sliderjov na spodnji strani) == view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff) setFixedSize(1310,650); // == view->setFixedSize(800,600); show(); } void Game::createPlatform(){ for(int j=0;j<11;j++){ stevilo_zapolnenih_v_stolpcu[j] = 0; } int i,k; for(i=0;i<5;i++){ for(k=0;k<11;k++){ p[i][k] = new Polje(); p[i][k]->setPos(Polje::x,Polje::y); p[i][k]->setX(Polje::x + 120); //p = &polje[i][k]; scene->addItem(p[i][k]); } p[i][k]->setX(0); p[i][k]->setY(Polje::y + 110); } player = new Player; player->setPos(655,110); scene->addItem(player); player->setFocus(); } void Game::victoryScreen(){ scene->clear(); restart->setRect(0,0,600,150); exit->setRect(0,0,600,150); restart->setPos(width()/2-300,200); exit->setPos(width()/2-300,400); scene->addItem(restart); scene->addItem(exit); //connect(restart,SIGNAL(clicked()),this,SLOT(close( ))); } int Game::getSteviloZapolneninhVStolpcu(int collumn){ return stevilo_zapolnenih_v_stolpcu[collumn]; } void Game::setSteviloZapolneninhVStolpcu(int c, int stevilo_vrstice){ stevilo_zapolnenih_v_stolpcu[c] = stevilo_vrstice; }
This is the Polje's cpp file ( Tile )
Code:
#include "polje.h" #include "game.h" #include <QDebug> #include <QGraphicsRectItem> #include <QGraphicsItem> #include <QObject> extern Game *game; int Polje::x = 0; int Polje::y = 125; setRect(0,0,120,110); setPen(Qt::NoPen); circle->setRect(5,5,100,100); //circle->setZValue(1); circle_color = ""; //setZValue(2); } void Polje::setX(int a){ x = a; } void Polje::setY(int a){ y = a; } circle_color = a; } return circle_color; } void Polje::checkWinner(int vrst, int stol){ //qDebug() << game->p[vrst][stol]->getCircleColor(); }
This is Player's cpp file:
Code:
#include "player.h" #include "game.h" #include "zeton.h" #include <QDebug> #include <QGraphicsPolygonItem> #include <QGraphicsItem> #include <QObject> #include <QKeyEvent> extern Game *game; QPolygonF triangle; setPolygon(triangle); color = "red"; collumn = 5; } if(event->key()==Qt::Key_Left || event->key()==Qt::Key_A){ if(x()-100 > 0){ setPos(x()-120,y()); collumn--; } }else if(event->key()==Qt::Key_Right || event->key()==Qt::Key_D){ if(x()+100 < 1310){ setPos(x()+120,y()); collumn++; } }else if(event->key()==Qt::Key_Space){ if(game->getSteviloZapolneninhVStolpcu(collumn) != 5 && Zeton::ZetonStoppedMoving == true){ Zeton *zeton = new Zeton(color,collumn); zeton->setPos(x()-50,y()+20); game->scene->addItem(zeton); if(color == "red"){ color = "yellow"; //qDebug() << "im in red"; }else if(color == "yellow"){ color = "red"; //qDebug() << "im in yellow"; } } }else if(event->key()==Qt::Key_L){ } }
and this is Zeton's cpp file ( circles (red and yellow)) --- if i comment out the if(color == "red") ... else if(color == "yellow") ... section circles spawn on the last column normally, first red, then yellow and so on, but i dont know why !!! plus i need that function inside the if and else statements to be called.
Code:
#include "zeton.h" #include "game.h" #include <QBrush> #include <QObject> #include <QGraphicsRectItem> #include <QGraphicsItem> #include <QTimer> #include <QDebug> extern Game *game; bool Zeton::ZetonStoppedMoving=true; qDebug() << col; collumn = c; setRect(0,0,100,100); color = col; qDebug() << color; if(color == "red") else if(color == "yellow") //setZValue(3); stevilo_vrstice_now = 5; // stevilo vrstice v kateri se zeton trenutno nahaja; stevilo_vrstic = 5; // stevilo vseh vrstic ZetonStoppedMoving = false; connect(cas,SIGNAL(timeout()),this,SLOT(premikZeto na())); cas->start(500); /* switch(collumn){ case 0:{Zeton *zeton = new Zeton(collumn);}break; case 1:{Zeton *zeton = new Zeton(collumn);}break; case 2:{Zeton *zeton = new Zeton(collumn);}break; case 3:{}break; case 4:{}break; case 5:{}break; case 6:{}break; case 7:{}break; case 8:{}break; case 9:{}break; case 10:{}break; } */ } void Zeton::premikZetona(){ if(game->getSteviloZapolneninhVStolpcu(collumn)<stevilo_vrstice_now-1){ setPos(x(),y()+110); stevilo_vrstice_now--; //qDebug() << stevilo_vrstice_now; }else{ game->setSteviloZapolneninhVStolpcu(collumn,stevilo_vrst ice_now); ZetonStoppedMoving = true; //qDebug() << color; if(color == "red"){ game->p[stevilo_vrstic-stevilo_vrstice_now][collumn]->setCircleColor("red"); // if i comment } // out this section // circles spawn normally ( red first,then yellow and so on) else if(color == "yellow"){ // dunno why game->p[stevilo_vrstic-stevilo_vrstice_now][collumn]->setCircleColor("yellow"); } cas->stop(); delete cas; //qDebug() << color; //qDebug() << game->p[stevilo_vrstic-stevilo_vrstice_now][collumn-1]->getCircleColor(); //qDebug() << stevilo_vrstic-stevilo_vrstice_now; //qDebug() << collumn-1; //Polje::checkWinner(stevilo_vrstic-stevilo_vrstice_now,collumn-1); //game->victoryScreen(); } }
Any help is appreciated !!!!