Está en la página 1de 11

Universidad de Santiago de Chile

Facultad de Ingeniería
Módulo Básico de Ingeniería

FUNDAMENTOS DE COMPUTACIÓN Y
PROGRAMACIÓN
Enunciado Control de Laboratorio N°3

Santiago, Agosto de 2013


Enunciado Control de Laboratorio N°3 2013

I. Objetivos
Aplicar los conocimientos de Programación vistos en Cátedra y Laboratorio para generar un
programa en Python que resuelva el problema indicado.

II. Problema
El Black Jack, es un juego de cartas de la baraja inglesa, propio de casinos, que consiste en
obtener 21 puntos, a través de la suma de los valores de las cartas. Las cartas numéricas
suman su valor, las figuras suman 10 y el As toma el valor de 11, o en caso de que el 11 haga
que el jugador se supere los 21, toma el valor de 1.

El juego comienza cuando la banca (en este caso el computador), reparte dos cartas a cada
jugador, incluido a sí mismo. Al recibir las cartas, el jugador tiene la posibilidad de plantarse, es
decir, quedarse en conformidad con las cartas que tiene o pedir una carta más cada vez, hasta
plantarse o superar los 21. El jugador que supere los 21, queda automáticamente descalificado.

La banca, a diferencia del resto de los jugadores funciona con reglas bastante automáticas:
 Si sus cartas suman menos de 16, pedir una carta más.
 Si el valor de sus cartas está entre 17 y 21, plantarse.
 Si sobrepasa el valor de 21, como el resto de los jugadores, queda descalificado.

Se declara ganador al jugador que tenga el número más alto, igual o inferior a 21, o al jugador
que con su mano original de 2 cartas obtenga un Black Jack, es decir, el valor exacto de 21.

Se requiere que implemente un juego de Black Jack que funcione en la consola de Python 2.6,
capaz de soportar a dos jugadores, un usuario que interactuará con el intérprete de Python y la
máquina misma, siguiendo las reglas de la banca del juego.

Para su implementación debe tener en cuenta ciertas consideraciones que se detallan en las
secciones siguientes.

1|Página
II.1. Respecto al naipe

El Black Jack se juega utilizando la baraja inglesa la cual está compuesta por 52 cartas
divididas del siguiente modo:
 Cuatro palos, dos de color rojo y dos de color negro, de 13 cartas cada uno, los que son:

Corazones ♥
Rombos ♦
Picas ♠
Tréboles ♣
 Dos cartas comodín, una roja y una negra, llamadas “Joker”, cuyo uso se omite en el
caso del Black Jack

Como se dijo anteriormente, cada palo está compuesto por 13 cartas, que se ordenan de menor
a mayor rango de la siguiente forma: 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A (correspondiente al valor
1 también).

Las cartas con denominaciones alfabéticas se inspiran en personajes de la realeza y en inglés


se les denomina court cards. La J, conocida como Sota o “Jack” representa a un sirviente,
mientras que la Q, denominada “Queen” representa la reina. La K se usa para representar al
Rey o “King” en inglés. Finalmente la A se le denomina As o “Ace” y dependiendo del juego
puede ser la carta de mayor valor (11), o ser inferior a las cartas de valor numérico adoptando el
valor 1.

Es importante mencionar que comúnmente el Black Jack se juega utilizando no una, sino entre
4 a 8 barajas de naipe inglés. En este caso considere que se utilizarán 2 barajas completas, y
que en cada juego las cartas usadas se reincorporarán a la baraja para juegos posteriores. Esto
significa que en todo momento sólo puede haber como máximo 2 cartas idénticas circulando
entre los jugadores (mismo palo, mismo valor) y como máximo 8 del mismo valor pero distinto
palo (2 de cada palo por valor).
Enunciado Control de Laboratorio N°3 2013

II.2. Respecto a la mecánica del juego


El programa comienza cuando el código se ejecuta, dándole la bienvenida al jugador e
invitándolo a jugar. Una vez que el jugador acepta, el juego comienza.

Se reparten dos cartas al azar a cada jugador, la máquina y el usuario, sin mostrarle al usuario
las cartas con las que está jugando la máquina. Recuerde que al igual que en el juego de cartas
real, se deben generar los procedimientos para asegurar la aleatoriedad de las cartas en cada
jugada.

El jugador toma conocimiento de las cartas, por ejemplo, en el intérprete de Python podría
presentarse un mensaje del estilo (sin que sea la única opción de representación válida):
Jugador 1 tiene 2 cartas:
- J de Corazones
- 2 de Tréboles
La mano suma 12 en total...

La máquina por otro lado recibe internamente sus dos cartas (para evitar trampas, debe
guardarse un historial de juego en un archivo “Historial.txt” cuyos requerimientos se indicarán en
II.4), y juega siguiendo sus reglas, hasta que la condición de parada de dichas reglas se
cumplan (no se debe indicar al usuario aún cómo le fue a la máquina en sus jugadas).

