Problem with tetris clone

Started by
6 comments, last by rip-off 17 years, 1 month ago
I'm trying ot make a tetris clone with SDL. I have only made very litle yet, but the first bug is a fact; sometimes draw_map() doesn't seem to write out the figure. It's about every fifth time this happening. The code look like this:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <SDL/SDL.h>
#include "atetris.h"

SDL_Surface *display_surface;
int map[HEIGHT][WIDTH];
Figure current_figure;
int figure_x, figure_y;

int main(int argc, char *argv[])
{
    SDL_Event event;
    
    init();
    current_figure = figures[nrand(0, 14)];
    place_figure_on_top();
    
    while (1) {
        if (SDL_PollEvent(&event) == 1) {
            if (event.type == SDL_QUIT) {
                break;
            }
        }
        draw_map();
    }
    terminate();
    debug();
    
    return 0;
}

void init(void)
{
    int i, j;
    
    if (SDL_Init(SDL_INIT_VIDEO) == -1) {
        fprintf(stderr, "Couldn't initialize SDL.\n");
    }
    display_surface = SDL_SetVideoMode(WIDTH * BLOCK_SIZE, HEIGHT * BLOCK_SIZE,
                                       0, SDL_ANYFORMAT);
    if (display_surface == NULL) {
        fprintf(stderr, "Could't set the video mode.\n");
    }
    for (i = 0; i < HEIGHT; i++) {
        for (j = 0; j < WIDTH; j++) {
            map[j] = NOTHING;
        }
    }
    srand((unsigned int) time((time_t *) NULL));
}

void terminate(void)
{
    SDL_Quit();
}

void draw_map(void)
{
    int i, j;
    SDL_Surface *block;
    SDL_Rect src_rect, dest_rect;
    
    for (i = 0; i < HEIGHT; i++) {
        for (j = 0; j < WIDTH; j++) {
            if (map[j] != NOTHING) {
                block = SDL_LoadBMP(block_images[map[j]]);
                src_rect.x = src_rect.y = 0;
                src_rect.w = src_rect.h = BLOCK_SIZE;
                dest_rect.x = j * BLOCK_SIZE;
                dest_rect.y = i * BLOCK_SIZE;
                dest_rect.w = dest_rect.h = BLOCK_SIZE;
                SDL_BlitSurface(block, &src_rect, display_surface, &dest_rect);
            }
        }
    }
    SDL_UpdateRect(display_surface, 0, 0, 0, 0);
}

void place_figure_on_top(void)
{
    int i, j;
    
    do {
        figure_x = nrand(0, WIDTH);
    }
    while (figure_x + current_figure.width > WIDTH - 1);
    figure_y = 0;
    
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++) {
            if (current_figure.pattern[j] != NOTHING) {
                map[j + figure_x] = current_figure.pattern[j];
            }
        }
    }
}

int nrand(int lower, int upper)
{
    int diff = upper - lower + 1;
    int a = rand() % diff + lower;
    
    return a;
}

void debug(void)
{
    int i, j;
    
    for (i = 0; i < HEIGHT; i++) {
        for (j = 0; j < WIDTH; j++) {
            printf("%d", map[j]);
        }
        putchar('\n');
    }
}
Advertisement
OK... this is totally just a shot in the dark... I don't understand exactly what isn't drawing to the screen.

But you mention every 5th.

for (i = 0; i < 4; i++) {    for (j = 0; j < 4; j++) {        if (current_figure.pattern[j] != NOTHING) {            map[j + figure_x] = current_figure.pattern[j];        }    }}


This cycles through and execute 4 times. 0, 1, 2, 3. Maybe try i <= 4 and j <= 4?

I mean that nothing (not a single block) gets drawn about every fifth time.
Do you realise that you are loading every image from disk multiple times every frame? Thats such a waste, try changing it so that images are loaded once. Or at least remember to SDL_FreeSurface() all those images ( that is one hell of a memory leak [smile] ).

After that I might try look harder at your drawing code. [grin]
OK, now I load every image at the beginning of the game and just blit the image I want. But still the same problem.
Quote:Original post by Adam4444
OK, now I load every image at the beginning of the game and just blit the image I want. But still the same problem.


Try post your updated code, I will try running it. It *looks* right...

