プログラマー

2017年7月14日 (金)遊技(パチンコ、パチスロ)で使えるマクロ

おはようございます。
プログラマーのY.Nです。

夏の暑さも絶好調な今日この頃ですが、本日は、
遊技(パチンコ、パチスロ)開発で頻繁に使用する
マクロ機能の紹介です。

まず、マクロって何かと言うと

#define DEBUG_PRINT_NUM(value) printf( "%d\n", (value) );
int main(void)
{
	int num = 10;

	DEBUG_PRINT_NUM(num)

	return 0;
}

と記入したコードが、コンパイル時に

int main(void)
{
	int num = 10;

	printf( "%d\n", num );

	return 0;
}

と置き換わる機能になります。

なんで頻繁に使用するかと言うと、遊技開発の場合、
案件などで、実装する基盤が変わる場合が多く、システム周りを
実装する場合、ミドルウェアを簡単に切り離せるように、
ある程度の機能単位でマクロにして使用する事により、
基盤に依存しないコードを書くことができるんです。

また、遊技では、メモリの節約などでビット管理を行う事が
多いため、以下のようなマクロを使用したりします。

// 指定ビットの値を取得する
#define BIT_VALUE(var, i) (var & 1 << i ) >> i;

// 指定ビットOn
#define BIT_ON(var, i) var |= 1 << i;

// 指定ビットOFF
#define BIT_OFF(var, i) var &= ~( 1 << i );

// 指定ビットを反転
#define BIT_RV(var, i) var ^= ( 1 << i );

「#define」って定数定義などでしか使用しない人も多いかと思いますが、
マクロなども活用する事でコード量の節約や工数軽減にもなりますので、
興味が湧いた方はいろいろ試して見てください。

本日はこの辺で!!

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/07/post-d26b.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年7月 6日 (木)体を労わる事も仕事の内

おはようございます。sun
元高校球児baseball で自称AG随一の球技マスターを名乗るプログラマーのS.Mです。

今でも日課で、100回以上バットで素振りをしています。

今回は自分の健康維持についてお話します。

実は、約半年以上前から、
朝起きてすぐに歩いたり、
野球等で体を動かした後しばらくしてから、
足に激痛が走る症状が起こるようになっていました。
すぐに直るだろうと高を括って放置していたのですが、
どんどん悪化してしまいました。

通院した所、「足底腱膜炎」と診断され、
発症する原因として、肥満傾向の人はなりやすいと聞きました。
確かに、自分は肥満傾向と言われても仕方ない体型なので、
改めてダイエットを決意しました。

こういった病気や怪我などはしっかり対策をしていれば
予防できるはずです。(自分の場合は、やせていれば発症しなかったはず。)
仕事をする上で、どこか痛んだり、体調が優れなかったりする状態で、
作業をする事は、とてもつらいです。

野球で例えるなら、道具の手入れやアップなどをしっかりと行う事で、
怪我を予防する事が出来ます。

もちろん、きっちり休んで体調を整えることも重要ですが、
回復にとても時間がかかる病気や怪我などもある為、難しいこともあります。
そのような事態にならない為にも、日頃の生活から自分の体を労わるべきです。

自分の場合は、最近、会社から50分ぐらい遠い駅まで徒歩で移動したりしています。
特に、この職種はデスクワークがメインですので、
身体能力はどんどん低下していき、
それに伴い病気や怪我などになりやすくなります。
長年、体を動かしていない人などは、少し意識する必要があるかもしれませんね。

まあ、病気や怪我と無縁の生活を送るというのはほぼ不可能なのですが、
しっかり自己管理して予防をするというのも大事な仕事です。
これを機に自身の生活を見直してみるというのも良いかもしれません。

健康第一!!

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/07/post-82c0.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月12日 (月)がんばれagrobo君

おはようございます。sun
本日のブログ当番プログラマーのM.Iです。

大阪は梅雨で雨の日が多くなってきました。
傘を持っていないと不安になりますね。

最近知ったのですが、slackというチャットサービスがあります。
skype等と同じようにチャットができるサービスですが、AIを会話に参加させることができます。

よくbotといわれるものです。
ここで動くbotを作ってみました。

