Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Weng Weng

#1
Hundir la flota
1. El juego se jugará contra la máquina.
2. La flota estará formada por:
a. Un destructor: 4 piezas
b. 2 portaaviones: 3 piezas
c. 3 fragatas: 2 piezas
d. 4 submarinos: 1 pieza
3. En todo momento se visualizarán dos pantallas, la del jugador a la izquierda y la de la
máquina a la derecha.
a. En la pantalla del jugador veremos donde están situados los barcos del jugador. los
barcos identificarán con una b cuando están "vivos" y con una x cuando han sido
hundidos. Los dispares errados por el enemigo se visualizarán con una a.
b. En la pantalla de la máquina veremos los barcos que lo hemos hundido identificados
con una x, y los dispares errados con una a.

Generalidad de Cataluña
Departamento de Enseñanza
Instituto del Estatuto

CFGS ASIX

MODULO 03: Fundamentos de Programación

UF2. Programación modular y recursiva CURSO: 1º Práctica UF2.3

Página 2 | 7
c. En ambas pantallas, un espacio indicará una posición "inexplorada".
4. La carga de la disposición de la flota enemiga (la de la máquina) se hará de forma
aleatoria.
5. La carga de la disposición de nuestra flota se hará desde el teclado (indicando tipo de
barco, casilla inicial y orientación (p.e. 3, 2, 2, 'h' - & gt; barco de 3 casillas (portaaviones),
comienza en la casilla (2, 2) y lo colocamos horizontalmente).
6. El desarrollo del juego será el conocido por todos. Recordemos que ambos
jugadores se turnan para disparar sobre los barcos de la flota enemiga, y que cuando un
jugador acierta un disparo continúa disparando hasta que falla o hasta que hunde el último
barco del enemigo.
7. Al terminar el juego se debe mostrar en pantalla quien ha sido el ganador.
8. Naturalmente, el juego no deberá permitir situar los barcos de forma errónea (por
ejemplo: dos barcos no se pueden tocar, los barcos sólo pueden situarse horizontal
o verticalmente, no en diagonal, ...).
9. Cada vez que un buque haya sido hundido, se marcarán como posiciones disparadas
(Con la 'a' correspondiente) todas las posiciones contiguas a cada uno de los segmentos del
barco, dado que las normas dicen que allí no puede haber ningún otro.
rúbrica
1. Estructuras de almacenamiento de datos (1 punto):
a. El programa utiliza las estructuras de almacenamiento de datos adecuados
b. Se ha previsto la posibilidad de variar las condiciones iniciales del juego (número de
minas, tamaño del tablero de juego, cantidad de portaaviones, etc.)

2. Funcionalidad (3.5 puntos):
a. El juego funciona correctamente (2 puntos)
b. La visualización del mostrador es clara y comprensible (0.5 puntos)
c. La entrada de datos es ágil y segura (0.5 puntos)
d. Los mensajes del programa nos informan a cada momento del punto del juego en
que nos encontramos (0.5 puntos)

3. Funciones (4.5 puntos):
a. El programa está correctamente dividido en diferentes funciones (se ha evitado repetir
código, las funciones tienen finalidades claras, etc.) (3 puntos)
b. El uso de las funciones de parámetros, variables locales y globales es correcta (0.5
puntos)
c. Aparecen funciones recursivas (1 puntos)
4. Comentarios (1 punto)
a. El código está correctamente comentado



ESTOS SON LOS CRITERIOS
#2
Hola foro!!
Alguien tiene algún juego de hundir la flota en Python 3.

Si lo teneis jugador vs maquina seria la hostia!!!!

Gracias gente.
#3
Gente alguien tiene el código de Python 3 del juego hundir la flota?
Este me da fallo:

import numpy as np

from collections import Counter





def iguales(diccionario_1, diccionario_2):

    return diccionario_1.__eq__(diccionario_2)





def comprobar_barcos(oceano, cuenta_barcos):

    barcos_oceano = {}

    tamaño = 0

    for fila in range(oceano.shape[0]):

        for casilla in oceano[fila, :]:

            if casilla == 0:

                if tamaño > 1:

                    if tamaño in barcos_oceano:

                        barcos_oceano[tamaño] += 1

                    else:

                        barcos_oceano[tamaño] = 1

                tamaño = 0

            else:

                tamaño += 1

    for columna in range(oceano.shape[1]):

        for casilla in oceano[:, columna]:

            if casilla == 0:

                if tamaño > 1:

                    if tamaño in barcos_oceano:

                        barcos_oceano[tamaño] += 1

                    else:

                        barcos_oceano[tamaño] = 1

                tamaño = 0

            else:

                tamaño += 1



    return iguales(barcos_oceano, cuenta_barcos)





if __name__ == '__main__':

    respuestas = []

    numero_barcos = int(input())

    while numero_barcos > 0:

        lista_barcos = [int(x) for x in input().split()]

        cuenta_barcos = Counter(lista_barcos)

        tamaño_oceano = int(input())

        oceano = []

        for fila in range(tamaño_oceano):

            oceano.append([int(x) for x in input().split()])

        oceano = np.array(oceano)

        if comprobar_barcos(oceano, cuenta_barcos):

            respuestas.append('SI')

        else:

            respuestas.append('NO')

        numero_barcos = int(input())

    for respuesta in respuestas:

        print(respuesta)


Gracias foro ;)
#4
Buenas, 
Hago esta consulta para todos aquellos que estudiamos Python y nos toca hacer practicas. Me toca hacer un juego tipo jumanji y estoy mas perdido que el mar de Bolivia . Tengo hechos los eventos de cada casilla es decir (casilla uno encuentras una espada y se suma a tu inventario). Ahora lo que no se como hacer es que en cada tirada en función de lo que decida el dado que he definido como (dado = random.randint(1,7) ) se vaya a la casilla correspondiente. Ojala podáis echarme un cable.

