Category Archives: プログラム カテゴリ "プログラム"のRSS  

[PHP5]関数に渡された引数を数える組み込み関数は?

2016年3月20日 (カテゴリ: PHP:)

PHPでは、関数に渡された引数がいくつあるかを、func_num_args()関数で取得できます。 int func_num_args( void )int func_num_args( void ) これは、PHP5.3以降で追加された関数です。 また、下記の例のように、デフォルト引数を省略した場合はfunc_num_args()にカウントされないので注意が必要です。 test.php <?php   function add2( $a, $b ) { printf( "引数の数は:%d\n", func_…


続きを読む

C#でReactive Extensions(Rx)その1:まずはIObserver, IObservableを理解する

2016年2月8日 (カテゴリ: C#:)

今回より、C#でRxの使い方を確認していきます。 Rxはデザインパターンの1つであるのObserverパターンを元にしています。 なのでRxを学ぶ前に、まずはC#でObserverパターンを表現するためのIObserver, IObservableクラスの使い方を確認します。 今回作るのは以下のようなコードです。 ここに出てくる、SimpleEventSource/PrintEventListenerクラスを作るのが今回のゴールです。 public void Sample01() { // イベントソースを作る SimpleEventSource source = n…


続きを読む

[C#]WinForm環境でRxを利用するためのインストール方法

2016年2月7日 (カテゴリ: C#:)

VisualStudioでWinFormを使用してプログラミングしているとき、Rx(Reactive Extension)ライブラリを使用する方法を説明します。 ライブラリのインストールは、NuGetを使って参照設定を行うのが最も簡単です。 Unityなど、ゲームエンジンからC# + Rxの組み合わせで開発したい場合も多いかと思いますが、最初からUnity上でUniRxを使って開発すると大変なので、まずはWinForm上で使い方を練習すると良いです。 それでは、作業手順です。 まず、プロジェクトを作成し、ソリューションエクスプローラの参照設定を右クリックします。 メニューにある、NuGetパッ…


続きを読む

C#で2048ゲームのクローンを作る[その6]

2016年2月5日 (カテゴリ: C#:)

今回は、前回に作ったのセルのアニメーション処理を追加します。 アニメーションをさせるということは、各セルに対して定期的に再描画のUpdate処理をコールしてあげる必要があります。このためUpdate処理を実装します。 最初に、Updateメソッドだけを持つインターフェースを作ります。 public interface ITaskBehaviour { void Update(); }public interface ITaskBehaviour { void Update(); } 作ったインターフェースをCellScriptクラスに適用します。Update…


続きを読む

C#で2048ゲームのクローンを作る[その5]

2016年1月31日 (カテゴリ: C#:)

今回は、予定通り盤面に表示させる駒(セル)を管理するクラスを作成します。 これまでのゲームルール作成は一旦置いておき、描画寄りのプログラムになります。 今回作るプログラムで、以下のような盤面の表示を行えるようにします。 CellScriptクラスの作成(概要) まずは、セルを管理するCellScriptクラスを作成します。 大枠だけまず書くと、以下のような感じになります。 CellScript.cs using System.Windows.Forms; using System.Collections.Generic; using System.Drawing; using System; …


続きを読む

[C#]System.Drawing.ColorのListを初期化する方法

2016年1月31日 (カテゴリ: C#:)

C#で、Colorクラスを要素に持つListをまとめて初期化したい場合があります。このような場合、下記のコードで宣言と初期化を一度に行えます。 Colorクラスはコンストラクタで色指定できないので、FromArgb()などのメソッドを使ってインスタンス生成します。 using System.Drawing;   public class SomeClass { public List<Color> colorList = new List<Color>{ Color.FromArgb(255, 255,255,0), Col…


続きを読む

[C#]LabelなどGUIコントロールの動的生成コードを一瞬で作る方法

2016年1月29日 (カテゴリ: C#:)

VisualStudioでWinFormを使って画面を作る際、通常はボタンやテキストボックスなどのGUIパーツ(コントロール)を画面から設定していきます。 ツールボックスからパーツをドラッグして、プロパティから各種設定を行うのが通常のパターンですね。 時にはこのコントロールを動的に作成したい場合があります。各コントロールは単なるクラスなので、このような場合でも、動的生成したいコントロールのクラスをnewしてプロパティをセットするプログラムを書けば問題なく動的生成が行えます。 ですが、動的にコントロールを作る場合、何のプロパティをセットしたら自分が思ったような設定になるのか、試行錯誤するのが結構…


続きを読む

C#で2048ゲームのクローンを作る[その4]

2016年1月28日 (カテゴリ: C#:)

今日は、前回の予定通り盤面の管理を別クラスに分けてみました。 リファクタリングを行っただけなので、前回のプログラムとできることは全く同じです。 まずは、画面を管理しているForm1.csファイルです。 盤面管理をBoardManagerに逃がしたので、非常にシンプルになりました。 using System; using System.Collections.Generic; using System.Data; using System.Windows.Forms;   namespace Mock2048 { public partial class Form1 : Fo…


続きを読む

C#で2048ゲームのクローンを作る[その3]

2016年1月28日 (カテゴリ: C#:)

今回は、ゲームサイクルの作成を行いました。 以下の細々とした処理を追加し、1回分のゲーム開始->プレイ->ゲームオーバーまで、1周分のサイクルが作れました。 ゲーム状態の管理を追加(isGameOver変数) KeyDown()に、ゲームオーバー判定を追加 KeyDown()に、1手動かすたびに新セルの生成処理を追加 initBoard()に、盤面の初期化処理(ランダムで2セル生成)を追加 addCell()として、新セルの生成のメソッドを追加 slideCell()に、スライドした結果セルの移動があったか否かを取得できるよう修正ゲーム状態の管理を追加(isGameOver変数) KeyDow…


続きを読む

C#で2048ゲームのクローンを作る[その2]

2016年1月27日 (カテゴリ: C#:)

前回は、上キーを押したときのみの処理を書いていましたが、上下左右のキーに対応しました。 これに伴って、上下左右のキーを押したとき、各セルの移動先を求める関数を切り出しました。 移動先を求めるのはgetDestPos()メソッドで、これを利用してセル移動を行うmoveCell()メソッドを実装しています。 他には、方向指定がC#のKeys列挙体の定義を流用していたため、専用のDIR列挙体を作っているなど、細かいところを修正しました。 using System; using System.Collections.Generic; using System.Data; using System.Wi…


続きを読む

C#で2048ゲームのクローンを作る[その1]

2016年1月21日 (カテゴリ: C#:)

これから勉強をかねて、2048というゲームのクローンをWinFormで作ってみようと思います。 2048って何? 一時期ブームになったスマホのゲームアプリで、パネルをスライドさせながら大きな数字を作っていくゲームです。ルールは説明するより、動画を見てもらったほうが早いです。 個人的にはこのゲーム、結構プレイしていて最高で8192まで行った事があります。 作成ルール 本当は一気に作ってしまいのですが、時間が無いので下記のルールで少しづつ進めていきます。 毎週何か作る。本当な毎日少しづつ進めたいけど仕事があるので、週に3回以上は最低目標とする。 作成中のプログラムをBlogにさらす。本当ならいった…


続きを読む

[C#]WinFormでゲーム作成時、カーソル入力を取得する方法

2016年1月19日 (カテゴリ: C#:)

Windows上で.Net Frameworkを使用してゲームなどを作るとき、キー入力を取得したい場合があります。 このような場合、画面内のTextBoxなどにフォーカスが当たっていると、キー入力をフォーカスが当たったコントロールが処理してしまいます。 このような場合は、FormのKeyPreviewをtrueにするとよいです。 実際のキー入力チェック処理は、FormのKeyDownイベントで取得すると便利です。 using System; using System.Windows.Forms;   namespace Test01 { public partial cla…


続きを読む

[Smarty]PHPでセットしたdefine(“KEY”, “value”)の定数をSmaryで表示する

2016年1月13日 (カテゴリ: PHP:)

PHPでは、定数をdefine()関数で定義することができます。 viewのテンプレートにSmartyを使用している場合、この定数は$smarty.constで取得可能です。 以下、コード例です。 test.php <?php define("MESSAGE", "hello world");<?php define("MESSAGE", "hello world"); test.tpl {$smarty.const.MESSAGE}{$smarty.const.MESSAGE} これで…


続きを読む

C#からVBScriptのコードを呼び出す一番簡単なサンプル

2015年12月23日 (カテゴリ: C#:)

C#やVB.NETでWindowsのプログラムを作っているとき、プラグインのような形で実行内容をカスタマイズしたい場合があります。きちんと作るには.dllを用意した方が良いですが、小さなツールだとそこまで大げさに作りたくない時もあります。 このような場合は、Microsoft Script Controlというライブラリを使うことで、C#のプログラムからVBScript(*.vbs)やJScript(*.js)のコードを外部スクリプトとして、呼び出すことができます。 今回はVBScriptの関数を呼び出せる最低限のプログラムサンプルを作成しました。 プログラム中のコメントに記載していますが、M…


続きを読む

[Rails]form_forで、エラー”ActionView::Template::Error (undefined method xxx_path…”が出るときすべきこと

2015年11月27日 (カテゴリ: Ruby:)

Ruby on Railsでモデルを作り、viewの中でform_forヘルパーメソッドを利用したとき、下記のようなエラーが出る場合があります。 ActionView::Template::Error (undefined method `users_path’ for …) このような場合は、routes.rbに下記の定義を追加するとうまくいくかもしれません。 下記は、Usersモデルを使用している場合の例です。 resources :usersresources :users 参考: http://stackoverflow.com/questions/870677…


続きを読む

[CakePHP]elementの*.ctpファイルには関数を書けない

2015年10月13日 (カテゴリ: PHP:)

CakePHPにはviewの中で共通仕様するパーツをelementとして定義できるがこの中で、phpのfunctionを書くとエラーになる。 elementのctpファイルは、最終的にViewクラス内の_render()で読み込まれるが、この時include()を使っている。 cake/libs/view/view.php class View extends Object { function _render($___viewFn, $___dataForView, $loadHelpers = true, $cached = false) { … i…


続きを読む

[Unity3D]LINQ to GameObjectの基本的な使い方

2015年9月6日 (カテゴリ: Unity:)

Unityで、Hierarychy上のGameObject操作を簡単に行えるAssetとして、LINQ to GameObjectというものがあります。これを使うと、ツリーの中から特定の条件に一致するGameObjectやComponentを検索する処理を簡単に書くことができます。 今回は、LINQ to GameObjectの基本的な使い方を紹介します。 まずは動作確認をかねて、基本的な使い方の説明です。 下記のコードでHierarychy上にある自陣の子孫に当たる全GameObjectを取得します。 LINQ to GameObjectを使うためには、”using Unity.…


続きを読む

[Unity]uGUIで、ボタンのクリックイベントを自動でセットする。

2015年4月12日 (カテゴリ: Unity:)

UnityのuGUIを使用してボタンを作る場合、Unityのインスペクタで設定するか、もしくはボタンのonClick.AddListener()メソッドを使用してイベントハンドラの登録が必要です。 画面中に存在するボタンが少ない場合はこの方法で問題ないのですが、 ボタンの数が多くなってくるとこの作業が大変になってきます。 このような場合は、リフレクションクラスを使うと、 名前合わせでイベントハンドラを自動登録することができます。 下記のコードを使用すると、例えば下記の場合にbtnStartのOnClickイベントとしてbtnStart_Onclick()を割り当ててることができます。 1.Hi…


続きを読む

[Unity3D]uGUIでボタンクリック時のハンドラをスクリプトで登録する

2015年4月12日 (カテゴリ: Unity:)

UnityでuGUIのボタンクリックに対するイベントハンドラを登録したい時は、 AddListenerメソッドを使用します。 using UnityEngine; using UnityEngine.UI; using System.Collections;     public class MainSceneScript : MonoBehaviour { public Button btnStart;   void Start () { // スタートボタンがクリックされたときのハンドラを登録 btnStart.onClic…


続きを読む

[Unity3D]Hierarchyに存在するGameObjectを検索する

2014年11月23日 (カテゴリ: Unity:)

Unityで、スクリプトからGameObjectや、ほかのコンポーネントを検索する方法です。 GameObjectの検索方法 名前を指定して検索する場合 GameObject player = GameObject.Find( "Player" );GameObject player = GameObject.Find( "Player" ); タグを指定して検索する場合 GameObject player = GameObject.FindGameObjectWithTag( "Tag_Player" &#4…


続きを読む