Single Error.

Started by
7 comments, last by the_moo 19 years, 3 months ago
I think I have a map working now, but it's giving me an error, that's wierd and I cant find it. Help please.

#include <iostream>
#include <SDL/SDL.h>
using namespace std;
SDL_Surface *screen;
SDL_Surface *grass;
SDL_Surface *water;
SDL_Surface *wall;
SDL_Surface *tree;
int map[10][10] = {{4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
                   {4, 1, 1, 1, 1, 1, 1, 1, 1, 4}, //error here: Syntax Error before { token
                   {4, 1, 2, 2, 1, 1, 2, 2, 1, 4},
                   {4, 1, 3, 3, 3, 3, 3, 3, 1, 4},
                   {4, 1, 2, 2, 1, 1, 2, 2, 1, 4},
                   {4, 1, 1, 1, 1, 1, 1, 1, 1, 4},
                   {4, 1, 3, 3, 3, 3, 3, 3, 1, 4},
                   {4, 1, 1, 1, 4, 4, 1, 1, 1, 4},
                   {4, 1, 1, 1, 1, 1, 1, 1, 1, 4},
                   {4, 4, 4, 4, 4, 4, 4, 4, 4, 4}};
int xpos = 0;
int ypos = 0;
int InitImages() {
  grass = SDL_LoadBMP("grass.bmp");
  water = SDL_LoadBMP("water.bmp");
  wall = SDL_LoadBMP("wall.bmp");
  tree = SDL_LoadBMP("tree.bmp");
  return 0;
}
int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *destrect);
void drawIMG(SDL_Surface *img, int x, int y) {
  SDL_Rect dest;
  dest.x = x;
  dest.y = y;
  SDL_BlitSurface(img, NULL, screen, &dest);
}
void drawMap() {
  for(int y=0; y<9; y++) {
    xpos = 0;
    for(int x=0; x<9; x++) {
      if(x == 9) {
        ypos =+ 32;
      }
      if(map[x][y] == 1) {
        drawIMG(grass, xpos, ypos);
        SDL_Flip(screen);
      }
      if(map[x][y] == 2) {
        drawIMG(water, xpos, ypos);
        SDL_Flip(screen);
      }
      if(map[x][y] == 3) {
        drawIMG(wall, xpos, ypos);
        SDL_Flip(screen);
      }
      if(map[x][y] == 4) {
        drawIMG(tree, xpos, ypos);
        SDL_Flip(screen);
      }
      xpos =+ 32;
    }
  }
}
int main(int argc, char *argv[]) {
  if(SDL_Init(SDL_INIT_VIDEO) < 0) {
    cout<<"Unable to init SDL."<<endl;
    SDL_GetError();
  }
  atexit(SDL_Quit);
  screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
  if(screen == NULL) {
    cout<<"Unable to set video mode."<<endl;
    SDL_GetError();
  }
  InitImages();
  int done=0;
  while(done == 0)
  {
    SDL_Event event;

    while ( SDL_PollEvent(&event) )
    {
      if ( event.type == SDL_QUIT )  {  done = 1;  }

      if ( event.type == SDL_KEYDOWN )
      {
        if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
      }
    }
    drawMap();
  }
  return 0;
}




Meta AdamOne of a million noob C++ programmers.
Advertisement
It looks like you're missing a set of {}'s.

int map[10][10] = {{4, 4, 4, 4, 4, 4, 4, 4, 4, 4},                   {4, 1, 1, 1, 1, 1, 1, 1, 1, 4},                    {4, 1, 2, 2, 1, 1, 2, 2, 1, 4},                   {4, 1, 3, 3, 3, 3, 3, 3, 1, 4},                   {4, 1, 2, 2, 1, 1, 2, 2, 1, 4},                   {4, 1, 1, 1, 1, 1, 1, 1, 1, 4},                   {4, 1, 3, 3, 3, 3, 3, 3, 1, 4},                   {4, 1, 1, 1, 4, 4, 1, 1, 1, 4},                   {4, 1, 1, 1, 1, 1, 1, 1, 1, 4},                   {4, 4, 4, 4, 4, 4, 4, 4, 4, 4}};
oh yea, whoopsies, havent declared arrays like that in a long time and forgot hehe. Thanks.
Meta AdamOne of a million noob C++ programmers.
Ok now I'm having the problem of it not drawing the map out, it is just drawing the four tiles in one place, constantly. I dont know the problem now.
Meta AdamOne of a million noob C++ programmers.
hey,
i believe that where you have "=+" (in 2 places i think) it should be "+=".
i just tried that and it will cause the number to stay "=" the right side instead of add it by the right side (if you use "=+") :)

that should fix ya problem :)
the_moo
Yea, I saw that and changed it, and now it's giving me 8 tiles across, with 4 or so of them constantly changing..

edit: Still cant find the prob...

[Edited by - Meta Adam on January 16, 2005 11:23:12 PM]
Meta AdamOne of a million noob C++ programmers.
ok, see this:
if (x == 9) {
ypos += 32;
}
it never happens because your loop goes from 0 (int x = 0) to *8* (x<9)
it never gets to 9. this should fix the problem of only 1 row (im assuming this is the 8 tiles being drawn).
also, i see you have 10 tiles per row...that means your loops should go like so:
(int x = 0; x<=9; ++x)
(int y = 0; y<=9; ++y)
in the same places as they are now.
changing these loops should also fix the first problem with only 8 tiles showing.

let me know how it works now :)
the_moo
w00t I'm getting the right graphics now, I had to switch x and y values, on the check maps like if(map[y][x] == 4) instead of x, y. But instead of it only outputting the map once It does it again right under it. So I changed the drawMap function to int type, and have it return 1, but that didnt work.
Meta AdamOne of a million noob C++ programmers.
at the start of the drawMap function you need to set xpos and ypos to 0 again...i think that should fix that problem.
let us know again
the_moo

This topic is closed to new replies.

Advertisement