Yuki Nakata's Blog

天才 中ちゃん♪

2015年08月

processinglifegame
以前、はむくんのライフゲームの世界を再現しようでライフゲームを再現しました。

今回はprocessingを使ってライフゲームを作成しましょう。

といっても他の人が作ってくれていますので、それを参考に改造していきます。

新米コンサルの日常 のライフゲームを改造しています。

このライフゲームでは2つのモードを設定しています。

セルを作成したり、削除するEditモードとライフゲームを動かすPlayモードです。

遊び方
起動すると最初にエディットモードになります。
マウスをクリックしてセルを作成してください。
スペースキーを押すとプレイモードとなります。
再びスペースキーを押すとプレイモードとエディットモードを切り替えることができます。

ゴスパーのグライダー銃も再現することができますよ。楽しめます。

final int SIZE_OF_CELL = 20;
final int FRAME_SIZE_OF_X = 800;
final int FRAME_SIZE_OF_Y = 800;
int num_of_row = FRAME_SIZE_OF_Y / SIZE_OF_CELL; //gyou  
int num_of_col = FRAME_SIZE_OF_X / SIZE_OF_CELL; //retsu
int num_of_cell = num_of_row * num_of_col;
Cell[][] cells = new Cell[num_of_row][num_of_col];
boolean game_state = false;


void setup(){
  size(FRAME_SIZE_OF_X, FRAME_SIZE_OF_Y);
  frameRate(20);
  for(int row=0; row<num_of_row; row++){
    for(int col=0; col<num_of_col; col++){
      int position_x = col * SIZE_OF_CELL;
      int position_y = row * SIZE_OF_CELL;
      cells[row][col] = new Cell(position_x, position_y, false);
    }
  }
  print("Edit Mode");
}

class Point{
  int row, col;
  Point(int my_row, int my_col){
    row = my_row;
    col = my_col;
  }
  int getRow(){
    return row;
  }
  int getCol(){
    return col;
  }
}

class Cell{
  int x, y;
  boolean state;

  Cell(int my_x, int my_y, boolean s){
    x = my_x;
    y = my_y;
    state = s;
  }
  
  void changeState(){
    state = !state;
  }
  
  void appear(){
    if(state){
      fill(34, 139, 34);
      //fill(50, 50, 50);
    }else{
      fill(50, 50, 50);
      //fill(255, 255, 255);
    }
    rect(x, y, SIZE_OF_CELL, SIZE_OF_CELL);
  }
}

void check_life_and_death(){
  ArrayList<Point> points = new ArrayList<Point>();
  for(int row=0; row<num_of_row; row++){
    for(int col=0; col<num_of_col; col++){
      //jibun no mawari check
      int num_of_alivers = 0;
      for(int r=-1; r<=1; r++){
        for(int c=-1; c<=1; c++){
          if(row+r<0 || row+r>=num_of_row || col+c<0 || col+c>=num_of_col){
            continue;
          } 
          if(cells[row+r][col+c].state){
            num_of_alivers++;
          }
        }
      }
      if(cells[row][col].state){ //jibun no bun wo hiku
        num_of_alivers--;
      }
      //joutai change no note
      if(cells[row][col].state){
        if(num_of_alivers<=1  || num_of_alivers>=4){
          points.add(new Point(row, col));
        }
      }else{
        if(num_of_alivers==3){
          points.add(new Point(row, col));
        }
      }
    }
  } 
  for(int i=0; i<points.size(); i++){
    Point point = points.get(i);
    int point_row = point.getRow();
    int point_col = point.getCol();
    cells[point_row][point_col].changeState();
  }
}

//random setup
void randomSetup(){
  //size(FRAME_SIZE_OF_X, FRAME_SIZE_OF_Y);
  frameRate(20);
  for(int row=0; row<num_of_row; row++){
    for(int col=0; col<num_of_col; col++){
      int position_x = col * SIZE_OF_CELL;
      int position_y = row * SIZE_OF_CELL;
      float coin_seed = random(1);
      boolean coin;
      if(coin_seed>0.8){
        coin = true;
      }else{
        coin = false;
      }
      cells[row][col] = new Cell(position_x, position_y, coin);
    }
  }  
}



void keyPressed(){
  
  
  if(key == ' '){
    game_state = !game_state;
  }
  
  if(game_state) {
    print("Play Mode  ");
  } else {
    print("Edit Mode  ");
  }
}