Also, by "fifth time", I assume you mean "every fifth frame" or something. But perhaps you mean every fifth map tile. Can you reword your problem, or perhaps post a screenshot of expected vs actual output?
The code looks like this right now:
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <time.h>#include <SDL/SDL.h>#include "atetris.h"SDL_Surface *display_surface;SDL_Surface *blocks[8];SDL_TimerID timer;int map[HEIGHT][WIDTH];Figure current_figure;int figure_x, figure_y;int main(int argc, char *argv[]){    SDL_Event event;        init();    current_figure = figures[nrand(0, 14)];    place_figure_on_top();    while (1) {        if (SDL_PollEvent(&event) == 1) {            if (event.type == SDL_QUIT) {                break;            }            if (event.type == SDL_USEREVENT && event.user.code == MOVE_FIGURE_DOWN) {                if (move_figure_down() == false) {                    current_figure = figures[nrand(0, 14)];                    place_figure_on_top();                }                            }        }        draw_map();    }    terminate();    debug();        return 0;}void init(void){    int i, j;        if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) {        fprintf(stderr, "Couldn't initialize SDL.\n");        exit(1);    }    display_surface = SDL_SetVideoMode(WIDTH * BLOCK_SIZE, HEIGHT * BLOCK_SIZE,                                       0, SDL_ANYFORMAT);    if (display_surface == NULL) {        fprintf(stderr, "Could't set the video mode.\n");        exit(1);    }    for (i = 0; i < HEIGHT; i++) {        for (j = 0; j < WIDTH; j++) {            map[j] = NOTHING;        }    }    for (i = 0; i < 8; i++) {        blocks = SDL_LoadBMP(block_images);    }    timer = SDL_AddTimer(1000, do_move_figure_down, NULL);    srand((unsigned int) time((time_t *) NULL));}void terminate(void){    SDL_Quit();}void draw_map(void){    int i, j;    SDL_Surface *block;    SDL_Rect src_rect, dest_rect;        for (i = 0; i < HEIGHT; i++) {        for (j = 0; j < WIDTH; j++) {            src_rect.x = src_rect.y = 0;            src_rect.w = src_rect.h = BLOCK_SIZE;            dest_rect.x = j * BLOCK_SIZE;            dest_rect.y = i * BLOCK_SIZE;            dest_rect.w = dest_rect.h = BLOCK_SIZE;            SDL_BlitSurface(blocks[map[j]], &src_rect, display_surface, &dest_rect);        }    }    SDL_UpdateRect(display_surface, 0, 0, 0, 0);}void place_figure_on_top(void){    int i, j;        do {        figure_x = nrand(0, WIDTH);    }    while (figure_x + current_figure.width > WIDTH - 1);    figure_y = 0;        for (i = 0; i < 4; i++) {        for (j = 0; j < 4; j++) {            if (current_figure.pattern[j] != NOTHING) {                map[j + figure_x] = current_figure.pattern[j];            }        }    }}bool move_figure_down(void){    int coordinats[4][2];    int coordinats_index = 0;    int i, j;        for (i = 0; i < 4; i++) {        for (j = 0; j < 4; j++) {            if (map[j + figure_x] &gt; <span class="cpp-number">0</span>) {<br>                coordinats[coordinats_index][<span class="cpp-number">0</span>] = i + figure_y;<br>                coordinats[coordinats_index][<span class="cpp-number">1</span>] = j + figure_x;<br>                coordinats_index++;<br>            }<br>        }<br>    }<br>    <span class="cpp-keyword">for</span> (i = <span class="cpp-number">0</span>; i &lt; <span class="cpp-number">4</span>; i++) {<br>        <span class="cpp-keyword">for</span> (j = <span class="cpp-number">0</span>; j &lt; <span class="cpp-number">4</span>; j++) {<br>            map[j + figure_x] = <span class="cpp-number">0</span>;<br>        }<br>    }<br>    <span class="cpp-keyword">for</span> (i = <span class="cpp-number">0</span>; i &lt; <span class="cpp-number">4</span>; i++) {<br>        <span class="cpp-keyword">if</span> (map[coordinats<span style="font-weight:bold;">[<span class="cpp-number">0</span>] + <span class="cpp-number">1</span>][coordinats<span style="font-weight:bold;">[<span class="cpp-number">1</span>]] == NOTHING) {<br>            map[coordinats<span style="font-weight:bold;">[<span class="cpp-number">0</span>] + <span class="cpp-number">1</span>][coordinats<span style="font-weight:bold;">[<span class="cpp-number">1</span>]] = current_figure.color;<br>        }<br>        <span class="cpp-keyword">else</span> {<br>            map[coordinats<span style="font-weight:bold;">[<span class="cpp-number">0</span>]][coordinats<span style="font-weight:bold;">[<span class="cpp-number">1</span>]] = current_figure.color;<br>        }<br>    }<br>    figure_y++;<br>    <br>    <span class="cpp-keyword">return</span> <span class="cpp-keyword">true</span>;<br>}<br><br>Uint32 do_move_figure_down(Uint32 interval, <span class="cpp-keyword">void</span> *param)<br>{<br>    SDL_Event event;<br>    <br>    event.type = SDL_USEREVENT;<br>    event.user.code = MOVE_FIGURE_DOWN;<br>    event.user.data1 = <span class="cpp-number">0</span>;<br>    event.user.data2 = <span class="cpp-number">0</span>;<br>    SDL_PushEvent(&amp;event);<br>    <br>    <span class="cpp-keyword">return</span> interval;<br>}<br><br><span class="cpp-keyword">int</span> nrand(<span class="cpp-keyword">int</span> lower, <span class="cpp-keyword">int</span> upper)<br>{<br>    <span class="cpp-keyword">int</span> diff = upper - lower + <span class="cpp-number">1</span>;<br>    <span class="cpp-keyword">int</span> a = rand() % diff + lower;<br>    <br>    <span class="cpp-keyword">return</span> a;<br>}<br><br><span class="cpp-keyword">void</span> debug(<span class="cpp-keyword">void</span>)<br>{<br>    <span class="cpp-keyword">int</span> i, j;<br>    <br>    <span class="cpp-keyword">for</span> (i = <span class="cpp-number">0</span>; i &lt; HEIGHT; i++) {<br>        <span class="cpp-keyword">for</span> (j = <span class="cpp-number">0</span>; j &lt; WIDTH; j++) {<br>            printf(<span class="cpp-literal">"%d"</span>, map<span style="font-weight:bold;">[j]);<br>        }<br>        putchar('\n');<br>    }<br>}<br><br><br></pre></div><!–ENDSCRIPT–><br><br>And the header; atetris.h: <!–STARTSCRIPT–><!–source lang="cpp"–><div class="source"><pre><span class="cpp-directive">#ifndef</span> GAME_H<br><span class="cpp-directive">#define</span> GAME_H<br><br><span class="cpp-directive">#define</span> WIDTH            <span class="cpp-number">10</span><br><span class="cpp-directive">#define</span> HEIGHT           <span class="cpp-number">20</span><br><span class="cpp-directive">#define</span> BLOCK_SIZE       <span class="cpp-number">20</span><br><span class="cpp-directive">#define</span> COLOR_BLUE       <span class="cpp-number">1</span><br><span class="cpp-directive">#define</span> COLOR_BROWN      <span class="cpp-number">2</span><br><span class="cpp-directive">#define</span> COLOR_CYAN       <span class="cpp-number">3</span><br><span class="cpp-directive">#define</span> COLOR_GREEN      <span class="cpp-number">4</span><br><span class="cpp-directive">#define</span> COLOR_MAGENTA    <span class="cpp-number">5</span><br><span class="cpp-directive">#define</span> COLOR_RED        <span class="cpp-number">6</span><br><span class="cpp-directive">#define</span> COLOR_WHITE      <span class="cpp-number">7</span><br><span class="cpp-directive">#define</span> MOVE_FIGURE_DOWN <span class="cpp-number">8</span><br><br><span class="cpp-keyword">typedef</span> <span class="cpp-keyword">struct</span> Figure_ {<br>    <span class="cpp-keyword">int</span> width;<br>    <span class="cpp-keyword">int</span> color;<br>    <span class="cpp-keyword">int</span> pattern[<span class="cpp-number">4</span>][<span class="cpp-number">4</span>];<br>} Figure;<br><br><span class="cpp-keyword">void</span> init(<span class="cpp-keyword">void</span>);<br><span class="cpp-keyword">void</span> terminate(<span class="cpp-keyword">void</span>);<br><span class="cpp-keyword">void</span> place_figure_on_top(<span class="cpp-keyword">void</span>);<br><span class="cpp-keyword">bool</span> move_figure_down(<span class="cpp-keyword">void</span>);<br><span class="cpp-keyword">void</span> draw_map(<span class="cpp-keyword">void</span>);<br>Uint32 do_move_figure_down(Uint32 interval, <span class="cpp-keyword">void</span> *param);<br><span class="cpp-keyword">int</span> nrand(<span class="cpp-keyword">int</span> lower, <span class="cpp-keyword">int</span> upper);<br><span class="cpp-keyword">void</span> debug(<span class="cpp-keyword">void</span>);<br><br><span class="cpp-keyword">const</span> Figure figures[<span class="cpp-number">15</span>] = {<br>    {<br>        <span class="cpp-number">2</span>,<br>        COLOR_BLUE,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}, <br>         {<span class="cpp-number">0</span>, <span class="cpp-number">1</span>, <span class="cpp-number">1</span>, <span class="cpp-number">0</span>}, <br>         {<span class="cpp-number">0</span>, <span class="cpp-number">1</span>, <span class="cpp-number">1</span>, <span class="cpp-number">0</span>}, <br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">4</span>,<br>        COLOR_BROWN,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">2</span>, <span class="cpp-number">2</span>, <span class="cpp-number">2</span>, <span class="cpp-number">2</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">1</span>,<br>        COLOR_BROWN,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">2</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">2</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">2</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">2</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>       <span class="cpp-number">3</span>,<br>       COLOR_CYAN,<br>       {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>        {<span class="cpp-number">0</span>, <span class="cpp-number">3</span>, <span class="cpp-number">3</span>, <span class="cpp-number">0</span>},<br>        {<span class="cpp-number">3</span>, <span class="cpp-number">3</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>        {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">2</span>,<br>        COLOR_CYAN,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">3</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">3</span>, <span class="cpp-number">3</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">3</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">3</span>,<br>        COLOR_GREEN,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">4</span>, <span class="cpp-number">4</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">4</span>, <span class="cpp-number">4</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">2</span>,<br>        COLOR_GREEN,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">4</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">4</span>, <span class="cpp-number">4</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">4</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">2</span>,<br>        COLOR_MAGENTA,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">5</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">5</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">5</span>, <span class="cpp-number">5</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">3</span>,<br>        COLOR_MAGENTA,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">5</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">5</span>, <span class="cpp-number">5</span>, <span class="cpp-number">5</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">2</span>,<br>        COLOR_RED,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">6</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">6</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">6</span>, <span class="cpp-number">6</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">3</span>,<br>        COLOR_RED,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">6</span>, <span class="cpp-number">6</span>, <span class="cpp-number">6</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">6</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">3</span>,<br>        COLOR_WHITE,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">7</span>, <span class="cpp-number">7</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">2</span>,<br>        COLOR_WHITE,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">7</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">3</span>,<br>        COLOR_WHITE,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">7</span>, <span class="cpp-number">7</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    },<br>    {<br>        <span class="cpp-number">2</span>,<br>        COLOR_WHITE,<br>        {{<span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">7</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">7</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>},<br>         {<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>}}<br>    }<br>};<br><span class="cpp-keyword">const</span> <span class="cpp-keyword">char</span> *block_images[<span class="cpp-number">8</span>] = {<span class="cpp-literal">"media/block_empty.bmp"</span>, <br>                               <span class="cpp-literal">"media/block_brown.bmp"</span>,<br>                               <span class="cpp-literal">"media/block_cyan.bmp"</span>,<br>                               <span class="cpp-literal">"media/block_green.bmp"</span>,<br>                               <span class="cpp-literal">"media/block_magenta.bmp"</span>,<br>                               <span class="cpp-literal">"media/block_red.bmp"</span>,<br>                               <span class="cpp-literal">"media/block_white.bmp"</span>};<br><br><span class="cpp-directive">#endif</span><br><br><br></pre></div><!–ENDSCRIPT–><br><br>Well, I'm so bad at explaining things, at least in english. But I meant about every fifth time I start the game draw_map() doesn't seems to draw anything.
It seems to work for me (except when the piece falls off the edge of the screen your program crashed, but I can see that you have yet to implement that code).

