コーディング
をテンプレートにして作成
Unity学習帳2冊目
コーディング をテンプレートにして作成
[
トップ
] [
差分
|
バックアップ
|
リロード
] [
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
[ ]
開始行:
TITLE:コーディング
#contents
#jsmath
有用なデザインパターンをサンプルコードとして羅列したページ
**switch_case文とcontinue;との関係
switch_case文の内部でbreak;はよく使われるがcontinue;を利...
switch文の外側にあるネスト内の反復処理、for、while、do 、...
特殊な検索をかける場合に憶えておくと便利なやり方になる
visualStudioではカーソルをbreak;やcontinue;の上に持ってい...
わからなくなったら、まずこれで位置を確認すると良い
#code(csharp){{
using UnityEngine;
using System.Collections;
public class SwitchContinue : MonoBehaviour
{
//優先順位の低い文字を検索する
void Start()
{
//括弧で囲まれると優先順位は上がるとする
string str ="B(AC(1A))CB(57A6)";
int pos = 0;
int nest = 0;
int priority = 0;
int lowPriority = 3;
//for文に対してcontinue;はここに来る
for (int i = 0; i < str.Length; i++)
{
switch (str[i])
{
case 'A': priority = 1; break; //swi...
case 'B': priority = 2; break;
case 'C': priority = 3; break;
case '(': nest++; continue;
case ')': nest--; continue;
default: continue; //for...
}
//switch_case文に対してのbreak;はここに来る
if (nest==0 && priority <= lowPriority)
{
lowPriority = priority;
pos = i;
}
}
print(string.Format("配列位置:{0} の文字:{1}",...
}
}
}}
**帰納関数のサンプル(順列の出力)
基本的な帰納コードのサンプル
サンプルとして順列をテキストファイルで出力する
<帰納処理を書くコツ>
-基底部、帰納部の二段階で関数を作成する(ドミノの一つ目、...
-基底の呼び出しの際は出来るだけ余計なデーターを渡さないよ...
-派生した関数(帰納部)で扱う「差が生じるデータ」部が参照...
-帰納関数の入口に終了条件を設定する
<このような形式のコードのなにが利点か?>
例えば10行目11行目を
int length = 5;
char[] set = { 'H', 'T' };
と書き換えても動く。forループでよく似た動きをするコードを...
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
public class Perm : MonoBehaviour
{
void Start()
{
int length = 3;
char[] set = { 'A', 'B', 'C' };
List<string> strList = Root(set, length);
string folder = Application.dataPath; ...
SaveText(folder, @"\test6.txt", strList.ToArray());
}
//基底部
List<string> Root(char[] set, int length)
{
List<string> strList = new List<string>();
int level = 0;
for (int i = 0; i < set.Length; i++)
{
char[] dat = new char[length];
dat[0] = set[i];
Loop(dat, level, set, strList);
}
return strList;
}
//帰納部
void Loop(char[] dat, int level, char[] set, List<str...
{
level++;
if (level < dat.Length) //帰納関数の終了条件
{
for (int i = 0; i < set.Length; i++)
{
char[] cloneDat = (char[])dat.Clone(); /...
cloneDat[level] = set[i];
Loop(cloneDat, level, set, strList); /...
}
}
else {
strList.Add(new string(dat));
}
}
//資料:StreamWriter クラス (System.IO)
//http://msdn.microsoft.com/ja-jp/library/system.io.s...
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
}
}}
***補足:値渡し、参照渡しとは?
以下のコードの出力は
123
0
789
となる
変数valListの内容が関数内で書き換えられている点に注目。in...
つまり帰納関数で同様の事をした場合、派生先の関数内の書き...
#code(csharp){{
using UnityEngine;
using System.Collections;
public class TestMetho : MonoBehaviour {
void Start () {
int val = 123;
int[] valList = { 456, 789 };
Method(val, valList);
print(val);
print(valList[0]);
print(valList[1]);
}
void Method(int val, int[] valList) {
val = 000;
valList[0] = 000;
}
}
}}
**データーをwiki用に変換したりCSVで出力等
資料:虚数の情緒P522
\({ a}^{ { \left( \frac { 1 }{ 2 } \right) }^{ n } }\) ...
|a=10|a=200|a=1000|a=5000|a=10000|
|3.162278|14.14214|31.62278|70.71068|100|
|1.778279|3.760603|5.623413|8.408964|10|
|1.333521|1.939227|2.371374|2.899821|3.162278|
|1.154782|1.392561|1.539927|1.702886|1.778279|
|1.074608|1.180068|1.240938|1.304947|1.333521|
|1.036633|1.08631|1.113974|1.142343|1.154782|
|1.018152|1.042262|1.05545|1.068804|1.074608|
|1.009035|1.020912|1.027351|1.03383|1.036633|
|1.004507|1.010402|1.013583|1.016774|1.018152|
|1.002251|1.005188|1.006769|1.008352|1.009035|
|1.001125|1.00259|1.003379|1.004167|1.004507|
|1.000562|1.001294|1.001688|1.002082|1.002251|
|1.000281|1.000647|1.000844|1.00104|1.001125|
|1.000141|1.000323|1.000422|1.00052|1.000562|
|1.00007|1.000162|1.000211|1.00026|1.000281|
|1.000035|1.000081|1.000105|1.00013|1.000141|
|1.000018|1.00004|1.000053|1.000065|1.00007|
|1.000009|1.00002|1.000026|1.000033|1.000035|
|1.000004|1.00001|1.000013|1.000016|1.000018|
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
using System.Linq;
public class Pow10 : MonoBehaviour {
void Start () {
int length = 20;
float[] bottomList = { 10f, 200f, 1000f, 5000f, 1...
float[] powNumber = GeneratorNumPow(bottomList, l...
string[] str = CSV2Wiki( PowNumToCSV(powNumber, l...
string folder = Application.dataPath; //これだ...
ClassSaveText(folder, @"\PowList.txt", str);
}
//数列を作成
private IEnumerable<float> GeneratorNumPow(float[] bo...
{
for (int j = 0; j < bottomList.Length; j++)
{
for (float i = 0; i < length; i++)
{
yield return Mathf.Pow(bottomList[j], Mat...
}
}
}
//CSV形式に
private string[] PowNumToCSV(float[] powNumber,int le...
{
int strLength = powNumber.Length / length;
string[] str = new string[length];
for (int j = 0; j < length; j++)
{
string temp=powNumber[j].ToString();
for (int i = 1; i < strLength; i++)
{
temp += string.Format(",{0}",powNumber[i ...
}
str[j] = temp;
}
return str;
}
//csv形式をPukiWiki表形式にする
private string[] CSV2Wiki(IEnumerable<string> data)
{
List<string> strList = new List<string>();
//wiki用置換
foreach (var item in data)
{
strList.Add("|" + item.ToString().Replace(','...
}
return strList.ToArray();
}
//資料:StreamWriter クラス (System.IO)
//http://msdn.microsoft.com/ja-jp/library/system.io.s...
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
//Classセーバー
private void ClassSaveText(string folder, string name...
{
List<string> strList = new List<string>();
foreach (var item in data)
{
strList.Add(item.ToString());
}
SaveText(folder, name, strList.ToArray());
}
}
}}
**C#における累乗根計算
例えば以下のような累乗根計算をC#で行う場合は以下のよう...
&font(150%){\({ 10 }^{ { \left( \frac { 1 }{ 2 } \right)...
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
public class Pow10 : MonoBehaviour {
void Start () {
IEnumerable<float> powNumber = GeneratorNumPow();
foreach (var item in powNumber)
{
print(item);
}
string folder = Application.dataPath; //これだ...
ClassSaveText(folder, @"\PowList.txt", powNumber);
}
private IEnumerable<float> GeneratorNumPow()
{
int length = 10;
for (float i = 0; i < length; i++)
{
yield return Mathf.Pow(10, Mathf.Pow(1f / 2f,...
}
}
//資料:StreamWriter クラス (System.IO)
//http://msdn.microsoft.com/ja-jp/library/system.io.s...
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
//Classセーバー
private void ClassSaveText(string folder, string name...
{
List<string> strList = new List<string>();
foreach (var item in data)
{
strList.Add(item.ToString());
}
SaveText(folder, name, strList.ToArray());
}
}
}}
出力結果
10
3.162278
1.778279
1.333521
1.154782
1.074608
1.036633
1.018152
1.009035
1.004507
**組み合わせ計算
プログラムコードではforループが利用できるので数学的ではな...
#code(csharp){{
//組合せ計算
public int nCr(int n, int r)
{
if (n == r || r == 0) return 1;
int deno = n;
int nume = 1;
for (int i = 2; i <= r; n--, i++)
{
deno *= (n - 1);
nume *= i;
}
return deno / nume;
}
}}
**値から特定桁の数字を抽出
値を\({ 10 }^{ n-1 }\)で割って、もう一度\(10\)で割った余...
他のn進数でも同様の考え方で狙った桁を抽出できる
#code(csharp){{
using UnityEngine;
using System.Collections;
public class test1 : MonoBehaviour
{
void Start()
{
print(Digit(123456789, 6)); //7桁目を表示(...
}
public int Digit(int value, int dig) {
int n=1;
for (int i = 0; i < dig; i++) { n *= 10; }
int temp = value / n;
return temp%10;
}
}
}}
//一例でゲーム、バブルボブルのスコアの百の位と十の位を同...
**デレゲートセレクタ
デレゲートを利用する事で関数を選択する事を可能とする
#code(csharp){{
using UnityEngine;
using System.Collections;
public class Sum1 : MonoBehaviour
{
public enum Function
{
Linear,
Gravity,
}
public Function function;
delegate float FunctionDelegate (float x);
FunctionDelegate[] FunctionDelegates = {
Linear,
Gravity,
};
void Start ()
{
FunctionDelegate f = FunctionDelegates [(int)function];
print (f (2));
}
static float Linear (float dt)
{
return 1f * dt;
}
static float Gravity (float dt)
{
return 9.8f * dt;
}
}
}}
**Enumerableを利用した数列の作成
等差数列、等比数列を作成する
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Linq;
public class Numbers2 : MonoBehaviour
{
void Start ()
{
float[] quary = SequenceDiff (1, 2, 5);
//float[] quary = SequenceRatio (1, 2, 5);
foreach (var item in quary) {
print (item);
}
}
//等差数列
float[] SequenceDiff (float a, float d, int count)
{
float[] quary = Enumerable.Range (1, count).Select (n =...
return quary;
}
//等比数列
float[] SequenceRatio (float a, float r, int count)
{
float[] quary = Enumerable.Range (1, count).Select (n =...
return quary;
}
}
}}
**IEnumerableを利用した数列の作成
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Pattern : MonoBehaviour
{
void Start ()
{
IEnumerable<float> number = GeneratorNum (5, 20);
foreach (var item in number) {
print (item);
}
}
IEnumerable<float> GeneratorNum (int x, int y)
{
for (int i = x; i <= y; i++) {
yield return i;
}
}
}
}}
終了行:
TITLE:コーディング
#contents
#jsmath
有用なデザインパターンをサンプルコードとして羅列したページ
**switch_case文とcontinue;との関係
switch_case文の内部でbreak;はよく使われるがcontinue;を利...
switch文の外側にあるネスト内の反復処理、for、while、do 、...
特殊な検索をかける場合に憶えておくと便利なやり方になる
visualStudioではカーソルをbreak;やcontinue;の上に持ってい...
わからなくなったら、まずこれで位置を確認すると良い
#code(csharp){{
using UnityEngine;
using System.Collections;
public class SwitchContinue : MonoBehaviour
{
//優先順位の低い文字を検索する
void Start()
{
//括弧で囲まれると優先順位は上がるとする
string str ="B(AC(1A))CB(57A6)";
int pos = 0;
int nest = 0;
int priority = 0;
int lowPriority = 3;
//for文に対してcontinue;はここに来る
for (int i = 0; i < str.Length; i++)
{
switch (str[i])
{
case 'A': priority = 1; break; //swi...
case 'B': priority = 2; break;
case 'C': priority = 3; break;
case '(': nest++; continue;
case ')': nest--; continue;
default: continue; //for...
}
//switch_case文に対してのbreak;はここに来る
if (nest==0 && priority <= lowPriority)
{
lowPriority = priority;
pos = i;
}
}
print(string.Format("配列位置:{0} の文字:{1}",...
}
}
}}
**帰納関数のサンプル(順列の出力)
基本的な帰納コードのサンプル
サンプルとして順列をテキストファイルで出力する
<帰納処理を書くコツ>
-基底部、帰納部の二段階で関数を作成する(ドミノの一つ目、...
-基底の呼び出しの際は出来るだけ余計なデーターを渡さないよ...
-派生した関数(帰納部)で扱う「差が生じるデータ」部が参照...
-帰納関数の入口に終了条件を設定する
<このような形式のコードのなにが利点か?>
例えば10行目11行目を
int length = 5;
char[] set = { 'H', 'T' };
と書き換えても動く。forループでよく似た動きをするコードを...
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
public class Perm : MonoBehaviour
{
void Start()
{
int length = 3;
char[] set = { 'A', 'B', 'C' };
List<string> strList = Root(set, length);
string folder = Application.dataPath; ...
SaveText(folder, @"\test6.txt", strList.ToArray());
}
//基底部
List<string> Root(char[] set, int length)
{
List<string> strList = new List<string>();
int level = 0;
for (int i = 0; i < set.Length; i++)
{
char[] dat = new char[length];
dat[0] = set[i];
Loop(dat, level, set, strList);
}
return strList;
}
//帰納部
void Loop(char[] dat, int level, char[] set, List<str...
{
level++;
if (level < dat.Length) //帰納関数の終了条件
{
for (int i = 0; i < set.Length; i++)
{
char[] cloneDat = (char[])dat.Clone(); /...
cloneDat[level] = set[i];
Loop(cloneDat, level, set, strList); /...
}
}
else {
strList.Add(new string(dat));
}
}
//資料:StreamWriter クラス (System.IO)
//http://msdn.microsoft.com/ja-jp/library/system.io.s...
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
}
}}
***補足:値渡し、参照渡しとは?
以下のコードの出力は
123
0
789
となる
変数valListの内容が関数内で書き換えられている点に注目。in...
つまり帰納関数で同様の事をした場合、派生先の関数内の書き...
#code(csharp){{
using UnityEngine;
using System.Collections;
public class TestMetho : MonoBehaviour {
void Start () {
int val = 123;
int[] valList = { 456, 789 };
Method(val, valList);
print(val);
print(valList[0]);
print(valList[1]);
}
void Method(int val, int[] valList) {
val = 000;
valList[0] = 000;
}
}
}}
**データーをwiki用に変換したりCSVで出力等
資料:虚数の情緒P522
\({ a}^{ { \left( \frac { 1 }{ 2 } \right) }^{ n } }\) ...
|a=10|a=200|a=1000|a=5000|a=10000|
|3.162278|14.14214|31.62278|70.71068|100|
|1.778279|3.760603|5.623413|8.408964|10|
|1.333521|1.939227|2.371374|2.899821|3.162278|
|1.154782|1.392561|1.539927|1.702886|1.778279|
|1.074608|1.180068|1.240938|1.304947|1.333521|
|1.036633|1.08631|1.113974|1.142343|1.154782|
|1.018152|1.042262|1.05545|1.068804|1.074608|
|1.009035|1.020912|1.027351|1.03383|1.036633|
|1.004507|1.010402|1.013583|1.016774|1.018152|
|1.002251|1.005188|1.006769|1.008352|1.009035|
|1.001125|1.00259|1.003379|1.004167|1.004507|
|1.000562|1.001294|1.001688|1.002082|1.002251|
|1.000281|1.000647|1.000844|1.00104|1.001125|
|1.000141|1.000323|1.000422|1.00052|1.000562|
|1.00007|1.000162|1.000211|1.00026|1.000281|
|1.000035|1.000081|1.000105|1.00013|1.000141|
|1.000018|1.00004|1.000053|1.000065|1.00007|
|1.000009|1.00002|1.000026|1.000033|1.000035|
|1.000004|1.00001|1.000013|1.000016|1.000018|
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
using System.Linq;
public class Pow10 : MonoBehaviour {
void Start () {
int length = 20;
float[] bottomList = { 10f, 200f, 1000f, 5000f, 1...
float[] powNumber = GeneratorNumPow(bottomList, l...
string[] str = CSV2Wiki( PowNumToCSV(powNumber, l...
string folder = Application.dataPath; //これだ...
ClassSaveText(folder, @"\PowList.txt", str);
}
//数列を作成
private IEnumerable<float> GeneratorNumPow(float[] bo...
{
for (int j = 0; j < bottomList.Length; j++)
{
for (float i = 0; i < length; i++)
{
yield return Mathf.Pow(bottomList[j], Mat...
}
}
}
//CSV形式に
private string[] PowNumToCSV(float[] powNumber,int le...
{
int strLength = powNumber.Length / length;
string[] str = new string[length];
for (int j = 0; j < length; j++)
{
string temp=powNumber[j].ToString();
for (int i = 1; i < strLength; i++)
{
temp += string.Format(",{0}",powNumber[i ...
}
str[j] = temp;
}
return str;
}
//csv形式をPukiWiki表形式にする
private string[] CSV2Wiki(IEnumerable<string> data)
{
List<string> strList = new List<string>();
//wiki用置換
foreach (var item in data)
{
strList.Add("|" + item.ToString().Replace(','...
}
return strList.ToArray();
}
//資料:StreamWriter クラス (System.IO)
//http://msdn.microsoft.com/ja-jp/library/system.io.s...
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
//Classセーバー
private void ClassSaveText(string folder, string name...
{
List<string> strList = new List<string>();
foreach (var item in data)
{
strList.Add(item.ToString());
}
SaveText(folder, name, strList.ToArray());
}
}
}}
**C#における累乗根計算
例えば以下のような累乗根計算をC#で行う場合は以下のよう...
&font(150%){\({ 10 }^{ { \left( \frac { 1 }{ 2 } \right)...
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
public class Pow10 : MonoBehaviour {
void Start () {
IEnumerable<float> powNumber = GeneratorNumPow();
foreach (var item in powNumber)
{
print(item);
}
string folder = Application.dataPath; //これだ...
ClassSaveText(folder, @"\PowList.txt", powNumber);
}
private IEnumerable<float> GeneratorNumPow()
{
int length = 10;
for (float i = 0; i < length; i++)
{
yield return Mathf.Pow(10, Mathf.Pow(1f / 2f,...
}
}
//資料:StreamWriter クラス (System.IO)
//http://msdn.microsoft.com/ja-jp/library/system.io.s...
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
//Classセーバー
private void ClassSaveText(string folder, string name...
{
List<string> strList = new List<string>();
foreach (var item in data)
{
strList.Add(item.ToString());
}
SaveText(folder, name, strList.ToArray());
}
}
}}
出力結果
10
3.162278
1.778279
1.333521
1.154782
1.074608
1.036633
1.018152
1.009035
1.004507
**組み合わせ計算
プログラムコードではforループが利用できるので数学的ではな...
#code(csharp){{
//組合せ計算
public int nCr(int n, int r)
{
if (n == r || r == 0) return 1;
int deno = n;
int nume = 1;
for (int i = 2; i <= r; n--, i++)
{
deno *= (n - 1);
nume *= i;
}
return deno / nume;
}
}}
**値から特定桁の数字を抽出
値を\({ 10 }^{ n-1 }\)で割って、もう一度\(10\)で割った余...
他のn進数でも同様の考え方で狙った桁を抽出できる
#code(csharp){{
using UnityEngine;
using System.Collections;
public class test1 : MonoBehaviour
{
void Start()
{
print(Digit(123456789, 6)); //7桁目を表示(...
}
public int Digit(int value, int dig) {
int n=1;
for (int i = 0; i < dig; i++) { n *= 10; }
int temp = value / n;
return temp%10;
}
}
}}
//一例でゲーム、バブルボブルのスコアの百の位と十の位を同...
**デレゲートセレクタ
デレゲートを利用する事で関数を選択する事を可能とする
#code(csharp){{
using UnityEngine;
using System.Collections;
public class Sum1 : MonoBehaviour
{
public enum Function
{
Linear,
Gravity,
}
public Function function;
delegate float FunctionDelegate (float x);
FunctionDelegate[] FunctionDelegates = {
Linear,
Gravity,
};
void Start ()
{
FunctionDelegate f = FunctionDelegates [(int)function];
print (f (2));
}
static float Linear (float dt)
{
return 1f * dt;
}
static float Gravity (float dt)
{
return 9.8f * dt;
}
}
}}
**Enumerableを利用した数列の作成
等差数列、等比数列を作成する
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Linq;
public class Numbers2 : MonoBehaviour
{
void Start ()
{
float[] quary = SequenceDiff (1, 2, 5);
//float[] quary = SequenceRatio (1, 2, 5);
foreach (var item in quary) {
print (item);
}
}
//等差数列
float[] SequenceDiff (float a, float d, int count)
{
float[] quary = Enumerable.Range (1, count).Select (n =...
return quary;
}
//等比数列
float[] SequenceRatio (float a, float r, int count)
{
float[] quary = Enumerable.Range (1, count).Select (n =...
return quary;
}
}
}}
**IEnumerableを利用した数列の作成
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Pattern : MonoBehaviour
{
void Start ()
{
IEnumerable<float> number = GeneratorNum (5, 20);
foreach (var item in number) {
print (item);
}
}
IEnumerable<float> GeneratorNum (int x, int y)
{
for (int i = x; i <= y; i++) {
yield return i;
}
}
}
}}
ページ名: