Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #12

Merged
merged 8 commits into from Aug 11, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 17 additions & 10 deletions JAMath.py
Expand Up @@ -4,32 +4,38 @@
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from sugar3.activity import activity
import pygame
import sugargame.canvas

from juego import Game

from sugar3.activity.activity import Activity
from sugar3.activity.activity import get_activity_root
from sugar3.graphics.toolbarbox import ToolbarBox
from sugar3.activity.widgets import ActivityToolbarButton
from sugar3.activity.widgets import StopButton
from sugar3.graphics.toolbutton import ToolButton

class JAMath(activity.Activity):
class JAMath(Activity):

def __init__(self, handle):
activity.Activity.__init__(self, handle)
Activity.__init__(self, handle)

self.max_participants = 1
self.jamath_activity = Game()

self.jamath_activity = Game(get_activity_root())
self.build_toolbar()
self._pygamecanvas = sugargame.canvas.PygameCanvas(self)
self._pygamecanvas = sugargame.canvas.PygameCanvas(self,
main=self.jamath_activity.run,
modules=[pygame.display, pygame.font, pygame.mixer])
self.set_canvas(self._pygamecanvas)
self._pygamecanvas.run_pygame(self.jamath_activity.run)

def build_toolbar(self):

toolbox = ToolbarBox()
self.set_toolbar_box(toolbox)
toolbox.show()

activity_button = ActivityToolbarButton(self)
toolbox.toolbar.insert(activity_button, -1)
activity_button.show()
Expand All @@ -40,15 +46,16 @@ def build_toolbar(self):
separator2.props.draw = False
separator2.set_expand(True)
barra.insert(separator2, -1)
separator2.show()

stop_button = StopButton(self)
stop_button.props.accelerator = '<Ctrl>q'
barra.insert(stop_button, -1)
stop_button.show()
stop_button.connect('clicked', self._stop_cb)
JuiP marked this conversation as resolved.
Show resolved Hide resolved

self.set_toolbar_box(toolbox)
def _stop_cb(self, button):
self.jamath_activity.running = False

toolbox.show_all()



Expand Down
Binary file modified data/1.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
155 changes: 93 additions & 62 deletions juego.py
Expand Up @@ -54,99 +54,117 @@ def __init__(self, level, fuente):
def cargar_imagen(nombre,trasnparent=False):
try:
imagen = pygame.image.load(nombre)
sizex, sizey = imagen.get_rect().size
imagen = \
pygame.transform.scale(imagen,
(int(sizex * scale_x), int(sizey * scale_y)))
JuiP marked this conversation as resolved.
Show resolved Hide resolved
except pygame.error, message:
raise SystemExit, message
imagen = imagen.convert()
return imagen

class Game():

def __init__(self):

def __init__(self, get_activity_root):
self.activity_root = get_activity_root
pass


global sx, sy
def sx(coord_x):
return coord_x * scale_x

def sy(coord_y):
return coord_y * scale_y

def main(self):
sonido_menu = load_sound("./data/menu.ogg")
sonido_menu = load_sound("menu.ogg", self.activity_root)
jugar = self.fuente_130.render("JUGAR",True,(0,0,255))
level = self.fuente_130.render("NIVEL",True,(0,0,255))
quit = self.fuente_130.render("SALIR",True,(0,0,255))
fondo = cargar_imagen('data/1.jpg')
chosen_level = "facil"