いくつかbotを作成するライブラリは公開されているのですが、筆者は.net好きなので.netで動くnoobotを使用します。

20170609_01

https://github.com/noobot/noobot

からgitなりでcloneしてきてください。

https://github.com/noobot/noobot/wiki/Getting-Started-With-Noobot#get-noobot-up-and-running-quickly

を参考に、botをslackに登録して、指示されたapiTokenをconfig.jsonに書き込み、cloneしてきたソースを実行するとbotがslackでオンライン表示になります。

aboutと発言するとbotが作者の情報を返信してくれます。

さてこのままでは味気ないので話しかけると反応してくれるように実装してみましょう。
helloと発言すると現在の時間に合わせて挨拶してくれるようにします。

noobotではMiddleWareBaseを継承したクラスを作るとチャットに反応するようにできるみたいです。
GreetingMiddleWareクラスを作ります。

using System;
using System.Collections.Generic;
using Noobot.Core.MessagingPipeline.Request;
using Noobot.Core.MessagingPipeline.Response;

namespace Noobot.Core.MessagingPipeline.Middleware
{
class GreetingMiddleWare : MiddlewareBase
{
INoobotCore myCore;
public GreetingMiddleWare( IMiddleware next , INoobotCore core)
: base( next )
{
myCore = core;
HandlerMappings = new[]
{

new HandlerMapping
{
ValidHandles = new []{ "Hello" },
Description = "挨拶するミドルウェア",
EvaluatorFunc = GreetingHandler
}
};
}

private IEnumerable

GreetingHandler( IncomingMessage message , string matched )
{
string greeting =
  DateTime.Now.Hour <  9 ? "おはようございます"
: DateTime.Now.Hour < 17 ? "こんにちは"
: "こんばんは";
yield return message.ReplyDirectlyToUser( greeting );
}
}
}

ValidHandlesに入っている文字列(大文字小文字は無視されます)がチャットに発言されると反応します。
この場合hello や hello worldに反応します。
EvaluatorFuncに登録した関数が呼び出されます。
messageに話しかけてきた人や所属しているチャンネル情報、話しかけられたメッセージ全文といった情報がきます。

話しかけられた後今の時間に応じて返信文字列を作ってやれば完成です。
上の例なら
0~8時なら「おはようございます」
9~16 時なら「こんにちは」
17~23時までなら「こんばんは」
と返信してくれるようになります。

クラスを実装しても実行されないと意味がありません。
noobotのライブラリのContainerFactory.csの

private void SetupMiddlewarePipeline(Registry registry)

メソッドの最終行に以下のように追加するとbotの初期化時に実装したクラスのコンストラクタが実行されます。

registry.For

().DecorateAllWith

();

上の例なら特定の文字が来た場合のみ返事を返す、ということができます。

再度実行してhelloと発言すれば

20170609_02

余談ですが、

