Staredit Network > Forums > Technology & Computers > Topic: C++ 2D array help
C++ 2D array help
This topic is locked. You can no longer write replies here.
Mar 23 2008, 10:14 pm
By: Falkoner  

Mar 23 2008, 10:14 pm Falkoner Post #1



Okay, I have a working 2D array, that I can move around on using the aswd keys, but I can't make collision detection, here's the code that allows me to move around:

Code
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>

int mx=5;
int my=4;
int i, j;
char direction;
char keypress;
char matrix[100][100];


void gotoxy(short x, short y)
{
     HANDLE hConsoleOutput;
     COORD Cursor_an_Pos = {x,y};
     hConsoleOutput = GetStdHandle (STD_OUTPUT_HANDLE);
     SetConsoleCursorPosition(hConsoleOutput, Cursor_an_Pos);
}



void loadgrid()
{    
    for(i=0; i<10; i++)
    {
           for(j=0; j<10; j++)
           {
            strcpy(matrix[0],"     ----     ");
            strcpy(matrix[1],"    |    |    ");
            strcpy(matrix[2],"    |    |    ");
            strcpy(matrix[3]," ---      --- ");
            strcpy(matrix[4],"|            |");
            strcpy(matrix[5],"|            |");
            strcpy(matrix[6]," ---      --- ");
            strcpy(matrix[7],"    |    |    ");
            strcpy(matrix[8],"    |    |    ");
            strcpy(matrix[9],"     ----     ");

           }
     }
}



void printgrid()
{
     for (int i=0; i<30; i++)
     {
           for ( int j=0; j<30; j++)
           {
                 printf("%c", matrix[i][j]);
           }
           printf("\n");
     }
}




int main()
{

system("COLOR 0B");
loadgrid();
printgrid();

gotoxy(mx,my);

printf("v");


while (mx>0 && my>0)
{
     loadgrid();

     if (kbhit())
     {
           keypress=getch();

           if ((keypress == 'd') || (keypress == 'a') || (keypress == 'w') || (keypress == 's') || (keypress == 'S') || (keypress == 'D') || (keypress == 'A') || (keypress == 'W'))
            {
                 direction = keypress;
                 if (direction == 's' || direction == 'S')
                 {
                        gotoxy(mx,my);
                        printf(" ");
                        my++;
                        gotoxy(mx,my);
                        printf("v");
                 }
                 if (direction == 'w' || direction == 'W')
                 {
                    gotoxy(mx,my);
                    printf(" ");
                    my--;
                    gotoxy(mx,my);
                    printf("^");
                 }
                 if (direction == 'a' || direction == 'A')
                 {
                    gotoxy(mx,my);
                    printf(" ");
                    mx--;
                    gotoxy(mx,my);
                    printf("<");
                 }
                 if (direction == 'd' || direction == 'D')
                 {
                    gotoxy(mx,my);
                    printf(" ");
                    mx++;
                    gotoxy(mx,my);
                    printf(">");
                }

                 direction = ' ';
            }
     }
}

return 0;
}


Now, I tried to have something look ahead to the space they are walking to, but for some reason that is seeing invisible walls or something... Here's the code I tried:

Code
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>

int mx=5;
int my=4;
int i, j;
char direction;
char keypress;
char matrix[100][100];


void gotoxy(short x, short y)
{
     HANDLE hConsoleOutput;
     COORD Cursor_an_Pos = {x,y};
     hConsoleOutput = GetStdHandle (STD_OUTPUT_HANDLE);
     SetConsoleCursorPosition(hConsoleOutput, Cursor_an_Pos);
}



void loadgrid()
{    
    for(i=0; i<10; i++)
    {
           for(j=0; j<10; j++)
           {
            strcpy(matrix[0],"     ----     ");
            strcpy(matrix[1],"    |    |    ");
            strcpy(matrix[2],"    |    |    ");
            strcpy(matrix[3]," ---      --- ");
            strcpy(matrix[4],"|            |");
            strcpy(matrix[5],"|            |");
            strcpy(matrix[6]," ---      --- ");
            strcpy(matrix[7],"    |    |    ");
            strcpy(matrix[8],"    |    |    ");
            strcpy(matrix[9],"     ----     ");

           }
     }
}



