2018年現在、使っているOS

こんばんは。
さて、皆さんは普段、パソコンではどのようなOSを使っていますか?

私は、時と場合によってパソコンを使い分けているのですが、基本5割はWindows、残り4割はMac、そして残りはLinux。
Windowsの中でもXP,Vista,7,8,10とありますが、私は7,10を使っています。
Macは最新のOS, Mac OS X.
Linuxはたくさんあるのですが、ラズパイ用のRasbian.
あと、近々古いPCにUbuntuもインストールしようと思っています。

私はITのコミュニティに参加することが度々あるのですが、そこでは、Macを使っている方が多いと感じられます。一部の会社だったり、ちょっと前までの状況ではWindowsユーザーが多いのですが、デザイン業に限らずプログラム関連の仕事をしている方々もMacが多く感じられます。
おそらくそれは、ターミナルがあるかないかの違いだと思います。
そして、その中でMicrosoftのOffice製品が使える。+スタイリッシュだからですかね。

 

【PHP】参照渡しと値渡しについて!!!٩( ᐛ )و【ポインタ】

こんにちは!
今日は社内の子に参照渡しと値渡しって何だよ!と聞かれたので、せっかくなのでブログでまとめて書こうと思います!

よく言われている通り、参照渡しは値を共有するイメージで、ポインタと似ています!(参照渡し理解できればポインタも理解できるでしょう!)
値渡しは単に値だけを渡して共有はしないってイメージです。

とりあえず実際にコード書いてどう動くか確認してみましょう!
参照渡しと値渡しはどんなプログラミング言語にもあると思うけど、いつも通りPHPで書きます!٩( ᐛ )و٩( ᐛ )و

まずは値渡しのコード

$atai_A = 'atai_Aの値を渡すよ';
$atai_B = null;

echo "値渡し前のatai_Aの値: $atai_A
";
echo "値渡し前のatai_Bの値: $atai_B
";

// $atai_Aの値渡し
$atai_B = $atai_A;

$atai_B = 'atai_Aの値を渡されたよ';

echo "値渡し後のatai_Aの値: $atai_A
";
echo "値渡し後のatai_Bの値: $atai_B
";

実行結果
値渡し前のatai_Aの値: atai_Aの値を渡すよ
値渡し前のatai_Bの値:
値渡し後のatai_Aの値: atai_Aの値を渡すよ
値渡し後のatai_Bの値: atai_Aの値を渡されたよ

ここはプログラムちょっとでもやった人なら納得だと思います!
atai_Aの中を「atai_Aの値を渡すよ」にして、その値を「atai_B」に入れた後に「atai_Aの値を渡されたよ」で上書きしています。

では本題の参照渡し!٩( ᐛ )و

$sansyo_A = 'sansyo_Aの参照を渡すよ';
$sansyo_B = null;

echo "参照渡し前のsansyo_Aの値: $sansyo_A<br/>";
echo "参照渡し前のsansyo_Bの値: $sansyo_B<br/>";

// $sansyo_Aの参照渡し
$sansyo_B =& $sansyo_A;

$sansyo_B = 'sansyo_Aの参照を渡されたよ';

echo "参照渡し後のsansyo_Aの値: $sansyo_A<br/>";
echo "参照渡し後のsansyo_Bの値: $sansyo_B<br/>";

実行結果
参照渡し前のsansyo_Aの値: sansyo_Aの参照を渡すよ
参照渡し前のsansyo_Bの値:
参照渡し後のsansyo_Aの値: sansyo_Aの参照を渡されたよ
参照渡し後のsansyo_Bの値: sansyo_Aの参照を渡されたよ

はい!さっきと違うのは参照渡し後のsansyo_Aの値ですね!
先ほどと同じように、sansyo_Aの中を「sansyo_Aの参照を渡すよ」にして、その値を「sansyo_B」に入れた後に「sansyo_Aの参照を渡されたよ」で上書きしています!

が!なんとsansyo_Aの値も変わっています!
冒頭で説明した通り、値が共有されていますね!
sansyo_Bはsansyo_Aの実態を持っているイメージです!

参照渡しと値渡しどうでしょうか!とりあえず初めのうちは、こう書いたらこう動くと割り切って進めていくのもありです!
次は関数を使った参照渡しを書こうと思います!

それでは٩( ᐛ )و

【中級者向け】ゲーム設計で学ぶobserverパターン!

こんにちは!
今日はプログラムの設計でよく見るobserverパターンについてだよ!

「こういう処理が走ったら、特定のオブジェクトにこういう処理をさせたい!」って時よくあるよね???ゲーム設計に限らずだと思うけど!

