diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/1.png | bin | 0 -> 5002 bytes | |||
-rw-r--r-- | src/gui/1selected.png | bin | 0 -> 4970 bytes | |||
-rw-r--r-- | src/gui/2.png | bin | 0 -> 2913 bytes | |||
-rw-r--r-- | src/gui/2selected.png | bin | 0 -> 2929 bytes | |||
-rw-r--r-- | src/gui/3.png | bin | 0 -> 3238 bytes | |||
-rw-r--r-- | src/gui/3selected.png | bin | 0 -> 3356 bytes | |||
-rw-r--r-- | src/gui/4.png | bin | 0 -> 5349 bytes | |||
-rw-r--r-- | src/gui/4selected.png | bin | 0 -> 5260 bytes | |||
-rw-r--r-- | src/gui/5.png | bin | 0 -> 5434 bytes | |||
-rw-r--r-- | src/gui/5selected.png | bin | 0 -> 5395 bytes | |||
-rw-r--r-- | src/gui/6.png | bin | 0 -> 5372 bytes | |||
-rw-r--r-- | src/gui/6selected.png | bin | 0 -> 5387 bytes | |||
-rw-r--r-- | src/gui/7.png | bin | 0 -> 5175 bytes | |||
-rw-r--r-- | src/gui/7selected.png | bin | 0 -> 5164 bytes | |||
-rw-r--r-- | src/gui/8.png | bin | 0 -> 3538 bytes | |||
-rw-r--r-- | src/gui/8selected.png | bin | 0 -> 3634 bytes | |||
-rw-r--r-- | src/gui/9.png | bin | 0 -> 3307 bytes | |||
-rw-r--r-- | src/gui/9selected.png | bin | 0 -> 3358 bytes | |||
-rw-r--r-- | src/gui/BoardUI.py | 244 | ||||
-rw-r--r-- | src/gui/Button.py | 28 | ||||
-rw-r--r-- | src/gui/Cell.py | 38 | ||||
-rw-r--r-- | src/gui/GameMain.py | 116 | ||||
-rw-r--r-- | src/gui/Player.py | 9 | ||||
-rw-r--r-- | src/gui/__init__.py | 0 | ||||
-rw-r--r-- | src/gui/background.png | bin | 0 -> 52615 bytes | |||
-rw-r--r-- | src/gui/instructions.png | bin | 0 -> 132322 bytes | |||
-rw-r--r-- | src/gui/instructions.svg | 252 | ||||
-rw-r--r-- | src/gui/instructions_button.png | bin | 0 -> 4418 bytes | |||
-rw-r--r-- | src/gui/player_win.png | bin | 0 -> 1865 bytes | |||
-rw-r--r-- | src/gui/quinteti-new.png | bin | 0 -> 4271 bytes |
30 files changed, 687 insertions, 0 deletions
diff --git a/src/gui/1.png b/src/gui/1.png Binary files differnew file mode 100644 index 0000000..c8406dc --- /dev/null +++ b/src/gui/1.png diff --git a/src/gui/1selected.png b/src/gui/1selected.png Binary files differnew file mode 100644 index 0000000..d7bb372 --- /dev/null +++ b/src/gui/1selected.png diff --git a/src/gui/2.png b/src/gui/2.png Binary files differnew file mode 100644 index 0000000..73477b5 --- /dev/null +++ b/src/gui/2.png diff --git a/src/gui/2selected.png b/src/gui/2selected.png Binary files differnew file mode 100644 index 0000000..394e837 --- /dev/null +++ b/src/gui/2selected.png diff --git a/src/gui/3.png b/src/gui/3.png Binary files differnew file mode 100644 index 0000000..03a2215 --- /dev/null +++ b/src/gui/3.png diff --git a/src/gui/3selected.png b/src/gui/3selected.png Binary files differnew file mode 100644 index 0000000..7d52ce8 --- /dev/null +++ b/src/gui/3selected.png diff --git a/src/gui/4.png b/src/gui/4.png Binary files differnew file mode 100644 index 0000000..8e254cd --- /dev/null +++ b/src/gui/4.png diff --git a/src/gui/4selected.png b/src/gui/4selected.png Binary files differnew file mode 100644 index 0000000..9554a85 --- /dev/null +++ b/src/gui/4selected.png diff --git a/src/gui/5.png b/src/gui/5.png Binary files differnew file mode 100644 index 0000000..1ff2e49 --- /dev/null +++ b/src/gui/5.png diff --git a/src/gui/5selected.png b/src/gui/5selected.png Binary files differnew file mode 100644 index 0000000..7b35178 --- /dev/null +++ b/src/gui/5selected.png diff --git a/src/gui/6.png b/src/gui/6.png Binary files differnew file mode 100644 index 0000000..bea0349 --- /dev/null +++ b/src/gui/6.png diff --git a/src/gui/6selected.png b/src/gui/6selected.png Binary files differnew file mode 100644 index 0000000..72be814 --- /dev/null +++ b/src/gui/6selected.png diff --git a/src/gui/7.png b/src/gui/7.png Binary files differnew file mode 100644 index 0000000..58af7ad --- /dev/null +++ b/src/gui/7.png diff --git a/src/gui/7selected.png b/src/gui/7selected.png Binary files differnew file mode 100644 index 0000000..9eab0ee --- /dev/null +++ b/src/gui/7selected.png diff --git a/src/gui/8.png b/src/gui/8.png Binary files differnew file mode 100644 index 0000000..d5031b7 --- /dev/null +++ b/src/gui/8.png diff --git a/src/gui/8selected.png b/src/gui/8selected.png Binary files differnew file mode 100644 index 0000000..3120ea0 --- /dev/null +++ b/src/gui/8selected.png diff --git a/src/gui/9.png b/src/gui/9.png Binary files differnew file mode 100644 index 0000000..05d27c9 --- /dev/null +++ b/src/gui/9.png diff --git a/src/gui/9selected.png b/src/gui/9selected.png Binary files differnew file mode 100644 index 0000000..ab4e6ba --- /dev/null +++ b/src/gui/9selected.png diff --git a/src/gui/BoardUI.py b/src/gui/BoardUI.py new file mode 100644 index 0000000..5cf5792 --- /dev/null +++ b/src/gui/BoardUI.py @@ -0,0 +1,244 @@ +import pygame +from pygame.locals import * +from logic.GameState import GameState + +from Button import Button +from Cell import Cell +from Player import Player + +file_dir = "gui/" + +image_fondo = file_dir + "background.png" +image_tablero = file_dir + "tablero.png" +image_null = "nulo.bmp" +image_number = "<N>.png" +image_disabled_number = "<N>selected.png" +image_size = pygame.Rect(0, 0, 97, 97) + +new_image_coords = (180, 87) +new_image = "quinteti-new.png" + +instructions_coords = (950, 745) +instructions_button = "instructions_button.png" +instructions_image = "instructions.png" + +player_win_image = "player_win.png" + +font_name = "DejaVu Serif" #"DejaVuLGCSerif.ttf" # None to load pygame default font +font_size = 24 +user_font_color = (255, 255, 255) + +class BoardUI: + + # Center of initial number positions + number_locations = [ + ([756+138*0, 231+138*0]), + ([756+138*1, 231+138*0]), + ([756+138*2, 231+138*0]), + ([756+138*0, 231+138*1]), + ([756+138*1, 231+138*1]), + ([756+138*2, 231+138*1]), + ([756+138*0, 231+138*2]), + ([756+138*1, 231+138*2]), + ([756+138*2, 231+138*2])] + + screen = None + # Center of board cells + locations = [ + ([267, 228]), + ([404, 228]), + ([541, 228]), + ([267, 367]), + ([404, 367]), + ([541, 367]), + ([267, 510]), + ([404, 510]), + ([541, 510])] + + players_name_midleft_location = [ + (200, 667), + (200, 752)] + + players_score_center_location = [ + (581, 667), + (581, 752)] + + players_score_box_location = [ + (173, 628), + (173, 714)] + + def __init__(self, screen, game = None): + self.font = None + if font_name: + self.font = pygame.font.SysFont(font_name, font_size) + + if not self.font: + self.font = pygame.font.Font(None, font_size) + + self.screen = screen + self.game = game + self.showing_instructions = False + self.initBoard() + + def initBoard (self): + self.new_button = Button(new_image_coords, file_dir + new_image, self.new_game) + self.instructions_button = Button(instructions_coords, file_dir + instructions_button, self.show_instructions) + self.cells = [] + self.numbers = [] + self.lastSelectedBoardCell = None + self.lastSelectedNumberCell = None + + self.backgroundImage = pygame.image.load(image_fondo) + + self.initCells() + self.initNumbers() + + # Creates a sprite group, with all the board visible elements inside + self.paintBackground() + self.items = pygame.sprite.Group() + self.items.add(self.new_button) + self.items.add(self.instructions_button) + for c in self.cells: + if c.image: + self.items.add( c ) + + for n in self.numbers: + if n.image: + self.items.add( n ) + + def new_game(self): + self.game = GameState("", "") + self.initBoard() + + def initCells(self): + i = 1 + for row in range(1,4): + for col in range(1,4): + if self.game: + number = self.game.get_cell(row, col)[0] + else: + number = None + location = self.locations[i-1] + self.cells.append( Cell(location, self.get_number_name(number), i, image_size) ) + i += 1 + + def initNumbers(self): + k = 0 + for location in self.number_locations: + k += 1 + self.numbers.append(Cell(location, self.get_number_name(k), k, image_size)) + + def setPlayers (self, namePlayer1, namePlayer2): + self.game = GameState(namePlayer1, namePlayer2) + + def paintBackground(self): + rect = self.backgroundImage.get_rect() + rect.topleft = (0, 0) + self.screen.blit(self.backgroundImage, rect) + + def paint_winner(self, i): + image = pygame.image.load(file_dir + player_win_image) + rect = image.get_rect() + rect.topleft = self.players_score_box_location[i] + self.screen.blit(image, rect) + + def paintPlayersStatus(self): + player1Name = "" + player2Name = "" + + if (self.game): + for i in range(1,3): + if self.game.get_enabled_player(): + if self.game.get_enabled_player() == i: + self.font.set_bold(True) + else: + self.font.set_bold(False) + else: + if self.game.get_player_score(i) >= self.game.get_player_score(3-i): + self.paint_winner(i-1) + + player_name = self.game.get_player_name(i) + #str_player = 'Jugador %s: %s' % (i, player_name) + str_player = 'Jugador %s' % (i) + name_surface = self.font.render(str_player, 1, user_font_color) + name_rect = name_surface.get_rect() + name_rect.midleft = self.players_name_midleft_location[i-1] + self.screen.blit(name_surface, name_rect) + + player_score = self.game.get_player_score(i) + str_player_score = '%s' % (player_score) + score_surface = self.font.render(str_player_score, 1, user_font_color) + score_rect = score_surface.get_rect() + score_rect.center = self.players_score_center_location[i-1] + self.screen.blit(score_surface, score_rect) + + def paintBoardElements(self): + # Using an sprite group all the items are painted: + + #self.items.clear(self.screen, self.backgroundImage) # If only sprites are cleared, players scores remain + self.paintBackground() # Instead, the whole background is repainted + self.items.draw(self.screen) + self.paintPlayersStatus() + + if self.showing_instructions: + self.paint_instructions() + + def paint_instructions(self): + image = pygame.image.load(file_dir + instructions_image) + rect = image.get_rect() + rect.center = self.screen.get_rect().center + self.screen.blit(image, rect) + + def processXY(self, x, y): + # If is showing instructions, it disables them + if self.showing_instructions: + self.showing_instructions = False + return + else: + if self.instructions_button.coordsIn(x, y): + self.instructions_button.callback() + + # Checks if the selected coordinate is a board cell + isCell = False + for c in self.cells: + if c.coordsIn(x,y): + isCell = True + self.lastSelectedBoardCell = c + if self.lastSelectedNumberCell != None: + row, col = c.get_pos() + player = self.game.get_enabled_player() + ok = self.game.make_move(row, col, self.lastSelectedNumberCell.idxCell, player) + if ok: + self.lastSelectedBoardCell.setImage( self.get_number_name(self.lastSelectedNumberCell.idxCell) ) + self.items.add(self.lastSelectedBoardCell) + self.items.remove(self.lastSelectedNumberCell) + self.lastSelectedNumberCell.setImage(None) + self.lastSelectedNumberCell = None + break + + # Checks if the selected coordinate is a number + if isCell == False: + for n in self.numbers: + if n.coordsIn(x,y): + if self.lastSelectedNumberCell: + self.lastSelectedNumberCell.setImage( self.get_number_name(self.lastSelectedNumberCell.idxCell) ) + self.lastSelectedNumberCell = n + n.setImage( self.get_disabled_number_name(n.idxCell) ) + + if self.new_button.coordsIn(x, y): + self.new_button.callback() + + def show_instructions(self): + self.showing_instructions = True + + def get_number_name(self, number): + if (number == None) or (number == 0): + return None + else: + return file_dir + image_number.replace("<N>", str(number)) + + def get_disabled_number_name(self, number): + if (number == None) or (number == 0): + return None + else: + return file_dir + image_disabled_number.replace("<N>", str(number)) diff --git a/src/gui/Button.py b/src/gui/Button.py new file mode 100644 index 0000000..fb5b53d --- /dev/null +++ b/src/gui/Button.py @@ -0,0 +1,28 @@ +import pygame + +class Button(pygame.sprite.Sprite): + def __init__(self, initial_position, nomImage, callback): + + pygame.sprite.Sprite.__init__(self) + + self.setImage(nomImage) + self.rect = self.image.get_rect() + self.rect.topleft = initial_position # Moves the recteangle to its predetermined center + + self.callback = callback + + def coordsIn(self, x, y): + #print "Test x: %s < %s < %s Test y: %s < %s < %s" % (self.rect.left, x, self.rect.right, self.rect.top, y, self.rect.bottom) + if ( self.rect.collidepoint(x, y) ): + return True + return False + + def setImage(self, nomImage): + if nomImage: + self.image = pygame.image.load(nomImage) + else: + self.image = None + +# Codigo para debug de este modulo: +#if __name__ == "__main__": + diff --git a/src/gui/Cell.py b/src/gui/Cell.py new file mode 100644 index 0000000..12adf05 --- /dev/null +++ b/src/gui/Cell.py @@ -0,0 +1,38 @@ +import pygame + +class Cell(pygame.sprite.Sprite): + def __init__(self, initial_position, nomImage, idxCell, size): + + pygame.sprite.Sprite.__init__(self) + + self.idxCell = idxCell + + self.rect = size.move(0, 0) # Attemping to move creates a copy + self.rect.center = initial_position # Moves the recteangle to its predetermined center + + self.setImage(nomImage) + + def coordsIn(self, x, y): + #print "Test x: %s < %s < %s Test y: %s < %s < %s" % (self.rect.left, x, self.rect.right, self.rect.top, y, self.rect.bottom) + if ( self.rect.collidepoint(x, y) ): + return True + return False + + def setImage(self, nomImage): + if nomImage: + self.image = pygame.image.load(nomImage) + self.nameImage = nomImage + else: + self.image = None + self.nameImage = None + + def get_pos(self): + row = (self.idxCell - 1) / 3 + 1 + col = (self.idxCell - 1) % 3 + 1 + return row, col + +# Codigo para debug de este modulo: +if __name__ == "__main__": + cell = Cell([0, 0], "nulo.bmp", 6) + row, col = cell.get_pos() + print "%s %s" % (row, col) diff --git a/src/gui/GameMain.py b/src/gui/GameMain.py new file mode 100644 index 0000000..a842923 --- /dev/null +++ b/src/gui/GameMain.py @@ -0,0 +1,116 @@ +import pygame, olpcgames, logging +from olpcgames import pausescreen +from pygame.locals import * + +from BoardUI import BoardUI + +from logic.GameState import GameState + +#import logic.Mesh + +import os + +log = logging.getLogger( 'quinteti run' ) +log.setLevel( logging.DEBUG ) + +MAX_FPS = 25 # Max frames per second +SLEEP_TIMEOUT = 25 # Seconds until the PauseScreen if no events show up + +# El modulo se llama desde run.py. +def main(): + pygame.init() + + internal_size = (1200, 825) # The game is designed to work in this size (xo display size) + target_size = (900, 619) # The game will be sown in this size, useful for testing in regular PCs with less resolution than xo + + flags = 0 + if olpcgames.ACTIVITY: + # Running as Activity + target_size = olpcgames.ACTIVITY.game_size + #logic.Mesh.init_mesh(log) # Mesh isn't ready in this version + #else: + # Uncomment this if want to execute fullscreen on regular PCs + # flags = pygame.FULLSCREEN + real_screen = pygame.display.set_mode(target_size, flags) + + # The scale factor beetween internal and target + if internal_size == target_size: + scale = None + internal_screen = real_screen # The game works directly on the real screen + else: + # Running on regular PC, the screen its scaled to te target_size + internal_screen = pygame.Surface(internal_size) + scale = (internal_size[0] / float(target_size[0]), internal_size[1] / float(target_size[1]) ) + + # Creates a new logic game, player names aren't used without mesh + game = GameState("Jugador1", "Jugador2") + boardUI = BoardUI(internal_screen, game) + boardUI.paintBoardElements() + + pygame.display.update() + + clock = pygame.time.Clock() + + # Comienza el bucle principal + update = True # La primera vez tiene que pintar la pantalla + running = True + while running: + + # Waits for events, if none the game pauses: + # http://wiki.laptop.org/go/Game_development_HOWTO#Reducing_CPU_Load + milliseconds = clock.tick(MAX_FPS) # waits if the game is running faster than MAX_FPS + events = pausescreen.get_events(SLEEP_TIMEOUT) # Event-management loop with support for pausing after X seconds (20 here) + + if events: + for event in events: + if event.type == pygame.QUIT: + running = False + elif event.type == pygame.KEYDOWN and (event.key == pygame.K_q or event.key == pygame.K_ESCAPE): + running = False + + if event.type == pygame.MOUSEBUTTONDOWN: + if scale: + [x, y] = [coord*s for (coord, s) in zip(event.pos, scale)] # Multiplica las coordenadas realeas por el factor + # para llevarlas a coordenadas internas + else: + (x, y) = event.pos + + boardUI.processXY(x, y) + update = True + + if event.type == pygame.USEREVENT: + if event.code == olpcgames.FILE_READ_REQUEST: + game = read_file(event.filename) + log.debug("Loaded:" + game.serialization()) + boardUI = BoardUI(internal_screen, game) + update = True + if event.code == olpcgames.FILE_WRITE_REQUEST: + save_file(event.filename, game) + + if update == True: + boardUI.paintBoardElements() + if scale: + pygame.transform.scale(internal_screen, target_size, real_screen) + update = False + + pygame.display.update() + + # Una vez que sale del loop manda la senal de quit para que cierre la ventana + pygame.quit() + +def save_file(file, game): + string = game.serialization() + fsock = open(file, 'w') + fsock.write(string) + fsock.close() + +def read_file(file): + fsock = open(file, "r") + string = fsock.read() + fsock.close() + return GameState.fromString(string) + +# Codigo para debug de este modulo: +if __name__ == "__main__": + logging.basicConfig() + main() diff --git a/src/gui/Player.py b/src/gui/Player.py new file mode 100644 index 0000000..051b2a7 --- /dev/null +++ b/src/gui/Player.py @@ -0,0 +1,9 @@ +
+class Player:
+ name = None
+
+ def __init__(self, name):
+ self.name = name
+
+ def getName(self):
+ return self.name
\ No newline at end of file diff --git a/src/gui/__init__.py b/src/gui/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/gui/__init__.py diff --git a/src/gui/background.png b/src/gui/background.png Binary files differnew file mode 100644 index 0000000..231a526 --- /dev/null +++ b/src/gui/background.png diff --git a/src/gui/instructions.png b/src/gui/instructions.png Binary files differnew file mode 100644 index 0000000..946b9da --- /dev/null +++ b/src/gui/instructions.png diff --git a/src/gui/instructions.svg b/src/gui/instructions.svg new file mode 100644 index 0000000..5cd917a --- /dev/null +++ b/src/gui/instructions.svg @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="800" + height="500" + id="svg3656" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docname="instructions.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/pmoleri/quin-te-ti.activity/src/gui/instructions.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs3658"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective3664" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.79" + inkscape:cx="415.98232" + inkscape:cy="208.49925" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1219" + inkscape:window-height="728" + inkscape:window-x="51" + inkscape:window-y="25" /> + <metadata + id="metadata3661"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <path + d="M 66.466056,2.9999985 C 31.471654,2.9999985 3.0000001,20.712973 3.0000001,42.48634 L 3.0000001,457.51364 C 3.0000001,479.287 31.469936,497 66.466056,497 L 733.53565,497 C 768.53178,497 796.99999,479.287 796.99999,457.51364 L 796.99999,42.48634 C 796.99999,20.71405 768.53178,2.9999985 733.53565,2.9999985 L 66.466056,2.9999985 z" + id="path892" + style="fill:#f8601f;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#fdfdfd;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Metal;-inkscape-font-specification:Metal" + x="62.300049" + y="111.77754" + id="text4967"><tspan + sodipodi:role="line" + x="62.300049" + y="111.77754" + id="tspan2441">El objetivo del juego es ubicar las fichas en</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="111.77754" + id="tspan2445">el tablero de forma de sumar 15 tanto en</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="134.27754" + id="tspan4989">filas como en columnas.</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="156.77754" + id="tspan4991" /><tspan + sodipodi:role="line" + x="62.300049" + y="179.27754" + id="tspan4993">El juego es para dos participantes y se inicia</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="201.77754" + id="tspan4995">con el tablero vacío y los números afuera.</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="224.27754" + id="tspan5009">Éstos van alternando sus turnos, jugando</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="246.77754" + id="tspan2425">en cada caso el participante que aparece</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="269.27753" + id="tspan5075">resaltado en la pantalla.</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="291.77753" + id="tspan5093" /><tspan + sodipodi:role="line" + x="62.300049" + y="314.27753" + id="tspan5015">Cuando un jugador ubica una ficha que</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="336.77753" + id="tspan5017">suma 15 en cualquiera de las dos direcciones,</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="359.27753" + id="tspan5019">éste gana un punto. Si logra sumar quince</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="381.77753" + id="tspan5021">en ambas direcciones a la vez, gana 2 puntos.</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="404.27753" + id="tspan6414" /><tspan + sodipodi:role="line" + x="62.300049" + y="426.77753" + id="tspan6416">Los jugadores deben usar la misma computadora</tspan><tspan + sodipodi:role="line" + x="62.300049" + y="449.27753" + id="tspan6418">ya que aún no está habilitado el juego por red.</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 519.30061,22.86701 L 519.30061,473.05054" + id="path5023" /> + <text + xml:space="preserve" + style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Metal;-inkscape-font-specification:Metal" + x="556.71631" + y="51.842243" + id="text5029" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"><tspan + sodipodi:role="line" + x="556.71631" + y="51.842243" + id="tspan5059">Quin-te-ti 0.1 fue desarrollada</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="71.842239" + id="tspan6422">en Ceibal JAM</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="91.842239" + id="tspan5061">www.ceibaljam.org</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="111.84224" + id="tspan5063" /><tspan + sodipodi:role="line" + x="556.71631" + y="131.84224" + id="tspan5057">Propuesta:</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="151.84224" + id="tspan6410"> Caryl Bigenho</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="171.84224" + id="tspan5039" /><tspan + sodipodi:role="line" + x="556.71631" + y="191.84224" + id="tspan5041">Desarrollo:</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="211.84224" + id="tspan5033"> Pablo Moleri</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="231.84224" + id="tspan5035"> Juan Manuel Picerno</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="251.84224" + id="tspan5053"> Leonardo Val</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="271.84225" + id="tspan6412"> Pablo Garin</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="291.84225" + id="tspan5055" /><tspan + sodipodi:role="line" + x="556.71631" + y="311.84225" + id="tspan5121">Diseño gráfico:</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="331.84225" + id="tspan5123"> Magdalena Sayagués</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="351.84225" + id="tspan5125" /><tspan + sodipodi:role="line" + x="556.71631" + y="371.84225" + id="tspan5069">Colaboración:</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="391.84225" + id="tspan5071"> Silvio Sisto</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="411.84225" + id="tspan5047" /><tspan + sodipodi:role="line" + x="556.71631" + y="431.84225" + id="tspan5049">Consultas y sugerencias:</tspan><tspan + sodipodi:role="line" + x="556.71631" + y="451.84225" + id="tspan5051"> pmoleri@gmail.com</tspan></text> + <text + xml:space="preserve" + style="font-size:22;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Metal;-inkscape-font-specification:Metal Bold" + x="59.980049" + y="64.556961" + id="text5111"><tspan + sodipodi:role="line" + id="tspan5113" + x="59.980049" + y="64.556961">Instrucciones</tspan></text> + </g> +</svg> diff --git a/src/gui/instructions_button.png b/src/gui/instructions_button.png Binary files differnew file mode 100644 index 0000000..8271cab --- /dev/null +++ b/src/gui/instructions_button.png diff --git a/src/gui/player_win.png b/src/gui/player_win.png Binary files differnew file mode 100644 index 0000000..e9e6be2 --- /dev/null +++ b/src/gui/player_win.png diff --git a/src/gui/quinteti-new.png b/src/gui/quinteti-new.png Binary files differnew file mode 100644 index 0000000..1659917 --- /dev/null +++ b/src/gui/quinteti-new.png |