while 1:
while self.running:
self.screen.fill((0,0,0))
self.screen.blit(fondo, (0, 0))
self.screen.blit(jugar,(450,100))
self.screen.blit(level,(450,200))
self.screen.blit(quit,(450,300))
self.screen.blit(jugar,(sx(450),sy(100)))
self.screen.blit(level,(sx(450),sy(200)))
self.screen.blit(quit,(sx(450),sy(300)))
while Gtk.events_pending():
Gtk.main_iteration()
if not self.running:
break
for event in pygame.event.get():
if event.type == QUIT:
exit()
self.running = False
return
elif event.type == MOUSEMOTION:
if event.pos[0] > 550 and event.pos[0] < 450 + jugar.get_width() and \
event.pos[1] > 100 and event.pos[1] < 100 + jugar.get_height():
if event.pos[0] > sx(550) and event.pos[0] < sx(450) + jugar.get_width() and \
event.pos[1] > sy(100) and event.pos[1] < sy(100) + jugar.get_height():
jugar = self.fuente_130.render("JUGAR",True,(0,0,255))
if sonido_menu != None:
sonido_menu.play()
elif event.pos[0] > 550 and event.pos[0] < 450 + level.get_width() and \
event.pos[1] > 200 and event.pos[1] < 200 + level.get_height():
elif event.pos[0] > sx(550) and event.pos[0] < sx(450) + level.get_width() and \
event.pos[1] > sy(200) and event.pos[1] < sy(200) + level.get_height():
level = self.fuente_130.render("NIVEL",True,(0,0,255))
if sonido_menu != None:
sonido_menu.play()
elif event.pos[0] > 550 and event.pos[0] < 450 + quit.get_width() and \
event.pos[1] > 300 and event.pos[1] < 300 + quit.get_height():
elif event.pos[0] > sx(550) and event.pos[0] < sx(450) + quit.get_width() and \
event.pos[1] > sy(300) and event.pos[1] < sy(300) + quit.get_height():
quit = self.fuente_130.render("SALIR",True,(0,0,255))
if sonido_menu != None:
sonido_menu.play()
elif event.type == MOUSEBUTTONDOWN:
if event.button == 1:
if event.pos[0] > 450 and event.pos[0] < 450 + jugar.get_width() and \
event.pos[1] > 100 and event.pos[1] < 100 + jugar.get_height():
if event.pos[0] > sx(450) and event.pos[0] < sx(450) + jugar.get_width() and \
event.pos[1] > sy(100) and event.pos[1] < sy(100) + jugar.get_height():
return chosen_level
elif event.pos[0] > 450 and event.pos[0] < 450 + level.get_width() and \
event.pos[1] > 200 and event.pos[1] < 200 + level.get_height():
elif event.pos[0] > sx(450) and event.pos[0] < sx(450) + level.get_width() and \
event.pos[1] > sy(200) and event.pos[1] < sy(200) + level.get_height():
chosen_level = self.choose_level()
elif event.pos[0] > 450 and event.pos[0] < 450 + quit.get_width() and \
event.pos[1] > 300 and event.pos[1] < 300 + quit.get_height():
exit()
elif event.pos[0] > sx(450) and event.pos[0] < sx(450) + quit.get_width() and \
event.pos[1] > sy(300) and event.pos[1] < sy(300) + quit.get_height():
self.running = False
exit()
pygame.display.update()


def choose_level(self):

