Posts Tagged ‘wargames’

Script: tic-tac-toe (tres en raya)

Posted in Scripts, linux on April 5th, 2009 by mrcomputer – 2 Comments

Este clásico juego de mesa, que ha jugado un papel muy importante en algunas peliculas, también se puede hacer con bash.

Solo tenéis que guardar este código en un archivo llamado ttt.sh o bajarlo desde aquí y darle privilegios de ejecución con chmod +x ttt.sh. Ya podrás ejecutarlo con ./ttt.sh y jugar a este juego.

#!/bin/bash
# Sat Jul 12 16:52:30 EDT 2003
# NAME: ttt
# Copyright 2003, Chris F.A. Johnson
# Released under the terms of the GNU General Public License
 
ESC=$'\e'
 
tictactoe() {
[ $verbose -ge 1 ] && echo tictactoe $* >&2
    board=`printf "%9.9s" "        "`
    mvnum=1
    remainder=" 1 2 3 4 5 6 7 8 9 "
    show "$board"
    while :
    do
      status
      eval \$player$P
      [ $? -ne 0 ] && return
      put $_MOVE "$board"
      board=$_PUT
#      show "$board"
      mkbold "$_MOVE"
      printat 0 0 $mvnum
      printat $prompt
      sleep $pause &
      mlist="$mlist $_MOVE"
      remainder=${remainder/ $_MOVE / }
 
      checkboard "$board" && {
	  mkbold $win
	  printat $prompt "$cle"
	  eval winner \$player$P
	  return
      }
 
      [ $mvnum -eq 9 ] && {
	  B=$U mkbold "$_MOVE"
	  winner "Neither player"
	  return
      }
      wait
      B=$U mkbold "$_MOVE"
      if [ $P = O ]
      then
	  P=X
	  OP=O
      else
	  P=O
          OP=X
      fi
      mvnum=$(( $mvnum + 1 ))
    done
}
 
winner() {
[ $verbose -ge 1 ] && echo winner $* >&2
     printat $prompt "$cle $* wins\n\n"
}
 
status() {
[ $verbose -ge 1 ] && echo status $* >&2
    if [ $verbose -ge 1 ]
    then
	printat 4 0
	printf "${cle}Move: %s Player: %s Board: \"%s\"  Last move: %s  Move list: %s" \
	    "$mvnum" "$P" "${board// /-}" "$_MOVE" "$mlist"
    else
	false
    fi
}
 
show() {
[ $verbose -ge 1 ] && echo show $* >&2
    printat 0 0 $mvnum
    printat 0 $top  ##$(( ($LINES - 5) / 2 ))
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:0:1}" "${1:1:1}" "${1:2:1}"
    printf "%${margin}.${margin}s---+---+---\n" " "
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:3:1}" "${1:4:1}" "${1:5:1}"
    printf "%${margin}.${margin}s---+---+---\n" " "
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:6:1}" "${1:7:1}" "${1:8:1}"
}
 
put() {
[ $verbose -ge 1 ] && echo put $1 \""$2"\" >&2
   local n=$(( $1 - 1 ))
   _PUT=${2:-$board}
   [ "${_PUT:$n:1}" = " " ] &&
            _PUT=${_PUT:0:$n}$P${_PUT:$1}
}
 
checkboard() {
[ $verbose -ge 1 ] && echo checkboard \"$*\" >&2
    case $1 in
	$P??$P??$P??) win="1 4 7" ;;
	?$P??$P??$P?) win="2 5 8" ;;
	??$P??$P??$P) win="3 6 9" ;;
	??$P?$P?$P??) win="3 5 7" ;;
        $P???$P???$P) win="1 5 9" ;;
	$P$P$P??????) win="1 2 3" ;;
	???$P$P$P???) win="4 5 6" ;;
	??????$P$P$P) win="7 8 9" ;;
        *) false ;;
    esac
}
 
mkbold() {
[ $verbose -ge 1 ] && echo mkbold $* >&2
  for sq in $*
  do
    row=$(( ($sq - 1) / 3 ))
    col=$(( ($sq - 1) % 3 + 1 ))
    printat $(( ($col * 4) + $margin - 2 )) $(( ($row * 2) + $top ))
    printf "${B}$P${U}"
  done
}
 
human() {
[ $verbose -ge 1 ] && echo human $* >&2
   while :
   do
       key "Select ($remainder)"
#       case $_MOVE in
#	  "$ESC") read -sn1; read -sn1 kp; continue ;;
#       esac
       _MOVE=$_KEY
       case $_MOVE in
	   1|2|3|4|5|6|7|8|9) [ "${board:_MOVE-1:1}" = " " ] && break ;;
	   q|Q|x|X) echo; return 5 ;;
	   p) printat $prompt
	      KEYECHO= KEYMAX=$(( $COLUMNS - 10 )) key "Enter delay in seconds"
	      pause=$_KEY
	      ;;
	   "") set -- $remainder
	       _MOVE=$1
	       [ $verbose -ge 1 ] && echo "|$_MOVE|" >&2
	       break ;;
	   *) printat $prompt
	      printf "\r%s%s\r" "  "$cle" $_MOVE: Invalid move"
	      sleep 1
	      printf "%s\r" "$cle" ;;
       esac
   done
}
 
randy() {
[ $verbose -ge 1 ] && echo randy $* >&2
    randstr $remainder
    _MOVE=$_RANDSTR
}
 
key() {
[ $verbose -ge 1 ] && echo key $* >&2
    printat $prompt "$cle$CVIS$beep"
    read -${KEYECHO}n$KEYMAX -p "${1:-PAK}: " _KEY 2>&1
    printf "$CINV"
}
 
getkey() {
    local OKchars=${1:-${remainder// /}}
    local kp2 kp3
    stty -echo
    while :
      do
      prompt="==>"
      prompt
      IFS= read -r -sn1 -p " " kp 2>&1 || exit 2 #cleanup
      case $OKchars in
          *"$kp"*)
              case $kp in
                  $ESC)
                      read -st1 -n1 kp2
                      case $kp2 in
                          \[) read -st1 -n1 kp3
                              case $kp3 in
                                  A) kp=$UP; break ;;
                                  B) kp=$DN; break ;;
                                  C) kp=$RT; break ;;
                                  D) kp=$LF; break ;;
                              esac
                              ;;
                       esac
                       ;;
                  *) break ;;
              esac
              ;;
       esac
    done
    _KEY=$kp
}
 
randstr() {
[ $verbose -ge 1 ] && echo randstr $* >&2
#    [ -n "$1" ] || return 1
    n=$(( ($RANDOM % $#) + 1 ))
    eval _RANDSTR=\${$n}
}
 
isblock() {
[ $verbose -ge 1 ] && echo isblock $* >&2
    win=
    block=
    for _MOVE in $remainder
    do
        P=$OP put $_MOVE
	P=$OP checkboard "$_PUT" && return
    done
    _MOVE=
}
 
block() {
[ $verbose -ge 1 ] && echo block $* >&2
    block=
    for _MOVE in $remainder
    do
        put $_MOVE
	checkboard "$_PUT" && return
        P=$OP put $_MOVE
	P=$OP checkboard "$_PUT" && block=$_MOVE
    done
    [ "$block" ] && { _MOVE=$block; return; }
    randy
}
 
computer() {
[ $verbose -ge 1 ] && echo computer $* >&2
   local r c
   case $mvnum in
       1) randstr 1 3 7 9
	  _MOVE=$_RANDSTR ;;
       2)
	   if [ "${board:4:1}" = " " ]
	   then
	       _MOVE=5
	   else
	       randstr 1 3 7 9
	       _MOVE=$_RANDSTR
	   fi
	   ;;
       3)  r=${mlist// /}
	   c='1 3 7 9'
	   randstr ${c//[$r]/}
#	   randstr ${remainder//[$r]/}
	   _MOVE=$_RANDSTR
	   ;;
       4)
	   isblock
	   [ "$_MOVE" ] && return
	    r=${mlist// /}
	    c='2 4 6 8'
	    randstr ${remainder//[$r]/}
	    _MOVE=$_RANDSTR
	    ;;
       *) block ;;
   esac
}
 
printat() { #== print arguments 3-... at Y=$2 X=$1
[ $verbose -ge 1 ] && echo printat $* >&2
    [ $# -lt 2 ] && return 1
    local y=$2
    local x=$1
    shift 2
    msg="$*"
    printf "\e[%d;%dH%b" $y $x "$msg"
}
 
version()
{
    echo "    $progname, version $version
    Copyright $copyright, $author $email
    This is free software, released under the terms of the GNU General
    Public License.  There is NO warranty; not even for MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.
"
}
 
usage()
{
echo "
    ${B}NAME${U}:  $progname - Tic-Tac-Toe
 
    ${B}USAGE${U}: $progname [OPTIONS]
 
    ${B}OPTIONS${U}:
 
        -x player1         - specify first player
        -o player2         - specify second player
        -c player1,player2 - specify both players
        -p seconds         - time to pause between moves
 
        -h, --help       - help: print this message
        -H, --help_long  - help: print more detailed message (if available)
        -v, --verbose    - sends messsages to \$HOME/tttlog
        -V, --version    - print version information
 
    Copyright 2003, Chris F.A. Johnson
"
}
 
verbose=0
longusage=0
version="1.0"
copyright=2003
author="Chris F.A. Johnson"
progname=${0##*/}
P=X
OP=O
 
playerX=human
playerO=computer
co=
li=
 
if tput ce >/dev/null 2>&1
then ## e.g. FreeBSD
    co=co
    li=li
elif tput el 2>/dev/null
then ## e.g. Linux
    co=cols
    li=lines
fi
 
UNBOLD=$'\E[0m'
standout=$'\E[0;1;7m'
cle=$'\E[K'
clb=$'\E[1K'
ULINE=$'\E[0;4m'
REVERSE=$'\E[0;7m'
BLINK=$'\E[0;5m'
BOLD=$'\E[0;1m'
CINV=$'\E[0;8m'
 
R=$REVERSE
U=$UNBOLD
B=$BOLD
BR=$B$R
Cl=$'\f'
if [ "$co" ]
then
    tput reset
    COLUMNS=${COLUMNS:=`tput $co`}
else
    COLUMNS=${COLUMNS:-80}
fi
top=6
margin=11
prompt="3 $(( $top + 9 ))"
beep=  #$'\a'
pause=1
KEYMAX=1
KEYECHO=s
 
while getopts vVhH-:xoX:O:c:p: var
do
 case "$var" in
 
     x) playerX=human
	playerO-computer
	;;
     o) playerO=human
	playerX=computer
	;;
     X) playerX=$OPTARG ;;
     O) playerO=$OPTARG ;;
     c|C) playerO=${OPTARG#*,}
	  playerX=${OPTARG%,*}
	  ;;
     p) pause=$OPTARG ;;
 
    -) case $OPTARG in
         help) usage; exit ;;
         verbose) verbose=$(( $verbose + 1 )) ;;
         version) version; exit ;;
       esac
       ;;
    h) usage; exit ;;
    H) longusage=1; usage; exit ;;
    v) verbose=$(( $verbose + 1 )) ;;
    V) version; exit ;;
    *);;
 esac
done
shift $(( $OPTIND - 1 ))
 
if [ "$co" ]
then
    COLUMNS=`tput $co`
else
    COLUMNS=${COLUMNS:-80}
fi
margin=11  ##$(( ($COLUMNS - 11) / 2 ))
clear
 
if [ $verbose -ge 1 ]
then
    exec 2>$HOME/tttlog
    set -x
fi
 
tictactoe
printat $prompt "\n$CVIS\n"

Fuente: http://cfaj.freeshell.org/shell/scripts/ttt-sh.html

Paginas curiosas sobre Juegos de guerra