Seeing as I don't have your image bitmaps, I made SDL_Surfaces in memory and filled them with a colour. So maybe the issue is with your images, I see no error checking where you load them ( check for NULL return values ).

If you wish to try the code I used and see if it still has the same problem on your machine, replace init() with this:
void init(void){    int i, j;    SDL_PixelFormat *format;    /* some random colours */    Uint32 colours[8] = {0x0,0xff,0xff00,0xff0000,0xffff,0xff00ff,0xffff00,0xffffff};    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) {        fprintf(stderr, "Couldn't initialize SDL.\n");        exit(1);    }    display_surface = SDL_SetVideoMode(WIDTH * BLOCK_SIZE, HEIGHT * BLOCK_SIZE,                                       0, SDL_ANYFORMAT);    if (display_surface == NULL) {        fprintf(stderr, "Could't set the video mode.\n");        exit(1);    }    for (i = 0; i < HEIGHT; i++) {        for (j = 0; j < WIDTH; j++) {            map[j] = NOTHING;        }    }    format = display_surface->format;    for (i = 0; i < 8; i++) {        blocks = SDL_CreateRGBSurface(0, BLOCK_SIZE, BLOCK_SIZE, 32,format->Rmask, format->Gmask, format->Bmask, format->Amask);        if( blocks == NULL )        {            fprintf(stderr,"CreateRGBSurface() error: %s",SDL_GetError());            fflush(stderr);            exit(1);        }        SDL_FillRect(blocks,NULL,colours);    }    timer = SDL_AddTimer(1000, do_move_figure_down, NULL);    srand((unsigned int) time((time_t *) NULL));}

This topic is closed to new replies.

Advertisement