その時にif文case文地獄にならないように設計できるのがobserverパターン!

用意するのはざっくり2つ!

1、「こういう処理が走ったら」を感知するsubject

2、その感知に対してどういう処理を行うかのObserver

subjectがObserverを管理して登録したり削除したり感知するメソッドを用意!
Observerは感知された時に呼び出される処理を書く!

今回は花壇に水をやってそれを感知する花と花壇の水量を観察するクラスを作っていきましょう!
今回はC#で書くかphpで書くか迷ったけど最近phpばっかだからphp(言語は違っても考え方は同じだから!!!)

まずは花壇クラスを作成!上で言うsubjectの部分!
Flowerbed.php

<?php 
/**
 * Subjectクラス+ConcreteSubjectクラスに相当する
 */ 
class Flowerbed { 
  private $waterCnt; 
  private $listeners; 
  public function __construct() { 
    $this->listeners = array();
    $waterCnt = 0;
  }

  /**
  * 植物に水を与えたときに呼ぶメソッド
  */
  public function addWater()
  {
    $this->$waterCnt++;
    $this->notify();
  }

  /**
  * 水を与えた回数を取得
  */
  public function getWaterCnt()
  {
    return $this->$waterCnt;
  }

  /**
  * Observerを登録するメソッド
  */
  public function addListener(PlantListener $listener)
  {
    $this->listeners[get_class($listener)] = $listener;
  }

  /**
  * Observerを削除するメソッド
  */
  public function removeListener(PlantListener $listener)
  {
    unset($this->listeners[get_class($listener)]);
  }

  /**
  * Observerへ通知するメソッド
  */
  public function notify()
  {
    foreach ($this->listeners as $listener) {
      $listener->update($this);
    }
  }
}
?>

次はインターフェース部分!抽象メソッドを定義するよ!
PlantListener.php

<?php
interface PlantListener {
    public function update(Flowerbed $flowerbed);
}
?>

次は花壇の水量を観察するクラスを作っていこう!(上で言うObserverのとこ!)
AmountWater.class.php

<?php
  require_once 'PlantListener.php';
/** 
* Observerクラスに相当する 
*/
class AmountWater implements PlantListener { 
  public function __construct() { } 
  public function update(Flowerbed $flowerbed) {
   echo '現在の水量は'.$flowerbed->getWaterCnt().'です';
 }
}
?>

次は具体的な花のクラスを作るよ!今回はアサガオと向日葵!
Asagao.class.php

<?php
require_once 'PlantListener.php';

/**
 * Observerクラスに相当する
 */
class Asagao implements PlantListener
{
    public function __construct(){}
    public function update(Flowerbed $flowerbed)
    {
     echo 'アサガオが水をもらいました';
    }
}
?>

Himawari.class.php

<?php
require_once 'PlantListener.php';

/**
 * Observerクラスに相当する
 */
class Himawari implements PlantListener
{
    public function __construct(){}
    public function update(Flowerbed $flowerbed)
    {
      echo '向日葵が水をもらいました';
    }
}
?>

これで準備おK! あとは水をあげるボタンを用意してそれぞれのオブジェクトをよぼう!
observer_client.php

<?php
 require_once 'Flowerbed.php';
 require_once 'Himawari.class.php';
 require_once 'Asagao.class.php';
 require_once 'AmountWater.class.php'; 
//花壇と花を作成してSubjectに登録 
function createCart() { 
 $flowerbed = new Flowerbed(); 
 $flowerbed->addListener(new Himawari());
 $flowerbed->addListener(new Asagao());
 $flowerbed->addListener(new AmountWater());
 return $flowerbed;
}

session_start();
$flowerbed = isset($_SESSION['flowerbed']) ? $_SESSION['flowerbed'] : null;

if (is_null($flowerbed)) {
 $flowerbed = createCart();
 $_SESSION['flowerbed'] = $flowerbed;
}

$mode = (isset($_POST['mode']) ? $_POST['mode'] : '');

//水をあげた時にFlowerbedのaddWater関数を呼ぶ
if ($mode != '') {
 $flowerbed->addWater();
}

?>
<form method="post" action="">
 <input type="hidden" name="mode" value="add">
 <input type="submit" value="水をあげる">
</form>

これでobserver_client.phpを開いて水をあげれば下記のようになるよ!

今回は文字を表示させているだけだけど、実際に走らせたい処理を書いてあげるといいよ!
花が増えたり、観測者を増やしたいなら別途そのオブジェクトを管理するファイルを作って登録させるだけ!
これで条件分岐地獄にはならずにオブジェクトごとに管理もしやすくてバグも起こりにくいよ!

