「技術」カテゴリーアーカイブ

【北海道大戦2021】Vectorにて公開しました。

https://www.vector.co.jp/soft/winnt/game/se523424.html

たぶん、最後までプレイ出来るはず・・・。

今回の反省点。

一枚のマップに詰め込んだので、自治体のマスが小さい。

あと、データの扱い方も失敗した。

データのセーブ・ロード機能を実装しているときに気がついた。

オブジェクトにゲッタ・セッタでデータを個別に与えるのでは無く、

オブジェクト作成時に、使用するシングルトンのデータを参照渡しした方が良かった。

今後の予定。

今回はAltseedというライブラリを使用しましたが、

今後はUnity一本で行こうと思う。

広告収入を目論むことが出来るのが一番大きい。

今はほとんどの商用ゲームもUnityが多いしね。

それにUnityなら上の反省点も改善できるかもしれない。

ということで、今後も頑張ります。

【スペック比較】Pixel5a(5G)が発表されました。

こちらのサイトにもスペック詳細が記載されています。

https://store.google.com/jp/magazine/compare_pixel?hl=ja

Pixel4a(5G)との違い

基本的にはPixel4a(5G)に近いですが、

大きな違いとして、

防塵防水機能が追加されています。

水に濡れても大丈夫。

しかし、なくなった物もあります。

Googleフォトの容量無制限がありません

それでもPixel4a(5G)から9000円近く安くなるのですから、かなりお買い得かもしれません。

Pixel5との違い

低価格化しているため、色々とスペックダウンしています。

以下が削除されています。

  • ワイヤレス充電
  • バッテリーシェア
  • RAM8GB→6GB

しかし、

オーディオジャックが付いています。

オーディオジャック信者にはたまらないかもしれません。

価格も23000円近く抑えられているので、お買い得です。

【デザインパターン】Mediatorパターン

複数のオブジェクト(Colleague)の制御を行うのにMediatorクラスを作成し、これを介して制御を行います。

package org.example.mediator;

public interface Mediator {
    public void createColleagues();
    public void colleagueChanged();
}
package org.example.mediator;

public abstract class Colleague {
protected Mediator mediator;
public abstract void setMediator(Mediator mediator);
public abstract void controlColleague();
}
package org.example.mediator;

public class ConcreteColleague1 extends Colleague {
@Override
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}

@Override
public void controlColleague() {
}
}
package org.example.mediator;

public class ConcreteColleague2 extends Colleague {
@Override
public void setMediator(Mediator mediator)
{
this.mediator = mediator;
}

@Override
public void controlColleague()
{
}
}
package org.example.mediator;

public class ConcreteMediator implements Mediator{
private Colleague concreteColleague1;
private Colleague concreteColleague2;

@Override
public void createColleagues() {
concreteColleague1 = new ConcreteColleague1();
concreteColleague1.setMediator(this);
concreteColleague2 = new ConcreteColleague1();
concreteColleague2.setMediator(this);
}

@Override
public void colleagueChanged() {
concreteColleague1.controlColleague();
concreteColleague2.controlColleague();
}
}
package org.example.mediator;

import java.util.Scanner;

public class Main {
public static void main(String[] args)
{
Mediator mediator = new ConcreteMediator();
mediator.createColleagues();
mediator.colleagueChanged();
}
}

【デザインパターン】Iteratorパターン

同じようなオブジェクトを整列させて管理したいときに使用します。

イメージとしてはLISTに近い。

package org.example.iterator;

public interface Iterator {
    public Object next();
    public boolean hasNext();
}
package org.example.iterator;

public interface Aggregate {
    public Iterator iterator();
}
package org.example.iterator;

public class ConcreteAggregate implements Aggregate{
    private Object[] objects;
    private int last = 0;

    public ConcreteAggregate(int maxSize)
    {
        this.objects = new Object[maxSize];
    }

    public void add(Object object)
    {
        objects[last] = object;
        last++;
    }

    public Object getItem(int index)
    {
        return objects[index];
    }

    public int getLast()
    {
        return last;
    }

    @Override
    public Iterator iterator() {
        return new ConcreteIterator(this);
    }
}
package org.example.iterator;

public class ConcreteIterator implements Iterator {
    private ConcreteAggregate aggregate;
    private int index;

    public ConcreteIterator(ConcreteAggregate aggregate)
    {
        this.aggregate = aggregate;
        this.index = 0;
    }

    @Override
    public Object next() {
        Object object = aggregate.getItem(index);
        index++;
        return object;
    }

    @Override
    public boolean hasNext() {
        if(index < aggregate.getLast())
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
package org.example.iterator;

public class Item {
}
package org.example.iterator;

public class Main {
    public static void main(String[] args)
    {
        ConcreteAggregate aggregate = new ConcreteAggregate(10);
        aggregate.add(new Item());
        aggregate.add(new Item());
        aggregate.add(new Item());

        Iterator iterator = aggregate.iterator();
        while(iterator.hasNext())
        {
            Item item = (Item)iterator.next();
        }
    }
}

まぁ、こんなコード書かなくても、すでにIteratorクラスは実装されているので。

Listのオブジェクトからiterator()で取得することもできます。

【UNITY】【農場経営ゲーム】市場画面にボタンを配置

本日の進捗

市場画面にボタンを配置しましたが、ちょっと左寄りにしています。

これは、この画面にもう一つ機能を追加しようと思いまして。

これから画像を作らなくちゃという状態です。

この先の画面にもUnity用に変更しなくちゃいけないので、いろいろめんどくさい。