モラタメで購入しました。
いやーおうちご飯が増えたからこういうの嬉しい。
しかも、よだれ鶏ソースって、昔買ったことあるし。
おいしいんよ、これ。
まずはプルコギ。
裏面の作り方に従って調理。
よだれ鶏も、裏面の作り方に従って調理しました。
1時間も熱を加えただけあって、とってもジューシーで美味しい。
コチュジャンはいま食材買い出しに行けてないからちょっと待ってな。
![日々の出来事ランキング](https://i0.wp.com/taki-lab.site/bocci/wp-content/uploads/2019/12/a72f208ffbb7386a5edac6282ebb8d1b.png?w=474)
こちらのサンプルプログラムを入力します。
https://github.com/raspberrypilearning/astro-pi-guide/blob/master/program.md
エディターは何でも良いらしい。
from sense_hat import SenseHat
sense = SenseHat()
sense.show_message("Hello my name is Tim Peake")
言語はpythonですな。
実行に必要な物はすでに入っていました。
実行するとこうなりました。
ただ、デフォのエディターだと使いづらいので、ラズパイ用のvscodeをインストールします。
インストール方法はこのやり方で行けた。
https://note.com/yoshiteru11/n/n6521e33ca456
$ wget -qO - https://packagecloud.io/headmelted/codebuilds/gpgkey | sudo apt-key add -
$ sudo su
# . <( wget -O - https://code.headmelted.com/installers/apt.sh )
# exit
最新ソースはこちら。
https://github.com/takishita2nd/Picross
とりあえず画面を作ってみます。
クラス構成とか考えずに、
この画像を作成し、これを10×10に並べてみました。
class Program
{
[STAThread]
static void Main(string[] args)
{
PicrossUI picross = new PicrossUI();
picross.Run();
}
}
class PicrossUI
{
private const int setPositionX = 200;
private const int setPositionY = 200;
public PicrossUI()
{
}
public void Run()
{
asd.Engine.Initialize("ピクロス解析ツール", 1000, 800, new asd.EngineOption());
// 下地
var background = new asd.GeometryObject2D();
asd.Engine.AddObject2D(background);
var bgRect = new asd.RectangleShape();
bgRect.DrawingArea = new asd.RectF(0, 0, 1000, 800);
background.Shape = bgRect;
for(int row = 0; row <10; row++)
{
for(int col = 0; col <10; col++)
{
var square = new asd.TextureObject2D();
square.Texture = asd.Engine.Graphics.CreateTexture2D("square.png");
square.Position = new asd.Vector2DF(row * 32 + setPositionX, col * 32 + setPositionY);
asd.Engine.AddObject2D(square);
}
}
while (asd.Engine.DoEvents())
{
asd.Engine.Update();
}
asd.Engine.Terminate();
}
}
数独の時は9×9のマスの画像をあらかじめ作成し、表示させていましたが、
これは数独が9×9で固定だからできるためです。
今回はマスの数が可変になるため、1個のマスを並べて使用したいと思います。
中の線が太く見えますが、マスを小さくすればそんなに気にならないかと思います。
ただ、マスのサイズを小さくしすぎると、このマスの中に後々数字を入れることになるので、あまり小さくできません。
今回は32×32ピクセルで作成しましたが、これが妥当なところでしょう。
考慮すべき所は、数字が入るところと色を塗るところが分かるように中の色を変えた方が良いかもしれません。
そこら辺を考慮した上で、クラス構成を考えてみたいと思います。
まずは、マスのサイズを可変に変更できるように作成していきましょう。
これをラズパイに装着します。
これのマニュアルはgitHubにアップされています。
https://github.com/raspberrypilearning/astro-pi-guide
英語です。
チュートリアルに従って装着します。
https://github.com/raspberrypilearning/astro-pi-guide/blob/master/assemble.md
1.GPIO pin extension headerをラズパイに取り付けます。
2.六角柱のやつをラズパイに取り付けてしたからネジ止めします。
3.SENSE HATを取り付けます。
4.最後に上からネジ止めします。
電源ON!
正しくできたかどうか、本当に動くかどうか、次回はサンプルプログラムを作成してみます。
数独解析ツールはほぼ出来上がってしまったので、
今度はピクロス解析ツールを作成してみようと思います。
自信は無いです。
でもできるところまでやってみます。
数独の時はロジック→UIの順に作成しましたが、今回はUI→ロジックの順に作成していこうと思います。
まず、どんなUIにしようかまとめてみます。
ピクロスは絵のサイズが同じとは限らないので、サイズをフレキシブルに変更できるようにしなければなりません。
あと、数字入力は数独の時に適用したパレット方式が意外と使い勝手が良かったので、今回もその方式を取り入れようと思います。
問題データをセーブ/ロードできるようにした方が良いかなぁ(デバッグが楽)
まぁ、とりあえずやってみます。
さぁ、ラズパイをセットアップするぞ。
まずはマイクロSDカードにラズパイOSをインストールします。
マイクロSDカードをPCに接続して、以下のサイトからインストールツールをダウンロードします。
実行するとこんな画面が表示されるので、一番左のリストボックスから使用するOSを選びます。
今回はデフォのRASBIANで。
真ん中のリストボックスでは、インストール先のメディアを選択します。
これは当然SDカードを選択。
この二つを選択すると、一番右のWRITEボタンが有効になります。
WRITEボタンを押すとSDカードにOSが書き込まれます。
終わりました。
マイクロSDカードをラズパイに装着し、電源以外のケーブルなどを接続。
最後に電源ケーブルを接続します。
そうすれば勝手にラズパイが立ち上がります。
立ち上がりました。
初回セットアップに言語設定、Wi-Fi設定、アップデートを行って設定完了。
これで自動的に日本語も使用できます。
あと、設定を変えることろは、VNCを有効にする。
Raspberry Piの設定からVNCの項を有効にすると、他PCからVNCで接続できます。
基本的にはVNC接続で使用していきたいと思います。
さて、次回はアタッチメントをつなげてみましょうか。
まぁいろいろありましたが、数独解析ツールが完成しましたので、ご報告いたします。
ダウンロードはこちら(gitHub)
https://github.com/takishita2nd/sudokuGUI/releases/tag/1.02
zipファイルを解凍してsudokuGUI.exeを実行してください。
操作はマウスでクリックするだけなのでわかりやすくなっていると思います。
何かありましたらコメントください。
あと、ネタもください。
前回までの状況はこちら。
最新ソースはこちら(gitHub)
https://github.com/takishita2nd/sudokuGUI
やることの三つ目を解決します。
今のままでは、入力データが不完全な状態で解析ボタンを押してしまうと、アプリが固まってしまいます。
原因は、仮置きロジックの再起処理が無限に実行されてしまっているようです。
なので、仮置きロジックが一定回数呼ばれたら失敗として処理終了させてしまいましょう。
class Sudoku
{
private Square[,] _square;
private int kariokiCount = 0;
private Square doKarioki(Square[,] squares)
{
Square ret = null;
List<Square> kariokiList = searchKariokiSquare(squares);
kariokiCount++;
if(kariokiCount >= 100)
{
return null;
}
続いて、エラーを表示させる処理を追加します。
エラーは新しいオブジェクトを画面に追加して表示させます。
なので、フォントデータも作り直しです。
class Message : ObjectBase
{
private string _text;
private const int fontOffsetX = 0;
private const int fontOffsetY = 0;
public Message(int x, int y, string text)
{
width = 256;
height = 64;
_x = x;
_y = y;
_text = text;
_backTexture = new asd.TextureObject2D();
_backTexture.Position = new asd.Vector2DF(_x, _y);
_valueText = new asd.TextObject2D();
_valueText.Text = _text;
_valueText.Font = Resource.getTextFont();
_valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
}
public void show()
{
_valueText.Text = _text;
}
public void hide()
{
_valueText.Text = "";
}
}
テクスチャーは使わないので、書かなくても良かったんですけどね。
// メッセージ
Message message = new Message(10, 640, "解析に失敗しました");
asd.Engine.AddObject2D(message.getTextObject());
message.hide();
こんな感じでAltseedエンジンにテキストを追加します。
最後に、このメッセージの表示をON/OFFする処理を追加します。
class Button : ObjectBase
{
public virtual void onClick(SquareObject[,] squareObjects, Message message)
class AnalyzeButton : Button
{
public override void onClick(SquareObject[,] squareObjects, Message message)
{
if(enable == false)
{
return;
}
Square[,] squares = new Square[9, 9];
for (int row = 0; row < 9; row++)
{
for (int col = 0; col < 9; col++)
{
squares[row, col] = new Square(squareObjects[row, col].getValue(), row, col);
}
}
Sudoku sudoku = new Sudoku(squares);
var ret = sudoku.run();
if(ret == null)
{
message.show();
return;
}
for (int row = 0; row < 9; row++)
{
for (int col = 0; col < 9; col++)
{
squareObjects[row, col].setValue(ret[row, col].GetValue());
}
}
}
}
class ClearButton : Button
{
public override void onClick(SquareObject[,] squareObjects, Message message)
{
message.hide();
for (int row = 0; row < 9; row++)
{
for (int col = 0; col < 9; col++)
{
squareObjects[row, col].setValue(0);
}
}
}
}
bool isButtonClisk = false;
foreach (Button button in buttons)
{
if (button.isClick(pos))
{
button.onClick(squareObjects, message);
isButtonClisk = true;
}
}
実装に悩みましたが、onClickにmessageオブジェクトを渡すことで対応させました。
もっとスマートな方法があると思うんですが、次回の開発までの課題にします。
たぶん、ほぼほぼこれで完成だと思います。
買いました。
Raspberry Pi 4 Model B 2GB RAM。
これの一個前がRaspberry Pi 2 Model Bだったから、それより大幅なパワーアップです。
メモリもプロセッサーも強化されていますが、わかりやすいところで言うと、
HDMIポート1個から、Micro HDMIのポート2つになりました。
4K出力もできるみたいよぉ。
Micro HDMI対応のケーブルなんてほとんど出回っていないので、本体と一緒に注文しました。
Micro HDMI – HDMIのケーブルです。
これが無いと、ディスプレイに画面を表示できません。
そして、もう一つ、左側にあるのが電源です。
端子はUSB-Cなのですが、これを動かすのに3Aの出力が必要なので、一般に出回っているUSB-Cケーブルでは動きません。
これも本体と同時に対応電源を注文しました。
あとは、ストレージとなるMicro SDカード。
これだけでこのラズパイは動かせるのですが、ついでなので、もうちょっと遊べるパーツを買いました。
このボードに温度計、湿度計などなど、あと右下にジョイスティック、8×8のLEDディスプレイが付いているパーツです。
ラズパイ4でも動くはず。
さあ、セットアップするぞ。
この一式はこちらのサイトで購入しました。
https://raspberry-pi.ksyic.com