ちょっと長かったけどぜひこの設計やって見てね!
以上!河条でした^o^

新作アプリ「かわの君、いたずらをする」をリリースしました!【脱出ゲーム】

脱出系アプリ!作成しました〜^o^

かわの君、いたずらをする!

かわの君は学校でいたずらをしようとしています。
ステージに配置されたアイテムを使って、いたずらを成功させましょう!

アイテムはドラッグ&ドロップで使えるよ!

  

ぜひプレイしてみてください!

「かわの君、いたずらをする」のダウンロードはこちらから!!!

App Storeからダウンロード googleplayからダウンロード

【アドフリくん】バナーやインタースティシャルを表示させるソースコード!【Unity】【C#】

こんばんは!河条です!(^o^)

今回はアドフリくんのバナーやインタースティシャルを表示させるソースです!
なぜかJavaScriptでの方法ばかりだったので、C#でのソースを公開しようと思います!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AdfurikunPlay : MonoBehaviour {
	enum SCENE_STATE {
		MAIN,
		QUIT_WAIT,
		QUIT,
		END
	}
	private SCENE_STATE sceneState = SCENE_STATE.MAIN;
	private bool initialized = false;

	#if UNITY_IPHONE
	private string ADFURIKUN_APPID  = "********************"; 
	#elif UNITY_ANDROID
	private string ADFURIKUN_APPID  = "********************"; 
	#else
	private string ADFURIKUN_APPID = "********************";
	#endif

	// Use this for initialization
	void Start () {
		//インタースティシャル広告の表示
		ShowAdfurikunIntersAd(0);
		//バナーの表示
		ShowAdfurikunBannerAd (0,true);
	}
	
	// Update is called once per frame
	void Update () {
		if (!initialized) {
			initialized = true;
			GameObject obj = GameObject.Find("AdfurikunUtility");
			if (obj != null) {
				AdfurikunUtility au = obj.GetComponent<AdfurikunUtility>();
				if (au != null) {
					au.addCustomSizeAd(ADFURIKUN_APPID, 100, 400, AdfurikunUtility.AdSize.ICON, AdfurikunBannerAd.AndroidTransition.NOTHING, true);
				}
			}
		}

		switch (this.sceneState) {
		case SCENE_STATE.MAIN:
			break;
		case SCENE_STATE.QUIT_WAIT:
			this.sceneState = SCENE_STATE.QUIT;
			break;
		case SCENE_STATE.QUIT:
			this.sceneState = SCENE_STATE.END;
			Application.Quit();
			break;
		case SCENE_STATE.END:
			break;
		}
	}

	/// 

<summary>
	/// バナーの表示と非表示
	/// </summary>


	/// <param name="index">Index.</param>
	/// <param name="show">trueで表示、falseで非表示</param>
	public void ShowAdfurikunBannerAd (int index, bool show) {
		GameObject obj = GameObject.Find("AdfurikunUtility");
		if (obj != null) {
		AdfurikunUtility au = obj.GetComponent<AdfurikunUtility>();
			if (au != null) {
				if (show) {
				au.showBannerAd(index);
				} else {
				au.hideBannerAd(index);
				}
			}
		}
	}

	/// 

<summary>
	/// インタースティシャルの表示
	/// </summary>


	/// <param name="index">Index.</param>
	public void ShowAdfurikunIntersAd (int index) {
	GameObject obj = GameObject.Find("AdfurikunUtility");
		if (obj != null) {
			AdfurikunUtility au = obj.GetComponent<AdfurikunUtility>();
			if (au != null) {
				au.showIntersAd(this.gameObject, index);
			}
		}
	}

	/// 

<summary>
	/// インタースティシャル閉じる
	/// </summary>


	/// <returns><c>true</c> if this instance cancel adfurikun inters ad; otherwise, <c>false</c>.</returns>
	public void CancelAdfurikunIntersAd () {
	GameObject obj = GameObject.Find("AdfurikunUtility");
		if (obj != null) {
			AdfurikunUtility au = obj.GetComponent<AdfurikunUtility>();
			if (au != null) {
				au.cancelIntersAd();
			}
		}
	}
}

コメントにある通りですが、Start関数の中に、ShowAdfurikunIntersAdとShowAdfurikunBannerAdを呼んで、広告を表示させています!

Update関数の中では”AdfurikunUtility“ゲームオブジェクトをFindしているので、シーン上にちゃんとあることを確認してください!
また、sceneStateでシーンの状態をUpdate関数の中で確認することも忘れずに!!

基本的に公式にあるJavaScriptのソースをそのままC#に変換しただけです!
C#でどうしても組み込みたいという方は参考にしてみてくださいー^o^

以上!河条でした!