void mouseClicked(){
  int cell_col = mouseX/SIZE_OF_CELL;
  int cell_row = mouseY/SIZE_OF_CELL;
  cells[cell_row][cell_col].changeState();
  
  print("(" + cell_col + ",");
  print(cell_row + ") ");
}

void draw() {
  if(!game_state){
  }else{
    check_life_and_death();
  }
  for(int row=0; row<num_of_row; row++){
    for(int col=0; col<num_of_col; col++){
      cells[row][col].appear();
    }
  }
  //delay(500);
}

sangokusenki


あの三国戦記がウェブ版になって帰ってキタ━━━━(゚∀゚)━━━━!!

三国志のキャラが登場するベルトアクションゲームです。 

昔アーケードゲームで何度かやりました。難しすぎて1面ボスで手こずりました。

10年前の記憶が呼び戻されます。

今度はブラウザゲームなので当然タダです。 

さっそくアカウントを登録してキャラを作成しましょう。私は孔明先生を選びました。

攻撃ボタンはJボタン、ジャンプはKボタンです。 

孔明先生のヘンテコ移動も健在です。

1時間ほどプレイしましたが、さくさく進みます。

というかヤダ、コレ。

ゲームが簡単すぎます。敵がボス、雑魚ともに弱すぎ。

システムは凝っています。武器や防具をレベルアップできたり、仲間を連れていったり、階級があがったり、

ところが肝心のゲームが簡単すぎ。

攻撃ボタンを連打しているだけで先に進みます。

誰にでも楽しめるようにはなっていますが、1時間で飽きてしまいました。

先に進んだら面白くなるのでしょうか?




 



 スーパーでお菓子を買うときに結構悩みます。

たいていのお菓子にショートニングが入っているからです。

本当はブルボンとかグリコとかのお菓子を買いたいんですけれどね。

裏を見るとショートニングやらマーガリンだとか入っていて、どうしようかなって買うのをためらいます。

ネットでショートニングの入っていないお菓子を検索してもめぼしいのがないわけで、

そういう時はやっぱりアマゾン先生になってしまうわけです。

アマゾンでクッキーと検索するとランキング1位なのが、このコペンハーゲン ダニッシュミニクッキーです。

小さいクッキーが87枚入っています。

ずっと1位をキープしている定番クッキーでして購入してみました。

甘さ控えめで素朴な味です。

日本の甘ーいお菓子に慣れている人には物足りないかもしれません。

一度にボリボリ全部食べてしまうのではなく、コーヒーや紅茶と合わせて数枚ずつ食べていくというスタイルだと思われます。



原材料の写真も撮っておきました。

小麦粉、砂糖、植物油脂、ブラウンシュガー、ココナッツ、食塩、 香料、 膨張剤です。

やはりショートニングは入っていません。

缶もおしゃれです。テーブルの上にこういう缶が置いてあったらセンス良く見えます。

健康志向な人には良いと思います。 

 ショートニングの入っていないお菓子2 Loackerのウエハース

windows10に無料のセキュリティーソフト Avast!をインストールしましょう。

windows10にはデフォルトでMicrosoftのWindows Diffenderというセキュリティーソフトが入っています。

しかし ウイルス検出率、マルウェア検出率いずれもAvast!に劣ります。

Avastは正式にwindows10対応になりましたのでインストールしておきましょう。

Avast!には有料版もありますが、普通にネットを使っているぐらいでしたら無料版で十分です。

https://www.avast.co.jp/index にアクセスします。

下にさがっていって左側、無料アンチウィルスの無料ダウンロードをクリックしてください。

ファイルのダウンロードが始まります。
 avast1
ダウンロードしたファイルを実行してください。

avast2
標準インストールをクリック。

avast3

続行をクリック。

avast4

インストールが始まります。しばらく待ちましょう。

avast5

インストールが終わりました。

もちろん自動更新されます。これで安心ですね。

お疲れ様でした。
 

Instagram 使っていますか?

インスタグラムとは写真SNSです。私も最近始めました。

写真をアップロードするだけ、フェイスブックよりお気軽なので始めやすいと思います。

 インスタグラムの写真をブログやホームページに張り付ける方法を解説しています。

5分もあればできるのでやってしまいましょう。

 websta
http://websta.me/ にアクセスしログインします。

ログインはInstagramのアカウントとパスワードを使ってログインできます。

websta2

http://websta.me/tools に飛んで、@usernameのところにInstagramのアカウントを入力し、Generate Codeをクリック。

HTMLに埋め込むコードが発行されます。それをブログやホームページに張り付けましょう。

このブログでは右サイドバーに張り付けています
 
写真をパシャパシャ撮ってインスタグラムにアップしよう。
 

Z120BW_

Raspberry PI2のスピーカーとしてロジクールのZ120BWを買いました。

JBL PEBBLESと悩みましたが、こっちにしました。

電源はUSB端子から、音はステレオミニジャックから取ります。

つなぐだけで音が出ます。

USB機器をつなぐとラズベリーパイが落ちることがあるようですが、これは大丈夫です。

音量をMAXにしても問題ありません。

音量についてはラズベリーパイの方で最大にしておいて、スピーカーの方でコントロールするといいです。

ボリュームの調節はalasamixerコマンドで行います。

alsamixer

+キーで音量を上げ、-キーで下げます。 ボリュームを最大にしておきましょう。 Escキーで終了。

 
我が家のラズベリーパイちゃん。

小型コンピューターには小型スピーカーが似合います。

1500円スピーカーでこれは素晴らしいです。 

はむくんさんのライフゲームの世界が素晴らしいです。

自分でも簡単にできますので再現してみましょう。

Gollyというソフトをダウンロードします。最新版はバージョン2.7です。

Golly ダウンロード

実行してみるとわかりますが、Patterns -> Life の中にライフゲームのサンプルが入っています。

Golly


ライフゲームの世界1
 
周期416の X型をしたgunです。
Patterns -> Life -> Guns ->  2c5-spaceship-gun-p416.rle

ライフゲームの世界2 複雑系

Oscillators 振動子編
Patterns -> Life -> Osillators -> DRH-oscillators.rle

ライフゲームの世界3 複雑系

宇宙船編
Patterns -> Life -> Spaceships ->smallest-low-period.rle
Patterns -> Life -> Spaceships ->adjustable-Corder-lineship.rle
Patterns -> Life -> Spaceships ->adjustable-Corder-lineship.rle

ライフゲームの世界4 複雑系

Synthesis編 合成
Patterns -> Life -> Synthesis -> make-harbor.rle
Patterns -> Life -> Synthesis -> make-p11.rle
Patterns -> Life -> Synthesis -> make-p33.rle

ライフゲームの世界5 複雑系

休憩編
Golly2

横に8192セル並べるとフラクタル図形を作ることができます。
適当な名前でrleファイルを作成し、メモ帳で開いてみてください。
次をコピーで張り付けて保存してください。

#CXRLE Pos=-52,0
x = 8192, y = 1, rule = B3/S23
8192o!

 
ライフゲームの世界6  複雑系

Puffer編 しゅぽしゅぽ列車
Patterns -> Life -> Puffers -> puffer-train.rle
Patterns -> Life -> Puffers -> line-puffer-superstable.rle
Patterns -> Life -> Puffers -> c4-diagonal-puffer.rle
Patterns -> Life -> Puffers -> zigzag-wickstrecher.rle

ライフゲームの世界7  複雑系

Breeder編 移動式のグライダー銃
Patterns -> Life -> Breeders -> breeder.lif
Patterns -> Life -> Breeders -> c4-diag-switch-engines.rle
Patterns -> Life -> Breeders -> spacefiller.rle
Patterns -> Life -> Guns -> golly-ticker.rle

ライフゲームの世界8  複雑系

メタピクセル編
ついにライフゲームでライフゲームを作ります。圧巻。
何を言ってるかわからねえが、そういうことです。
Patterens -> HashLife -> metapixel-gallaxy.mc.gz
Patterens -> HashLife -> metapixel-p216-gun.mc.gz
メタピクセルは遅いので+キーを押してステップ数を上げて、早回ししてください。

ライフゲームの世界 最終回

自己複製編
ジョン・フォン・ノイマンとかいう化け物が登場します。
彼は頭の中だけで自己複製するコンピューターを作り上げました。

ライフゲームのように格子状で単純な規則をあてはめる、そのようなモデルをセルオートマンという。
つまりライフゲームはセルオートマンの中の一つだ。

gollyの中にセルオートマンのパターンは見つかりませんでした。探しておきます。
簡単に再現できますので試してみてください。













↑このページのトップヘ