Aquí está la cosa. Escribir código no se trata tanto de la sintaxis o del lenguaje que usa, se trata de resolver problemas. El estrés siempre será parte de este proceso y tendrá ganas de levantar las manos y decir que simplemente no le importa. La marca de un buen programador comienza no con el conocimiento de varios idiomas, sino con el deseo de atravesar las partes complicadas y aprender sobre las cosas que no entienden para poder hacer todo. Es difícil, especialmente al principio. Pero si sigues practicando, mejorarás. No te rindas todavía.
En cuanto a cómo mejorar … ¿Mejor cómo? ¿Qué parece demasiado complicado: los conceptos o el proyecto?
Si considera que los proyectos en sí mismos son demasiado complicados, no los conceptos, puede omitir esta primera sección, aunque si aún desea leerlo.
También es posible que desee ver algunas otras respuestas que he dado a preguntas similares. Estos se vincularán al final de la respuesta.
- ¿Qué opinas sobre fan fiction?
- ¿Cuál es la mejor manera de describirme?
- Cómo escribir un currículum atractivo
- ¿Qué es más fácil: decir una mentira o escribir una?
- ¿Cuál es un desglose simple de los cuatro estilos de escritura diferentes?
Si tiene dificultades para comprender los conceptos, es un poco más difícil ayudarlo. Podría tratar de explicarle los conceptos, pero creo que sería más beneficioso para usted si tratara de comprenderlo usted mismo con un poco de investigación en línea. Digo esto porque te encontrarás haciendo este tipo de cosas mucho, especialmente si tienes la intención de hacer una carrera fuera de la programación. Dependiendo de lo que le cuesta entender, puede hacer algunas búsquedas como:
“¿Qué son los objetos en la programación orientada a objetos?”
“¿Qué son las clases en la programación orientada a objetos?”
“¿Cómo funcionan las matrices?”
… Y así. Tenga en cuenta que agregué “en programación orientada a objetos” a los dos primeros porque “clase” y “objeto” son palabras lo suficientemente comunes como para que la búsqueda sea más específica.
Siempre puede pedirle ayuda a su instructor para comprender los conceptos también. Dependiendo de cómo sea él o ella, eso podría ser todo lo que necesita.
El consejo más simple pero más largo para dar (debido al ejemplo) es si el proyecto es demasiado complicado : divídalo en partes más pequeñas. Eso es lo que hacen muchos programadores profesionales. Divide el proyecto en piezas más pequeñas y divide esas piezas en piezas más pequeñas hasta que tengas un montón de cosas pequeñas que lograr. Un ejemplo sería hacer un juego de blackjack (teníamos esto en CS2): tienes un mazo de cartas que se barajan, luego el jugador recibe dos cartas. El jugador puede elegir tomar otra carta o quedarse con lo que tiene, con el objetivo de tener un total lo más cercano a 21 posible sin pasar. El crupier hace lo mismo, tratando de obtener un total igual o mayor que el jugador. Si cualquiera supera los 21, pierden. El más cercano a 21 sin pasar gana.
Nota: En el Blackjack normal, el As puede tener un valor de 1 u 11. Por el bien de este ejemplo, solo tendrá el valor de 1.
Comencemos dividiendo esto en partes:
(Quora solo permite viñetas de tres capas de profundidad, lo que arruinó la lista de jugadores: /)
- Mazo de cartas
- Cuatro trajes (diamante, corazón, jota, espada)
- Trece cartas en cada palo (As, 2–10, Jack, Reina, Rey)
- Tiene que ser barajado
- Necesito una forma de sacar la carta superior del mazo
- Jugador
- Pregúnteles si quieren otra tarjeta y actúen según la entrada
- Si el jugador quiere una carta, dale una carta desde la parte superior del mazo
- Si el jugador tomó una carta, verifique el nuevo total del jugador para ver si es superior a 21
- Si el total es superior a 21, el crupier gana automáticamente
- Si el total es exactamente 21, vaya al turno del repartidor
- Si el total es inferior a 21, pregunta si el jugador quiere otra carta
- De lo contrario, pasa al turno del repartidor
- Comerciante
- Comprueba si el total es menor que el jugador o mayor de 21
- Si es así, roba una carta
- Si no, deja de tomar cartas
- Repita hasta que el total sea mayor o igual que el jugador o mayor que 21
Si observa la lista anterior, notará que cada uno de estos puede implementarse fácilmente en unas pocas líneas de código (con la posible excepción del barajado, pero lo ignoraremos por ahora).
Así que ahora pensamos en qué tipo de estructuras de datos necesitamos. Personalmente, tendría una clase Card con un campo de valor, un método getValue () getter y un toString () para imprimir la tarjeta (básicamente para que podamos traducir 1 a A, 11 a J, etc.). Como nunca usamos el traje en Blackjack, no necesitamos incluirlo, aunque podríamos hacerlo y luego formar parte de toString ().
También podemos simplificar las cosas al tener una variable entera que tenga el total del jugador / distribuidor, en lugar de hacer un seguimiento de las cartas que tienen.
Pero primero preocupémonos por la cubierta. Necesitamos poder tener una colección cuyo tamaño puede cambiar a medida que sacamos las tarjetas. En Java y C #, probablemente usaríamos una ArrayList, C ++ sería std :: vector, y JavaScript o Python serían simplemente una matriz, ya que se implementan con longitud variable en esos lenguajes.
Entonces creamos una colección de estas cartas y la llenamos con cuatro de cada uno de los trece tipos de cartas (o una de cada 52 si incluye palos). La combinación aleatoria podría ser tan simple como generar dos índices aleatorios en la colección e intercambiar los valores en esos dos lugares, y luego repetir ese proceso, digamos, 50 veces. La clase de colección (ArrayList, vector o array) debe tener algún tipo de función “eliminar el primer elemento de esta colección y devolverla”, generalmente llamada pop (). Entonces usaremos eso para tratar.
Para el turno del jugador, observe cómo repetimos la acción varias veces dependiendo de si quieren volver a dibujar. Podemos implementar eso como un ciclo while:
// Queremos que este ciclo deje de ejecutarse si el jugador dice “no”
// al dibujo o si el total es 21 o mayor
while (/ * Una función que devuelve un valor booleano para preguntar si dibujarán * / AND playerTotal <21)
{
// Roba una carta y agrégala al total del jugador
// Muestra el nuevo total
{
// Pasar al distribuidor
Espero que pueda entender cómo traduje los requisitos para el Reproductor y el mazo en una implementación de programación: el código real dependerá del idioma que use. Te lo dejaré a ti para tratar de descubrir cómo implementar el distribuidor y averiguar quién gana.
Ahora para algunos otros enlaces, posiblemente útiles. Algunos de estos están dirigidos a personas que nunca antes han codificado, pero que siguen siendo útiles si tiene dificultades.
Este fue enviado en el Quora Digest: la respuesta de Michael Bryant a ¿Cómo puedo desarrollar habilidades de programación rápidamente como novato?
¿Cómo mejorar como programador? ¿Cómo puedo mejorar al escribir código?
Qué no hacer mientras se programa: la respuesta de Michael Bryant a Hay muchos temas sobre qué hacer para ser un mejor programador, pero ¿qué pasa con lo que no se debe hacer? ¿A qué has tenido que renunciar?
Las calificaciones “malas” no son fallas, solo significa que tienes más que aprender: la respuesta de Michael Bryant a ¿Cómo puedo mejorar las habilidades de programación?
Más información sobre cómo resolver problemas / proyectos de programación: la respuesta de Michael Bryant a ¿Es normal encontrar problemas en mi libro de Java que parece que no puedo resolver? ¿Cómo los superaste?
Ideas de proyectos al azar para más práctica: la respuesta de Michael Bryant a ¿Qué proyectos puedo hacer para ampliar mi conocimiento de lenguajes de programación como Java, Python, PHP, JavaScript y C ++?
Gracias por el A2A!