#!/usr/local/ActivePerl-5.8/bin/perl #BismillahirRahmanirRahim Fi Avvalihi ve Ahirihi #Move syntax: (K)ing, (Q)ueen, (R)ook, (B)ishop, k(N)ight, (p)awn #and the coordinates: pe2-e4 {will take pawn on e2 and put it on e4} #Ra1-a3, Qd1-e2, Ng1-f3 etc #I created this one a year ago, and after that never touched it. #That means its not in development, but it can be if you email your #suggestions and bugs you find to me: #okidan@aznetmail.com; okidan@yandex.ru #It uses my own algorithm #All the ideas of every single part of this prog, are mine. #This engine thinks only 2 ply (one for itself and for opponent) ahead. #I got a 3 ply engine ready now (not this prog), with a bug in one place i #dunno. Bug is somewhere in the search code, so it makes not the best #move in some kinda positions, gotta fix that before releasing. No mood. #Easy to beat. No GUI as you guessed. #I dont think will come any further versions if you dont encourage :) printf "Nadge 1.1 - by OkIDaN\n"; printf "Hello, Good Luck to you!\n"; printf "Move syntax: PieceSquare1Square2 | typing -end- will quit\n"; printf "---------------------------------------------------------\n"; createarrays(); { $number_of_move++; legalmoves("white"); $total=$#legalmoves+1; printf "Total: $total possible moves\n"; display(); { printf "Enter Move($number_of_move): "; chomp($human_move=); last if (($human_move eq "end") || (is_legal($human_move))); redo; } last if ($human_move eq "end"); makemove($human_move, "w"); legalmoves("black"); $total=$#legalmoves+1; printf "Total: $total possible moves\n"; # now because search() must iclude many calls to other functions and it is not # possible to do that in here i will include the search code in the main code: ########### @a_initial=@a; @legalmoves_initial=@legalmoves; $f=0; pop @moves while (@moves); pop @best_lines while (@best_lines); pop @best_lines_moves while (@best_lines_moves); while ($f <= $#legalmoves){ makemove($legalmoves[$f], "b"); legalmoves("white"); pop @lines while (@lines); $g=0; @a_initial_white=@a; while ($g <= $#legalmoves){ makemove($legalmoves[$g], "w"); evaluate_position(); push (@lines, "$legalmoves[$g]$position_value"); @a=@a_initial_white; $g++; } $l=0; pop @lines_moves while (@lines_moves); pop @lines_values while (@lines_values); foreach $line (@lines){ $line=~/^(.{6})(.*)/; push @lines_moves, $1; push @lines_values, $2; } $best_lines[$f]="-999999"; while ($l <= $#lines_values){ if ($lines_values[$l] >= $best_lines[$f]){ $best_lines[$f]=$lines_values[$l]; $best_lines_moves[$f]=$lines_moves[$l]; } $l++; } @legalmoves=@legalmoves_initial; @a=@a_initial; $moves[$f]="$legalmoves[$f]-$best_lines_moves[$f] = $best_lines[$f]"; $f++; } # the piece of code above finds best lines for each move in @legalmoves array # now i have to find the best move out of $#legalmoves++ moves: $inc=0; $the_best_line="999999"; $the_best_move=""; while ($inc <= $#best_lines){ if ($best_lines[$inc] <= $the_best_line){ $the_best_line=$best_lines[$inc]; $the_best_move=$1 if ($moves[$inc]=~/^(.{6})/); } $inc++; } $computer_move=$the_best_move; ########## # i can't believe i've completed the search code for 2 plies ! # the search code is Inshallah complete # reminding : the above section contains the search() code legalmoves("black"); makemove($computer_move, "b") if (is_legal($computer_move)); evaluate_position; printf "Position evaluation : $position_value\n"; printf "Computer moves : $computer_move\n" if (is_legal($computer_move)); redo; } sub createarrays{ @sq=qw(a1 a2 a3 a4 a5 a6 a7 a8 b1 b2 b3 b4 b5 b6 b7 b8 c1 c2 c3 c4 c5 c6 c7 c8 d1 d2 d3 d4 d5 d6 d7 d8 e1 e2 e3 e4 e5 e6 e7 e8 f1 f2 f3 f4 f5 f6 f7 f8 g1 g2 g3 g4 g5 g6 g7 g8 h1 h2 h3 h4 h5 h6 h7 h8); @a=qw(wr wp); $a[6]=bp; $a[7]=br; $a[8]=wn; $a[9]=wp; $a[14]=bp; $a[15]=bn; $a[16]=wb; $a[17]=wp; $a[22]=bp; $a[23]=bb; $a[24]=wq; $a[25]=wp; $a[30]=bp; $a[31]=bq; $a[32]=wk; $a[33]=wp; $a[38]=bp; $a[39]=bk; $a[40]=wb; $a[41]=wp; $a[46]=bp; $a[47]=bb; $a[48]=wn; $a[49]=wp; $a[54]=bp; $a[55]=bn; $a[56]=wr; $a[57]=wp; $a[62]=bp; $a[63]=br; } sub legalmoves(){ $side=$_[0]; $i=0; while(@legalmoves){ pop @legalmoves; } if ($side eq "white"){ $s="w"; $o="b"; }else{ $s="b"; $o="w"; } while($i<=63){ $inc=0; $_=$a[$i]; if ($a[$i]=~/^${s}/){ if ($_ eq "wp"){ if (!$a[$i+1]){ $legal_move="p$sq[$i]-$sq[$i+1]"; push @legalmoves, $legal_move; } if ((!$a[$i+2]) && (!$a[$i+1]) && ($sq[$i]=~/.2/)){ $legal_move="p$sq[$i]-$sq[$i+2]"; push @legalmoves, $legal_move; } if ($a[$i-7]=~/^b./){ $legal_move="p$sq[$i]-$sq[$i-7]"; push @legalmoves, $legal_move; } if ($a[$i+9]=~/^b./){ $legal_move="p$sq[$i]-$sq[$i+9]"; push @legalmoves, $legal_move; } if (($a[$i-8] eq "bp") && ($last_move eq "p$sq[$i-6]-$sq[$i-8]")){ $legal_move="p$sq[$i]-$sq[$i-7]ep"; push @legalmoves, $legal_move; } if (($a[$i+8] eq "bp") && ($last_move eq "p$sq[$i+10]-$sq[$i+8]")){ $legal_move="p$sq[$i]-$sq[$i+9]ep"; push @legalmoves, $legal_move; } } if ($_ eq "bp"){ if (!$a[$i-1]){ $legal_move="p$sq[$i]-$sq[$i-1]"; push @legalmoves, $legal_move; } if ((!$a[$i-2]) && (!$a[$i-1]) && ($sq[$i]=~/.7/)){ $legal_move="p$sq[$i]-$sq[$i-2]"; push @legalmoves, $legal_move; } if ($a[$i-9]=~/^w./){ $legal_move="p$sq[$i]-$sq[$i-9]"; push @legalmoves, $legal_move; } if ($a[$i+7]=~/^w./){ $legal_move="p$sq[$i]-$sq[$i+7]"; push @legalmoves, $legal_move; } if (($a[$i-8] eq "wp") && ($last_move eq "p$sq[$i-10]-$sq[$i-8]")){ $legal_move="p$sq[$i]-$sq[$i-9]ep"; push @legalmoves, $legal_move; } if (($a[$i+8] eq "wp") && ($last_move eq "p$sq[$i+6]-$sq[$i+8]")){ $legal_move="p$sq[$i]-$sq[$i+7]ep"; push @legalmoves, $legal_move; } } if ($_ eq "${s}n"){ if ((!$a[$i+10]) || ($a[$i+10]=~/${o}./)){ $sq[$i]=~/(.)(.)/; if (($1 ne "h") && ($2 lt 7)){ $legal_move="N$sq[$i]-$sq[$i+10]"; push @legalmoves, $legal_move; } } if ((!$a[$i+17]) || ($a[$i+17]=~/${o}./)){ $sq[$i]=~/(.)(.)/; if (($1 ne "g") && ($1 ne "h") && ($2 lt 8)){ $legal_move="N$sq[$i]-$sq[$i+17]"; push @legalmoves, $legal_move; } } if ((!$a[$i+15]) || ($a[$i+15]=~/${o}./)){ $sq[$i]=~/(.)(.)/; if (($1 ne "g") && ($1 ne "h") && ($2 gt 1)){ $legal_move="N$sq[$i]-$sq[$i+15]"; push @legalmoves, $legal_move; } } if ((!$a[$i+6]) || ($a[$i+6]=~/${o}./)){ $sq[$i]=~/(.)(.)/; if (($1 ne "h") && ($2 gt 2)){ $legal_move="N$sq[$i]-$sq[$i+6]"; push @legalmoves, $legal_move; } } if ((!$a[$i-10]) || ($a[$i-10]=~/${o}./)){ $sq[$i]=~/(.)(.)/; if (($i ne "a") && ($2 gt 2)){ $legal_move="N$sq[$i]-$sq[$i-10]"; push @legalmoves, $legal_move; } } if ((!$a[$i-17]) || ($a[$i-17]=~/${o}./)){ $sq[$i]=~/(.)(.)/; if (($1 ne "a") && ($1 ne "b") && ($2 gt 1)){ $legal_move="N$sq[$i]-$sq[$i-17]"; push @legalmoves, $legal_move; } } if ((!$a[$i-15]) || ($a[$i-15]=~/${o}./)){ $sq[$i]=~/(.)(.)/; if (($1 ne "a") && ($1 ne "b") && ($2 lt 8)){ $legal_move="N$sq[$i]-$sq[$i-15]"; push @legalmoves, $legal_move; } } if ((!$a[$i-6]) || ($a[$i-6]=~/${o}./)){ $sq[$i]=~/(.)(.)/; if (($1 ne "a") && ($2 lt 6)){ $legal_move="N$sq[$i]-$sq[$i-6]"; push @legalmoves, $legal_move; } } } if ($_ eq "${s}b"){ $inc=0; { $inc+=9; if ((!$a[$i+$inc]) && (!($sq[$i]=~/h./)) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc])){ $legal_move="B$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/h./)) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc])){ $legal_move="B$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if (($sq[$i+$inc]=~/h./) || ($sq[$i+$inc]=~/.8/)); redo; }$inc=0; { $inc+=7; if ((!$a[$i+$inc]) && (!($sq[$i]=~/h./)) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc])){ $legal_move="B$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/h./)) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc])){ $legal_move="B$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if (($sq[$i+$inc]=~/h./) || ($sq[$i+$inc]=~/.1/)); redo; }$inc=0; { $inc-=9; if ((!$a[$i+$inc]) && (!($sq[$i]=~/a./)) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="B$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/a./)) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="B$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if (($sq[$i+$inc]=~/a./) || ($sq[$i+$inc]=~/.1/)); redo; }$inc=0; { $inc-=7; if ((!$a[$i+$inc]) && (!($sq[$i]=~/a./)) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="B$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/a./)) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="B$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if (($sq[$i+$inc]=~/a./) || ($sq[$i+$inc]=~/.8/)); redo; }$inc=0; } if ($_ eq "${s}r"){ $inc=0; { $inc+=1; if ((!$a[$i+$inc]) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc])){ $legal_move="R$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc])){ $legal_move="R$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if ($sq[$i+$inc]=~/.8/); redo; }$inc=0; { $inc+=8; if ((!$a[$i+$inc]) && (!($sq[$i]=~/h./)) && ($sq[$i+$inc])){ $legal_move="R$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/h./)) && ($sq[$i+$inc])){ $legal_move="R$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if ($sq[$i+$inc]=~/h./); redo; }$inc=0; { $inc-=1; if ((!$a[$i+$inc]) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="R$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="R$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if ($sq[$i+$inc]=~/.1/); redo; }$inc=0; { $inc-=8; if ((!$a[$i+$inc]) && (!($sq[$i]=~/a./)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="R$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/a./)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="R$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if ($sq[$i+$inc]=~/a./); redo; }$inc=0; } if ($_ eq "${s}q"){ $inc=0; { $inc+=9; if ((!$a[$i+$inc]) && (!($sq[$i]=~/h./)) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/h./)) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if (($sq[$i+$inc]=~/h./) || ($sq[$i+$inc]=~/.8/)); redo; }$inc=0; { $inc+=7; if ((!$a[$i+$inc]) && (!($sq[$i]=~/h./)) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/h./)) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if (($sq[$i+$inc]=~/h./) || ($sq[$i+$inc]=~/.1/)); redo; }$inc=0; { $inc-=9; if ((!$a[$i+$inc]) && (!($sq[$i]=~/a./)) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/a./)) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if (($sq[$i+$inc]=~/a./) || ($sq[$i+$inc]=~/.1/)); redo; }$inc=0; { $inc-=7; if ((!$a[$i+$inc]) && (!($sq[$i]=~/a./)) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/a./)) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if (($sq[$i+$inc]=~/a./) || ($sq[$i+$inc]=~/.8/)); redo; }$inc=0; { $inc+=1; if ((!$a[$i+$inc]) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/.8/)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if ($sq[$i+$inc]=~/.8/); redo; }$inc=0; { $inc+=8; if ((!$a[$i+$inc]) && (!($a[$i]=~/h./)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($a[$i]=~/h./)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if ($sq[$i+$inc]=~/h./); redo; }$inc=0; { $inc-=1; if ((!$a[$i+$inc]) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc]) && (($i+$inc)>1)){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/.1/)) && ($sq[$i+$inc])){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if ($sq[$i+$inc]=~/.1/); redo; }$inc=0; { $inc-=8; if ((!$a[$i+$inc]) && (!($sq[$i]=~/a./)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; }elsif (($a[$i+$inc]=~/${o}./) && (!($sq[$i]=~/a./)) && ($sq[$i+$inc]) && (($i+$inc)>-1)){ $legal_move="Q$sq[$i]-$sq[$i+$inc]"; push @legalmoves, $legal_move; $inc=0;last; }else{ $inc=0;last; } last if ($sq[$i+$inc]=~/a./); redo; }$inc=0; } if ($_ eq "${s}k"){ if (((!$a[$i+1]) || ($a[$i+1]=~/${o}./)) && (!($sq[$i]=~/.8/))){ $legal_move="K$sq[$i]-$sq[$i+1]"; push @legalmoves, $legal_move; } if (((!$a[$i+9]) || ($a[$i+9]=~/${o}./)) && (!($sq[$i]=~/.8/)) && (!($sq[$i]=~/h./))){ $legal_move="K$sq[$i]-$sq[$i+9]"; push @legalmoves, $legal_move; } if (((!$a[$i+8]) || ($a[$i+8]=~/${o}./)) && (!($sq[$i]=~/h./))){ $legal_move="K$sq[$i]-$sq[$i+8]"; push @legalmoves, $legal_move; } if (((!$a[$i+7]) || ($a[$i+7]=~/${o}./)) && (!($sq[$i]=~/.1/)) && (!($sq[$i]=~/h./))){ $legal_move="K$sq[$i]-$sq[$i+7]"; push @legalmoves, $legal_move; } if (((!$a[$i-1]) || ($a[$i-1]=~/${o}./)) && (!($sq[$i]=~/.1/)) && ($i>0)){ $legal_move="K$sq[$i]-$sq[$i-1]"; push @legalmoves, $legal_move; } if (((!$a[$i-9]) || ($a[$i-9]=~/${o}./)) && (!($sq[$i]=~/.1/)) && (!($sq[$i]=~/a./)) && (($i-8)>0)){ $legal_move="K$sq[$i]-$sq[$i-9]"; push @legalmoves, $legal_move; } if (((!$a[$i-8]) || ($a[$i-8]=~/${o}./)) && (!($sq[$i]=~/a./)) && (($i-7)>0)){ $legal_move="K$sq[$i]-$sq[$i-8]"; push @legalmoves, $legal_move; } if (((!$a[$i-7]) || ($a[$i-7]=~/${o}./)) && (!($sq[$i]=~/.8/)) && (!($sq[$i]=~/a./)) && (($i-6)>0)){ $legal_move="K$sq[$i]-$sq[$i-7]"; push @legalmoves, $legal_move; } } }$i++; } } sub is_legal{ my($move)=$_[0]; $result=0; foreach $legal_move (@legalmoves){ if ($legal_move eq $move){ $result=1; } } return $result; } sub makemove(){ ($move,$side)=@_; $move=~/([pNBRQK])([a-h][1-8]).([a-h][1-8])/; $piece=$1; $zone1=$2; $zone2=$3; $piece=~tr/A-Z/a-z/; $index=0; while ($index <= 63){ if ($zone1 eq $sq[$index]){ $a[$index]=""; # not supporting the castling move yet } if ($zone2 eq $sq[$index]){ $a[$index]="$side$piece"; } $index++; } } sub evaluate_position(){ $position_value=0; ## section : material balance $material_balance=0; %value=qw(wp 100 wn 300 wb 300 wr 500 wq 900 wk 9999 bp -100 bn -300 bb -300 br -500 bq -900 bk -9999); foreach $piece (@a){ $material_balance+=$value{$piece}; } ## section : control of center $control_of_center=0; @center_array=qw(27 28 35 36); @knight_array=qw(10 11 12 13 17 19 20 22 25 26 29 30 33 34 37 38 41 43 44 46 50 51 52 53); @knight_special_array=qw(18 21 42 45); $x=0; while ($x <= $#center_array){ $cin=$center_array[$x]; $control_of_center+=15 if ($a[$cin] eq "wp"); $control_of_center+=11 if ($a[$cin] eq "wb"); $control_of_center+=13 if ($a[$cin] eq "wn"); $control_of_center+=6 if ($a[$cin] eq "wr"); $control_of_center+=9 if ($a[$cin] eq "wq"); $control_of_center+=2 if ($a[$cin] eq "wk"); $control_of_center-=15 if ($a[$cin] eq "bp"); $control_of_center-=11 if ($a[$cin] eq "bb"); $control_of_center-=13 if ($a[$cin] eq "bn"); $control_of_center-=6 if ($a[$cin] eq "br"); $control_of_center-=9 if ($a[$cin] eq "bq"); $control_of_center-=2 if ($a[$cin] eq "bk"); $x++; } $x=0; while ($x <= $#knight_array){ $cin=$knight_array[$x]; $control_of_center+=12 if ($a[$cin] eq "wn"); $control_of_center-=12 if ($a[$cin] eq "bn"); $x++; } $x=0; while ($x <= $#knight_special_array){ $cin=$knight_special_array[$x]; $control_of_center+=14 if ($a[$cin] eq "wn"); $control_of_center-=14 if ($a[$cin] eq "bn"); $x++; } ## other sections $position_value=$material_balance+$control_of_center; } sub display(){ write (); format STDOUT = ------------------------- 8|@<|@<|@<|@<|@<|@<|@<|@<| $a[7] $a[15] $a[23] $a[31] $a[39] $a[47] $a[55] $a[63] ------------------------- 7|@<|@<|@<|@<|@<|@<|@<|@<| $a[6] $a[14] $a[22] $a[30] $a[38] $a[46] $a[54] $a[62] ------------------------- 6|@<|@<|@<|@<|@<|@<|@<|@<| $a[5] $a[13] $a[21] $a[29] $a[37] $a[45] $a[53] $a[61] ------------------------- 5|@<|@<|@<|@<|@<|@<|@<|@<| $a[4] $a[12] $a[20] $a[28] $a[36] $a[44] $a[52] $a[60] ------------------------- 4|@<|@<|@<|@<|@<|@<|@<|@<| $a[3] $a[11] $a[19] $a[27] $a[35] $a[43] $a[51] $a[59] ------------------------- 3|@<|@<|@<|@<|@<|@<|@<|@<| $a[2] $a[10] $a[18] $a[26] $a[34] $a[42] $a[50] $a[58] ------------------------- 2|@<|@<|@<|@<|@<|@<|@<|@<| $a[1] $a[9] $a[17] $a[25] $a[33] $a[41] $a[49] $a[57] ------------------------- 1|@<|@<|@<|@<|@<|@<|@<|@<| $a[0] $a[8] $a[16] $a[24] $a[32] $a[40] $a[48] $a[56] ------------------------- a b c d e f g h . }