Imprimir texto en pantalla con pygame

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Imprimir texto en pantalla con pygame

Notapor algarafa » Dom Ene 11, 2009 4:37 pm

Bueno, he googleado, pero no he encontrado nada que me haya resolvido mi duda.
Estoy creando un archivo .py con funciones para luego poder hacer un memorión, de estos de emparejar dos simbolos o lo que sea. El código es el siguiente (son las primeras funciones que creo, es que acabo de aprender):

Código: Seleccionar todo
# -*- coding: iso-8859-1 -*-
# Este archivo contiene las funciones necesrias para poder crear el
# memorión. Pasemos a importar funciones y definirlas.
from random import random

# Con esta función podremos crear matrices vacías para rellenarlas
# más adelante.
def crea_matriz(filas, columnas):
   matriz = []
   for i in range (filas):
      matriz.append([None] * columnas)
   return matriz
         
# La siguiente función, te permite poner en una variable, una lista
# con las dimensiones de una matriz.
def dimensiones_matriz(matriz):
   return [len(matriz), len(matriz[0])]

# Ahora, hagamos una función que nos permita rellenar la matriz, con
# letras al azar, así la partida nunca será igual.
# Nota: Símbolo es la matriz en la que almanezaremos los caracteres.
def rellena_simbolos(simbolo):
   [filas, columnas] = dimensiones_matriz(simbolo)
   numcaracter = 0.0
   for i in range (filas):
      for j in range (columnas):
         caracter[i][j] = chr(ord('a') + int(numcaracter))
         numcaracter += 0.5
         
   # Ahora, desordenaremos al hazar la matriz, haciendo uso de la
   # función random, que genera un número entre 0.0 y 1.0 al azar.
   for i in range(1000):
      [f1, c1] = [int(filas * random()), int(columnas * random())]
      [f2, c2] = [int(filas * random()), int(columnas * random())]
      # Crearemos una variable que almacenara unos valores,
      # para ir asignandoselos a otras variables y así
      # intercambiarlos. Quizá diga más el código que mi
      # explicación.
      tmp = caracter[f1][c1]
      caracter[f1][c1] = caracter[f2][c2]
      simbolo[f2][c2] = tmp

El caso es que necesito crear otra función, que me permita imprimir la matriz con los caracteres en una ventana pygame. El problema es que no tengo ni idea de escribir texto con pygame. He mirado en los artículos, pero el artículo orientado a fuentes es de C.
Muchas gracias. :wink:
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Notapor endaramiz » Lun Ene 12, 2009 9:45 pm

http://www.losersjuegos.com.ar/foro/viewtopic.php?t=353
Aquí hay ejemplo de como imprimir texto. Aunque hay clases. Si no consigues aclararte, ya te haré un ejemplo más personalizado.

Saludos.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

¿Está bien?

Notapor algarafa » Mar Ene 13, 2009 7:58 pm

Bueno, yo he hecho esto y me ha funcionado, pero tengo una duda:
Código: Seleccionar todo
pygame.font.init()
fuente = pygame.font.Font(None, 50)
texto = fuente.render('Prueba', 1, (255, 0, 255))
screen.blit(texto, (0, 0))
pygame.display.flip()

En texto = fuente.render('Prueba', 1, (255, 0, 255)) ¿Qué significa el uno?
Gracias dvd!!!
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Re: ¿Está bien?

Notapor hugoruscitti » Mié Ene 14, 2009 1:11 pm

RAGPacho escribió:En texto = fuente.render('Prueba', 1, (255, 0, 255)) ¿Qué significa el uno?


Significa que el texto se imprimirá con los bordes difumindados
o suavizados. Intenta colocar 0 en lugar de 1 y verás la diferencia.

Te dejo parte de la traducción de pygame en la que
estamos trabajando, para que tengas mas referencias:

render

Imprime texto en una nueva superficie.

Font.render(text, antialias, color, background=None): return Surface

Genera una nueva superficie con el texto especificado dentro de ella. Pygame no provee una manera directa de imprimir texto en una superficie existente: en lugar de eso debe usar esta función para crear una imagen del texto y luego volcar esta imagen en la otra superficie.

El texto solamente puede ser de una linea: Los caracteres que indican salto de linea no se imprimen. El argumento antialias es un valor booleano: si vale True los caracteres tendrán bordes suaves. El argumento color es el color del texto, por ejemplo puede usar (0, 0, 255) para definir el color azul. El argumento opcional background es el color para utilizar de fondo. Si no se especifica un fondo, el área fuera del texto será transparente.

[...]


saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Ok!!!

Notapor algarafa » Mié Ene 14, 2009 7:45 pm

¡Ok! Gracias Hugo, sin duda estais haciendo un gran trabajo con la wiki. PAra gente que no tiene nociones de inglés, esta muy bien (por ejemplo para mi :oops: ). Me he estado mirando el motor que usais para la wiki y lo pobre en mi hosting. Está bastante bien, pero el programa está en inglés. Bueno, que gracias, eso del texto difuminado hay que probarlo podría ser útil.
¿Hay alguna manera de imprimir el valor de una variable? Es que pongo en donde iría el texto una variable que contiene un valor numérico, y me dice que nanay. He probado a ponerlo encerrado entre comillas y sin ellas, pero nada. Perdón por no hacer más que preguntas, si pudiera haría aportes pero todos teneís más nivel que yo, a ver si llega un noob para que pueda explicarle como hacer:
Código: Seleccionar todo
print 'Hello, world'

Jajajaja, como desvarío :lol:
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Re: Ok!!!

Notapor hugoruscitti » Jue Ene 15, 2009 1:49 pm

RAGPacho escribió:¿Hay alguna manera de imprimir el valor de una variable? Es que pongo en donde iría el texto una variable que contiene un valor numérico, y me dice que nanay. He probado a ponerlo encerrado entre comillas y sin ellas, pero nada.


Sí, se puede imprimir el valor de una variable siempre
y cuando sea una referencia a una cadena. Los valores
en python tienen tipo.

Para convertir un número a cadena de texto puedes
utilizar la función "str", por ejemplo:

Código: Seleccionar todo
numero = 1234567
cadena = str(numero)


a partir de ahí podrás imprimir la variable "cadena"
usando pygame.

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron