Juego – Adivina la cueva del dragón – Python

Como ya dije otras veces, Invent Your Own Computer Games with Python es un libro gratuito y libre que te enseña a programar juegos de ordenador en Python. Cada ciertos capítulos te muestra el código completo de un nuevo juego y luego te explica los conceptos de programación de dicho código.

Uno de los juegos más sencillos y más interesantes para aprender es Adivina la cueva del dragón, aquí os paso el código completo para ejecutarlo en Python 3 en adelante.

import random import time def displayIntro(): print() print('Te encuentras en un lugar lleno de dragones. Delante') print('tuya ves dos cuevas. En una vive un dragon afable que ') print('tiene escondido un tesoro para ti. El otro dragon') print('es agresivo y no dudara en comerte.') print() def chooseCave(): cave = '' while cave != '1' and cave != '2': print('Elige una de las dos cuevas (1 o 2)') cave = input() return cave def checkCave(chosenCave): print('Te acercas a la cueva...') time.sleep(2) print('Esta oscura y silenciosa...') time.sleep(2) print('y de repente un dragon se abalanza hacia ti,') print('abre la boca y...') print() time.sleep(2) friendlyCave = random.randint(1, 2) if chosenCave == str(friendlyCave): print('Te da el tesoro!') else: print('Te come de un solo bocado!') playAgain = 'yes' while playAgain == 'yes' or playAgain == 'y': displayIntro() caveNumber = chooseCave() checkCave(caveNumber) print('Juegas de nuevo? (yes o no)') playAgain = input() read more

Leer más » 3 Comentarios

Comunicacion entre Procesos con Named Pipes

 
Las “Named Pipes” o “Tuberias Nombradas” son el nombre de una tecnica para lograr realizar una comunicacion entre procesos, a esto se le conoce como IPC (Inter Process Communication).  Permite a dos procesos en una misma maquina o de diferentes maquinas conectadas compartir mensajes entre procesos para comunicarse, esto es necesario en ocasiones en sistemas multitarea o multiproceso.

Leer más » 4 Comentarios

Juego – Adivina el número – Python

Como ya dije la semana pasada, Invent Your Own Computer Games with Python es un libro gratuito y libre que te enseña a programar juegos de ordenador en Python. Cada ciertos capítulos te muestra el código completo de un nuevo juego y luego te explica los conceptos de programación de dicho código.

Uno de los juegos más sencillos y más interesantes para aprender es Adivina el número, aquí os paso el código completo para ejecutarlo en Python 3 en adelante.

# This is a guess the number game. import random guessesTaken = 0 print('Hello! What is your name?') myName = input() number = random.randint(1, 20) print('Well, ' + myName + ', I am thinking of a number between 1 and 20.') while guessesTaken < 6: print('Take a guess.') # There are four spaces in front of print. guess = input() guess = int(guess) guessesTaken = guessesTaken + 1 if guess < number: print('Your guess is too low.') # There are eight spaces in front of print. if guess > number: print('Your guess is too high.') if guess == number: break if guess == number: guessesTaken = str(guessesTaken) print('Good, ' + myName + '! You guessed my number in ' + guessesTaken + ' guesses!') if guess != number: number = str(number) print('Nope. The number I was thinking of was ' + number) read more

Leer más » 1 Comentario

Manejo de Hilos en Java – Tutorial

En este pequeño tutorial veremos como manejar diferentes procesos en Java utilizando Hilos mediante la clase Thread. Un Thread es un hilo de ejecucion en un programa en java, el cual permite tener multiples instancias de hilos corriendo de forma simultanea en una aplicacion. Los hilos tienen un valor denominado prioridad, el cual puede pedir a java que en una situacion en que tenga que elegir cual proceso ejecutar inclinarse por uno u otro hilo, por default los hilos en java se inicializan con la misma prioridad.

En java existen dos formas distintas de crear un nuevo hilo, heredando de la clase Thread o implementando la Interfaz Runnable. Si utilizamos la opcion de implementar la interfaz Runnable, mas tarde tendremos que utilizarlo de parametro en una nueva instancia de la clase Thread para inicializarlo. Veamos un Ejemplo utilizando estas dos formas de crear hilos en java, se crearan dos hilos, uno creado heredando de la clase Thread y otro implementandolo de la interfaz Runnable, tambien veremos la forma de inicializarlos y el resultado al ejecutarlo, Veamos.

Logo Java

  • CODIGO

Clase Main