Cuando la máquina termina de jugar, el jugador, en base a la mano recibida, decide entre
plantarse o pedir una carta más:
 Si el jugador decide pedir otra carta, se agrega el valor de dicha carta a la suma de
la mano en juego y se le indica que carta recibió.
Jugador 1 tiene 3 cartas:
- J de Corazones
- 2 de Tréboles
- 8 de Picas
La mano suma 20 en total...
Si desea pedir otra carta pulse 1, si desea plantarse pulse 2
La opción escogida es: |

3|Página
 Si decide plantarse o supera los 21 al solicitar una carta más, se muestran las manos
de la máquina y del jugador y se informa quien fue el ganador. En caso de que
ambos jugadores tengan la misma puntuación o hayan superado los 21 ambos, se
considera un empate.
 Una vez finalizada la partida el jugador tiene la posibilidad de jugar nuevamente, o
finalizar el juego.
 Si se decide jugar nuevamente, se debe establecer un marcador de Ganados,
Perdidos y Empates, que se muestra sólo al final de cada juego.

II.3. Respecto a la representación en Python


Considere que este trabajo fue conscientemente diseñado para que no pueda ser resuelto sin
realizar las abstracciones de procesos y de datos pertinentes a fin de dividir el problema en
secciones manejables y separar las acciones a realizar de las representaciones necesarias, por
lo que se recomienda leer detenidamente el documento, e identificar que información del
enunciado es relevante para el problema y cuál corresponde a información irrelevante.

Considere que se evaluará la estructura de programas en Python, por lo que a pesar de la


envergadura del programa este DEBE estar subdividido en funciones claramente definidas,
comentadas, indicando sus entradas, salidas y lo que éstas entregan, y de ser necesario ir
comentando paso a paso las instrucciones.

Los bloques de programa deben ir claramente definidos, y como mínimo debiera diferenciar:

 Encabezado: Indicado la información relevante del programa.


 Definición de constantes: Indicando la importación y definición de valores constantes en
el programa.
 Definición de funciones: Indicando las funciones necesarias para la ejecución del
programa, además, se recomienda dividir dichas funciones de acuerdo a:
 Definiciones de estructuras de datos: Presentando las abstracciones realizadas,
para representar barajas, manos, palos, contadores, etc.
 Funciones de la máquina: Funciones destinadas a que la máquina juegue Black
Jack, con las reglas indicadas para la banca en la descripción del problema
Enunciado Control de Laboratorio N°3 2013

 Funciones del juego: Funciones destinadas al juego mismo entre la máquina y el


usuario, por ejemplo repartir cartas (Ver Indicación), calcular valor de la mano,
definir el ganador, etc.
 Funciones del historial de juego: Funciones destinadas a almacenar los
resultados del juego en el archivo historial.txt.
 Funciones de validación: Funciones extra para considerar que se cumplan
condiciones propias del problema.
Considere que identificando y dividiendo el programa en sub-procesos, el problema resultará
más sencillo de abordar para el equipo de trabajo, en caso de alcanzar sólo parcialmente los
objetivos del Control, se sugiere colocar en los comentarios las abstracciones de datos y
procesos implementados y no implementados.

Indicación: Considere los métodos definidos en el módulo random de Python para seleccionar
aleatoriamente las cartas en cada jugada.

II.4. Respecto al archivo “historial.txt”


Como se menciona en II.2, se requiere la existencia de un archivo “historial.txt”, en el cual se
almacenarán los resultados de los juegos de una sesión, como se muestra en la página
siguiente, el historial debiera tener por lo menos:

 Encabezado: Indicando de que trata el archivo en cuestión, se sugiere usar las


bibliotecas de Python de fecha y hora para indicar cuándo se realizó el juego.
 Las manos con las que terminaron en cada partida, indicando cartas y puntaje.
 El ganador de cada partida
 El detalle de las partidas si hubo más de una
 El resultado marcador final del juego

El objetivo de este archivo es que se muestre de forma legible el resultado de los distintos
juegos, considere que el momento en que este historial importa para el desarrollo del juego. El
siguiente es un ejemplo del archivo “historial.txt” que ha de generarse.

5|Página
=======================================================================
Juego iniciado el 2013-08-18 a las 22:30:00
=======================================================================
Juego 1
- La banca obtuvo: K de Picas, A de Corazones
TOTAL: 21 – POR BLACKJACK
- Jugador obtuvo: 10 de Rombos, 2 de Tréboles, 4 de Corazones
TOTAL: 16
GANADOR: La banca
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Juego 2
- La banca obtuvo: 9 de Rombos, 7 de Picas, J de Picas
TOTAL: 17
- Jugador obtuvo: 10 de Corazones, 8 de Tréboles, 2 de Corazones
TOTAL: 20
GANADOR: Jugador
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Juego 3
- La banca obtuvo: 7 de Picas, J de Corazones
TOTAL: 26 – Descalificado
- Jugador obtuvo: 9 de Corazones, 8 de Picas
TOTAL: 19
GANADOR: Jugador

=============================================================
RESULTADO FINAL
BANCA: 1 JUGADOR: 2 GANADOR: JUGADOR

