• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PROBLEM, c++ gra brick breaker

Object Storage Arubacloud
0 głosów
267 wizyt
pytanie zadane 1 maja 2017 w C i C++ przez Jakub Paściak Nowicjusz (140 p.)
edycja 1 maja 2017 przez Jakub Paściak
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <vector>
#include <time.h>

int szerokosc=40, wysokosc=20;
char pole[40][20];
int wspXbloczek, wspYbloczek;
int wspXcegly, wspYcegly;
int wspXpilki, wspYpilki;
int dlugosc=3;
int lewo, prawo;
int klawisz;
char kierunek='p';

void idzdoxy(int x, int y)// cos co robi, aby nie migotal ekran
{
    HANDLE hCon;
    COORD dwPos;

    dwPos.X=x;
    dwPos.Y=y;

    hCon =GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hCon, dwPos);
}

using namespace std;

int main()
{

//usawienie klawiszy

cout <<"lewo" <<endl;
lewo=getch();
if(lewo==224)lewo+=getch();
if(lewo==0)lewo-=getch();

cout <<"prawo" <<endl;
prawo=getch();
if(prawo==224)prawo+=getch();
if(prawo==0)prawo-=getch();
//kiniec usawiania klawiszy



   system("cls");//poczatek petli
for(;;){
idzdoxy(0,0);
    //USAWIANIE ZE SREDEK JEST PUSTY!
for(int i=0; i<wysokosc; i ++)
{
    for(int j=0; j<szerokosc; j++){
        pole[j][i]='p';
    }
}
//ustawianie bloczku
wspYbloczek=19;
pole[wspXbloczek][wspYbloczek]='b';
//poruszanie sie pilki
wspYpilki--;
wspXpilki=wspXbloczek;
pole[wspXpilki][wspYpilki]='o';

//budowa cegielek
for(int i=0; i<szerokosc; i++)
{
    wspXcegly=i;
    wspYcegly=0;
    pole[wspXcegly][wspYcegly]='c';
}


idzdoxy(0,0);


//proba usuniecia cegielki
if(pole[wspXpilki][wspYpilki]=='c')pole[wspXcegly][wspYcegly]='p';


//gorna ramka
for(int i=0; i<=szerokosc; i++)
{
    cout <<"--";
}

//boczna ramka
for(int i=0; i<wysokosc; i++)
{

    cout <<endl<<"|";
    for(int j=0; j<szerokosc; j++)
    {
          if(pole[j][i]=='p') { cout<<"  ";}
          if(pole[j][i]=='b') { cout<<"XX";}
          if(pole[j][i]=='c') { cout<<"CC";}
          if(pole[j][i]=='o') { cout<<" O";}
    }
    cout <<"|";
}
//dolna ramka
cout<<endl;
for(int i=0; i<=szerokosc; i++)
{
    cout <<"--";
}//koniec ramek

if(kbhit()){
    klawisz=getch();
    if(klawisz==224)klawisz+=getch();
    if(klawisz==lewo)kierunek='l';
    if(klawisz==prawo)kierunek='p';
}

if(kierunek=='l') wspXbloczek--;
if(kierunek=='p') wspXbloczek++;
idzdoxy(0,0);
Sleep(10);//cos co nie dziala
idzdoxy(0,0);//cos co prawie dziala

//przejscie bloczka z lewej do prawej
if(wspXbloczek==szerokosc){
    wspXbloczek=0;
}
if(wspXbloczek==-1){wspXbloczek=szerokosc-1;}
}//konec petli
getch();
}

 


Nie wiem jak zrobić aby piłka, która TAK wiem porusza się w dziwny sposób.. przy spotkaniu z cegła sprawiła, aby ona znikła. Nie umiem sobie poradzić z tym problemem. Czy ktoś byłby tak miły i nakierował mnie na dobrą drogę?
Ps. pomimo zastosowania kodu, który ma ustawiać tą kreskę (na koordynatach 0,0 ), która pisze tekst.. to na ekranie dalej się pojawia , da się to usprawnić? :)

2
komentarz 1 maja 2017 przez jankustosz1 Nałogowiec (35,880 p.)
Mam radę nie pisz wszystkiego w mainie tylko twórz sobie funkcję a najlepiej klasy, bo tak to ten kod jest nieczytelny.

1 odpowiedź

+1 głos
odpowiedź 1 maja 2017 przez k222 Nałogowiec (30,150 p.)
edycja 1 maja 2017 przez k222
Sleep(10);   //cos co nie dziala

Póki co do tego fragmentu - to działa tylko weź poprawkę na to że argument funkcji jest podawany w milisekundach (1/1000 sekundy) - weź wpisz 

Sleep(1000);

i będzie stawało na sekundę 

 

No dobra to kilka spostrzeżeń:

Problem ze znikającą cegłą:

zamień:

if(pole[wspXpilki][wspYpilki]=='c')pole[wspXcegly][wspYcegly]='p';

na

if(pole[wspXpilki][wspYpilki]=='c')pole[wspXpilki][wspYpilki]='p';

i wtedy będzie znikała (interesuje cię pole gdzie aktualnie jest piłka i na tym polu cegła ma zniknąć dlatego podajesz współrzędne piłki), lecz potem znowu cegła pojawia się w tym miejscu z tego powodu że w nieskończonej pętli for masz fragment (coś w tym stylu, zmieniłem troszkę):

//budowa cegielek
for(int i=0; i<szerokosc; i++)
{
    pole[i][0]='c';
}

czyli przy każdym przejściu pętli od nowa każde pole zapełnione jest cegłą, z tym sam musisz sobie poradzić, generalnie jakoś to zmienić żeby wywalić ten fragment poza pętlę tak, żeby nie uzupełniało luk (bo chyba tak ma to działać w domyśle)

A poza tym wpisywanie znaków obsługujących grę możesz spróbować zrobić za pomocą switch'a, będzie chyba ładniej, ale to już jak chcesz, myślę o czymś w tym stylu: http://cpp0x.pl/forum/temat/?id=40 i tak jak wyżej kolega zaproponował, może spróbuj to ubrać w funkcje, będzie czytelniejsze

nad całą resztą też trzeba jeszcze troszkę popracować

komentarz 1 maja 2017 przez Jakub Paściak Nowicjusz (140 p.)
wiem o tym i dziękuje, ale i tak to nie rozwiązało mojego GŁÓWNEGO PROBLEMU :(
1
komentarz 1 maja 2017 przez k222 Nałogowiec (30,150 p.)
cóż patrzę ale na razie próbuję się połapać co jest co i jak to działa (i czemu nie do końca działa)

Podobne pytania

+2 głosów
1 odpowiedź 200 wizyt
pytanie zadane 14 sierpnia 2016 w C i C++ przez BureQ Początkujący (260 p.)
+1 głos
0 odpowiedzi 67 wizyt
pytanie zadane 18 października 2023 w Nasze projekty przez arek01996 Stary wyjadacz (12,100 p.)
0 głosów
0 odpowiedzi 183 wizyt

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...