public class Main { public static void main(String args[]){ //Creamos el hilo 1 que hereda de la clase Thread Hilo1 hilo1 = new Hilo1(); //Creamos el hilo 2 que implementa la clase Runnable Hilo2 hilo2 = new Hilo2(); /* * Establecemos prioridad * (podemos jugar con valores de 1 y 10 * y veremos cual proceso termina primero * y cual segundo dependiendo de el valor * que asignemos aqui. */ hilo1.setPriority(10); //iniciamos los procesos hilo1.start(); new Thread(hilo2).start(); } } read more

Leer más » 4 Comentarios

Mostrar los asteriscos de la contraseña en un terminal

Por defecto en Linux, algo que resulta un poco engorroso, según que caso, es no conocer cuántos caracteres llevamos escritos cuando estamos rellenando el campo de una contraseña bajo un terminal. Algunos dirán que es más seguro no mostrar cuántos caracteres se escriben, de esta manera si alguien nos estuviera mirando lo tendría más difícil a la hora de tratar de averiguar lo escrito.

ver_contraseña_linux_hispano

Sea como fuere, prefiero tener ese feedback de que estoy escribiendo en el momento que escribo, y no solo hablo de la pulsación de una tecla física del teclado. Bien, así, la forma de solventarlo es fácil. Abrimos un terminal y ejecutamos visudo: read more

Leer más » 2 Comentarios

Entrada de datos en consola con Python

Si quieres un programa en Python 3 sin interfaz gráfica y que la entrada de datos la realice el usuario durante la ejecución del programa y en consola la función a usar es la de input.

Veamos un sencillo ejemplo:

print('Nombre: ')
nombre = input()
print('Es un placer conocerte, ' + nombre)
Leer más » 2 Comentarios

Cómo saber la codificación del juego de caracteres desde la consola Linux

La codificación empleada en un fichero es extremadamente importante en ciertas situaciones. Se me ocurren dos por ahora: he intentado importar un CSV a LibreOffice Calc y si no llego a dar con la codificación exacta, no hubiera podido tener los datos o al menos no con tildes, eñes, etc.

utf8

Otro caso que se me ocurre, tenemos un servidor web que envía contenido web en un charset diferente al que aparece en la etiqueta <meta>, cierto navegador (Internet Explorer) tiene un problema de visualización por esta causa. read more

Leer más » 7 Comentarios

Tres en raya en Python

Invent Your Own Computer Games with Python es un libro gratuito y libre que te enseña a programar juegos de ordenador en Python. Cada ciertos capítulos te muestra el código completo de un nuevo juego y luego te explica los conceptos de programación de dicho código.

Uno de los juegos más sencillos y más interesantes para aprender es el Tres en Raya, aquí os paso el código completo para ejecutarlo en Python 3 en adelante.

# Tic Tac Toe import random def drawBoard(board): # This function prints out the board that it was passed. # "board" is a list of 10 strings representing the board (ignore index 0) print(' | |') print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9]) print(' | |') print('-----------') print(' | |') print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6]) print(' | |') print('-----------') print(' | |') print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3]) print(' | |') def inputPlayerLetter(): # Let's the player type which letter they want to be. # Returns a list with the player's letter as the first item, and the # computer's letter as the second. letter = '' while not (letter == 'X' or letter == 'O'): print('Do you want to be X or O?') letter = input().upper() # the first element in the tuple is the player's letter, the second is # the computer's letter. if letter == 'X': return ['X', 'O'] else: return ['O', 'X'] def whoGoesFirst(): # Randomly choose the player who goes first. if random.randint(0, 1) == 0: return 'computer' else: return 'player' def playAgain(): # This function returns True if the player wants to play again, otherwise # it returns False. print('Do you want to play again? (yes or no)') return input().lower().startswith('y') def makeMove(board, letter, move): board[move] = letter def isWinner(bo, le): # Given a board and a player's letter, this function returns True if that # player has won. We use bo instead of board and le instead of letter so # we don't have to type as much. return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top (bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle (bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom (bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side (bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle (bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side (bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal (bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal def getBoardCopy(board): # Make a duplicate of the board list and return it the duplicate. dupeBoard = [] for i in board: dupeBoard.append(i) return dupeBoard def isSpaceFree(board, move): # Return true if the passed move is free on the passed board. return board[move] == ' ' def getPlayerMove(board): # Let the player type in his move. move = ' ' while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board, int(move)): print('What is your next move? (1-9)') move = input() return int(move) def chooseRandomMoveFromList(board, movesList): # Returns a valid move from the passed list on the passed board. # Returns None if there is no valid move. possibleMoves = [] for i in movesList: if isSpaceFree(board, i): possibleMoves.append(i) if len(possibleMoves) != 0: return random.choice(possibleMoves) else: return None def getComputerMove(board, computerLetter): # Given a board and the computer's letter, determine where to move and # return that move. if computerLetter == 'X': playerLetter = 'O' else: playerLetter = 'X' # Here is our algorithm for our Tic Tac Toe AI: # First, check if we can win in the next move for i in range(1, 10): copy = getBoardCopy(board) if isSpaceFree(copy, i): makeMove(copy, computerLetter, i) if isWinner(copy, computerLetter): return i # Check if the player could win on his next move, and block them. for i in range(1, 10): copy = getBoardCopy(board) if isSpaceFree(copy, i): makeMove(copy, playerLetter, i) if isWinner(copy, playerLetter): return i # Try to take one of the corners, if they are free. move = chooseRandomMoveFromList(board, [1, 3, 7, 9]) if move != None: return move # Try to take the center, if it is free. if isSpaceFree(board, 5): return 5 # Move on one of the sides. return chooseRandomMoveFromList(board, [2, 4, 6, 8]) def isBoardFull(board): # Return True if every space on the board has been taken. Otherwise # return False. for i in range(1, 10): if isSpaceFree(board, i): return False return True print('Welcome to Tic Tac Toe!') while True: # Reset the board theBoard = [' '] * 10 playerLetter, computerLetter = inputPlayerLetter() turn = whoGoesFirst() print('The ' + turn + ' will go first.') gameIsPlaying = True while gameIsPlaying: if turn == 'player': # Player's turn. drawBoard(theBoard) move = getPlayerMove(theBoard) makeMove(theBoard, playerLetter, move) if isWinner(theBoard, playerLetter): drawBoard(theBoard) print('Hooray! You have won the game!') gameIsPlaying = False else: if isBoardFull(theBoard): drawBoard(theBoard) print('The game is a tie!') break else: turn = 'computer' else: # Computer's turn. move = getComputerMove(theBoard, computerLetter) makeMove(theBoard, computerLetter, move) if isWinner(theBoard, computerLetter): drawBoard(theBoard) print('The computer has beaten you! You lose.') gameIsPlaying = False else: if isBoardFull(theBoard): drawBoard(theBoard) print('The game is a tie!') break else: turn = 'player' if not playAgain(): break read more

Leer más » 2 Comentarios

Formularios de contacto en WordPress. Instalación, configuración y uso

Los formularios de contacto son algo tan básico en el día a día de cualquier web, que cuanto más fáciles y estándares puedas hacerlo mejor será para ti y para tu cliente si es que estás desarrollando la web para un tercero. Los formularios de contacto, suelen tener dos problemas:

  1. Un spammer puede hacer uso de ellos
  2. Los mensajes enviados pueden quedar en la carpeta Spam

La solución que os proponemos hoy, es fácil de implementar y supera estos dos problemas. Empecemos.

Instalación de plugins

En concreto, debemos utilizar tres plugins:

  • JetPack que nos dará la posibilidad de crear el formulario de contacto fácilmente
  • Akismet que hará la revisión anti spam para evitar que spammers usen el formulario para hacernos llegar spam
  • Configure SMTP para usar un servidor de SMTP y estar seguros de que los mensajes llegarán correctamente a nuestra bandeja de entrada

Configuración SMTP

Una vez instalado el último plugin, nos vamos a Ajustes -> SMTP y ahí configuramos servidor, usuario y contraseña de la cuenta de correo que usaremos para enviar correos. read more

Leer más » 2 Comentarios

Ejemplo de interfaz gráfica sencilla en Python con Tkinter

Está claro que para interfaces de gran envergadura existen soluciones como PyGTK, wxPython o PyQT. Sin embargo, para aplicaciones sencillas puedes utilizar la interfaz Tkinter de la librería estándar de Python.

Aquí te muestro un ejemplo sencillo:

import Tkinter

if __name__ == '__main__':
    root = Tkinter.Tk()
    root.title('Button')
    Tkinter.Label(text='I am a button').pack(pady=15)
    Tkinter.Button( text='Button').pack(side=Tkinter.BOTTOM)
    root.mainloop()

Y éste es el resultado: read more

Leer más » 2 Comentarios