Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Prosta gra "wąż" problem z malowaniem planszy

Ostatnio zmodyfikowano 2016-09-23 18:23
Autor Wiadomość
KingFromAfrica
Temat założony przez niniejszego użytkownika
Prosta gra "wąż" problem z malowaniem planszy
» 2016-09-23 18:23:06
Witam, ostatnio wziąłem się za pisanie węży i utknąłem w miejscu kiedy trzeba dorysowywać mniejsze wężyki po zjedzeniu owocu. Współrzędne tych mniejszych są dobre i wszystko się powinno zgadzać, ale nie działa.Prosiłbym o przeglądnięcie w szczególności funkcji Draw bo wydaje mi się że to w niej leży problem,aczkolwiek głowy nie dam uciąć :D. Z góry bardzo dziękuje.Poniżej wklejam kod:
C/C++
#include<iostream>
#include<stdlib.h> /*system cls*/
#include<Windows.h> /*Sleep*/
#include<conio.h> /* keybord */
#include <time.h>       /* time */
using namespace std;

int score( 0 );
int const height = 11;
int const length = 21;
int xSnake =( length / 2 ) + 1; //poczatkowe wspolrzedne
int ySnake =( height / 2 ) + 1; //poczatkowe wspolrzedne
int xMap( 1 ), yMap( 1 ), xFruit, yFruit;
int smallSnakesNumber( 0 ), xSmallSnakes[ 100 ], ySmallSnakes[ 100 ], xFull[ 200 ], yFull[ 200 ];
unsigned char direction;
string eDirection;


void Draw()
{
   
    for( int i = 1; i <= length; i++ ) // górna ściana
    {
        cout << "X";
        xMap++;
    }
    cout << endl; //Przechodzimy do nastepnej linijki ,zwiekszamy y
    yMap = 2;
    xMap = 1;
    for( int i = 1; i <= height - 2; i++ ) // plansza
    {
        cout << "X"; //Lewa sciana,zwiekszamy x
        xMap++;
        for( int t = 0; t < length - 2; t++ ) //Przeszukuje wspolrzedne i rysuje X--------------------X
        { // X---------Ooo--------X
            if( smallSnakesNumber > 0 ) // X--------------------X
            {
               
                /*for (int i = 0; i < smallSnakesNumber; i++)
                {
                if ((xMap == xSmallSnakes[i]) && (yMap == ySmallSnakes[i]))
                {
                xFull[i + 2] = xSmallSnakes[i]; //Pierwsze dwa i = 0 i i=1 beda zarezerwowane dla owoca i weza glownego
                yFull[i + 2] = ySmallSnakes[i];
                }
                else if ((xMap == xSnake) && (yMap == ySnake))
                {
                xFull[0] = xSnake;
                yFull[0] = ySnake;
                }
                else if ((xMap == xFruit) && (yMap == yFruit))
                {
                xFull[1] = xFruit;
                yFull[1] = yFruit;
                }
                }*/
               
                if(( xMap == xSnake ) &&( yMap == ySnake ) ) cout << "O";
                else if(( xMap == xFruit ) &&( yMap == yFruit ) ) cout << "F";
                else if(( xMap == xSmallSnakes[ t ] ) &&( yMap == ySmallSnakes[ t ] ) ) cout << "o";
                else cout << " "; //On nie wie czy bylo namalowane "o"
               
            }
            else if( smallSnakesNumber == 0 )
            {
                if(( xMap == xSnake ) &&( yMap == ySnake ) ) cout << "O";
                else if(( xMap == xFruit ) &&( yMap == yFruit ) ) cout << "F";
                else cout << " ";
               
            }
            xMap++;
        }
       
        cout << "X" << endl; //Prawa ściana
        yMap++;
        xMap = 1;
    }
   
    for( int i = 1; i <= length; i++ )
    {
        cout << "X";
        xMap++;
    }
   
}

void Move()
{
    if( _kbhit() )
    {
        direction = _getch();
        switch( direction )
        {
        case 'w':
            eDirection = "TOP";
            break;
        case 's':
            eDirection = "BOT";
            break;
        case 'd':
            eDirection = "RIGHT";
            break;
        case 'a':
            eDirection = "LEFT";
            break;
        }
    }
    if( smallSnakesNumber > 0 ) //Dorysowywanie mniejszych wezykow
    {
       
        for( int i = smallSnakesNumber - 1; i >= 0; i-- )
        {
            if( i == 0 )
            {
                xSmallSnakes[ i ] = xSnake;
                ySmallSnakes[ i ] = ySnake;
            }
            else
            {
                xSmallSnakes[ i ] = xSmallSnakes[ i - 1 ]; //Lewej stronie przypisujemy prawa
                ySmallSnakes[ i ] = ySmallSnakes[ i - 1 ]; //Czyli zaczynajac od najdalszego przypisujemy mu id mniejszych itd
            }
        }
    }
    if( eDirection == "TOP" ) ySnake--;
    else if( eDirection == "BOT" ) ySnake++;
    else if( eDirection == "RIGHT" ) xSnake++;
    else if( eDirection == "LEFT" ) xSnake--;
   
}

void Check()
{
    if( xSnake == 1 ) xSnake = 19;
    else if( xSnake == 21 ) xSnake = 1;
    else if( ySnake == 1 ) ySnake = 10;
    else if( ySnake == 11 ) ySnake = 2;
   
    if(( xSnake == xFruit ) &&( ySnake == yFruit ) )
    {
        score += 10;
        xFruit =( rand() % 19 ) + 2;
        yFruit =( rand() % 9 ) + 2;
        smallSnakesNumber++;
    }
   
}

void SmallSnakesDraw()
{
    if( smallSnakesNumber > 0 )
    {
        for( int i = 0; i < smallSnakesNumber; i++ )
        {
            if( i == 0 )
            {
                xSmallSnakes[ i ] = xSnake;
                ySmallSnakes[ i ] = ySnake;
            }
            else if( i > 0 )
            {
                xSmallSnakes[ i ] = xSmallSnakes[ i - 1 ];
                ySmallSnakes[ i ] = ySmallSnakes[ i - 1 ];
            }
        }
    }
}

int main()
{
    srand( time( NULL ) );
    xFruit =( rand() % 19 ) + 2;
    yFruit =( rand() % 9 ) + 2;
    int gameOver = 0;
    while( gameOver != 1 )
    {
        system( "cls" );
        Move();
        Draw();
        Check();
        //SmallSnakesDraw();
        cout << endl << "Score:" << score << " Small snakes number:" << smallSnakesNumber << endl;
        cout << "Wspolrzedne wezy:" << endl;
        cout << "Glowny waz (" << xSnake << "," << ySnake << ")" << endl;
        if( smallSnakesNumber > 0 )
        {
            for( int i = 0; i < smallSnakesNumber; i++ )
            {
                cout << i + 1 << " dodatkowy waz " << "(" << xSmallSnakes[ i ] << "," << ySmallSnakes[ i ] << ")" << endl;
            }
        }
        Sleep( 500 );
    }
    cin.get();
   
    return 0;
}
P-151942
« 1 »
  Strona 1 z 1