sonido_menu = load_sound("./data/menu.ogg")
sonido_menu = load_sound("menu.ogg", self.activity_root)
facil = self.fuente_130.render("facil",True,(0,0,255))
medio = self.fuente_130.render("medio",True,(0,0,255))
dificil = self.fuente_130.render("dificil",True,(0,0,255))
fondo = cargar_imagen('data/1.jpg')
level = "facil"
while 1:
while self.running:
self.screen.fill((0,0,0))
self.screen.blit(fondo, (0, 0))
self.screen.blit(facil,(450,100))
self.screen.blit(medio,(450,200))
self.screen.blit(dificil,(450,300))
self.screen.blit(facil,(sx(450),sy(100)))
self.screen.blit(medio,(sx(450),sy(200)))
self.screen.blit(dificil,(sx(450),sy(300)))
while Gtk.events_pending():
Gtk.main_iteration()
if not self.running:
break
for event in pygame.event.get():
if event.type == QUIT:
exit()
self.running = False
return
elif event.type == MOUSEMOTION:
if event.pos[0] > 450 and event.pos[0] < 450 + facil.get_width() and \
event.pos[1] > 100 and event.pos[1] < 100 + facil.get_height():
if event.pos[0] > sx(450) and event.pos[0] < sx(450) + facil.get_width() and \
event.pos[1] > sy(100) and event.pos[1] < sy(100) + facil.get_height():
facil = self.fuente_130.render("facil",True,(0,0,255))
if sonido_menu != None:
sonido_menu.play()
elif event.pos[0] > 450 and event.pos[0] < 450 + medio.get_width() and \
event.pos[1] > 200 and event.pos[1] < 200 + medio.get_height():
elif event.pos[0] > sx(450) and event.pos[0] < sx(450) + medio.get_width() and \
event.pos[1] > sy(200) and event.pos[1] < sy(200) + medio.get_height():
medio = self.fuente_130.render("medio",True,(0,0,255))
if sonido_menu != None:
sonido_menu.play()
elif event.pos[0] > 450 and event.pos[0] < 450 + dificil.get_width() and \
event.pos[1] > 300 and event.pos[1] < 300 + dificil.get_height():
elif event.pos[0] > sx(450) and event.pos[0] < sx(450) + dificil.get_width() and \
event.pos[1] > sy(300) and event.pos[1] < sy(300) + dificil.get_height():
dificil = self.fuente_130.render("dificil",True,(0,0,255))
if sonido_menu != None:
sonido_menu.play()
Expand All @@ -156,16 +174,16 @@ def choose_level(self):
dificil = self.fuente_130.render("dificil",True,(0,0,255))
elif event.type == MOUSEBUTTONDOWN:
if event.button == 1:
if event.pos[0] > 450 and event.pos[0] < 450 + facil.get_width() and \
event.pos[1] > 100 and event.pos[1] < 100 + facil.get_height():
if event.pos[0] > sx(450) and event.pos[0] < sx(450) + facil.get_width() and \
event.pos[1] > sy(100) and event.pos[1] < sy(100) + facil.get_height():
pass
return level
elif event.pos[0] > 450 and event.pos[0] < 450 + medio.get_width() and \
event.pos[1] > 200 and event.pos[1] < 200 + medio.get_height():
elif event.pos[0] > sx(450) and event.pos[0] < sx(450) + medio.get_width() and \
event.pos[1] > sy(200) and event.pos[1] < sy(200) + medio.get_height():
level = "medio"
return level
elif event.pos[0] > 450 and event.pos[0] < 450 + dificil.get_width() and \
event.pos[1] > 300 and event.pos[1] < 300 + dificil.get_height():
elif event.pos[0] > sx(450) and event.pos[0] < sx(450) + dificil.get_width() and \
event.pos[1] > sy(300) and event.pos[1] < sy(300) + dificil.get_height():
level = "dificil"
return level
elif event.type == KEYDOWN:
Expand All @@ -181,14 +199,13 @@ def play(self, level):

another_quest = True

right_sound = load_sound("./data/right.ogg")
wrong_sound = load_sound("./data/wrong.ogg")
fondo = [load_image("data/" + str(x) + ".jpg") for x in range(0,NUM_IMAGES)]
random_index = random.randint(0,NUM_IMAGES - 1)
JuiP marked this conversation as resolved.
Show resolved Hide resolved
right_sound = load_sound("right.ogg", self.activity_root)
wrong_sound = load_sound("wrong.ogg", self.activity_root)
fondo = load_image(str(1) + ".jpg")
JuiP marked this conversation as resolved.
Show resolved Hide resolved
score = 0
puntuacionalta = load_puntuacionalta()
puntuacionalta = load_puntuacionalta(self.activity_root)

while True:
while self.running:
time = self.clock.tick(30) / 1000.
if another_quest:
nueva_expresion = expresion(level, self.fuente_60)
Expand All @@ -205,17 +222,20 @@ def play(self, level):
nueva_expresion.preguntas.update(time,random.randint(80,155),level)

