games::* - perlで 「ゲーム」しよう #hokkaidopm
DESCRIPTION
2013/3/9 に開催された Hokkaido.pm#9 で発表したトークのスライドです。TRANSCRIPT
Games::* - Perlで「ゲーム」しよう
尾形 鉄次 (OGATA Tetsuji)
Twitter: @xtetsuji2013/3/9 Hokkaido.pm#9
自己紹介
• 尾形 鉄次 (OGATA Tetsuji)
• Twitter: @xtetsuji
• Blog: http://post.tetsuji.jp/
• 北海道河東郡音更町→東京都中野区(18-)
• 得意技: mod_perl
今回は「ゲーム」の話
mod_perlの話じゃないよ
ゲームプログラマ歴0年が語るゲーム
今回「ゲーム」を「する」事を考えた
ゲーム「する」とは
• Play - プレイする
• Make - 作る・問題を提供する
• Solve - 問題を解く
• Create - 新しいゲームを創作する
CPAN Games::*
• CPAN には Games::* という面白そうなパッケージ名前空間があります
CPAN Games::*
CPAN Games::*
• ゲームの色々が収められた名前空間
• Play/Make/Solveそれぞれあるっぽい
Acme and Games
• Acme:: は寛容
• さながら「常夏のビーチ」のよう
• Games:: も同様の場所になってほしい
• 「砂金が取れる川辺」のように
Acme::* vs Games::*
Acme:: 491dists / Games:: 180 dists
Games CPANデビュー• Games::* で CPAN Authorデビューするのも良いのでは?
• PAUSE IDだけ取得しておいただけのCPAN Authorではない自分はそう思う
• ゲームが解けて、みんなも嬉しい
なぜ今ゲーム?
なぜ今ゲーム?
• 金が無い!
•金が無い!!
•金が無い!!!• 小遣い稼ぎしたい
ゲームで小遣い稼ぎ• ゲームは金がかかるもの?
• 「基本無料」だけの時間食いでは?
• RMTとかダメだよ!!!
• いや、そうではない「ゲーム」もある
•例えばペンシルパズルの懸賞問題
ペンシルパズル
数独(Sudoku)
• 世界で大人気「数独(Sudoku)」
• ペンシルパズルの代表的存在
• 「数独」も株式会社ニコリの登録商標です(ニコリは世界企業…)
• 巷では「ナンプレ」とも呼ばれる
数独(Sudoku)
• 縦列、横列、3×3領域それぞれ1~9までの数字が1つずつ入る
• ヒントに従って空欄の数字を埋める
• 変則的な数独も多々
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Sudoku-by-L2G-20050714.svg より
数独をPerlで解く
• 手で愚直に解く?またまたご冗談を
• まずはお約束のようにCPANモジュールを探してみる
数独をPerlで解く
数独をPerlで解く• CPANモジュール10個見つかった
• モジュールによっては解けない数独もある(品質はまちまち?)
• 通常の9×9以外の変則的な数独には対応していない場合がほとんど
数独をPerlで解く• 簡単そうに見えて意外に数独解法プログラムは難しい
• 自分も1時間くらいで書けると取り組んでみたものの、解けない数独があった
• https://gist.github.com/xtetsuji/4770196
Google画像検索
• 実はGoogle画像検索でも数独は解ける
• これがすごい便利
• 「Googleゴーグル」
Googleゴーグルで数独を解く
数独は意外に難しい• 同じ数独問題でも、CPANモジュールで解けるものと解けないものがまちまち
• 自分でもあえて書き捨てで数独解法プログラムを書いてみたが結構難しい
• Googleゴーグルも間違える事があった
数独は意外に難しい
ここでGoogleゴーグルも間違えている
スリザーリンク
• ペンシルパズルの一つ
• これもニコリ発
• 個人的に数独より楽しいと感じている
• 懸賞問題はほとんど無いけど
スリザーリンク
Wikipediaの解説より
スリザーリンク
• 0~3の数字が書かれたセルがヒント
• 数字はセルの周りに引かれる線の本数
• 線は交差したりしてはいけない
• 最終的には唯一の閉曲線を作ればOK
CPANでスリザーリンク攻略
• 無かった or 見つからなかった
• 他のプログラムやオープンソースソフトでも見つからなかった
• なら自分で作ってみるかと着手
Games::Slitherlink(仮)
• 本当に未完成
• スリザーリンクに懸賞的要素は皆無、もはや数学的興味だけで活動中
• 少しでも動く段階になったら公開予定?
こんなこともやった
• 福引きサイトで連続で福引きを引く
• ポイント払うんだから連続で引きたい
• こういうときのWWW::Mechanize
• でもMech力が足りずJavaScriptやっつけ
色々な「ゲーム」• ペンシルパズル
• ボードゲーム・TRPG
• コンシューマー・アーケード
• ソーシャルゲーム
•我々にとってプログラム自体がゲーム?
批判と反駁• 純粋に手で解いている人より不公平?
• 手で解く代わりにプログラム書く
• 数学的な使命としては、個々の問題を解く事よりも、問題全体を解く事が興味深いと感じている
数学的使命• 例えば個別の二次方程式を解く
• 概念の把握や計算の練習は絶対必要
• 二次方程式の解の公式を導く
• n次方程式への興味→ガロア理論
• 概念全体を解くことは興味深い仕事
節度ある自動化を• 規約で違反とされている事は禁止
• MMORPGのボット問題
• ソーシャルゲームの裏技的なもの
• …等々
• ゲーム提供者の指示には従う
ソーシャルゲーム
• Playの何がインセンティブか?
• Playして優越感に浸る
• Playして好きな画像や音声をゲット
• Makeして一攫千金!
ソーシャルゲーム
画面はモバマスです
ソーシャルゲーム
• 業界の動向を調べる意味でも色々Playするのは大切だなーと最近感じた
• 実際最近のソーシャルゲームは楽しい
• これからも色んなゲームやりたい
Games:: に期待する事
• 画像認識(OpenCV?): ゴーグルライクな
• インタラクティブなゲーム(Curses?)
• もっと複雑なペンシルパズルが解ける
• ソーシャルゲームのテンプレ作成とか
Games::* でLet’s CPAN Author!
ご清聴ありがとうございました