==============================================================
Enunciado Control de Laboratorio N°3 2013

III. Entrega
El plazo máximo para entregar el programa será el día martes 27 de agosto a más tardar a las
23:55 horas.

Se requiere entregar un archivo .py con el programa desarrollado en Python, con los RUT de
sus integrantes (sin puntos, ni guión) por nombre de archivo siguiendo el formato <RUT N°1>-
<RUT N°2>.py por ejemplo:
173454322-18984321K.py

Además en el código, se debe añadir el siguiente encabezado del programa, con los siguientes
datos para identificar su trabajo (Rellene el encabezado del programa con los datos en formato
IDÉNTICO al indicado en el ejemplo a continuación:

# -*- coding: cp1252 -*-

# SECCIÓN DE LABORATORIO: L-1


# PROFESOR DE LABORATORIO: Carlos Rey

# INTEGRANTES
# 1.
# NOMBRE: Juan Carlos Perez Gonzalez
# RUT: 17.345.432-2
# CARRERA: Ingeniería Civil Mecánica
# PROFESOR DE CÁTEDRA: Andrés Rice

# 2.
# NOMBRE: Javier Rojas Madariaga
# RUT: 18.984.321-K
# CARRERA: Ingeniería de Ejecución en Computación e Informática
# PROFESOR DE CÁTEDRA: César Silva

# DESCRIPCIÓN DEL PROGRAMA ...<CONTINÚE CON EL PROGRAMA A PARTIR DE AQUÍ>

Se requiere que suba este archivo a la plataforma USACHVIRTUAL y, como respaldo, enviar
una copia al mail de su profesor de laboratorio y de su ayudante de laboratorio ANTES del
plazo establecido.

En caso de tener más archivos en su implementación, considere que el encabezado debe ser
parte de cada uno de los archivos y se debe entregar el trabajo completo en un archivo
comprimido de extensión “.zip” o “.rar” con el mismo nombre que se indicó anteriormente.

7|Página
Considere que archivos sin identificador de autores no se considerarán como parte de su
implementación y por ende no serán revisados, ni evaluados.

IV. Evaluación

Respecto a la evaluación tenga en consideración:

 Los grupos estarán compuestos por un máximo de dos personas, ambas pertenecientes
a la misma coordinación de laboratorio.
 Se permite el trabajo individual, sin embargo, esto no significa una disminución en los
criterios de evaluación.
 En caso de detectar programas iguales, o con suficientes similitudes entre sí, tanto en
una misma coordinación como en coordinaciones distintas, será considerado un acto de
copia y calificado con nota mínima.
 Grupos que entreguen fuera del plazo establecido serán calificados con la nota mínima.
 Grupos que sean descubiertos en actos deshonestos serán sancionados con la nota
mínima.
 Grupos que revelen aspectos claves de su implementación en USACHVIRTUAL u otras
plataformas serán calificados con nota mínima.
 Considere que la implementación de su programa es de responsabilidad única de los
integrantes del grupo, y que tanto en cátedra como en laboratorio se han entregado
todas las herramientas y los contenidos para el desarrollo de ésta, por lo que cualquier
indicio de intervención de un tercero, será sancionado con la nota mínima.
 La difusión de este enunciado, solicitando ayuda, ofreciendo dinero a cambio de la
resolución e incluso la publicación de éste dentro del plazo de desarrollo de la tarea, se
considera un acto deshonesto, que daña la imagen de la Facultad de Ingeniería y de la
Universidad de Santiago y será calificado inapelablemente con nota mínima.
 Se sancionará con descuentos sobre la calificación final a los grupos que no cumplan
con las instrucciones del programa y de entrega publicados en el enunciado.
 Se bonificará a los grupos que añadan funcionalidades adicionales, aspectos de
presentación más elaborados y que en general no se limiten simplemente a resolver el
Enunciado Control de Laboratorio N°3 2013

problema dado (en estos casos indicar en los comentarios o en un archivo .txt,
requisitos, modo de uso, funcionalidades extras, etc).
 Considere que se evaluará el código mismo, las funcionalidades conseguidas, la
estructura del programa, la ejecución del programa, la respuesta a eventos inesperados
y los comentarios en el código fuente.

La nota final de esta evaluación vale como una nota del total de notas de laboratorio, y esta se
divide en dos partes, la implementación y el test de salida con las siguientes características:

 El test de salida, corresponde a un control que será tomado en la siguiente semana


luego de la entrega del trabajo, en horario de laboratorio o el que el profesor de cada
laboratorio convenga con su sección de laboratorio, a fin de verificar que el grupo que
presenta un trabajo que es de su autoría, en el cuál se le preguntará respecto a
aspectos funcionales de SU implementación o la resolución sin el intérprete de Python
de alguno de los sub-problemas del enunciado.

 Si su nota del test es superior a 4,0, la ponderación es 10% test de salida y 90%
programa.

 Si su nota en el test de salida es inferior a 4,0, la ponderación del trabajo es


100% la nota más baja escogiendo entre el control de salida y la nota del
programa.

9|Página

También podría gustarte