PVの2B走りモーションに魅せられてライコの参考に……と買ってみたら久々に心行くまで楽しめた名作アクションゲーム。ニーアシリーズもDODシリーズも未プレイだが、十二分に楽しめた*1。
MGSやベヨネッタ等最近の和製アクションゲームは一通りプレイしたけれども、トロフィーコンプまで行ったのは初めてかも(天井が低かったのもある)。あと、設定万歳。
*1:前提知識はネタバレ+動画で事前に補完した
鳴り物入り、ってレベルではないドンガラガッシャン感を出して堂々と世に出ました、スーパーマリオラン。皆様いかがお過ごしでしょうか。クリアしましたでしょうか。ブラックコインのおまけコース含めたコンプリートまでいくとやや骨が折れますが最強キャラであるルイージを使うと結構ギミック無視して取れるのでお試しあれ。
さて、ご周知のとおり一騒動あったスーパーマリオランのその価格。実に1200円。うーん……高い。高いよ。コンシューマゲームのユーザで2000円の同人ゲームを売り年始には25万デレマスにぶっこんだ自分でさえ、第一印象として「高い」と思うもの。
すると、ゲームクリエイターとしては一抹の疑問がよぎる。なぜたった1200円が、高いと感じるのか。ふとそれを考えていくと、そこには単純な値付けミスだとかユーザ層の乖離だとか、そういう話とはまったく異なるベクトルの何かが潜んでいるということにふと気付いたのである。
続きを読む深夜テンションで「"め" "う"をランダムに発生させ"めめめめうめうめめめめうめう"という順序になったら"ぺったん×4大好き"と表示させる」じゃ?ぁを組んだ URL
「"め"と"う"をランダムに出力するプログラムを書き、その文字列の最後が偶然「めめめめうめうめめめめうめう」となった時、「ぺったんぺったんぺったんぺったん大好き」という文字を出力して終了せよ。
public class Main{ public static void main(String[] args) { int M=0;while((M&16383)!=15738){M=(M<<1)|(int)(Math.random()*2);System.out.print((M&1)>0?"め":"う");} System.out.println("ぺったんぺったんぺったんぺったん大好き"); } }
正直 Java とかよくわかってないが、元ツイートが Java だったので Java で書いた。C++だともう数文字短い。
今時 Unity だと .csv とかめっちゃスマートに読み込めるのでコピペして使おう。
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq; class ReadCSV { List<CharaData> mCharaDataList = new List<CharaData>(); public void loadCharaData() { Dictionary< string, ECharaID> charaid_table = new Dictionary<string,ECharaID>(); for( ECharaID e = ECharaID.Invalid; e < ECharaID.Max; e++ ) enemy_table.Add( e.ToString(), e ); TextAsset alltext = Resources.Load( "GameData/CharaData" ) as TextAsset; List<string> alllines = alltext.text.Split('\n').ToList(); alllines.RemoveAt( 0 ); alllines.RemoveAt( 0 ); int current = 0; foreach( string line in alllines ) { List<string> elements = line.Split(',').ToList(); if ( elements.Count < 6 ) continue; CharaData d = new CharaData(); d.Value0 = charaid_table[elements[0]]; // <- string to enum d.Value1 = SmartParse( elements[1] ); // <- string to int d.Value2 = SmartParse( elements[2] ); d.Value3 = SmartParse( elements[3] ); d.Value4 = elements[4]; // <- string to string d.Value5 = elements[5]; mCharaDataList.Add( d ); } } static public int SmartParse( string str ) { int result; if ( int.TryParse( str, out result ) ) return result; else return 0; } };
とりあえずリストのために generic、パースのために lynq を読み込む。
最初の行で Dictionary に登録しているのは Enum (列挙型)の一覧。。これにより、CSV に Enum の文字列をそのまま書き込んでも認識されるようになるので便利。
改行でパースしたものを二行飛ばし(コメントなど用のスペース。無くても可)、更に各行を','でパースする。更に各項目の中に複数の値を入れたいなら「|」や「@」などで区切るとよし。
string 型から int 型へのパースはどうにも使い勝手が悪いので、エラーを吐かない Parse を用意してやる。処理速度にはほぼ影響なし。
これだけ。C# は便利。ご賞味あれ。
クリエイター系の懇親会や勉強会や飲み会や芋煮会なんかに参加すると、よっぽど意図的に無作為なメンバー集めをしない限り、参加者の中にはある程度コミュニティが形成されているものである。
一応初めての人でもざっくばらんに分け隔てなくという建前はあるものの、やっぱりどうしても普段から喋り慣れている人と一緒に話したくなるもので、時間が経つにつれて数人のグループが複数、誰も知り合いのいない人たちが微妙な距離感を保ちながらぽつぽつと一人で酒と料理を口にする、なんて状況が往々にして発生する。
誰しも最初は後者なのだが、そこから一歩踏み出すには大きな勇気がいるものだ。ってか無理だ。よっぽどコミュニケーション能力に長けた人でないと、何のコネクションもない状態からズカズカとアウェイのコミュニティの真っただ中に入っていくなんて芸当はできない。無理無理。
とはいえ。無理だといって永遠に尻込みしているわけにもいかないし、志を同じくする人たちと酒を酌み交わすことはきっと楽しいはずだ。誰だってあの凄いゲームを作った、素晴らしい絵を描いた、名立たる楽曲を書いたあの人と話したいのだ。
じゃあ、どうするか。ぼくもコミュニケーション能力がそこまである人間ではなかったけれど、だからこそ何か助けになるものがあるかもしれないので、わずかばかりの TIPS を書き起こしてみることにする。
続きを読む
この考えは、以前から抱いていたものではなく、ほんと最近になってふと思うようになったもの。
きっかけは明確だ。故・今敏監督の「パクリの語法」という記事を読んでからである。
http://konstone.s-kon.net/modules/notebook/archives/530
2000年代から加速し始めたパクリ叩きの流れは2010年代に入って熾烈を極め、今やネットの世界では殺人者とほぼ同等の扱いを受ける始末。まあ、パクリという行為は時にパクラレ作品を強盗殺人するようなケースもあるので、あながち間違いとも言えない。
自分もクリエイターの端くれなもので、自分の作品を隅から隅まで丸ごとパクったような作品が現れれば気のすむまで棍棒で殴りつけたくなるし、事実そういう風に大手企業に作品をパクられながらも、個人という弱者ゆえに泣き寝入りせざるを得なかった人がたくさんいたはずだ。インターネットはこういう弱者の声を拾い上げ、強者の立場を濫用して極悪非道な行為を繰り返す悪人どもを名もなき裁判で断罪し続けた。
これによって救われた人は少なくないだろうし、私刑という響きに抵抗を感じながらも、必要悪として内心認めざるを得ない面は確かにある。文化的な自浄作用という肯定的な見方もできるし、インターネット時代の自由な創作環境を築くのに一役買っているのは間違いない。
ただ、最近はちょっと雲行きが怪しくなってきた。個人クリエイターがとても強い力を持ち始めたのだ。すると、名もなき彼らは個人を強者として認識し始める。抗いようのない強大な力に立ち向かうためだった銀の矢は、単純にパクリという行為そのものに向けられるようになった。
こうなるともう、正義がどうとかパクリの悪質さがどうとかそういう物差しじゃなくて、ムカつく奴かそうでないかで炎上度合いが変わったりする。私刑ですらない、私怨だ。
というところで、じゃあ、パクリという言葉について一度考えてみようか、というのがこの記事の趣旨である。
続きを読む例えば自動生成のマップチップのようなものを想像しよう。上下左右に道があって、道のパターンによって使うマップチップが変わる。上に道があればこれ、左と右に道があればこれ、右と下ならこれ……。よくあるシチュエーションだ。
マップチップじゃなくてもいい。入力のパターンに複数の組み合わせがあって、出力が多種多様に変化するもの。入力がただの Enum(列挙型)一つなら Switch 文で事足りるんだけど……というケース。
泥臭く if 文で書くことはできるけど、汚いし、実は C# とかで 128*128 のマップを全部走査したりすると、結構な時間がかかったりする。じゃあ、どうやって書くのがスマートか。*1
というわけでたまには真面目なプログラミングの TIPS でも。しかし、あんまりこういう TIPS ってないよね。多分みんなスーパープログラマーだから必要ないんだろうね。
*1:先に言うとビット演算とテーブルなので、これだけで意味が分かった人は読む必要なし。