Muchas gracias foreros ;D
#5
import random, os



baralla = [
    [1, 'Piques'], [2, 'Piques'], [3, 'Piques'],[4, 'Piques'],[5, 'Piques'],
    [6, 'Piques'], [7, 'Piques'], ['J', 'Piques'], ['Q', 'Piques'],['K', 'Piques'],
    [1, 'Diamants'], [2, 'Diamants'], [3, 'Diamants'],[4, 'Diamants'],[5, 'Diamants'],
    [6, 'Diamants'], [7, 'Diamants'], ['J', 'Diamants'], ['Q', 'Diamants'], ['K', 'Diamants'],
    [1, 'Cors'], [2, 'Cors'], [3, 'Cors'],[4, 'Cors'],[5, 'Cors'],
    [6, 'Cors'], [7, 'Cors'], ['J', 'Cors'], ['Q', 'Cors'], ['K', 'Cors'],
    [1, 'Trèvols'], [2, 'Trèvols'], [3, 'Trèvols'],[4, 'Trèvols'],[5, 'Trèvols'],
    [6, 'Trèvols'], [7, 'Trèvols'], ['J', 'Trèvols'], ['Q', 'Trèvols'], ['K', 'Trèvols']
]



#baraja las cartas

random.shuffle(baralla)




cartas_jugador=[]
cartas_maquina=[]

posicion_jugador=-1
posicion_maquina=-2

puntos_jugador=0
puntos_maquina=0

#CARTAS


print("MÀQUINA:") #Muestra cartas de la maquina


cartas_maquina=(baralla[posicion_maquina])
print(cartas_maquina)
posicion_maquina+=-2 # Ya que la del jugador es la ultima y esta es la penultima



print("JUGADOR:") #Muestra cartas del jugador


continuar="s"

while  continuar=="s": # Si quiere otra carta
     if contador_jugador==-1: #Proporciona una carta
        cartas_jugador=[baralla[contador_jugador]]
        print(cartas_jugador)
        contador_jugador-=2
     elif contador_jugador!=1: #Proporciona otra carta
        cartas_jugador.append(baralla[contador_jugador])
        print(cartas_jugador)
        contador_jugador-=1
    elif cartas_jugador[-1][0] == 'J' or  cartas_jugador[-1][0] =='Q' or cartas_jugador[-1][0] == 'K': #Condicion de si tienes una letra te da o,5 puntos
     puntos_jugador += 0.5
    else:
    puntos_jugador += cartas_jugador[-1][0] #Condicion de si tienes una carta que no es una letra te asigne el valor de la carta

    continuar=input("Quieres continuar s/n?")

Muchas gracias de antemano, si alguien me pudiese ayudar le estaría eternamente agradecido ya que se trata de un trabajo que puntua bastante. GRACIAS.
#6
Cita de: z3nth10n en  3 Diciembre 2018, 21:13 PM
No lo he probado, pero quizás te venga bien: https://pypi.org/project/java2python/


