games::* - perlで 「ゲーム」しよう #hokkaidopm

42
Games::* - Perl「ゲーム」しよう 尾形 鉄次 (OGATA Tetsuji) Twitter: @xtetsuji 2013/3/9 Hokkaido.pm#9

Upload: tetsuji-ogata

Post on 28-May-2015

1.811 views

Category:

Technology


0 download

DESCRIPTION

2013/3/9 に開催された Hokkaido.pm#9 で発表したトークのスライドです。

TRANSCRIPT

Page 1: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Games::* - Perlで「ゲーム」しよう

尾形 鉄次 (OGATA Tetsuji)

Twitter: @xtetsuji2013/3/9 Hokkaido.pm#9

Page 2: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

自己紹介

• 尾形 鉄次 (OGATA Tetsuji)

• Twitter: @xtetsuji

• Blog: http://post.tetsuji.jp/

• 北海道河東郡音更町→東京都中野区(18-)

• 得意技: mod_perl

Page 3: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

今回は「ゲーム」の話

mod_perlの話じゃないよ

Page 4: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

ゲームプログラマ歴0年が語るゲーム

Page 5: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

今回「ゲーム」を「する」事を考えた

Page 6: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

ゲーム「する」とは

• Play - プレイする

• Make - 作る・問題を提供する

• Solve - 問題を解く

• Create - 新しいゲームを創作する

Page 7: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

CPAN Games::*

• CPAN には Games::* という面白そうなパッケージ名前空間があります

Page 8: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

CPAN Games::*

Page 9: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

CPAN Games::*

• ゲームの色々が収められた名前空間

• Play/Make/Solveそれぞれあるっぽい

Page 10: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Acme and Games

• Acme:: は寛容

• さながら「常夏のビーチ」のよう

• Games:: も同様の場所になってほしい

• 「砂金が取れる川辺」のように

Page 11: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Acme::* vs Games::*

Acme:: 491dists / Games:: 180 dists

Page 12: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Games CPANデビュー• Games::* で CPAN Authorデビューするのも良いのでは?

• PAUSE IDだけ取得しておいただけのCPAN Authorではない自分はそう思う

• ゲームが解けて、みんなも嬉しい

Page 13: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

なぜ今ゲーム?

Page 14: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

なぜ今ゲーム?

• 金が無い!

•金が無い!!

•金が無い!!!• 小遣い稼ぎしたい

Page 15: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

ゲームで小遣い稼ぎ• ゲームは金がかかるもの?

• 「基本無料」だけの時間食いでは?

• RMTとかダメだよ!!!

• いや、そうではない「ゲーム」もある

•例えばペンシルパズルの懸賞問題

Page 16: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

ペンシルパズル

Page 17: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数独(Sudoku)

• 世界で大人気「数独(Sudoku)」

• ペンシルパズルの代表的存在

• 「数独」も株式会社ニコリの登録商標です(ニコリは世界企業…)

• 巷では「ナンプレ」とも呼ばれる

Page 18: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数独(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 より

Page 19: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数独をPerlで解く

• 手で愚直に解く?またまたご冗談を

• まずはお約束のようにCPANモジュールを探してみる

Page 20: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数独をPerlで解く

Page 21: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数独をPerlで解く• CPANモジュール10個見つかった

• モジュールによっては解けない数独もある(品質はまちまち?)

• 通常の9×9以外の変則的な数独には対応していない場合がほとんど

Page 22: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数独をPerlで解く• 簡単そうに見えて意外に数独解法プログラムは難しい

• 自分も1時間くらいで書けると取り組んでみたものの、解けない数独があった

• https://gist.github.com/xtetsuji/4770196

Page 23: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Google画像検索

• 実はGoogle画像検索でも数独は解ける

• これがすごい便利

• 「Googleゴーグル」

Page 24: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Googleゴーグルで数独を解く

Page 25: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数独は意外に難しい• 同じ数独問題でも、CPANモジュールで解けるものと解けないものがまちまち

• 自分でもあえて書き捨てで数独解法プログラムを書いてみたが結構難しい

• Googleゴーグルも間違える事があった

Page 26: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数独は意外に難しい

ここでGoogleゴーグルも間違えている

Page 27: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

スリザーリンク

• ペンシルパズルの一つ

• これもニコリ発

• 個人的に数独より楽しいと感じている

• 懸賞問題はほとんど無いけど

Page 28: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

スリザーリンク

Wikipediaの解説より

Page 29: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

スリザーリンク

• 0~3の数字が書かれたセルがヒント

• 数字はセルの周りに引かれる線の本数

• 線は交差したりしてはいけない

• 最終的には唯一の閉曲線を作ればOK

Page 30: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

CPANでスリザーリンク攻略

• 無かった or 見つからなかった

• 他のプログラムやオープンソースソフトでも見つからなかった

• なら自分で作ってみるかと着手

Page 31: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Games::Slitherlink(仮)

• 本当に未完成

• スリザーリンクに懸賞的要素は皆無、もはや数学的興味だけで活動中

• 少しでも動く段階になったら公開予定?

Page 32: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

こんなこともやった

• 福引きサイトで連続で福引きを引く

• ポイント払うんだから連続で引きたい

• こういうときのWWW::Mechanize

• でもMech力が足りずJavaScriptやっつけ

Page 33: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

色々な「ゲーム」• ペンシルパズル

• ボードゲーム・TRPG

• コンシューマー・アーケード

• ソーシャルゲーム

•我々にとってプログラム自体がゲーム?

Page 34: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

批判と反駁• 純粋に手で解いている人より不公平?

• 手で解く代わりにプログラム書く

• 数学的な使命としては、個々の問題を解く事よりも、問題全体を解く事が興味深いと感じている

Page 35: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

数学的使命• 例えば個別の二次方程式を解く

• 概念の把握や計算の練習は絶対必要

• 二次方程式の解の公式を導く

• n次方程式への興味→ガロア理論

• 概念全体を解くことは興味深い仕事

Page 36: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

節度ある自動化を• 規約で違反とされている事は禁止

• MMORPGのボット問題

• ソーシャルゲームの裏技的なもの

• …等々

• ゲーム提供者の指示には従う

Page 37: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

ソーシャルゲーム

• Playの何がインセンティブか?

• Playして優越感に浸る

• Playして好きな画像や音声をゲット

• Makeして一攫千金!

Page 38: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

ソーシャルゲーム

画面はモバマスです

Page 39: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

ソーシャルゲーム

• 業界の動向を調べる意味でも色々Playするのは大切だなーと最近感じた

• 実際最近のソーシャルゲームは楽しい

• これからも色んなゲームやりたい

Page 40: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Games:: に期待する事

• 画像認識(OpenCV?): ゴーグルライクな

• インタラクティブなゲーム(Curses?)

• もっと複雑なペンシルパズルが解ける

• ソーシャルゲームのテンプレ作成とか

Page 41: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

Games::* でLet’s CPAN Author!

Page 42: Games::* - Perlで 「ゲーム」しよう #hokkaidopm

ご清聴ありがとうございました