Original Post
This is my full code:
And this is the function with the array that i''m havin a problem with:
My problem is, the array "int Landscape[640][480];" . When i run the game, it crashs. But if i make the array "int Landscape[540][480];", it doesn''t crash.
any ideas why, or any suggestions as how to fix it?
Thanks.
#include <SDL/sdl.h>
#include <windows.h>
void DrawPixel(SDL_Surface *screen, int x, int y, Uint8 R, Uint8 G, Uint8 B) {
Uint32 color = SDL_MapRGB(screen->format, R, G, B);
switch (screen->format->BytesPerPixel)
{
case 1:
{
Uint8 *bufp;
bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
*bufp = color;
}
break;
case 2:
{
Uint16 *bufp;
bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
*bufp = color;
}
break;
case 3:
{
Uint8 *bufp;
bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3;
if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
{
bufp[0] = color;
bufp[1] = color >> 8;
bufp[2] = color >> 16;
} else {
bufp[2] = color;
bufp[1] = color >> 8;
bufp[0] = color >> 16;
}
}
break;
case 4:
{
Uint32 *bufp;
bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
*bufp = color;
}
break;
}
}
void Slock(SDL_Surface *screen) {
if ( SDL_MUSTLOCK(screen) ) {
if ( SDL_LockSurface(screen) < 0 ) {
return;
}
}
}
void Sulock(SDL_Surface *screen) {
if ( SDL_MUSTLOCK(screen) ) {
SDL_UnlockSurface(screen);
}
}
void DrawLandscape(SDL_Surface *screen);
int main(int argc, char *argv[]) {
SDL_Surface *screen;
SDL_Init(SDL_INIT_VIDEO);
atexit(SDL_Quit);
screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
bool done=false;
DrawLandscape(screen);
while(!done) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if ( event.type == SDL_QUIT ) {
done=true;
}
}
}
return 0;
}
void DrawLandscape(SDL_Surface *screen) {
int Landscape[640][480];
int height=0;
int tmp=0;
int old1=199;
int old2=200;
int x;
int y;
for(x=0;x<640;x++){
for(y=0;y<480;y++) {
Landscape[x][y]=0;
}
}
srand(GetTickCount());
for(x=0;x<640;x++) {
if(old2 >= old1){
height=old1-(rand()%5);
old2=old1-2;
old1=height;
} else {
height=old1+(rand()%5);
old2=old1+2;
old1=height;
}
for(y=0;y<height;y++) {
Landscape[x][y]=1;
}
}
Slock(screen);
for(x=0;x<640;x++){
for(y=0;y<480;y++) {
if(Landscape[x][y]==1){
DrawPixel(screen,x,y,0,0,255);
} else {
DrawPixel(screen,x,y,0,255,0);
}
}
}
Sulock(screen);
SDL_Flip(screen);
}
void DrawLandscape(SDL_Surface *screen) {
int Landscape[640][480];
int height=0;
int tmp=0;
int old1=199;
int old2=200;
int x;
int y;
for(x=0;x<640;x++){
for(y=0;y<480;y++) {
Landscape[x][y]=0;
}
}
srand(GetTickCount());
for(x=0;x<640;x++) {
if(old2 >= old1){
height=old1-(rand()%5);
old2=old1-2;
old1=height;
} else {
height=old1+(rand()%5);
old2=old1+2;
old1=height;
}
for(y=0;y<height;y++) {
Landscape[x][y]=1;
}
}
Slock(screen);
for(x=0;x<640;x++){
for(y=0;y<480;y++) {
if(Landscape[x][y]==1){
DrawPixel(screen,x,y,0,0,255);
} else {
DrawPixel(screen,x,y,0,255,0);
}
}
}
Sulock(screen);
SDL_Flip(screen);
}