Posted in peliculas on August 13th, 2008 by mrcomputer – Be the first to comment

El otro día buscando por Google me encontré estas dos paginas:

http://novastate.com/wargames2.html

http://novastate.com/wargames.html

(NOTA: tened encendidos los altavoces)

Lo curioso del asunto es que novastate.com parece ser una empresa de hosting. ¿que harian esos archivos allí? Ni idea pero he echo un mirror en mi blog por si desaparecen derrepente.

Mirror:
Primera, Segunda

Juegos de guerra 2: The Dead Code

Posted in peliculas on July 22nd, 2008 by mrcomputer – 3 Comments

Juegos de Guerra 2: The Dead Code (Wargames 2:The Dead Code) es una nueva versión o remake de la clásica pelicula Juegos de Guerra (Wargames). Esta pelicula ha sido estrenada unicamente en DVD el 25 de Junio pasado.Juegos de Guerra 2

SINOPSIS:

El hacker adolescente Will Farmer comienza un peligroso juego on-line con un simulador de ataques terroristas contra un superordenador del gobierno denominado Ripley. Este ordenador de última generación está diseñado para localizar terroristas potenciales. Seguridad Nacional creerá en firme que el chico es una auténtica amenaza para el mundo. Will no es consciente de que este excitante juego le hará vivir una auténtica pesadilla: su identidad quedará al descubierto, su familia y sus amigos en peligro y su ciudad en el punto de mira de una intervención militar automatizada.

Esta nueva pelicula a decidido seguir (de una manera lamentable) parte del guión original. En un comienzo la pelicula parece entretenida al menos, y a medida que aparecen referencias al la original piensas que mejora. Un ejemplo claro a estas referencias es la aparicion de la WOPR y del profesor Falken. Pero al intentar introducir cosas de la original hay muchisimas que no tienen sentido, claro ejemplo es el momento que realiza  phreacking del telefono publico para luego no realizar ninguna llamada.

El suspese y emoción que causa la original, aquí practicamente se desvance, solo la aparición Falken (que por cierto no lo interpreta John Wood como en la original) y de la WOPR causa la emoción desada.

Por otra parte, como ya he mencionado, tiene un mal guión con un final similar al de la original pero muchisimo peor, ademas los actores

no son muy buenos aunque he de reconocer que Will(Matt Lanter) en ocasiones se parece al jóven David(Matthew Broderick) de la primera pelicula.  Tiene un banda sonora, pese a ser aceptable y actual, no llega a equipararse en lo más minimo a la original de Arthur B. Rubinstein, que es una obra maestra

La pelicula no comienza del todo mal, la trama se desarrolla bien y se ve el primer giño, en la lista de juegos aparece Global Thermonuclear War. El interés aumenta con la aparición de Falken, pero el desenlace de la pelicula  tiene un desenlace realmente malo y que no tiene el suspese que causa la pelicula original.

En definitiva la pelicula tiene un guión flojo, sobre todo un final malo y una actuación nada destacable. En definitiva yo no la compraria, pero alquilarla quizas solo por ver los guiños que hacen a la original que es lo unico excitante de la pelicula.

Reposición en cines de “Juegos de Guerra” el 24 de Julio

Posted in Noticias, peliculas on July 4th, 2008 by mrcomputer – Be the first to comment

El 24 de Julio repondran la pelicula Juegos de Guerra(Wargames) en algunos cines, la mala noticia es que solo será en lo cines estadounidenses. Lo que daria yo poder verla en el cine….

Aqui os dejo el vídeo de la promoción:

Post relacionado: Juegos de guerra cumple 25 años

La pelicula “Juegos de Guerra” cumple 25 años

Posted in Noticias, peliculas on June 7th, 2008 by mrcomputer – 7 Comments

Se cumple el 25 aniversario de la excelente pelicula “Juegos de Guerra” (Wargames). Una pelicula que cuenta la historia de David Lightman(Matthew Broderick), un joven hacker, que entra accidentalmente en un superordenador militar (W.O.P.R.) y desencadena la tercera guerra mundial. A pesar de lo descabellado que pueda parecer en un principio, es una pelicula muy entretenida, atemporal y que ha envejecido muy bien sin perder vigencia.
Citando un articulo escrito por Cristopher KnightWARGAMES and the Great Hacking Scare of 1983“:

Un cuarto de siglo más tarde, WarGames se sigue sosteniendo extremadamente bien. Prácticamente toda la tecnología mostrada está totalmente fuera de fecha (¡miren el tamaño de los disquetes que usa David!) pero a pesar de eso, y tal vez incluso debido a eso, WarGames se ha transformado en una curiosamente buena instantánea de tanto la mentalidad bunker de la Guerra Fría como la introducción de los ordenadores en la vida civil.

En ella tambien se muestran tecnicas de hacking como puede ser el wardialing (llamado asi en alusión a la pelicula) que consiste en el escaneo de numeros de telefono en busca de ordenadores. Tambien se muestran otras técnicas como la ingenieria social y el phreacking, este ultimo se ve patente cuando David llama gratis en un telefono publico usando una chapa de refresco.

Como comunmente se suele decir la realidad supera a la ficción, en este caso el 26 de septiembre de 1983 se produjo el famoso “Incidente del equinoccio de otoño”, una situación muy parecida a la que narra la película. La URSS detectó como los EEUU disparaban sobre ellos 5 misiles, la respuesta en estos casos es devolver el fuego usando armas nucleares, pero la astucia del teniente coronel Stanislav Petrov, militar a cargo del centro de mando de la inteligencia militar soviética, evitó una guerra mundial, consideró que era incongruente que los EEUU iniciasen una guerra lanzando tan solo 5 misiles, siendo todo un posible error informático, decidió esperar y de esa forma demostró tener razón. Curiosamente ocurrió el mismo año del estreno de la pelicula (1983) y unos meses después (la pelicula se estrenó el 3 de junio).

Leyendo esto puedes pensar que es una pelicula para “frikis” o “geeks” pero no es así. Esta pelicula  puede gustar a cualquiera aunque no sepa ni siquiera que es un ordenador. Contaré mis caso particular, cuando yo la ví por primera vez, que era aproximadamente en el año 1996, yo no sabia apenas que era un ordenador y la pelicula me encantó. Recuerdo muy bien cuando la vi, pese a tener unos 7 años, la vi por tv e incluso el canal que la dieron, Telemadrid, y que fue por la tarde. Debido a que ese dia me gusto la pelicula aproveche un corte publicitario para ponerla a grabar, aunque solo grabe los últimos 20 mins. Al final debí borrarla pocos años despues porque no he conseguido encontrarla. Todabia recuerdo justo el fotograma en el que lo puse a grabar, y es el siguiente:

Luego pasé casi 10 años sin volver a verla, hasta que a finales del 2006 la volví a ver, siendo ahora mi pelicula favorita.

El trabajo de los actores es formidable, pese que para Matthew Broderick y Ally Sheedy eran sus primeras peliculas, junto a la estupenda banda sonora de Arthur B. Rubinstein (en la que destaca el tema Edge of the World que es el tema del final de la pelicula y en algunos momentos puntuales), conforman una pelicula excelente que recomendaría a cualquiera que la vea si no la visto, y si la ha visto le diría que la volviera a ver.

Pese que la tematica de la pelicula parezca que es solo informatica y acción , no es así porque tambien tiene sus puntos de humor y emoción. La unica parte negativa de la pelicula es que dura muy poco (sólo 1h y 48 mins xD).

Tambien el poco respeto que le tiene las televisiones españolas, ya que a pesar de ser una pelicula importante, considerada de culto, haber sido nominada a 3 oscar y haber sido un exito en taquilla en el 83 no la emiten desde hace muchísimo. Esperemos que por el 25 aniversario la emitan….

Bueno, aquí os dejo el trailer para que os entren ganas de verla al igual que espero vuestros comentarios sobre la pelicula.

PD: no será mi único post sobre esta pelicula xD