void printgrid()
{
     for (int i=0; i<30; i++)
     {
           for ( int j=0; j<30; j++)
           {
                 printf("%c", matrix[i][j]);
           }
           printf("\n");
     }
}




int main()
{

system("COLOR 0B");
loadgrid();
printgrid();

gotoxy(mx,my);

printf("v");


while (mx>0 && my>0)
{
     loadgrid();

     if (kbhit())
     {
           keypress=getch();
           if ((keypress == 'd') || (keypress == 'a') || (keypress == 'w') || (keypress == 's') || (keypress == 'S') || (keypress == 'D') || (keypress == 'A') || (keypress == 'W'))
            {
                 direction = keypress;
                 if (direction == 's' || direction == 'S')
                 {
                    if(matrix[mx][(my + 2)] == ' ')
                    {
                        gotoxy(mx,my);
                        printf(" ");
                        my++;
                        gotoxy(mx,my);
                        printf("v");
                    }
                 }
                 if (direction == 'w' || direction == 'W')
                 {
                    if(matrix[mx][(my - 2)] == ' ')
                    {
                    gotoxy(mx,my);
                    printf(" ");
                    my--;
                    gotoxy(mx,my);
                    printf("^");
                    }
                 }
                 if (direction == 'a' || direction == 'A')
                 {
                    if(matrix[(mx - 2)][my] == ' ')
                    {
                    gotoxy(mx,my);
                    printf(" ");
                    mx--;
                    gotoxy(mx,my);
                    printf("<");
                    }
                 }
                 if (direction == 'd' || direction == 'D')
                 {
                    if(matrix[(mx + 2)][my] == ' ')
                    {
                    gotoxy(mx,my);
                    printf(" ");
                    mx++;
                    gotoxy(mx,my);
                    printf(">");
                    }
                 }

                 direction = ' ';
            }
     }
}

return 0;
}


Help meh plz!

Post has been edited 1 time(s), last time on Mar 23 2008, 10:52 pm by Falkoner.



None.

Mar 23 2008, 10:39 pm Doodle77 Post #2



what's the
Code
cout <<  endl  << matrix[mx - 1][my];
about?



None.

Mar 23 2008, 10:52 pm Falkoner Post #3



Oh, sorry, left my debugging code in there :P



None.

Mar 24 2008, 1:02 pm Falkoner Post #4



Anyone? Is this really that difficult?



None.

Mar 24 2008, 10:23 pm Falkoner Post #5



Nevermind, I figured it out, the x and y are switched, it's normal on the screen, but in the matrix it goes y x, not x y, so it all works now..



None.

Options
  Back to forum
Please log in to reply to this topic or to report it.
Members in this topic: None.
[2024-6-06. : 5:20 pm]
Ultraviolet -- I was kinda thinking something along these lines
[2024-6-06. : 2:23 pm]
NudeRaider -- I'll play the shadow out of you!
[2024-6-06. : 2:20 pm]
Vrael -- ooooo darker baby darker
[2024-6-06. : 2:20 pm]
Vrael -- yeah make it dark
[2024-6-06. : 2:20 pm]
Vrael -- ohhh yeah cast ur shadow right on my light bits
[2024-6-06. : 7:56 am]
Oh_Man -- It's nvidia shadowplay come on people!! get ur minds out of the gutter and join me in utopia
[2024-6-05. : 7:04 pm]
Ultraviolet -- NudeRaider Am I the only sick fuck who heard shadow play and started thinking what weird sex stuff it might be? :P
[2024-6-05. : 7:01 pm]
Ultraviolet -- Oh_Man
Oh_Man shouted: lol my shadowplay seems to think starcraft is diablo 4 now; i wonder if this is coz i had diablo 4 open the toher day
terrible game
[2024-6-05. : 12:47 pm]
Oh_Man -- lol my shadowplay seems to think starcraft is diablo 4 now; i wonder if this is coz i had diablo 4 open the toher day
Please log in to shout.


Members Online: Ultraviolet, Rawflesh0615, jun3hong