第19講 特殊種による魔方陣ソフトの高速化
第8話 ソースを書く際のコツ

その工夫というは、rand();の無駄打ちをf1とf2のおいて変えることです。
今回は、実験しておりませんがVBで作ったときには、
例えば、
if(n==7){
  int kr=15;
  for(i=0;i<kr;i++)rand();
}
のように実験で最速な組み合わせを探し、7次場合、8次の場合などで変えるのです。
試行錯誤を何十回も繰り返せば、最適なものが見つかります。
VBAのときは、このような試行錯誤で最終的に10次までできるようにもっていきました。
無駄打ちをする理由は、ランダムの発生順を変えるためです。
皆さん、挑戦して下さい。

さて、今回はソースを書く際のコツとバックアップの方法について述べます。
ソースを書く際には、
是非コピーペストと置換を利用してください。
前回fからf1とf2を作ったわけですが、
ほとんどコーティングが同一でした。
すべてタイピングするのは、
肩が凝ってしまいます。

まず、fからf1を作る方から説明しましょう。
void f(char g)とf(g+1)は手動でfをf1に変更します。
次に、void f1(char g)内のa[y[g]][x[g]]=kkk+1;のピンクの部分をドラッグして範囲指定します。
そして、メニューバーの編集→クイック置換とクリックして、

図のように置換後の文字列をa1[、検索対象を現在のプロジェクトとして、すべて置換を選択します。
後は、
else{
  for(j=0;j<n;j++){
    for(k=0;k<n;k++){
      w[k]=(a1[j][k]).ToString();
    }
    dataGridView1->Rows->Add(w);
  }
  for(j=0;j<16;j++)w[j]=L"";
  dataGridView1->Rows->Add(w);
  s++;
  if(s==1000)return;
}
は手動で直します。
これでf1が完成します。

f1が完成したら全体をドラッグしてコピーしてください。
f1の下にペーストした後、
void f1(char g)のピンクを選択して、編集→クリック検索をクリックした後、

置換後の文字列をf2(、検索対象を現在のブロックとして、すべてを置換します。
次に、同様にしてa1をすべてa2に変更します。
残りの変更部分は、手動で変えます。
このような手順をとれば、
簡単にfからf1とf2を作ってやることができます。
コピーペーストとクイック置換を是非活用してください。
クイック置換した後は、必ずビルドしてください。
もし、ビルドが失敗したときは慌てずCtrlとZを同時に1回押してください。
置換する前に戻ります。Ctrl+Z(CtrlとZを同時に押す)はすべてのWindowsソフトに共通で、
操作の一つ手前に戻る命令です。
ペイントなどで一部だけインクを落とすつもりが、
穴が空いていて全体が塗りつぶされてしまうことがあります。
このときも慌てる必要はありません。
Ctrl+Z(CtrlとZを同時に押す)をすればよいのです。
ビルドが失敗したときは、Ctrl+Zをしてからビルドをもう一度行い成功するのを確認してから、
再度置換に挑戦してください。その際、検索対象をいろいろと変えてみて試行したり、
『すべて置換』ではなく『置換』を選んで一つ一つ置換するなど試してみてください。

次にバックアップの方法についてです。
VBAならば、名前を変えて保存をすればバックアップになります。
これはロールプレイングゲームにおいて複数の場所に保存しておくことと同じです。
大きな変更を加える前には、いくつかの名前で保存しておいてバックアップをとっておきたいものです。
そして、現在のものに変更を加えてビルドできなくなったら、現在のファイルは閉じて、
名前を変えてバックアップしてあったファイルを開き、もう一度名前を原本と同じファイル名で上書きします。
これで完全に復元します。
ゲームにおいて、ラスボスと闘う前に保存しておいて、ゲームオーバーになったらそこからやり直すのと同じです。

例えば、原本のファイル名が『魔方陣作成ソフト』なら『魔方陣作成ソフトBP1』『魔方陣作成ソフトBP2』などと名前を変えて保存しておくのです。
そして、原本において修復できないほど大きな失敗をしてしまったとき(プログラミングにおいてはしばしば生じます。)、
その原本ファイルを閉じてから、『魔方陣作成ソフトBP1』をもう一度読み込み『魔方陣作成ソフト』の名で保存し直すのです。
そうすれば、変更を加える前の原本に戻ることができます。
これはVBAだけでなく、グラフィックソフトやワープロでも同じです。
是非、この方法を活用して頂きたいと思います。

ところが、VC++においてはこの便利な方法が使えません。
ですがバックアップの次善の策はあります。

私は次のようにしてバックアップしています。
私は、仕事をするフォルダをVC++2010などとしてあります。
さらに、その中をd1、d2、d3、d4などと10個のフォルダに切ってあります。


新しいプロジェクトの作成の際に、場所をD:\VC++\d1としておくと、ソリューション名でD:\VC++\d1の中にフォルダが作られ、
そのフォルダにすべてのファイルが納められているのです。
例えば、ソリューション名を『魔方陣作成ソフト』とすると、
『D:\VC++\d1\魔方陣作成ソフト』というフォルダが作られるわけです。
この『魔方陣作成ソフト』というフォルダをコピーして、他のフォルダd2やd3当たりにペーストしておけば、
それが、バックアップフォルダになります。
原本の方で大きな失敗をしてしまったときは、d2フォルダ当たりの『魔方陣作成ソフト』をフォルダをコピーして、
d1にペーストし直すと、原本の修復ができます。

最後に、新しいプロジェクトを作るときの工夫を記しておきましょう。
次講で、一般種法による魔方陣作成ソフトに挑戦しますが、
これは今回作った特殊種法を少し改良するだけです。
デザインなどはまったく同じです。
いちいちデザインやコードを作り直すのは無駄な作業です。

そこで、次のような手順で作業されることをお勧めします。
まずVC++2010を起動して、今回作った『特殊種法による魔方陣作成ソフト』を開いてください。
そして、タブをForm1.hにして、コードを上から下まで全体をドラッグで範囲指定してください。

そして、コピーをします。
そして、ファイル→新規作成→プロジェクトとクリックして、名前を『一般種法による魔方陣作成ソフト』として、
OKボタンを押します。
そして、Form1.hを右クリックして、コードの表示を選び、
コードが表示されたら、コードの上から下までドラッグで範囲指定してから、右クリックして貼り付けを選びます。
すると、コードが『特殊種法による魔方陣作成ソフト』のコードになります。
#pragma once
#include<stdlib.h>
int n;
int a1[10][10],a2[10][10],p[10][10];
int x[100],y[100];
int s;
namespace 特殊種法による魔方陣の作成ソフト {
特殊種法による魔方陣の作成ソフト一般種法による魔方陣作成ソフトに変更すれば、
『特殊種法による魔方陣作成ソフト』と同じものが『一般種法による魔方陣作成ソフト』の名のもとにできるわけです。
デザインも自動的に『特殊種法による魔方陣作成ソフト』と同じになっていることを確認して下さい。
つまり、これは『特殊種法による魔方陣作成ソフト』のバックアップ版となります。
次講において、『一般種法による魔方陣作成ソフト』のコードを改良していきます。






第19講第7話へ 第20講(旧講義)第1話へ 第20講(再講義)第1話へ



VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座