GRACIAS, se te ve buen zamarro!!!!
#7
public class SieteyMedia {
public static void main(String[] args) {
 //Se crean el mazo, el jugador y la banca
 Mazo mazo = new Mazo();
 ManoSieteyMedia jugador = new ManoSieteyMedia();
 ManoSieteyMedia banca = new ManoSieteyMedia();
 
 //Se reparten las cartas iniciales:
               //Una al jugador y una a la banca
 jugador.agnadeCarta(mazo.daCarta());
 banca.agnadeCarta(mazo.daCarta());
 
 //El jugador pide cartas mientras según su estrategia
 while(jugador.cuentaPuntos()<=5){
  System.out.println(
                             "El jugador pide una carta extra");
  jugador.agnadeCarta(mazo.daCarta());
 }
 
 //La banca se planta si el jugador se ha pasado.
               //En caso contrario pide cartas
 if(jugador.cuentaPuntos()<=7.5){
                 //el jugador no se ha pasado
  while(banca.cuentaPuntos()<7.5 &&
                           banca.cuentaPuntos()<jugador.cuentaPuntos()){
   System.out.println(
                                      "La banca pide una carta extra");
   banca.agnadeCarta(mazo.daCarta());
  }
 }
 //Se cuentan los puntos obtenidos y se decide el ganador
 double puntosJ = jugador.cuentaPuntos();
 double puntosB = banca.cuentaPuntos();
 
 if(puntosJ<=7.5 && (puntosB>7.5 || puntosJ>puntosB)){

  System.out.println("Gana el jugador con "+jugador
                           +" ("+ puntosJ+" puntos) frente a "+ banca+
                           " ("+puntosB+" puntos) de la banca");
 }else if (puntosB<=7.5){
  System.out.println("Gana la banca con "
                           +banca+" ("+ puntosB+
                           " puntos) frente a "+ jugador+" ("+
                           puntosJ+" puntos) del jugador");
 }else{
  System.out.println("No hay ganador: Jugador "+
                           jugador+" ("+puntosJ+" puntos) y banca "
                           + banca +" ("+
                           puntosB+" puntos) se han pasado");
 }
}
}
Ahora procedo a poneros las soluciones ;)

Primero la clase abstracta Mano.

public abstract class Mano{
protected Carta[] cartas;
protected int numCartas;
static final int TOPE = 20;
public Mano() {
 numCartas = 0;
 cartas = new Carta[TOPE];
}

public Mano(int num) {
 cartas = new Carta[num];
 numCartas = 0;
}

public void descartaTodas() {
 numCartas = 0;
}

public void agnadeCarta(Carta c) {
 if(numCartas >= TOPE)
              throw new RuntimeException("No puedes añadir mas cartas");
 cartas[numCartas] = c;
 numCartas ++;
}

public int numeroDeCartas() {
 return numCartas;
}

public abstract double cuentaPuntos();

public String toString() {
 String std = "";
 for(int i = 0; i < numCartas; i++) {
  std = std + " "+ cartas;
 }
 return std;
}
}

Ahora os pondré la clase Carta: Nota: Fijaos que el enum de los palos va dentro de ésta ;)
public class Carta {
public static enum Palo { PICA, TREBOL, DIAMANTE, CORAZON};
private static String[] nombreCarta = {"AS", "2", "3", "4",
                                              "5", "6", "7", "8",
                                              "9", "10", "J", "Q",
                                              "K"};

private int valor;
private Palo palo;

public Carta(int v, Palo p){
 valor = v;
 palo = p;
}
public int valor() {return valor;}
public Palo palo() {return palo;}
public String toString() {
 return nombreCarta[valor-1] + " de " + palo;
}

}
Vamos ahora con la clase Mazo ;)
import java.util.Random;
public class Mazo {
private static Random alea = new Random();
private Carta[] mazo;
private int numCartas;

public Mazo() {
 mazo = new Carta[52]; //Creo el array de cartas.
 for(int n = 1; n < 13; n++) {
  for(Carta.Palo p: Carta.Palo.values()) {
   mazo[numCartas] = new Carta(n, p);
   numCartas++;
  }
 }
}

public void baraja() {
 for(int i = 0; i< numCartas; i++) {
  int r = alea.nextInt(numCartas);
  Carta c = mazo;
  mazo = mazo[r];
  mazo[r] = c;
 }
}

public int numeroDeCartas() {
 return numCartas;
}

public Carta daCarta(){
 if (this.numeroDeCartas()==0)
                  throw new RuntimeException("No quedan cartas.");
 numCartas--;
 return mazo[this.numeroDeCartas()];
}
}

Y ya por último con la clase ManoSieteYMedia:
public class ManoSieteyMedia extends Mano{
public double cuentaPuntos() {
 double puntos = 0;
 for(int i = 0; i<numCartas; i++) {
  puntos += cartas.valor();
 }
 return puntos;
}
}