SDL mostrar inteiro na tela

3 respostas
programação
mmrosa

Pessoal, gostaria de saber como posso imprimir um inteiro na tela utilizando a bliblioteca sdl, eu consegui imprimir strings porém preciso imprimir inteiro tbm. Possuo uma lista com os nomes e respectivas pontuações de jogadores e tenho que mostrar o nome do jogador e sua pontuação na tela.

Segue o código:

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <stdio.h>
#include <stdlib.h>
#include "score.h"
#include <string.h>
#define FONTSIZE 18
   
/*
Para compilar gcc texto2.c -o texto2 -lSDL -lSDL_image -lSDL_ttf
*/

TTF_Font *fonte;

TTF_Font *carregarFonte(const char* arquivo, int tamanhoFonte){
    TTF_Font *fonte = TTF_OpenFont(arquivo, tamanhoFonte);
    if(!fonte)
        printf("Problema no carregamento da fonte!! %s\n", TTF_GetError());
    return fonte;
}


int main()
{
    SDL_Init(SDL_INIT_VIDEO); // Inicializa o SDL e o sistema de vídeo
    SDL_Init(SDL_INIT_TIMER);
    IMG_Init(IMG_INIT_PNG);

    TTF_Init();

    if(TTF_Init() < 0){
        //printf("TTF_Init> %s\n", TTF_GetError());
        return 0;
    }
    atexit(TTF_Quit);
    
    
    fonte = carregarFonte("/usr/share/fonts/truetype/freefont/FreeSerif.ttf",22);
    // criando surface's

    SDL_Surface *tela;
    SDL_Surface *texto;
    SDL_Color corTexto = {250, 250, 250};

    char msg[] = "Nunca desista de vc !";
    
    texto = TTF_RenderText_Solid(fonte,msg,corTexto);
    
    SDL_Event event; // Para os eventos

    tela = SDL_SetVideoMode(760, 600, 16, SDL_HWSURFACE|SDL_DOUBLEBUF); // Cria a janela

    SDL_WM_SetCaption("'_'Texto na tela'_'",NULL); // escrever mensagem na barra da tela

    // carregando imagens

    // rects

    // variaveis para o controle do icone no eixo y 
    
    SDL_BlitSurface(texto, NULL, tela, NULL);

    int enter = 0;    
    
    int done = 0; // Variável de controle do loop
    while (done == 0) // Loop principal
    {


        //  a fila de eventos e põe o evento mais antigo em "event"
        while (SDL_PollEvent(&event)) // Loop de eventos
        {

            // Verifica se o evento mais antigo é do tipo SDL_QUIT
            if (event.type == SDL_QUIT) // Se o usuário clicou para fechar a janela
                done = 1; // Encerre o loop

            // Verifica se o evento mais antigo é do tipo SDL_KEYDOWN
            if (event.type == SDL_KEYDOWN) // Se o usuário apertou um botão do teclado
            {
                // Verifica qual tecla foi apertada
                switch (event.key.keysym.sym)	
                {
                
                    case SDLK_RETURN: //SDLK_KP_ENTER
                  
                    printf("Apertou enter \n");
                    enter = 1; 
                        break;

                    case SDLK_UP:
                     
                        break;
                    case SDLK_DOWN:
                        break;
                    default:
                        break;
                }
            }

            if (event.type == SDL_KEYUP) // Se o usuário soltou um botão do teclado
            {
                // Verifica qual tecla foi solta
                switch (event.key.keysym.sym)
                {
               
               	    case SDLK_RETURN: //SDLK_KP_ENTER
                        printf("soltou o enter \n");
                        enter = 0;
                        break;
                    case SDLK_UP:
                   
                        break;
                    case SDLK_DOWN:
                    
                        break;
                    default:
                        break;
                }
            }

        }
    
        
        //SDL_BlitSurface(fundomenu,NULL,tela,NULL); // Blita a imagem em dest
        SDL_Delay(60); // Espera 60 milissegundos
        SDL_Flip(tela);

    }
    
    SDL_Quit(); // Fecha o SDL
    IMG_Quit();
    return 0;
}

3 Respostas

TerraSkilll

Use stringstream para exibir o valor numérico como string. Algo assim:

int score = 10;
std::stringstream strm;
strm << score;

imgTxt = TTF_RenderText_Solid( font, strm.str().c_str(), corTexto);

Referência: http://stackoverflow.com/questions/3067235/sdl-ttf-and-numbers-int

Abraço.

mmrosa

Muito obrigada por me responder, esqueci de falar que to usando C, acho que não tem essa stringstream pra C, acho que só tem pra c++ mas to pesquisando se tem algo parecido pra C.

mmrosa

Achei essa função sprintf, funcionou!

int pontuacao = 368;

char pb[16];

sprintf(pb, %d, pontuacao);

texto2 = TTF_RenderText_Solid(fonte,pb,corTexto);
Criado 7 de janeiro de 2017
Ultima resposta 8 de jan. de 2017
Respostas 3
Participantes 2