Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHector Martinez <hectorsantacruz@hotmail.com>2013-01-23 21:32:13 (GMT)
committer Hector Martinez <hectorsantacruz@hotmail.com>2013-01-23 21:32:13 (GMT)
commit2b95a2a53819101560350b1eca6bd36298694509 (patch)
treed922ba8ae8dc5b726573fa085aa08e352d394572
parent1355f007987916d4233d6198531f6c7190c1df4c (diff)
Aplicacion terminada
-rw-r--r--activity.py178
-rwxr-xr-xboard.py177
2 files changed, 173 insertions, 182 deletions
diff --git a/activity.py b/activity.py
index 1bcfaaf..9a53095 100644
--- a/activity.py
+++ b/activity.py
@@ -19,6 +19,7 @@
import gtk
import logging
+import gobject
from sugar.activity import activity
from sugar.graphics.toolbarbox import ToolbarBox
@@ -28,7 +29,10 @@ from sugar.activity.widgets import TitleEntry
from sugar.activity.widgets import StopButton
from sugar.activity.widgets import ShareButton
-import board
+DELAY = 5
+DELTA = 1
+WIDTH = 512
+HEIGHT = 512
class LanzarActivity(activity.Activity):
"""LanzarActivity class as specified in activity.info"""
@@ -66,11 +70,175 @@ class LanzarActivity(activity.Activity):
toolbar_box.toolbar.insert(stop_button, -1)
stop_button.show()
+ self.drawing_area = gtk.DrawingArea()
+ self.drawing_area.set_size_request(WIDTH, HEIGHT)
+
+ self.pixbuf = gtk.gdk.pixbuf_new_from_file('images/dartboard.png')
+ self.dart_pixbuf = gtk.gdk.pixbuf_new_from_file('images/dart.png')
+
+ self.drawing_area.connect('configure_event', self.__configure_cb)
+ self.drawing_area.connect('expose-event', self.__expose_cb)
+ self.connect('key-press-event', self.__key_press_cb, self.drawing_area)
+
+ box = gtk.Alignment()
+ box.add(self.drawing_area)
+ box.set_padding(0, 0, 144, 0)
+
+ self.DELTA_X = DELTA
+ self.DELTA_Y = DELTA
+
+ # Variable global que ira indicando el "indice" de pixel donde dibujar
+ # la linea vertical
+ self._x = 0
+
+ # Variable global que contendra el "indice" de pixel donde el usuario
+ # presiono alguna tecla para detenerlo. El valor inicial -1 indica que
+ # todavia no se ha presionado una tecla para la linea vertical
+ self._selected_x = -1
+
+ # Variable global que ira indicando el "indice" de pixel donde dibujar
+ # la linea horizontal
+ self._y = 0
+
+ # Variable global que contendra el "indice" de pixel donde el usuario
+ # presiono alguna tecla para detenerlo. El valor inicial -1 indica que
+ # todavia no se ha presionado una tecla para la linea horizontal
+ self._selected_y = -1
+
+ gobject.timeout_add(DELAY, self.__move_vertical_line, self.drawing_area)
+
+ self.set_canvas(box)
self.set_toolbar_box(toolbar_box)
+
toolbar_box.show()
+ box.show()
+ self.drawing_area.show()
+
+ def __configure_cb(self, drawing_area, data=None):
+ x, y, width, height = drawing_area.get_allocation()
+
+ canvas = drawing_area.window
+ self.pixmap = gtk.gdk.Pixmap(canvas, width, height)
+ return True
+
+ def __expose_cb(self, drawing_area, data=None):
+ x, y, width, height = data.area
+
+
+ context = drawing_area.get_style().fg_gc[gtk.STATE_NORMAL]
+
+ canvas = drawing_area.window
+ canvas.draw_drawable(context, self.pixmap, x, y, x, y, width, height)
+ return False
- dart = board.Darts()
- self.set_canvas(dart.drawing_area)
- self.connect('key-press-event', dart.__key_press_cb, dart.drawing_area)
- dart.drawing_area.show()
+ def draw_background(self, drawing_area):
+ #Utilizado para dibujar objetos en el pixmap
+ cr = self.pixmap.cairo_create()
+
+ # Dibujar inicialmente un fondo negro
+ cr.set_source_rgb(0, 0, 0)
+ rectangle = gtk.gdk.Rectangle(0, 0, WIDTH, HEIGHT)
+ rectangle = cr.rectangle(rectangle)
+ drawing_area.queue_draw()
+ cr.fill()
+
+ # Dibujar la diana sobre el fondo negro
+ self.pixmap.draw_pixbuf(None, self.pixbuf, 0, 0, 0, 0, -1, -1,
+ gtk.gdk.RGB_DITHER_NONE, 0, 0)
+
+ def draw_line(self, drawing_area, orientation, line_index):
+ #Utilizado para dibujar objetos en el pixmap
+ cr = self.pixmap.cairo_create()
+
+ # Dibujar una linea vertical cuya altura ocupe toda la pantalla y sea de
+ # color blanco para contrastarlo con la diana
+ cr.set_source_rgb(255, 255, 255)
+
+ if orientation == "VERTICAL":
+ rectangle = gtk.gdk.Rectangle(line_index, 0, 1, HEIGHT)
+ else:
+ rectangle = gtk.gdk.Rectangle(0, line_index, WIDTH, 1)
+
+ rectangle = cr.rectangle(rectangle)
+ drawing_area.queue_draw()
+ cr.fill()
+
+ def __move_vertical_line(self, drawing_area):
+ #Dibujar el fondo sobre el cual movemos las lineas, si aun no hemos
+ #presionado un boton para dejar la linea vertical en una coordenada dada
+ if self._selected_x < 0:
+ self.draw_background(drawing_area)
+
+ # Mover el indice x para que aparente movimiento
+ self._x += self.DELTA_X;
+ if self._x > WIDTH:
+ self.DELTA_X *= -1
+ elif self._x < 0:
+ self.DELTA_X *= -1
+
+ # Dibujar una linea vertical en la x correspondiente
+ self.draw_line(drawing_area, "VERTICAL", self._x)
+
+ # Si aun no se selecciono un indice para x, seguir permitiendo invocar
+ # al timer. Caso contrario, retornar False para evitar mas invocaciones
+ if self._selected_x < 0:
+ return True
+ else:
+ return False
+
+ def __move_horizontal_line(self, drawing_area):
+ #Dibujar el fondo sobre el cual movemos las lineas
+ self.draw_background(drawing_area)
+
+ # Como la linea vertical ya se detuvo para poder mover la linea
+ # horizontal, dibujar la linea vertical en la x seleccionada
+ self.draw_line(drawing_area, "VERTICAL", self._selected_x)
+
+ # Mover el indice y para que aparente movimiento
+ self._y += self.DELTA_Y;
+ if self._y > HEIGHT:
+ self.DELTA_Y *= -1
+ elif self._y < 0:
+ self.DELTA_Y *= -1
+
+ # Dibujar una linea horizontal en la y correspondiente
+ self.draw_line(drawing_area, "HORIZONTAL", self._y)
+
+ # Si aun no se selecciono un indice para y, seguir permitiendo invocar
+ # al timer. Caso contrario, retornar False para evitar mas invocaciones
+ if self._selected_y < 0:
+ return True
+ else:
+ return False
+
+ def __key_press_cb(self, window, event, drawing_area):
+ # Al presionar cualquier tecla, determinar la accion a tomar, de
+ # acuerdo al estado de las lineas.
+ if self._selected_x == -1:
+ self._selected_x = self._x
+ gobject.timeout_add(DELAY, self.__move_horizontal_line, drawing_area)
+ elif self._selected_y == -1:
+ self._selected_y = self._y
+ gobject.timeout_add(DELAY, self.__draw_dart, drawing_area)
+ else:
+ # TO-DO: Calcular el puntaje de acuerdo a _selected_x y _selected_y
+ # TO-DO: Mostrar el puntaje
+ self.restart_game(drawing_area)
+
+ def __draw_dart(self, drawing_area):
+ """
+ Dibuja el dardo una vez que se obtuvieron X e Y
+ """
+ x = self._selected_x - 24 # para centrar la imagen
+ y = self._selected_y - 24
+
+ self.draw_background(drawing_area)
+ self.draw_line(drawing_area, "HORIZONTAL", self._selected_y)
+ self.draw_line(drawing_area, "VERTICAL", self._selected_x)
+ self.pixmap.draw_pixbuf(None, self.dart_pixbuf, 0, 0, x, y, -1, -1,
+ gtk.gdk.RGB_DITHER_NONE, 0, 0)
+ def restart_game(self, drawing_area):
+ self._x = self._y = 0
+ self._selected_x = self._selected_y = -1
+ gobject.timeout_add(DELAY, self.__move_vertical_line, drawing_area)
diff --git a/board.py b/board.py
deleted file mode 100755
index 33cdf32..0000000
--- a/board.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/python
-import gtk
-import gobject
-
-
-DELAY = 5
-DELTA = 1
-WIDTH = 512
-HEIGHT = 512
-
-
-class Darts():
-
- def __init__(self):
- self.drawing_area = gtk.DrawingArea()
- self.drawing_area.set_size_request(WIDTH, HEIGHT)
-
- self.pixbuf = gtk.gdk.pixbuf_new_from_file('images/dartboard.png')
- self.dart_pixbuf = gtk.gdk.pixbuf_new_from_file('images/dart.png')
-
- self.drawing_area.connect('configure_event', self.__configure_cb)
- self.drawing_area.connect('expose-event', self.__expose_cb)
- #self.window.connect('key-press-event', self.__key_press_cb, self.drawing_area)
-
- #self.window.add(self.drawing_area)
-
- self.DELTA_X = DELTA
- self.DELTA_Y = DELTA
-
- # Variable global que ira indicando el "indice" de pixel donde dibujar
- # la linea vertical
- self._x = 0
-
- # Variable global que contendra el "indice" de pixel donde el usuario
- # presiono alguna tecla para detenerlo. El valor inicial -1 indica que
- # todavia no se ha presionado una tecla para la linea vertical
- self._selected_x = -1
-
- # Variable global que ira indicando el "indice" de pixel donde dibujar
- # la linea horizontal
- self._y = 0
-
- # Variable global que contendra el "indice" de pixel donde el usuario
- # presiono alguna tecla para detenerlo. El valor inicial -1 indica que
- # todavia no se ha presionado una tecla para la linea horizontal
- self._selected_y = -1
-
- gobject.timeout_add(DELAY, self.__move_vertical_line, self.drawing_area)
-
- def __configure_cb(self, drawing_area, data=None):
- x, y, width, height = drawing_area.get_allocation()
-
- canvas = drawing_area.window
- self.pixmap = gtk.gdk.Pixmap(canvas, width, height)
-
- return True
-
- def __expose_cb(self, drawing_area, data=None):
- x, y, width, height = data.area
- context = drawing_area.get_style().fg_gc[gtk.STATE_NORMAL]
-
- canvas = drawing_area.window
- canvas.draw_drawable(context, self.pixmap, x, y, x, y, width, height)
-
- return False
-
- def draw_background(self, drawing_area):
- #Utilizado para dibujar objetos en el pixmap
- cr = self.pixmap.cairo_create()
-
- # Dibujar inicialmente un fondo negro
- cr.set_source_rgb(0, 0, 0)
- rectangle = gtk.gdk.Rectangle(0, 0, WIDTH, HEIGHT)
- rectangle = cr.rectangle(rectangle)
- drawing_area.queue_draw()
- cr.fill()
-
- # Dibujar la diana sobre el fondo negro
- self.pixmap.draw_pixbuf(None, self.pixbuf, 0, 0, 0, 0, -1, -1,
- gtk.gdk.RGB_DITHER_NONE, 0, 0)
-
- def draw_line(self, drawing_area, orientation, line_index):
- #Utilizado para dibujar objetos en el pixmap
- cr = self.pixmap.cairo_create()
-
- # Dibujar una linea vertical cuya altura ocupe toda la pantalla y sea de
- # color blanco para contrastarlo con la diana
- cr.set_source_rgb(255, 255, 255)
-
- if orientation == "VERTICAL":
- rectangle = gtk.gdk.Rectangle(line_index, 0, 1, HEIGHT)
- else:
- rectangle = gtk.gdk.Rectangle(0, line_index, WIDTH, 1)
-
- rectangle = cr.rectangle(rectangle)
- drawing_area.queue_draw()
- cr.fill()
-
- def __move_vertical_line(self, drawing_area):
- #Dibujar el fondo sobre el cual movemos las lineas, si aun no hemos
- #presionado un boton para dejar la linea vertical en una coordenada dada
- if self._selected_x < 0:
- self.draw_background(drawing_area)
-
- # Mover el indice x para que aparente movimiento
- self._x += self.DELTA_X;
- if self._x > WIDTH:
- self.DELTA_X *= -1
- elif self._x < 0:
- self.DELTA_X *= -1
-
- # Dibujar una linea vertical en la x correspondiente
- self.draw_line(drawing_area, "VERTICAL", self._x)
-
- # Si aun no se selecciono un indice para x, seguir permitiendo invocar
- # al timer. Caso contrario, retornar False para evitar mas invocaciones
- if self._selected_x < 0:
- return True
- else:
- return False
-
- def __move_horizontal_line(self, drawing_area):
- #Dibujar el fondo sobre el cual movemos las lineas
- self.draw_background(drawing_area)
-
- # Como la linea vertical ya se detuvo para poder mover la linea
- # horizontal, dibujar la linea vertical en la x seleccionada
- self.draw_line(drawing_area, "VERTICAL", self._selected_x)
-
- # Mover el indice y para que aparente movimiento
- self._y += self.DELTA_Y;
- if self._y > HEIGHT:
- self.DELTA_Y *= -1
- elif self._y < 0:
- self.DELTA_Y *= -1
-
- # Dibujar una linea horizontal en la y correspondiente
- self.draw_line(drawing_area, "HORIZONTAL", self._y)
-
- # Si aun no se selecciono un indice para y, seguir permitiendo invocar
- # al timer. Caso contrario, retornar False para evitar mas invocaciones
- if self._selected_y < 0:
- return True
- else:
- return False
-
- def __key_press_cb(self, window, event, drawing_area):
- # Al presionar cualquier tecla, determinar la accion a tomar, de
- # acuerdo al estado de las lineas.
- if self._selected_x == -1:
- self._selected_x = self._x
- gobject.timeout_add(DELAY, self.__move_horizontal_line, drawing_area)
- elif self._selected_y == -1:
- self._selected_y = self._y
- gobject.timeout_add(DELAY, self.__draw_dart, drawing_area)
- else:
- # TO-DO: Calcular el puntaje de acuerdo a _selected_x y _selected_y
- # TO-DO: Mostrar el puntaje
- self.restart_game(drawing_area)
-
- def __draw_dart(self, drawing_area):
- """
- Dibuja el dardo una vez que se obtuvieron X e Y
- """
- x = self._selected_x - 24 # para centrar la imagen
- y = self._selected_y - 24
-
- self.draw_background(drawing_area)
- self.draw_line(drawing_area, "HORIZONTAL", self._selected_y)
- self.draw_line(drawing_area, "VERTICAL", self._selected_x)
- self.pixmap.draw_pixbuf(None, self.dart_pixbuf, 0, 0, x, y, -1, -1,
- gtk.gdk.RGB_DITHER_NONE, 0, 0)
-
- def restart_game(self, drawing_area):
- self._x = self._y = 0
- self._selected_x = self._selected_y = -1
- gobject.timeout_add(DELAY, self.__move_vertical_line, drawing_area)