рдмреИрд╢ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЧреЗрдо: рд╢рддрд░рдВрдЬ

рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореИрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЧреЗрдо рдХреЛ рдмреИрд╢ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдХреАрдмреЛрд░реНрдб рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░реНрд╕рд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдг рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмреИрд╢ рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╖рдп "рдПрдХ рдирдВрдмрд░ рджрд░реНрдЬ рдХрд░реЗрдВ," рдПрдВрдЯрд░ "рджрдмрд╛рдПрдВ" рд╕реЗ рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛ рд╣реИред рдореБрдЭреЗ рдЦреБрдж рд╣реА рд╕рдмрдХреБрдЫ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдФрд░ рд╢реЛрдз рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВрдиреЗ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдРрд╕рд╛ рд╣реА рдХреБрдЫ рдЦреЛрдЬрдиреЗ рдХреА рдмрд╣реБрдд рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓реАред

рдЪреВрдВрдХрд┐ рдХреАрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдиреЗ рдореЗрд░рд╛ рдмрд╣реБрдд рд╕рдордп рдЦрд╛ рд▓рд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рдВрдЧрддрддрд╛ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЦреЗрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рддрд╣рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП nc (aka Netcat ) рдФрд░ 256 рд░рдВрдЧреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдЯрд░реНрдорд┐рдирд▓ (Mac OS рдХреЗ рд▓рд┐рдП рдореИрдВ iTv2 рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЦреЗрд▓ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдореИрдВ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ 16 рд░рдВрдЧреЛрдВ рдФрд░ / dev / tcp рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ред рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рднреА рд╢реЗрд▓- рдХреНрд░рд╛рдлреНрдЯреНрд╕ рдХреЛ рдЧрд┐рддреВрдм рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

рдмреИрд╢ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╢рддрд░рдВрдЬ


рдЪреВрдВрдХрд┐ рдЧреЗрдо рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЙрдирдХреЗ рдмрд┐рдирд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓рд╛ рджреБрд╢реНрдорди рдорд╢реАрди рдХрд╛ рдкрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдкреЛрд░реНрдЯ рд╣реИред рдкреЛрд░реНрдЯ рдХреЛ рджреЛрдиреЛрдВ рдорд╢реАрдиреЛрдВ рдкрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рдЦреЗрд▓ рдХреЛ рдПрдХ рд╣реА рдорд╢реАрди рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ (рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдмрд╕ рдРрд╕рд╛ рд╣реА рдорд╛рдорд▓рд╛ рд╣реИ)ред

рдпрд╣ рдЦреЗрд▓рдирд╛ рд╕рд░рд▓ рд╣реИ - рд╕рдордп рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖рдг рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреЛрд░реНрдб рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ (рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкрд░ - рд╕рд╣реА рдПрдХ, рдЗрд╕рдореЗрдВ рдмреЛрд░реНрдб рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрдордХреАрд▓реЗ рдЕрдХреНрд╖рд░ рдФрд░ рдирдВрдмрд░ рд╣реЛрддреЗ рд╣реИрдВ), рд╕рдХреНрд░рд┐рдп рдмреЛрд░реНрдб рдкрд░ рдХрд░реНрд╕рд░ рдХрд░реНрд╕рд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ - тЖР, тЖТ, тЖС рдФрд░ тЖУ, рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдмреЛрд░реНрдб рдкрд░ рд░рдЦреЗрдВред - рд╕реНрдкреЗрд╕ рдмрд╛рд░ рдпрд╛ рдПрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ред рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмреЛрд░реНрдб рдкрд░ рд░рдЦрддреЗ рд╣реИрдВ, рдЪрд╛рд▓ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдкрд░ рдЬрд╛рддреА рд╣реИред "рдЦрд╛рдиреЗ" рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╕рд░рд▓ рд╣реИ - рдмрд╕ рдЕрдкрдирд╛ рдЯреБрдХрдбрд╝рд╛ рдХрд┐рд╕реА рдФрд░ рдкрд░ рдбрд╛рд▓ рджреЗрдВ рдЦреЗрд▓ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ - рдЖрдк рдЕрдкрдиреЗ рдЖрдВрдХрдбрд╝реЗ рдХреЛ "рдЦрд╛" рдирд╣реАрдВ рд╕рдХрддреЗред

рдЧреЗрдо рдореЗрдВ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ - рдЪрд╛рд▓реЛрдВ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЧреЗрдо рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдерд╛ рдХрд┐ рд╢реЗрд▓ рдореЗрдВ рдХреНрд▓рд┐рдХ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╛рдХреА рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдпрд╣ "рд╢рд╛рдо рдХреЗ рд▓рд┐рдП рдЦрд┐рд▓реМрдирд╛" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдЖред

рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдХреЛрдб рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддрд╛рдХрд┐ рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХреВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


#!/bin/bash # Network chess by Evgeny Stepanischev http://bolknote.ru 2011 if [ $# -ne 2 ]; then echo Usage: $0 host-of-opponent port exit fi #   HOST="$1" #   PORT="$2" #     SEQLEN=(1b5b4. [2-7]. [cd]... [89ab].{5} f.{7}) #  WHITE=(тЩЩ тЩЩ тЩЩ тЩЩ тЩЩ тЩЩ тЩЩ тЩЩ тЩЦ тЩШ тЩЧ тЩХ тЩФ тЩЧ тЩШ тЩЦ) BLACK=(тЩЬ тЩЮ тЩЭ тЩЫ тЩЪ тЩЭ тЩЮ тЩЬ тЩЯ тЩЯ тЩЯ тЩЯ тЩЯ тЩЯ тЩЯ тЩЯ) #  ? OURMOVE= #    ? MYCOLOR= #  declare -a XY #  CX=1 CY=7 TAKEN= #     KUP=1b5b41 KDOWN=1b5b42 KLEFT=1b5b44 KRIGHT=1b5b43 KSPACE=20 #   function Restore { echo -ne "\033[5B\033[5B\033[?25h\033[m" stty "$ORIG" 2>/dev/null (bind '"\r":accept-line' 2>/dev/null) } trap Restore EXIT #  Enter (bind -r '\r' 2>/dev/null) #    ORIG=`stty -g` stty -echo #   echo -e "\033[?25l" #      function ToNet { echo $1 | nc "$HOST" "$PORT" } #     function React { case $1 in $KLEFT) if [ $CX -gt 1 ]; then CX=$(($CX-1)) PrintBoard fi ;; $KRIGHT) if [ $CX -lt 8 ]; then CX=$(($CX+1)) PrintBoard fi ;; $KUP) if [ $CY -gt 1 ]; then CY=$(($CY-1)) PrintBoard fi ;; $KDOWN) if [ $CY -lt 8 ]; then CY=$(($CY+1)) PrintBoard fi esac #      [ "$OURMOVE" ] && ToNet $1 } #       function CheckCons { local i for i in ${SEQLEN[@]}; do if [[ $1 =~ ^$i ]]; then return 0 fi done return 1 } #    ,  React    , #  KSPACE тАФ     function PressEvents { local real code action #   ,    , #         #   while true; do #     read      # akw NR==1||NR==4    тДЦ1 (  real)  тДЦ4 ( ) eval $( (time -p read -r -s -n1 ch; printf 'code %d\n' "'$ch") 2>&1 | awk 'NR==1||NR==4 {print $1 "=" $2}' | tr '\r\n' ' ') # read    Enter  ,    20, #        UTF8 if [ "$code" = 0 ]; then code=20 else [ $code -lt 0 ] && code=$((256+$code)) code=$(printf '%02x' $code) fi if [ $code = $KSPACE ]; then [ "$OURMOVE" ] && ToNet $KSPACE SpaceEvent && return continue fi #     (   ) if [ $real = 0.00 ]; then seq="$seq$code" if CheckCons $seq; then React $seq seq= fi #     (      ), #   ,    else [ "$seq" ] && React $seq seq=$code #       if CheckCons $seq; then React $seq seq= fi fi done } #      function CheckColor { echo -n ${1:0:1} } #    function FillBoard { local xy ch for y in {1..8}; do for x in {1..8}; do ch='S ' if [ $y -le 2 ]; then ch=B${BLACK[$x+8*$y-9]} else if [ $y -ge 7 ]; then ch=W${WHITE[$x+8*$y-57]} fi fi XY[$x+100*$y]=$ch done done } #      function PrintBoardLetters { local letters=abcdefgh [ -z "$OURMOVE" ] && echo -ne "\033[30m" || echo -ne "\033[0m" echo -n ' ' for x in {0..7}; do echo -n "${letters:$x:1} " done echo } #      function PrintBoardDigit { [ -z "$OURMOVE" ] && echo -ne "\033[30m" echo -en " $((9-$1))\033[0m " } #   function PrintBoard { local xyc ch local colors=('48;5;209;37;1' '48;5;94;37;1') PrintBoardLetters for y in {1..8}; do PrintBoardDigit $y for x in {1..8}; do c=${colors[($x+$y) & 1]} ch=${XY[$x+100*$y]} if [[ $CX == $x && $CY == $y ]]; then c="$c;7" [ "$TAKEN" ] && ch=$TAKEN [ $MYCOLOR == B ] && c="$c;38;5;16" fi [[ $(CheckColor "$ch") == "B" ]] && c="$c;38;5;16" echo -en "\033[${c}m${ch:1:1} \033[m" done PrintBoardDigit $y echo done PrintBoardLetters echo -e "\033[11A" } #   function NetListen { nc -l $PORT } #     function NetEvents { local code while true; do code=$(NetListen) [[ "$code" == "$KSPACE" ]] && SpaceEvent && return React $code done } #    Space  Enter тАФ     function SpaceEvent { local xy # ,      let xy="$CX+$CY*100" #   if [ "${XY[$xy]:-S }" = "S " ]; then if [ -z "$TAKEN" ]; then echo -en "\007" else #   XY[$xy]=$TAKEN TAKEN= return 0 fi #   else #     ┬л┬╗   if [[ $(CheckColor "$TAKEN") == $(CheckColor "${XY[$xy]}") ]]; then echo -en "\007" else #   ┬л ┬╗,  ┬л┬╗  if [ "$TAKEN" ]; then XY[$xy]=$TAKEN TAKEN= return 0 else # ┬л ┬╗   ,    TAKEN=${XY[$xy]} XY[$xy]="S " fi fi fi return 1 } #    function ClearKeyboardBuffer { #  тАФ  zsh which zsh &>/dev/null && zsh -c 'while {} {read -rstk1 || break}' && return #  тАФ  bash local delta while true; do delta=`(time -p read -rs -n1 -t1) 2>&1 | awk 'NR==1{print $2}'` [[ "$delta" == "0.00" ]] || break done } FillBoard #     ToNet HI [[ "$(NetListen)" == "HI" ]] && OURMOVE=1 sleep 0.2 ToNet ULOOSE [ "$OURMOVE" ] && MYCOLOR=W || MYCOLOR=B PrintBoard #   тАФ        while true; do if [ -n "$OURMOVE" ]; then ClearKeyboardBuffer PressEvents OURMOVE= else NetEvents OURMOVE=1 fi PrintBoard done 


рдореИрдВрдиреЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рднреА рд░рд┐рдХреЙрд░реНрдбрд░ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдмрд╣реБрдд рднрд╛рд░реА рд╣реИрдВ рдФрд░ рдЦреЗрд▓ рдзреАрдорд╛ рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In128549/


All Articles