myCore.SendMessage( ResponseMessage.DirectUserMessage( message.UserId , "hello" );

という風にすれば能動的に返信できます。

Taskクラスとasync,awaitを利用すれば1秒ごとに実行する処理を記述できます。

		private IEnumerable

GreetingHandler( IncomingMessage message , string matched )
{
Task.Run( async ( ) => {
for ( ;;)
{
await Task.Delay( 1000 );
await myCore.SendMessage( ResponseMessage.DirectUserMessage( message.UserId , "1秒経過" ) );
}
} );
}

メッセージが着た後1秒ごとに1秒が経過したことを返信してくれるbotになります。
これで1秒ごとに情報を持ってこれるようになったので、誕生日に祝うbot等も作れます。

世の中には数式を投げると計算結果を返信してくれるといった仕事の手伝いをするbotもあるようです。

以前このブログでも紹介されましたが
http://www.accessgames-blog.com/blog/2016/12/post-4eff.html
chatopsと呼ばれるそうです。

機械でもできそうな仕事を見つけて、作業を振ってみてもいいかもしれません。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/agrobo-4d0b.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 9日 (金)AIとすごす怠惰な世界

おはようございます。sun
本日の当番、プログラマーのT.Fです。

まだ6月ですが暑すぎる日が連日のように続きますね!coldsweats01
通勤時間を経て会社に到着するだけで、その日の体力を使いきった感があります。

暑いと外に出たくないので、家でゴロゴロしている間にゲームを作ってくれる人工知能の開発が待たれます。
まあ、東大に合格する人工知能が作られないかぎり自分の代わりにプログラムを組んでくれるAIは登場しないでしょうが・・・。

ここ数年でAIが人間の仕事を奪う!みたいなノリの記事をみたりするたびに、自分の代わりに仕様書どうりのゲームをバグなくつくってくれよぉぉぉぉ!
と思っているのですがどうもAIの研究は芳しくない様子。

AIに意味を理解させる研究はあまり進んでおらず、いま使われている主流のものは入力に対してパターン解析をおこなって動作しているそうです。
極端な言い方をすれば、山と言えば川。みたいに入力に対して決まった出力を行うだけの物です。

ゲーム中に使用しているAIも、AIとは名ばかりの代物です。

攻撃可能な位置に敵がいる

攻撃!

みたいなパターンをプログラムで組んでいきます。
様々な状況判断をする判定文と、判定がTrueならアクションを実行!みたいなプログラムをひたすら用意しています。
なのでゲームのAIは自分で考えている風に動く開発者の血と汗の結晶なのです。confident

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/ai-83f9.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 8日 (木)プログラマー三大美徳

Perlを開発したLarryWall様が素晴らしいことを謳っています。
プログラマーは以下3つを美徳にすべしと。

怠惰(Laziness)
短気(Impatience)
傲慢(Hubris)

うーむ言葉だけとると劣悪ですね。
「怠惰で短気で傲慢なプログラマー」…って書くとすっげぇクズ感ある。

ググるといくらでも解説が出て来ますが、
本日の当番、プログラマのT.Tの言葉で説明していきたいと思います。

怠惰(Laziness)
めんどくせぇなぁ… って思うこと。

転じて、自動化と再利用の活用。

面倒なことはPCに任せよう。
面倒な質問は先にマニュアルに残しとこう。

同じことやるのは2回目まではゆるす。3回目からはころす。

短気(Impatience)
おっせぇなぁ…キレそう…とか、
気が利かねぇなぁ…キレそう…って思うこと。

転じて、
処理速度を追求したり気の効くものを作ろう。
心地よく作業できるものを作ろう。

最低でも自分の作ったものに自分でキレないようにな!

傲慢(Hubris)
はぁ…何言ってんだ…俺のプログラムは完璧だろうが… って思うこと。

転じて、プライドを持って誰からも文句が出ない素晴らしいコードを書くこと。
ヒュ~カッチョいい~。

これで大体理解できたかと思います。

怠惰と短気は簡単ですね。今日から持ちましょう。
傲慢は経験がないと難しいかもしれません。
まぁでも持つだけならできるでしょう今日から行こう。

よし!怠惰で短気で傲慢に生きよう!(すっげぇクズ)

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/post-c321.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 7日 (水)経験値というかなんというか

おはようございます。本日の当番、プログラマのT.Hです。sun

メガネの度が少し合わなくなってきたなとかなり前から思っていたものの、特に支障もないので新しいメガネを買わなかったのですが、今週末に行われる某ライブに参加するにあたって遠くでもちゃんと見たいなと思い、数年ぶりに新しいメガネを買いに行くことにしました。eyeglass

メガネそのものには特に問題なかったため、以前と同じ店で買おうと思いましたが、そもそもこのメガネどこで買ったっけ…?と全く思い出せませんでした。

メガネを見ても店名らしきものは書いておらず、メガネを買った時にもらったメガネケースは以前北海道に行ったときに旅館に忘れてしまった上、保証書等も見当たらなかったので、もはや確認する手だてはありません。think

仕方ないので近くのメガネ屋を調べてそこに買いに行きました。
新しいメガネや店に不満があるわけではないのですが、どこで買ったか覚えていれば調べる手間もなく、もう少し楽だったかなーという出来事でした。

日常生活ではさほど問題ありませんが、業務、特にプログラムに関しては、過去にした作業や作ったプログラムを覚えている、もしくはすぐに思い出すことができるというのは割と重要だと思っています。

作業時間の短縮だけでなく、過去のプログラムを自分で覚えていれば、今やればこの部分をもっとよくできるな、ここはよくなかったな、といった一人反省会的なこともでき、自分の成長を実感しやすいため、どのプロジェクトでどんな作業をしたか確認できるようにしています。
うまくいったプログラムは割と忘れにくいかもしれませんが、やらかしたプログラムも覚えておき、同じことをしないようにする、というのも大事ですね。catface

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/post-ffa9.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 6日 (火)小目標

おはようございます。
プログラマーのG.Iです。

6月に入り、夏も近づいたのか晴れの日はすごく暑いですね。coldsweats01
毎年、このまま梅雨に入らずに夏になれば良いのにと思っている今日この頃です。

4月から入社した新社会人の皆さんは、もう十分会社にはなれたでしょうか?
まだ、不安がいっぱいという人もいるとは思いますが、始めはみんなそんな感じなので気にせず業務に励みましょう。

実際にプロジェクトに入ってみると、ゲーム製作がすごく細かい作業分担によって作られているというのがわかってくると思います。

私も学生のころは、企画デザインプログラムサウンドくらいしか分かれていないと思っていましたが、特に大きなプロジェクトでは、それぞれのセクションの中でもさらに細かく分業を行っているということが分かってきました。
なので、入社してからしばらくは自分の作業にどういった意味があるのか、この部分がどうなるのか、が分かりにくいとは思います。
特にプログラマーは、ツールのバグ修正だったり、一部のアルゴリズムのテストだったりと非常に分かりにくいです。

先輩や上司はきちんと説明してくれるとは思いますが、始めはなかなか想像できずに、つらい気持ちになることもありますよね。

あくまで個人の見解ですが、そんなときは、その作業に自分自身の目標を決め進めることをお勧めします。
例えば、プログラムの場合、余計な判定はしないとか、制限されたサイクルでコードを記述するとか、自分で決めた時間内に作業を終わらせるとか、、何でも良いです。

もちろん、その作業がプロジェクトにおいてどういった意味を知るのかは大切ですが、新人のうちは、まずはしっかりと仕事を早く正確に業務をこなすことの方が重要です。
あと、口で説明されても分からないものはおそらく自分で経験しないと分かりません
与えられる仕事が大きくなったときに初めて、その前の仕事の本来の意味を知るということは、経験上よくあることです。

話を戻しますが、、作業の中での小目標を持つと、それに集中できるため、先ほど書いたような、いらぬ流れを気にしなくてすみます。
また、その目標を達成するために他の人よりも工夫をしなくてはいけないので、結果的に色々な仕事がこなせるようになります。

以前にもブログで同じようなことは書いたことがありますが、流れ作業にならず自分自身で考えて業務をこなす人は、成長がとても早いです。
さらに、もし、その中で自分だけの楽しみを見つけることができたならおそらく、その時のその作業が、皆さんの得意分野になるはずです。

仕事をする上で、自分の得意分野が出来るというのは非常に良いことです。
とりあえず、皆さんはまずはそこまで目指しましょう。
そこからの話は、また今度にしますね。

では、がんばってください。happy01

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/post-b33f.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 2日 (金)試行錯誤

おはようございます。本日の当番、プログラマのY.Hです。

先日になりますが、
某ショッピングモールにある串揚げ屋さんに行ってきました。

そこは、お店の人が作ったものを持ってくるのではなく、自分で串ネタをテーブルに運んできて、自分で練り粉とパン粉を付けて揚げる
…というシステムのお店です。

そのようなお店には、学生の頃に友達と行った事があるのですが、それ以来ぱったりと行ってなかったので、久しぶりに行ってみたい衝動に駆られてしまいました。

行ってみた感想なのですが、通常のお店より手間はかかるものの、自分で揚げるのは楽しいですね。
串ネタ自体もたくさんの種類があって良かったです♪

最初は揚げ具合がわからず、試行錯誤を繰り返していたのですが、何回か揚げるうちにコツが分かってきて、中盤ぐらいにはいい感じに揚げることができるようになってきました。

…とまぁこのように、なんとか美味しく食べることが出来たのですが、ゲーム作りも同じで試行錯誤の繰り返しです

最初から上手くいくことの方が珍しく、何度も調整作業を繰り返すことで、より良くなっていくものではないでしょうか。

場合によっては調整作業だけでは済まずに、仕様から考え直す事も少なくないですが、それも含めてゲーム作りですよね。
少々手間がかかるとしても、面白いゲームを作るためには必要な事だと思います。

さて、その串揚げ屋さんでは、
美味しくて楽しい食事が出来たので、また行ってみたいです♪

串ネタだけでなくソースもいろんな種類があったので、
今回試せていないソースにも挑戦してみたいですね!

…念の為に言っておきますが、C++のソースの事ではないですよ(笑

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/post-903b.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年5月31日 (水)集中力と結果

おはようございます。本日の当番、ゴルファー兼プログラマのJ's.Kです。
気温が上がり、絶好のゴルフシーズン到来。
そんな矢先、自己ベストの68を叩き出しました!

さて、本日のお題は「集中力と結果」です。

ゴルフをプレーしていると、緊張せずに淡々とプレーできることがあります。
その時は、概ね結果に拘らずに

「今日は1日○○に注意しよう」

とか

「今日は○○や△△を試してみよう」

という感じで、ゴルフに必死にならずに、要所のポイントを意識してます。
結果として

「ミスしたらどうしよう」

とか

「ここは絶対に上手く対処しないといけない」

という不安要素や追い込み要素を考えることもありません。
それが集中力に繋がってきます。

逆に

「今日は完璧だから良いスコア出すぞ」

という考えを持っている時ほど、スコアが悪い気がします。
邪念が邪魔をするのかもしれません…

集中して淡々と物事をこなすことで、自然と良い結果が出ます。

さて、この集中は、業務にも非常に有効です。

業務にはスケジュールがあります。
ですから、そのスケジュールを前提に

「今日は○○を作ろう」

とか

「今日は○○を調査しよう」

と決めて、それをこなしていく。
その途中で

「これもやってみよう」
「あれはどうだったかな」

というような脱線をせずに、徹底的にこなす。
脱線しそうになったら、メモして後回しにする。

そうすることで、集中して作業が行え、良い結果に繋がると思います。

逆に言えば、集中して作業できる環境を作る、ということも重要になります。

働きやすい環境を作り、集中して作業する。
こういう考え方を会社全体で共有できていれば、自ずと良い結果が出るでしょう。

と、言いつつも、ゴルフではよく邪念が顔を出します…
いつも集中してプレーしたいものですね…

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/05/post-03ea.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年4月14日 (金)リフレッシュ

おはようございます。sun本日の当番プログラマーのY.Nです。

桜が咲いて、ジャケットを冬物から春物に変えようか迷っている今日この頃ですが、担当していたプロジェクトもついに終わり、ご褒美として会社からアップ休暇をいただきました。
アップ休暇って何かというと、”プロジェクト頑張ったね”っと会社がくれるご褒美。
プロジェクトが長かった都合もありますが、なんと・・・2週間近くいただくことができました。happy02

何をしよ~かな?
何をしよ~かな?

・・・ってか長すぎて休みが合う友達がいない!!coldsweats02

って事で、家でダラダラするのも嫌なので、今までできなかったことをしよう!!
と思い、いろいろ考えた結果、北海道でスノボーをしに行くことに決めました。

でも、最近スノボーに行けてないので、体力がもつかな?
向こうでずっと一人だと暇にならないかな?
なんてことを思いながらも北海道にいざ出発!!

ゲレンデについてみるとそんな不安を吹き飛ばすぐらいの壮大な景色!!
関西ではまずありえないですね。

しかも、滑っている人のほとんどが外国人。
ホテルに帰っても宿泊者はみんな外国人。
なんだか海外に来たような雰囲気。

でも、外国人はフレンドリーな人が多いので、いろんなところで気さくに声をかけてくれた結果、一緒に滑ったり、飲みに行ったり、新しい経験をいっぱいすることができました。



仕事って精神的にも、肉体的にも大変なことが多々ありますが、休みの日にはしっかりリフレッシュして、仕事に全力、遊びに全力で楽しく人生を送りましょ~wink
follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/04/post-0aec.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

より以前の記事一覧