[Algo]DQ1の復活の呪文解析[Page1] [Programming Algorithm]
[はじめに]
ドラゴンクエストIの復活の呪文を解析するツールを
作ってみました。
オブジェクト指向言語で開発していますが、
なるべく構造化プログラミングを意識して実装している為、
他言語への移植はさほど難しくないと思います。
[機能]
復活の呪文からゲーム進行状況のパラメータを解析する。
ゲーム進行状況のパラメータから復活の呪文を生成する。
[制限事項]
入力データは、下記を前提としています。
・プレイヤーの名前:全角のひらがな(一部除く)、数字
・復活の呪文:全角のひらがな(一部除く)
・復活の呪文:全角5文字、7文字、5文字、3文字
ブログに掲載できる容量に制限がある為、入力チェックを省いています。
入力データが前提以外の場合、アベンドすることがあります。
[実行の方法(VisualStudio2010を想定)]
①Windowsフォームアプリのプロジェクトを作成し、
下記ソースをプロジェクトに追加する。(プロジェクトの名称は何でもいい。)
②『FrmDq1.vb』をスタートアップフォームに設定する。
③Form1.vbを削除する。(新規プロジェクト作成時のデフォルトの画面)
④ビルドする。
(※開発ツールの利用詳細は割愛)
また、VisualStudio2010で開発していますが、
.NET2.0上で動作するので、2005/2008でも利用できると思います。
(※2005/2008では動作未確認)
[実行画面]
[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[Algo]DQ1の復活の呪文解析[Page1]
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page4]
続きはこちらから
[Algo]DQ1の復活の呪文解析[Page2]
ドラゴンクエストIの復活の呪文を解析するツールを
作ってみました。
オブジェクト指向言語で開発していますが、
なるべく構造化プログラミングを意識して実装している為、
他言語への移植はさほど難しくないと思います。
開発ツール | Microsoft Visual Studio 2010 |
プログラム言語 | Microsoft Visual Basic 2010 |
.NETバージョン | .NET Framework 2.0 |
形式 | Windows Forms アプリケーション |
復活の呪文からゲーム進行状況のパラメータを解析する。
ゲーム進行状況のパラメータから復活の呪文を生成する。
[制限事項]
入力データは、下記を前提としています。
・プレイヤーの名前:全角のひらがな(一部除く)、数字
・復活の呪文:全角のひらがな(一部除く)
・復活の呪文:全角5文字、7文字、5文字、3文字
ブログに掲載できる容量に制限がある為、入力チェックを省いています。
入力データが前提以外の場合、アベンドすることがあります。
[実行の方法(VisualStudio2010を想定)]
①Windowsフォームアプリのプロジェクトを作成し、
下記ソースをプロジェクトに追加する。(プロジェクトの名称は何でもいい。)
ソース | 機能 |
FrmDq1.vb | メイン画面のロジック |
FrmDq1.Designer.vb | メイン画面のデザイン(自動生成) |
Dq1ConstData.vb | アイテム、武器、鎧などのデータ |
DataConverter.vb | 文字列と文字コードの相互変換 |
Dq1PasswordAnalizer.vb | 『復活の呪文』の解析/生成 |
Dq1Password.vb | 『復活の呪文』を表すクラス(文字列と文字コードを管理) |
PlayerName.vb | プレイヤーの名前を表すクラス(文字列と文字コードを管理) |
PlayerInformation.vb | プレイヤーの情報(所持金、経験値、イベントフラグ等) |
③Form1.vbを削除する。(新規プロジェクト作成時のデフォルトの画面)
④ビルドする。
(※開発ツールの利用詳細は割愛)
また、VisualStudio2010で開発していますが、
.NET2.0上で動作するので、2005/2008でも利用できると思います。
(※2005/2008では動作未確認)
[実行画面]
[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[Algo]DQ1の復活の呪文解析[Page1]
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page4]
| |
[VB.NET]DataConverter.vb |
| |
[VB.NET]Dq1ConstData.vb |
| |
[VB.NET]Dq1Password.vb |
| |
[VB.NET]Dq1PasswordAnalizer.vb |
続きはこちらから
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page2] [Programming Algorithm]
[Algo]DQ1の復活の呪文解析[Page1]からの続きです。
[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[Algo]DQ1の復活の呪文解析[Page1]
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page4]
続きはこちらから
[Algo]DQ1の復活の呪文解析[Page3]
[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[Algo]DQ1の復活の呪文解析[Page1]
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page4]
| |
[VB.NET]PlayerInformation.vb |
| |
[VB.NET]PlayerName.vb |
続きはこちらから
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page3] [Programming Algorithm]
[Algo]DQ1の復活の呪文解析[Page2]からの続きです。
[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[Algo]DQ1の復活の呪文解析[Page1]
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page4]
続きはこちらから
[Algo]DQ1の復活の呪文解析[Page4]
[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[Algo]DQ1の復活の呪文解析[Page1]
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page4]
| |
[VB.NET]FrmDq1.vb |
続きはこちらから
[Algo]DQ1の復活の呪文解析[Page4]
[Algo]DQ1の復活の呪文解析[Page4] [Programming Algorithm]
[Algo]DQ1の復活の呪文解析[Page3]からの続きです。
[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[Algo]DQ1の復活の呪文解析[Page1]
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page4]
[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[Algo]DQ1の復活の呪文解析[Page1]
[Algo]DQ1の復活の呪文解析[Page2]
[Algo]DQ1の復活の呪文解析[Page3]
[Algo]DQ1の復活の呪文解析[Page4]
| |
[VB.NET]FrmDq1.Designer.vb |
[Algo]組合せの数(nCm)の算出 [Programming Algorithm]
[はじめに]
・n個の中からm個を選ぶ組合せの数(nCm)を算出するプログラムです。
例:a、b、cの3個の中から2個を選ぶ組合せは、
ab、ac、bcの3通りであり、その数を数学的表記で『3C2』と表現します。
.NETのクラスライブラリには算出するメソッドがないようなので作ってみました。
・nCmを算出する公式はいくつかありますが、
代表的な公式と各々の特徴について、以下にまとめます。
・参考文献
『Javaによるはじめてのアルゴリズム入門』
以下に、算出方法に対するプログラム例を示します。
(1)階乗による算出
公式:nCm=n!/{m!×(n-m)!}
(2)漸化式による算出
一般的に、漸化式の計算は再帰処理で実装できます。
公式:
(i)m=0の場合
nCm=1
(ii)m>0の場合
nCm=nCm-1×(n-m+1)/m
(3)Π(パイ)による算出
「(2)漸化式による算出」の公式は、
総乗(掛け算を集約したもの)と解釈できるので、
以下の公式でも表現できます。
公式:nCm=Π{(n-k+1)/k} (※1≦k≦M)
・n個の中からm個を選ぶ組合せの数(nCm)を算出するプログラムです。
例:a、b、cの3個の中から2個を選ぶ組合せは、
ab、ac、bcの3通りであり、その数を数学的表記で『3C2』と表現します。
.NETのクラスライブラリには算出するメソッドがないようなので作ってみました。
・nCmを算出する公式はいくつかありますが、
代表的な公式と各々の特徴について、以下にまとめます。
・参考文献
『Javaによるはじめてのアルゴリズム入門』
以下に、算出方法に対するプログラム例を示します。
(1)階乗による算出
公式:nCm=n!/{m!×(n-m)!}
| |
[C#][階乗による算出] 異なるn個のものからm個を選ぶ組み合わせの総数nCmを取得する。 |
(2)漸化式による算出
一般的に、漸化式の計算は再帰処理で実装できます。
公式:
(i)m=0の場合
nCm=1
(ii)m>0の場合
nCm=nCm-1×(n-m+1)/m
| |
[C#][漸化式による算出] 異なるn個のものからm個を選ぶ組み合わせの総数nCmを取得する。 |
(3)Π(パイ)による算出
「(2)漸化式による算出」の公式は、
総乗(掛け算を集約したもの)と解釈できるので、
以下の公式でも表現できます。
公式:nCm=Π{(n-k+1)/k} (※1≦k≦M)
| |
[C#][Π(パイ)による算出] 異なるn個のものからm個を選ぶ組み合わせの総数nCmを取得する。 |
[Algo]和と積から元の2数の算出 [Programming Algorithm]
[はじめに]
(1)ある2数の和と積から、元の2数を求めるアルゴリズムです。
例えば、『足して5』、『掛けて6』になる2つの数は、
2と3になります。
これを解くアルゴリズムとして、
2次方程式の解の解法を利用することができます。
具体的には、
Xについての2次方程式
X2-5X+6=0 は因数分解すると、
(X-2)(X-3)=0 となり、
解はX=2、3 となります。
つまり、
X2-(α+β)X+αβ=0 の解が、
X=α、β となることを利用することで、
元の2数を求めることができます。
α+β=A、αβ=Bとした時、
2次方程式の解の公式から、
X2-AX+B=0
X= {A±(A2 - 4B)1/2} / 2 となり、
求める2数は、
X= {A+(A2 - 4B)1/2} / 2 と
X= {A-(A2 - 4B)1/2} / 2
となります。
また、2次方程式の判別式が負数の場合、
つまり2次方程式の実数解が存在しない場合は、
元の2数が存在しないので、解を算出する前にチェックする必要があります。
[参考]2次方程式の解の公式
[ソース]
(1)ある2数の和と積から、元の2数を求めるアルゴリズムです。
例えば、『足して5』、『掛けて6』になる2つの数は、
2と3になります。
これを解くアルゴリズムとして、
2次方程式の解の解法を利用することができます。
具体的には、
Xについての2次方程式
X2-5X+6=0 は因数分解すると、
(X-2)(X-3)=0 となり、
解はX=2、3 となります。
つまり、
X2-(α+β)X+αβ=0 の解が、
X=α、β となることを利用することで、
元の2数を求めることができます。
α+β=A、αβ=Bとした時、
2次方程式の解の公式から、
X2-AX+B=0
X= {A±(A2 - 4B)1/2} / 2 となり、
求める2数は、
X= {A+(A2 - 4B)1/2} / 2 と
X= {A-(A2 - 4B)1/2} / 2
となります。
また、2次方程式の判別式が負数の場合、
つまり2次方程式の実数解が存在しない場合は、
元の2数が存在しないので、解を算出する前にチェックする必要があります。
[参考]2次方程式の解の公式
[ソース]
| |
[VB.NET]和と積から元の2数を算出する。 |