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:47 pm]
NimoStar -- If its any consolation, the human brain would still mop the floor with this bot if it wasn't limited by the mechanical interface
[05:34 pm]
NimoStar -- Well. The bot didn't come up with any new strategy. It just has superhuman micro. Hard to beat that. I reckon even the simplest dedicated chess engines are unbeatable for humans now.
[02:13 pm]
Oh_Man -- all g
[10:54 am]
NudeRaider -- Oh_Man
Oh_Man shouted: NudeRaider did u watch the entire video? it's not one game. it's currently dominating the ladder at number 1 position. do ur research first!
Oops, caught me there, no I haven't. :( I was imagining how the game went. Sorry for that. Watching it now. brb
[10:52 am]
NudeRaider -- NimoStar
NimoStar shouted: They were not "Unprepared" that was their fifth loss in a row against the bot. The other replays are also available
that doesn't mean he was prepared. When humans come around with new strategies it often takes weeks until the pros figure out how to shut it down. Oh_Man that's certainly a way more convincing argument for micro being "too good to beat".
[09:43 am]
DiearAnother -- wirefram
[08:35 am]
NimoStar -- Well, pros showed that long ago... half of zerg pros just ling muta rush
[08:35 am]
NimoStar -- " its shown is that you can trade 1000's of apm to make up for lack of strategy"
[03:25 am]
Oh_Man -- https://youtu.be/R_6bsf9REkY anyone ever tried playing SC ghost?
Please log in to shout.


Members Online: Symmetry