lol play

書評や技術ネタ及びイラストについての発信

Swift電卓


今日はすることがなかったので、swiftを使って電卓みたいなものを作りました(´・ω・`)

//
//  main.swift
//  calc
//
//  Created by RockBooker on 6/3/16.
//  Copyright © 2016 RockBooker. All rights reserved.
//

import Foundation

enum Result {
    case Success(Int)
    case Error(String)
}

let operators: Dictionary<String, (Int, Int) -> Int> = [
    // 添字の指定に応じて、関数を設定する
    "+": {n, m -> Int in n + m},
    "-": {n, m -> Int in n - m},
    "*": {n, m -> Int in n * m},
    "/": {n, m -> Int in n / m},
]

let usage = "USAGE: calc {num} {+|-|*|/} {num}"

func calc(op1: Int?, _ op2: Int?, with oprand: String) -> Result {
    if op1 != nil && op2 != nil {
        let n1 = op1!
        let n2 = op2!
        
        let calcFunction = operators[oprand]!
        let ans = calcFunction(n1, n2)
        
        return Result.Success(ans)
    } else {
        return Result.Error("Error!!")
    }
}


if Process.arguments.count != 4 {       // 引数の数には自身を含めることに注意する
    print(usage)
    exit(0)
}

let op1 = Int(Process.arguments[1])     // 左辺の数
let op2 = Int(Process.arguments[3])     // 右辺の数
let oprand = Process.arguments[2]       // 計算式

let result = calc(op1, op2, with: oprand)
switch result {
case let .Success(ans):
    print("ANSWER: ", ans)
case let .Error(msg):
    print("ERROR: ", msg)
}

swiftは見通し良く書けるので気に入っています。

iPhone6+, 6, 5のゲーム素材を作成する

 

最近iPhoneのゲームを作りたいと思って色々しているところです。

プログラミング自体はC言語から始め、Python, Ruby, C++, Scheme, java, Swiftと色々やってきてまぁ特に足りないところはないかなというところまできました。

今はイラストですね。やはり何かをデザインできなければプログラミング自体ではなにもできない。

ということでワコムペンタブレット買いました( *`ω´)

 

 

 

 

できないくせに見栄でMサイズを買ったのですが、僕のパソコンmacbook airなので完全に選択ミスをしました。

マッピング(ペンタブレットの実際に使える範囲を決定)も小さくしてますし。

 

まぁそんなこんなでゲーム素材を作る環境が整ったのですが、さてサイズはどうすればいいのだろうかと。

調べてみると、機種ごとに異なるらしい。

 

iPhone 5            640×1136
iPhone 6            750×1334
iPhone 6 Plus    1242×2208

 

こんな感じ。

まぁiPhone4を対応させる余力はないなと思ったので5以降を対象としても三つそれぞれ必要とのこと。

そんで調べても他の人がどうやっているのかがいまいちわからない。

最初はClip studio paint開いてiPhone6 Plus用の素材を作ってからpngに保存して、

サイズをiPhone6用にしてpngにして保存してiPhone5にしてpng...てな具合でやればいいかなと思っていました。

 

面倒臭い‥‥

バカみたいなんで何かいい方法ないのかなーと思って調べてみると、ImageMagickという画像編集コマンドラインツールを発見。

www.imagemagick.org

 

brew install ImageMagick

 

としてインストールするとconvertコマンドが使えるようになる。

このコマンドのオプションで、-geometryというものがありこれで各機種のサイズを指定してやれば一発というわけである。

 

とまぁこんな具合で作ったスクリプトがこれ。

 

# Usage: [ command "picture of @3" ]

 

target="/Users/rockbooker/Desktop/スケッチ/"$1".png"

file1="/Users/rockbooker/Desktop/スケッチ/"$1"@1.png"

file2="/Users/rockbooker/Desktop/スケッチ/"$1"@2x.png"

file3="/Users/rockbooker/Desktop/スケッチ/"$1"@3x.png"

 

 

convert -geometry 640x1136 $target $file1

convert -geometry 750x1334 $target $file2

tmp=$target

mv $target $file3

mv $file1 $tmp

 

シェルスクリプトはあんまり得意じゃないのでこんなのです笑

これで楽にはなったかな。

 

 

 

もっと楽ちんな方法知っている方はぜひ教えてくださいm(_ _)m

以上です!!

メタプログラミングRuby

 

メタプログラミングとはなんなのか?

それについて知る最も分かりやすい本だと思われる。

 

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

 

 さすがオライリー書籍あってウィットやユウモアな表現は値段に見合う満足感を与えてくれる。

この本は、プログラミング言語を多少は知っている必要はあるがrubyについての知識は必要ない。

主人公と職場の先輩のボブとのプログラミングリレーである。

Rubyにおける

クラスとは何か?

モジュールとは何か?

インスタンスとは?

クラスメソッドとインスタンスメソッドとは?

動的とはなんなのか、について余すことなく説明しており、他言語でも応用がきくかと。

僕はいまSwiftに夢中だけど、クロージャの組み立て方でRubyの事をいつも思い出している。

 

とてもいい本です。