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.
[05:59 am]
NudeRaider -- *is
[05:17 am]
NudeRaider -- despite all its flaws the sound design its fantastic
[10:29 pm]
Oh_Man -- homeworld 3 = massive disappointment
[2024-5-14. : 10:05 am]
Moose -- ya
[2024-5-14. : 5:23 am]
zsnakezz -- yes
[2024-5-12. : 8:51 pm]
l)ark_ssj9kevin -- Are you excited for Homeworld 3?
[2024-5-12. : 8:44 pm]
l)ark_ssj9kevin -- Hi Brusilov
[2024-5-12. : 4:35 pm]
O)FaRTy1billion[MM] -- Brusilov
Brusilov shouted: Hey, what happened to EUDDB? Is there a mirror for it somewhere? Need to do a little research.
my server that was hosting it died
[2024-5-10. : 8:46 pm]
NudeRaider -- Brusilov
Brusilov shouted: Hey, what happened to EUDDB? Is there a mirror for it somewhere? Need to do a little research.
https://armoha.github.io/eud-book/
[2024-5-10. : 8:36 am]
Brusilov -- Hey, what happened to EUDDB? Is there a mirror for it somewhere? Need to do a little research.
Please log in to shout.


Members Online: Roy