盤面の記憶と表示(盤面表示サブルーチン)

少しづつプログラムを発展させていく方法でプログラミングしてみよう。慣れてきたら考えて先の方を作れるようになる筈。

  1. 特定の盤面を出力する。
    print "○○×\n";
    print "××○\n";
    print "○×○\n";
  2. 1つのマスを1変数で記憶して出力する。
    (左上から右下に向かって0,1,2,…と番号をつける)
    $b0="○";
    $b1="○";
    $b2="×";
    $b3="×";
    $b4="×";
    $b5="○";
    $b6="○";
    $b7="×";
    $b8="○";
    
    print "$b0$b1$b2\n";
    print "$b3$b4$b5\n";
    print "$b6$b7$b8\n";
  3. 変数には数値で記憶して、場合分けで1マスを出力する。
    (# ○は 1, ×は-1, 未入力は 0)
    $b0= 1; # ○は 1, ×は-1, 未入力は 0
    
    if ( $b0==1 ) {
    	print "○";
    } elsif ( $b0==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
  4. 盤面全体を出力する。
  5. $b0= 1;
    $b1= 1;
    $b2=-1;
    $b3=-1;
    $b4=-1;
    $b5= 1;
    $b6= 1;
    $b7=-1;
    $b8= 1;
    
    if ( $b0==1 ) {
    	print "○";
    } elsif ( $b0==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    if ( $b1=1 ) {
    	print "○";
    } elsif ( $b1==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    if ( $b2==1 ) {
    	print "○";
    } elsif ( $b2==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    print "\n";
    if ( $b3==1 ) {
    	print "○";
    } elsif ( $b3==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    if ( $b4==1 ) {
    	print "○";
    } elsif ( $b4==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    if ( $b5==1 ) {
    	print "○";
    } elsif ( $b5==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    print "\n";
    if ( $b6==1 ) {
    	print "○";
    } elsif ( $b6==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    if ( $b7==1 ) {
    	print "○";
    } elsif ( $b7==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    if ( $b8==1 ) {
    	print "○";
    } elsif ( $b8==-1 ) {
    	print "×";
    } else {
    	print " ";
    }
    print "\n";
  6. 配列と繰り返しを使って処理をまとめる。
    $b[0]= 1;
    $b[1]= 1;
    $b[2]=-1;
    $b[3]=-1;
    $b[4]=-1;
    $b[5]= 1;
    $b[6]= 1;
    $b[7]=-1;
    $b[8]= 1;
    
    for ( $i=0; $i<9; $i++ ) {
    	if ( $b[$i]==1 ) {
    		print "○";
    	} elsif ( $b[$i]==-1 ) {
    		print "×";
    	} else {
    		print " ";
    	}
    	if ( ($i==2) || ($i==5) || ($i==8) ) {
    		print "\n";
    	} 
    }
  7. 盤面を表示する部分をサブルーチンにする。
    (下のプログラムでは配列をサブルーチンに渡しているが、大域変数にしても構わない)
    $b[0]= 1;
    $b[1]= 1;
    $b[2]=-1;
    $b[3]=-1;
    $b[4]=-1;
    $b[5]= 1;
    $b[6]= 1;
    $b[7]=-1;
    $b[8]= 1;
    
    &print_board(@b);
    
    # 盤面表示サブルーチン
    sub print_board {
    	my @b=@_;
    	my $i;
    	for ( $i=0; $i<9; $i++ ) {
    		if ( $b[$i]==1 ) {
    			print "○";
    		} elsif ( $b[$i]==-1 ) {
    			print "×";
    		} else {
    			print " ";
    		}
    		if ( ($i==2) || ($i==5) || ($i==8) ) {
    			print "\n";
    		} 
    	}
    }