Snake c++

Programovacie jazyky, rady, poradňa...
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Snake c++

Príspevok od používateľa reDo »

mam hru snake ale ked chcem prudko zabocit napr. idem hore a dam doprava a dole tak mi prejde najprv jedno policko doprava a az potom zaboci, kde mam chybu? prosim

Kód: Vybrať všetko

#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>


using namespace std;

void fMove(int& directions, short& CurX, short& CurY);

struct bits
{
int X[100];
int Y[100];
};

struct coords
{
int X;
int Y;
};

int main()
{   
    HANDLE  hConsole; 
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 
    int in=0;
    int in2=75;
    
    int pointsX;
    int pointsY;
    pointsX = 51;
    pointsY = 10;

    

   
    int points;
    points = 0;
    
    //Initializing apple cords
    srand( time ( NULL ) );
    coords apple;
    apple.X = rand() % 49 + 1;
    apple.Y = rand() % 23 + 1;


    
    int i;
    
    
    int len;
    len = 2;

    
    int dir;
    dir = 1;
    
    
    HANDLE hInput, hOutput;	
    INPUT_RECORD InputRecord;
    COORD CursorPosition;	
    DWORD Events=0;
    
    hInput = GetStdHandle(STD_INPUT_HANDLE);
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    
    SetConsoleMode(hInput, ENABLE_PROCESSED_INPUT);

    
    
    SetConsoleTextAttribute(hConsole,  10 );
    for (i=0;i<=50;i++)
    {
    CursorPosition.X=i;
    CursorPosition.Y=0;
    SetConsoleCursorPosition(hOutput, CursorPosition);
    cout <<(char)177;
    }
    
    for (i=0;i<=50;i++)
    {
    CursorPosition.X=i;
    CursorPosition.Y=24;
    SetConsoleCursorPosition(hOutput, CursorPosition);
    cout <<(char)177;
    }
    
    for (i=0;i<=23;i++)
    {
    CursorPosition.X=0;
    CursorPosition.Y=i;
    SetConsoleCursorPosition(hOutput, CursorPosition);
    cout <<(char)177;
    }
    
    for (i=0;i<=23;i++)
    {
    CursorPosition.X=50;
    CursorPosition.Y=i;
    SetConsoleCursorPosition(hOutput, CursorPosition);
    cout <<(char)177;
    }
    
    CursorPosition.X = 5;
    CursorPosition.Y = 5;
    
    //stupid way off making game able to quit =)
    int on;
    on = 1;

    
    bits bit;
    for (i=0;i<=len+1;i++)
    {
    bit.X[i] = 5;
    bit.Y[i] = 5;
    }
    
    //Writing apple before loop
     SetConsoleTextAttribute(hConsole,  12 );
    CursorPosition.X = apple.X;
    CursorPosition.Y = apple.Y;
    SetConsoleCursorPosition(hOutput, CursorPosition);
    cout << "#";
    
    //reset
    CursorPosition.X = bit.X[0];
    CursorPosition.Y = bit.Y[0];    
    
   
    while(on==true)
    {    
        
        SetConsoleCursorPosition(hOutput, CursorPosition);
        if(kbhit())
		{
		in=getch();
		}

        

        
        if(in==75&&in2!=77&&in2!=75)      
		    dir = 1;
            
        if(in==77&&in2!=75&&in2!=77)
		    dir = 2;
            
                
        if (in==27)
            on=0;
                
        
        if(in==72&&in2!=80&&in2!=72)
		    dir = 3;
        
        if(in==80&&in2!=72&&in2!=80)
		    dir = 4;
		
        switch(in)
            {
                      case 72:
                           in2=72;
                           break;
                      case 80:
                           in2=80;
                           break;
                      case 75:
                           in2=75;
                           break;
                      case 77:
                           in2=77;
                           break;
                      }
        
                                  
        
        in=0;   
        
       
        
		fMove(dir, CursorPosition.X, CursorPosition.Y);
                        
        //make sure it doesnt run into wall
        if (CursorPosition.X==50)
        {
        CursorPosition.X=1;
        }
        
        if (CursorPosition.X==0)
        {
        CursorPosition.X=49;
        }                        

        if (CursorPosition.Y==0)
        {
        CursorPosition.Y=23;
        }                                                          

        if (CursorPosition.Y==24)
        {
        CursorPosition.Y=1;
        }                              
        
        //Giving snake[] values
        bit.X[0] = CursorPosition.X;
        bit.Y[0] = CursorPosition.Y;
        
        for (i=len; i>=1; i--)
        {
        bit.X[i] = bit.X[i - 1];
        bit.Y[i] = bit.Y[i - 1];
        }
        //Setting position for head
        
        CursorPosition.X = bit.X[1];
        CursorPosition.Y = bit.Y[1];
        SetConsoleCursorPosition(hOutput,CursorPosition);                 
                                   
        
        
        SetConsoleTextAttribute(hConsole,  9 );
        switch (dir)
        {
        case 1:
        case 2:
        case 3:
        case 4:
        cout << (char)254;
        break;   
        }                                             
         
        SetConsoleTextAttribute(hConsole,  14 );                                                                                              
        //typing
        for (i=2; i<=len-1; i++)
        {
        CursorPosition.X = bit.X[i];
        CursorPosition.Y = bit.Y[i];
        SetConsoleCursorPosition(hOutput,CursorPosition);
        cout << (char)250;
        }
        
        
        
        //using last array to clear
        CursorPosition.X = bit.X[len];
        CursorPosition.Y = bit.Y[len];
        SetConsoleCursorPosition(hOutput,CursorPosition);
        cout << " ";
        
        //Points!
        CursorPosition.X = pointsX;
        CursorPosition.Y = pointsY;
        SetConsoleCursorPosition(hOutput,CursorPosition);
        cout << "Points: " << points;
        
        //Reset
        CursorPosition.X = bit.X[0];
        CursorPosition.Y = bit.Y[0];
        
        
        //Death!
        for (i=2;i<=len-1;i++)
        {
        if ((bit.X[i]==bit.X[0]) && (bit.Y[i]==bit.Y[0]))
        {on = 0;}
        }
             
    //pause between moves
    Sleep(100);
    }//while end bracket

system("pause");    
} //main end bracket

void fMove(int& directions, short& CurX, short& CurY)
{
        //Where to move
		switch(directions)
		{
		case 2:
        CurX++;
		break;
        case 1:
        CurX--;
        break;
		case 3:
        CurY--;
        break;
		case 4:
        CurY++;
        break;
		}
}

Napísať odpoveď