mira, esta es la situacion, quize arreglar un poco ese codigo y colocar las cosas que faltaban y las que no estaban en su posicion. no pude correrlo porque python me dice que no puede importar pygame, y eso que esta instalado, en fin, tendre que revisar esos paquetes en mi Parabola GNU/Linux. por el momento tendras que probrar tu el codigo y ver si funciona como buscas, si no fuera el caso, te invito a hackearlo a tu gusto ;D.
el valor de la funcion la cambias presionando las teclas de direccion derecha e izquierdano olvides:
- tener cuidado con la identacion de los bloques de codigo
- comentar todo lo que creas que nadie mas que tu entendera (o lo que tu no vayas a entender cuando vuelvas abrir ese archivo en quien sabe cuantos meses)
- buscar ejemplos de codigo sobre el lenguaje y librerias que tienes pensado desarrollar algo
- comprender lo que deseas hacer y expresarlo como se debe matematicamente (si deseas usar formulas)
- tener documentacion a mano sobre las funciones de una libreria, como por ejemplo [url=esta dobre pygame.draw]http://www.pygame.org/docs/ref/draw.html[/url]
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import random
def dibujar_cuadricula(espaciado=20, fondo=(255,255,255)):
pygame.display.get_surface().fill(fondo)
for x in range(0,xp,espaciado):
pygame.draw.line(pygame.display.get_surface(), (0,0,0) , (x, 0), (x, 400))
for y in range(0,yp,espaciado):
pygame.draw.line(pygame.display.get_surface(), (0,0,0) , (0, y), (400, y))
def listar_coordenadas(funcion, ancho_pantalla, alto_pantalla):
xp = ancho_pantalla
yp = alto_pantalla
lista = []
for x in range(-6,7):
lista.append((x * 20 + xp / 2, yp / 2 - funcion * 20))
return lista
xp,yp = 400,400
pygame.init()
pantalla = pygame.display.set_mode((xp,yp))
tiempo = pygame.time.Clock()
#pygame.draw.line(pantalla,(0,0,0), (yp/2,0),(yp/2,xp),4)
#pygame.draw.line(pantalla,(0,0,0), (0,xp/2),(yp,xp/2),4)
#pygame.draw.circle(pantalla, (0,0,0), (xp/2,yp/2),5)
#pygame.display.flip()
#### La pantalla esta cargada totalmente a partir de aqui
colora = random.randint(0,250)
colorb = random.randint(0,250)
colorc = random.randint(0,250)
funcion = 1
lista = listar_coordenadas(funcion, xp, yp)
salir = False
# aqui se deja este codigo por aparte para no marearme
# no seria mala idea comentar que hace ciertas partes de codigo, como este por
# ejemplo :-/
# funcion = raw_input("f(x)= ")
# listacoordenadas = []
# for indice in range(len(listacoordenadas)-1):
# pygame.draw.line(pantalla,(colora,colorb,colorc), listacoordenadas[indice],listacoordenadas[indice+1],4)
# pygame.display.flip()
#
#raw_input()
while not salir:
# mantegaos el framerate en 60
tiempo.tick_busy_loop(60)
# manejamos los eventos de entrada, esto es muuuuy importante y siempre debe
# ser integrado a cualquier codigo sea Pygame o PySFML.
for evento in pygame.event.get():
if evento.type == QUIT:
salir = True
if evento.type == KEYDOWN:
if evento.key == K_ESCAPE:
salir = True
elif evento.key == K_RIGHT:
funcion = funcion + 1
# recalculamos la lista de coordenadas
lista = listar_coordenadas(funcion, xp, xy)
# print "funcion de valor {0} ahora vale {1}".format(funcion - 1,
# funcion)
elif evento.key == K_LEFT:
funcion = funcion - 1
# recalculamos la lista de coordenadas
lista = listar_coordenadas(funcion, xp, xy)
# print "funcion de valor {0} ahora vale {1}".format(funcion + 1,
# funcion)
# ahora nos corresponde dibujar los datos calculados por pantalla
#primero limpiemos el desastre del frame anterior
dibujar_cuadricula()
# ahora dibujamos las lineas con las coordenadas que calculamos
for ind in lista:
try:
pygame.draw.line(pantalla, (colora, colorb, colorc), ind[0], ind[1], 4)
except:
print "error al momento de dibujar las lineas con las coordenadas calculadas"
print "coordenadas no validas para el metodo Line de pygame"
print "ind[0]", ind[0], "ind[1]", ind[1]
exit(1)
# cambiamos el buffer
pygame.display.flip()
raw_input()