self.screen.fill((0,0,0))
self.screen.blit(fondo[random_index],(0,0))
JuiP marked this conversation as resolved.
Show resolved Hide resolved
self.screen.blit(self.fuente_32.render("Puntaje: " + str(score),True,(0,0,0)),(410,0))
self.screen.blit(self.fuente_32.render("Puntaje Mas Alto: " + str(puntuacionalta),True,(0,0,0)),(600,0))
self.screen.blit(nueva_expresion.expresion,(600,750))
self.screen.blit(fondo,(0,0))
JuiP marked this conversation as resolved.
Show resolved Hide resolved
self.screen.blit(self.fuente_32.render("Puntaje: " + str(score),True,(0,0,0)),(sx(410),0))
self.screen.blit(self.fuente_32.render("Puntaje Mas Alto: " + str(puntuacionalta),True,(0,0,0)),(sx(600),0))
self.screen.blit(nueva_expresion.expresion,(sx(600),sy(750)))
nueva_expresion.preguntas.draw(self.screen)
while Gtk.events_pending():
Gtk.main_iteration()
if not self.running:
break
for event in pygame.event.get():
if event.type == QUIT:
save_puntuacionalta(score)
exit()
save_puntuacionalta(score, self.activity_root)
self.running = False
return
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
for i in nueva_expresion.preguntas.sprites():
Expand All @@ -237,19 +257,30 @@ def play(self, level):
pygame.display.update()

def run(self):
pygame.init()
self.running = True
self.screen = pygame.display.get_surface()

info = pygame.display.Info()

if not self.screen:
self.screen = pygame.display.set_mode(
(info.current_w, info.current_h))

global scale_x, scale_y
scale_x = self.screen.get_width() / 1200.0
scale_y = self.screen.get_height() / 900.0

self.clock = pygame.time.Clock()

self.fuente_32 = pygame.font.Font("data/fuente.ttf", 32)
self.fuente_60 = pygame.font.Font("./data/fuente.ttf", 60)
self.fuente_130 = pygame.font.Font("./data/fuente.ttf", 130)
self.fuente_32 = pygame.font.Font("data/fuente.ttf", int(sx(32)))
self.fuente_60 = pygame.font.Font("./data/fuente.ttf", int(sx(60)))
self.fuente_130 = pygame.font.Font("./data/fuente.ttf", int(sx(130)))

self.fondo = cargar_imagen('data/1.jpg')
self.screen.blit(self.fondo, (0, 0))

pygame.display.flip()
while 1:
while self.running:
level = self.main()
self.play(level)

Expand All @@ -261,17 +292,17 @@ def load_image(name):
return pygame.image.load(path).convert_alpha()

# Funcion para cargar Sonidos
def load_sound(name):
path = os.path.join('data',name)
def load_sound(name, activity_root):
path = os.path.join(activity_root,'data',name)
try:
sound = pygame.mixer.Sound(path)
return sound
except:
print 'Warning, unable to load: ',path

# Funcion para guardar puntuaciones altas
def save_puntuacionalta(score):
file_path = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data', 'PuntajeAlto')
def save_puntuacionalta(score, activity_root):
file_path = os.path.join(activity_root,'data', 'PuntajeAlto')
print file_path
puntuacionalta = []
puntuacionalta.append(0)
Expand All @@ -285,8 +316,8 @@ def save_puntuacionalta(score):
File.write(str(score))
File.close()

def load_puntuacionalta():
file_path = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data', 'PuntajeAlto')
def load_puntuacionalta(activity_root):
file_path = os.path.join(activity_root,'data', 'PuntajeAlto')
print file_path
if os.path.exists(file_path):
try:
Expand Down
2 changes: 1 addition & 1 deletion sugargame/__init__.py
@@ -1 +1 @@
__version__ = '1.1'
__version__ = '1.2'
JuiP marked this conversation as resolved.
Show resolved Hide resolved