【月一】話のエントロピーがああぁぁぁ!(?)

皆さんこんにちわ、kurokuです~

2月は大学も春休みへ突入し、絶賛ぐーたら生活を送っています。

世間では新型肺炎が広がっていますが僕が関わる県にはまだ感染者がいない(っぽい?情弱かも)ので一安心といった気持ちです。皆さんも外出には気を付けて!(僕も新幹線で帰るので怖いね)

さて、今回は先月の記事で競プロかUnityについて書くといったので、それらについて雑に書きたいと思います。

Unity

そもそもなんで今更Unityについて学び始めたかというと、「AR(拡張現実)」について興味を持ったからです。

今までは情報工学よりも情報科学・情報理論のほう(特に暗号・セキュリティ)に興味を持ってたんですけど、うちの大学はそれ系の研究室がないのでどうしよっかな~と思ってたところ、こんなニュースが目につきました。

 

「ARコンタクトレンズ」https://www.itmedia.co.jp/news/articles/2001/17/news076.html

 

近未来的で素敵やん!

 

ところで皆さんは「アクセル・ワールド(AW)」というラノベ・アニメを御存じでしょうか?

この作品の作者は言わずと知れた「ソードアート・オンライン(SAO)」の作者、川原礫さんなのですが、僕はAWがとても好きで、VRではなくARに興味をもったのもこれが大きい気がします。(VRもARも似たようなもんですけど(こんなこと言ったら怒られるかも))

(一番好きな表紙はちょっとエッチなので二番目に好きな表紙)

AWの作中では「ニューロリンカー」というウェアラブル端末が普及していて、各人の脳波を読み取って本人認証をしていて(たしか)、他人のニューロリンカーを勝手に外すことはかなりの罪となっています。

 

AWもSAOみたいに(SAO見たことないけど)VRゲームを中心としたバトルで、人間関係あり、という作品なんですが、このゲームがすごい。

なんとゲームアプリを起動(?)すると思考が1000倍に加速され、現実時間で1.8秒しかたっていないのに、ゲーム内では30分も時間がたつことになります。

まぁAWの説明はここらにしておいて(面白そうと思った人はお声がけください(秋田の家に最新刊までそろっているので貸します))、こんな感じもあってARアプリ作りてぇなぁ(唐突)と思ったわけです。

 

開発環境はいろいろあると思いますが、調べると「ARKit」か「Vuforia」が有名らしい。これらはUnityを使った開発になるのでまずはUnityの基礎的な部分を学ぼうと思ったわけです。

 

とりあえず買ったのはどのサイトでもおすすめされている「猫本」(僕が勝手にそう呼んでるだけですが)

少し厚いですがイラストがあったり、繰り返し同じことが書いてあったりで、プログラミング初心者にはわかりやすく、基礎プログラミングはわかるUnity初心者にはサクサク作れて非常に有用な本だと感じました。(これも声をかけてくれればお貸ししますが、僕も見たいのでMAX1週間くらいで)

後者の僕は春休みに入って一週間程度で終わらせることができました。

んでまぁ、「Vuforia」とかについても調べよう~とおもって調べたら、なんとまぁ僕のiphoneには対応してませんでした~(ぴえん

この機会に新しいのに変えるか絶賛悩んでおります。

 

ここまでが2月のUnity関連。

競プロ

※特に色が変わったわけでもないので内容は薄いです。

 

ここのところ非常に伸び悩んでいる。まぁ精進の質が悪いと言われればそうなんですけど、D問題を早解き出来ないんですよね。C問題まで:10分以内、D問題:50分みたいなことが多すぎる。いかに感覚でやってきたか、ボロがでてますね。

 

一方で、DPについての実装力は少し上がったと思います。ただ、持つ状態を間違えるとそこで沼にはまってグダグダになっちゃいますけど。

最近はこの記事(https://qiita.com/e869120/items/f1c6f98364d1443148b3)を中心にやってますね。(※初級編とありますが難しい問題もあるので詰まったらさっさと次の問題に進んでみましょう)問題を解かずとも、アルゴリズムの解説だけ見れば知識が増えると思います。

僕はJOIの問題形式が苦手です。入力の形式がわかりづらいので設定した変数を間違えたりします。問題読んでないだけですけどね。

 

あとここ3日くらい?起きて(昼)ご飯を食べた後にバチャコンをやっています。内容は1時間で300~400を5問解くって感じの早解きを目的としたバチャですね。興味あったら是非。

僕のtwitter:@76want_pc

あとは…そうだな..

7月のICPC国内予選、秋大では2チーム確定(?)しているんですが、どちらのチームも1人ずつ足りていません。片方はTNPの(4月~)院生2人、もう片方はTNPの(4月~)3年2人です。出てみたいと思う人はいつでもいいですが、早めに声をかけてもらえると、教えられる事、時間が増えるのでチームとしても嬉しいと思います。どちらのチームも横浜大会に行けるポテンシャルはあると思います!(本当か自分)

まとめ

毎度のことながら一生懸命何かしたというわけではないので、内容は薄いですが、勘弁してください。

他に書くことがあるとするなら、CTF(capture the flag)ですか。春休み前にちょっと話題に出たんですが、全然手を付けてませんね。というのも競プロと違って環境構築~とか入門~みたいな情報が少なくてちょっとした時間では触れれないと感じました。(前提知識多そうだしね)

 

次回で【月一】の投稿は終わりですが(は?)、4月もどうせサークル勧誘的な記事を書くと思うので、もうちょっとだけ続くんじゃよ。

(来月も学校ないから、話題ないじゃん!急いで水色にならなければ)

 

といったところで今月は以上です。kurokuでした~体に気を付けて~

ゲームジャム(1年生向け&春休み突入編)

 こんにちは、2年次のまんじゅうです。今回は2月11日(火)にゲームジャムを行いました。今回はいつもの個人作業では無く、ゲーム制作が苦手な人が主となって制作し、詰まったらペアの得意な人に助けて貰いつつ制作していく、ペアプログラミング形式(厳密には違う気がしますが)で行いました。

 今回のお題は「階段」、「決闘」、「超常現象」、の3つと、時期的に丁度良かったので「チョコレート」を含め、計4つに設定しました。

 下に各参加者の成果物を紹介していくので、是非ご覧下さい。

成果物紹介

1年 なりょー (補助 ズッキー(2年))

制作環境 Unity

 「決闘」を使った対戦ゲームで、一言で言うと「スマブラ」とのことです。相手に攻撃すると20%のダメージが溜まり、一定のダメージが溜まるとスマブラの様に場外に吹っ飛ばせます。見ていて爽快感があるゲームだと感じました。

右側の生物が伸ばしている触手みたいな奴が攻撃です
勝利判定もしっかり出ます

 

1年 ハイブリッジ (補助 まんじゅう(2年)、いっちー(3年))

制作環境 DXライブラリ

 「階段」を使ったアクションゲームで、次々に出てくる床に飛び乗っていくゲームです。ゲーム自体はどんどん生成される床にひたすら乗り続けると単純なものですが、強制スクロールをさせたり、画面の左右をループさせたりとシステム面でいろいろな工夫を凝らしているのが印象的でした。

常時ジャンプしていることもあり、意外と難しいんです

 

2年 クマ (補助 まんじゅう(2年))

制作環境 DXライブラリ

 「決闘」を使った作品で、一言で言うとカービィの「刹那の見切り」ですね。3ラウンドあり、ラウンドごとに入力猶予時間(敵の強さ)が厳しくなっていきます。早押しが始まるタイミングを乱数でずらしているようなので、結構再現度が高く仕上がっていると感じました。

直撮りで申し訳ないとの事でした。勝敗画面はかなり面白かったです(ここでは色々まずいので割愛)

 

2年 こうぐち (補助 いっちー(3年))

制作環境 DXライブラリ

 「超常現象」を使ったタイピングゲームで、タイピングによる不思議な力でリア充を不幸にするゲームのようです。ゲーム自体は普通のタイピングゲームですが、ゲームの設定が凝っていたり、タイピングが成功した際の加点がやたら高得点だったりと印象に残る所が多い作品でした。

開催したときはホットな話題でした。投稿遅くて申し訳ない
タイピングに成功するとここから1億点(確か)増えます

 

4年 HIM

補助 まんじゅう(2年)

制作環境 DXライブラリ

 4年次ですが、「慣れていないDXライブラリで何か作ってみたい」ということでこちらの枠で紹介します。「決闘」を使ったゲームで、簡単に言うと「本田のじゃんけん」ですね。ただ元ネタの関係で、勝率3分の1の普通のじゃんけんでは無く、相手の勝率が7割程になっているそうです。勝敗を決め、それから相手の手を決定するようにしているということで、上手く再現できていたように感じました。

手の選択は緊張します
相手が勝ったら煽ってきます。3通りあるそうです
こちらが勝った版も。こちらも3通りあるとのこと

最後に

 今回は普段と違う形式でしたが、教えて貰う側はもちろん、教える側も教える立場ならではの発見もあったりしたので、両者が学べる良い会になったと思います。

 ただ、今回意図せず「決闘」という非常に簡単にゲームの方向性が決まるお題を入れてしまったためにそれを選んだ参加者同士が似たような作品になりやすい環境にしてしまいました(今回は完全な被りはなんとか回避しましたが)。そのため、今回の反省を活かして次回以降の開催ではもう少し慎重にお題を決めたいと思います。

 また、実は今回ちゃんと意図があってゲームジャムの形式を変えていました。というのも、あと1ヶ月程で新入生が入ってくる(はず)ので、この会でノウハウを学んで春休みや今後の制作活動の糧にして、今のうちに制作活動に対する抵抗や苦手意識をある程度和らげてもらいたいと考えたからです。結果としては計8人と普段より参加者が多く、またゲームジャム初参加の人もいたため、悪くは無かったように思います。欲言えばもうちょい1年来て欲しかった

 ここだけ現役部員向けの話になりますが、春休みもまだ1ヶ月残っているので、今のうちに夏コミの作品を作っておく事をオススメします。今年は5月の連休に開催で、4月が忙しくなりがちなので、春休みが終わってしまうとほとんど時間がありませんし。皆で頑張っていきましょう。

 長くなりましたが、最後まで見て下さってありがとうございました。

ゲームジャム(センター試験直前編)

はじめに

 

 お疲れ様です。2年次のまんじゅうです。今回はセンター試験直前の数日が休講日であったため、1月16日(木)にゲームジャムを開催しました。
約1ヶ月程遅れてしまったので、すっごく今更な報告となります。申し訳ありません(見てる人どれだけいるか分かりませんが)。

 今回のお題は、「太陽系」、「エネルギー」、「瓦」と、センター試験直前ということで「受験戦争」を追加し、合計4つ設定しました。

 今回も参加者からの成果物の紹介や感想を貰っているので、最後まで見て頂けたら幸いです。

成果物紹介

1年次 ハイブリッジ

開発環境 DXライブラリ 
テーマ:瓦

 エンターキーを連打してパワーを溜めて、瓦を割った数を競うゲームです。システムは出来たと思うのでグラフィック面を今後の課題として頑張ります。

1年次 なりょー

開発環境 DXライブラリ 

 どうも。1年次のエターナルデスサイズです。嘘です。なりょーです。
 今回のゲームジャムではunity3Dを使ってエー〇コンバットのような操作を実装したかったのですが、 自キャラが旋回すると前後上下左右がずれていくという問題を残したまま終わってしまいました。
 自キャラの上、前、右に適当なオブジェクトを置いてそれとの相対ベクトルを取ればよくね?と思いつきましたが試していません。また、制作当初はAddForceを使って瞬間的な加速の実装も目指していましたが、慣性の効き具合が納得いかなくてやめました。どうするといい感じになるのか、教えてエロい人。

1年次 UMA

開発環境 Unity

 「カ〇ジの沼」です。音声素材については著作権ガン無視なので未来永劫公開されることのないプロジェクト・・・とのことです。

2年次 まんじゅう

開発環境 DXライブラリ 
テーマ:太陽系、エネルギー

 今回はキーを連打する、タイミング良くキーを押す(2種類)の3種類のミニゲームをこなして、それらで貯めたパワーで太陽系の星々を破壊していく、という感じのゲームを作成しました。○ービィの○ガトンパンチを彷彿とさせますね(似せたつもりは無かったのですが、気がついたらこうなってました。許せサスケ)。
 システム面は完成しましたが、グラフィック面がしょぼい(背景のループ処理位しか実装できていない)ので、今後はちゃんと楽しめるゲームに仕上げていきたいと考えています。

2年次 ズッキー

開発環境 ブレンダー

 ブレンダーを使った初めての作品です。あまり複雑でないもの(ツール?)の中でポケモンのコオリッポを作成しました。
作業を通してブレンダーの基本的な操作を学べたと思います。

3年次 いっちー

開発環境 DXライブラリ 
テーマ:受験戦争

 適度に休憩を取りながら受験勉強に励み、志望校合格を目指すゲームです。
 遊び方は簡単で、勉強や睡眠などの行動を選択してストレスや眠気が限界を超えないように勉強量を増やしていくだけです。
 勉強以外の行動は1回しか選択できず、ストレスや眠気が限界の状態で勉強を選択すると、倒れてしまいゲームオーバーとなります。

 各行動時のパラメータ変化
[ 勉強 ]  勉強量:+1 ストレス:+2 眠気:+1
[ 睡眠 ]  ストレス:-2 眠気:-2
[ お風呂 ]  ストレス:-1 眠気:+2
[ マンガ ]  ストレス:-1
[ お菓子 ]  ストレス:-1 眠気:+1
[コーヒー]  眠気:-2

最後に

 やっぱりゲームジャムはいいですね(いつもの)。
こういう機会があれば初めて触る環境や技術も試そうと思えますし、なにより長時間制作活動に専念できる上に分からない点は他の人から教えて貰えるので、作業が捗ります。
 また、今回は人数が多めだったので、作業中は部屋に活気があったように感じました。次回以降もこのくらいの人数は欲しいなあ(願望)。

 それと、今回はお題を考えずに自分が制作したい物を作っている人が多かったですが、個人的には全然アリだと思います。理由としては、一番大きいのは参加者自身のモチベが上がりやすいからですね。

 他にも色々理由っぽいのはありますが、長くなるので今回は割愛します。この辺りは近いうちにポエム枠の記事で気持ちを語るかもしれません。

 最後まで見て頂きありがとうございました。また次回の報告で会いましょう。

【月一】もう年末ってマ?

実家にいるときは親戚が来たり、餅の準備的なことがあって年末年始感がありますが、一人暮らしだとほんとに何もかんじないですよね。

どーも。kurokuです。

12/30、僕は15時に起きて、16時からRiJのマリオ5リレーを見てからこの記事を書いています。脳みそどこ…?ここ…?

RTA面白いからみんなもみよう!(見よう!)

 

RTAinJAPAN

https://www.youtube.com/channel/UCV8gEA4XEycdFx-myEpokLg

 

 

今回で2019年最後の記事となりますが、そんなの関係なしにつらつらと書いていきます。

さて、今回の題材としては「ゲーム制作でのポインタの使い方」、「ブログのおすすめ」があったのでそれについて触れていきます。

ポインタって何だっけ?

ポインタは変数をメモリ的に直接扱うことのできる型でした。

変数とはあくまでメモリ上のどこかに確保された領域であり、そのアドレスを指し示すのがポインタです。ポインタは*や&といった演算子を用い操作を行います。

*aと書けばアドレスaに格納されているものを表すことになりますし、&aなら変数aのアドレスを表すことになります。

例えばaをint型としてscanf(“%d”,&a)と書いた場合、変数a(のアドレス)に入力した値を格納します。ここで、aをはじめからアドレスを表す方で宣言した場合は以下のようになります。

int main() {
  int a_;
  int* a = &a_;         //ポインタは初期化が必須
  scanf(“%d”, a);       //3を入力
  printf(“%d\n”, *a); //3
  printf(“%d”, a_);     //3
}

scanf()入力された値をアドレスに格納するので、int*で宣言されたaには&をつける必要がありません。またa_とaは実質的に同じアドレスを指しているので、a_に入力していないにもかかわらず*a(アドレスaの中身)に値が格納されたことで、a_にも値が入ったということになっています。

ポインタを使おう! 使お… 使うの…?

さて、このポインタという概念ですがゲーム制作をする上では全く(は言い過ぎですが)意識する必要がないことが多いです。

皆さんはメモリを意識してゲームを作っているでしょうか?

「この値は高々10000だからshort型でいいや」とか「そんなに精度いらないからfloatで」とか考えてないですよね。その理由はリソースがたくさんあるからです。皆さんのPCのドライブは何GBくらいでしょうか。どんなに少なく見積もっても100GBはありますよね(知らんけど)。ゲーム会社が販売してるゲームでも100GBのメモリを必要とするゲームはないでしょう(多分)。

つまりラズパイなどのハードウェアをいじるのを除けば、メモリを意識する必要なんて今のご時世そうそうありません。なのでポインタのことなんて今年で忘れちゃいましょう!

なんて言うと思ったか!

いや、その通りなんですが、普通にプログラミングをしていてもポインタを使えると便利な場面が多々あります。

最たるものが関数への参照渡し。

以下のプログラムを考えます。

void f(int a,int b) {
  a = a + b;
}

void g(int* a, int* b) {
  *a = *a + *b;
}

int main() {
  int a = 3, b = 5;
  f(a, b);
  printf(“%d\n”, a);
  g(&a, &b);
  printf(“%d\n”, a);
}

これを実行すると

と表示されるはずです。ほとんど同じ関数なのになんで結果が違うのか、そもそもfでa=a+bされているんだから最初の表示も8じゃないのかという疑問が起こりますね。

なぜこんな挙動になるのか、関数では変数をコピーし、その新たな変数を変更するからです。

つまり上のプログラムで、関数fのaとmain関数内で定義したaのアドレスは異なり、関数fで足し算を行ったaはmain関数のaとは何の関係もないのです。

一方で、gではaのアドレスを関数に渡していますね。これを参照渡しといい、関数g内のaとmain関数内のaは同じものです。

 

これによって、ポインタを使えば関数内で変数の値を変更できることがわかりました。

ただし上のプログラムは関数fをvoid型ではなくint型にしてaを返せばよいです。これではあまり恩恵があるとは言えません。

 

しかし、複数の変数に対して操作を行いたい場合はどうでしょうか?

C言語では複数の型をまとめて扱う型がないので、複数の型の変数を返り値とする関数を作ることができません。

ここで参照渡しが威力を発揮するわけです。なぜなら返り値がいらないので。

 

また、ポインタが使われている代表的な構造として配列がありますが、C言語では固定長(つまり長さを決めたら増減できない)の配列しか宣言できません。が、mallocやcalloc、new演算子などを使うと任意の長さの(つまり可変長の)配列にすることができます。

これもメモリ上のアドレスをいくつか確保することにより実現されているのですが、メモリの領域にも種類があり、<s>よくわからない</s>複雑なので割愛します。

 

ということで、ゲーム制作に使うだろうポインタ知識はこのくらいで。

ブログは何がいいのか?

次の話題です。

ブログ始めたいけど、おすすめのブログあるか~って感じでしょうか。

自分もブログの種類詳しくないので、ゆる~く紹介していきます。

 

まずブログを2種類に分けたいと思います。

①発信のためのブログ

②まとめノート的なブログ

です。

 

①は自分が書いた記事をいろんな人に見てもらって、コメントをもらいたい。アフィで稼ぎたい。意見交換がしたい。など不特定多数に見られるのを前提とします。

一方で②はあくまで自分用。まとめノートやメモ書きなどとして書くものとします。

(正直非公開設定があると思うので分類がしなくてもですが)

 

①の代表例:

WordPress、はてなブログ、アメブロ、Qiiita

とかですかね(詳しくはhttps://ferret-plus.com/1301

 

②の代表例:

ScrapBox、note

とか…?(正直非公開にすればいいので

 

特に、理工系のまとめを書きたいならLaTeXで書けるScrapBoxがおすすめです。

 

LateXのコマンド一覧:

https://medemanabu.net/latex/latex-commands-list/

 

ただ、見やすくなりますが書くの面倒です。

また手書きしたものを画像として載せることもできます。(ペンタブ的なの持っていればそっちの方が楽)

 

あ、31日になりました。

 

まとめ

 

 

 

 

特になし。

 

ということで2019年最後の記事でした。

来年はインターン、TOEIC、研究室配属と大学が牙を剥いてくる一年になるかと思いますが、競プロやソフト製作も続けていきたいですね。

 

以上、kurokuでした~

【月一】競技プログラミングに触れる回

こんにちは、kurokuです。先月から始めたこの【月一】企画、第二回にして期限ぎりぎりとなってしまいました。先が思いやられますね。とりあえず年度内はこのペースを保っていきたいです。

題材提供

前回ホワイトボードで募集した題材の中に「DxLibで3D」というのがありました。これは厄介だ。なんといってもDxLibは2Dですら結構大変なコードの記述が必要です。例えば当たり判定なんかも、実装自体は軽めですが上下左右に適用したり、足場のふちに当たった際の判定など書かなければならないことが多くなってしまいます。

まぁDxLibのサンプルゲーム見ればなんとなくわかるやろ、と思って以下のページを見てみました。

https://dxlib.xsrv.jp/program/dxprogram_3D.html

その中でもゲームを作るのに重要そうなのは1とか19かなーってコードを眺めていました。

???

いや、それぞれどういう動作なのかはなんとなくわかりそうですが、デバッグ用のオブジェクトを置くのにも大変そう、変数の存在範囲が広すぎてパラメタがどんどん増えそう。といった感じがしてきてア。

そこで今回のタイトルは何だったでしょう?「競技プログラミング」?3Dゲームは?

はい、3Dゲームについての記事は書けませんでしたぁぁぁぁぁ

3Dゲーム作るならUnity使おう!マウス操作だけでオブジェクトが生成できる!(すごい!)Unityちゃんかわいい!

というわけで3Dゲームを作ってみたいって人はUnityをお勧めします。というかUnityなら何でもできます。(Unityがこの世界を作ったといっても過言

https://unity.com/ja

Unityは何といってもAsset storeが充実しています。Assetというのはいわば、物とか材質とかです。月末報告会でのまんじゅう君のUnityちゃんやYutaさんの車がそうです(多分)。これらには基本的なプログラムがあらかじめ作成されており、ゲームの動きさえ書いてしまえばOKという感じです!

ただ、Unityで使われている言語はC#で、バリバリにオブジェクト指向の考えを取り入れています。なのでC言語から入った人だとコードの違いに混乱してしまうかもしれません。幸い、ブログ記事などが多く書かれているので、C#が書けなくても調べさえすれば大丈夫なことが多いです。

本題

やっと前回の言い訳説明が終わったので、競プロの話をば。

競プロとはなんぞやというのは以前ガナリヤさんが書いた記事があるのでそちらを参考に。

http://akitatnp.wp.xdomain.jp/2019/03/23/tnp%e7%ab%b6%e3%83%97%e3%83%ad%e6%94%af%e9%83%a8%e3%81%ae%e6%b4%bb%e5%8b%95%e7%b5%90%e6%9e%9c%e3%81%a8%e4%bb%8a%e5%be%8c%e6%98%a5%e3%81%ae%e3%83%9d%e3%82%a8%e3%83%a0%e6%9e%a0/

(これリンクを短縮形で貼るのどうやってやるんだろうか

こうゆうのもあるよっていう紹介・体験を来週の水曜か金曜にやろうと思ってます。(2019/11/30現在)

冬コミのゲームできて(僕はまだ作ってませんが)当分はすることないやって人や少しでも興味があるって人は挑戦してもらいたいです。

内容としてはごくごく簡単めな問題を実際に解いてもらうって感じにしようと思います。配点としては100-100-100-200-200-300くらい?基本的に標準入力(scanf)、標準出力(printf)、if、for、配列ぐらいがわかっていれば解けるような問題を用意します。(1時間くらいを想定)

100点問題なんかはほんとに入力して、四則演算して、出力みたいなものですし、300点は少し頭を使うような問題と思ってもらえればいいと思います。

日本だとAtCoderが大きいコンテストサイトですかね。(来週の問題もAtCoderの問題を出題します)

https://atcoder.jp/?lang=ja

(ほぼ)毎週土曜21時からコンテストが開催されてます。よかったら参加してみましょう。

まとめ

競技プログラミングは名前からしていかついと思われがち(いや、しらんけど)ですが、やってみると楽しいです。競プロにはまっている人を見るとそんなに時間をとれないと思うかもしれませんが、たまに参加してみるでも全然いいと思います。

毎年夏~秋には大学対抗のICPCという世界規模の大会も開催されます。僕は学部生の内に一回は予選を突破して、横浜大会に出てみたいです。もし、一緒に出てくれる人がいたら全力でサポートするので、来週の回はそれの足掛かりにしてもらえればと思います。

そんな感じでまた来月~

kurokuでした!

ゲームジャム(文化の日編)

はじめに

 こんにちは。まんじゅうです。秋大祭お疲れ様でした。秋大祭という一大イベントも終わったことで、ついにTNPにも代替わりの時期が訪れ、新会長になりました。改めて、これから一年よろしくお願いします。

 本題に入りますが、11月2日(土)にゲームジャムを行いました。今回は企画したのが前日だったため、あまり集まらないだろうと思いましたが、参加者は4人とそこそこ集まりました。今回は文化の日前日ということで、「食欲の秋」、「運動の秋」、「芸術の秋」にちなんだお題として、「目玉焼き」、「障害物競走」、「一筆書き」の3つを(単語ガチャで)設定しました。

 参加者から成果物の紹介とコメントを貰っているので、 そちらも見ていただけたらなと思います。

制作物一覧

1年次 ハイブリッジ

開発環境 DXライブラリ

 このゲームは、自機である白い丸を操作して赤い丸に見つからないようにゴールを目指すゲームです。今回は自機と敵、フィールドと敵の視界まで実装できました。今後は敵の行動とスタート、ゴールを実装して、ゲームとして遊べるように頑張りたいです。

2年次 まんじゅう

開発環境 Unity

 「障害物競走」というお題があったので、3Dのシンプルな障害物競走を作ってみました。Unity初日でどこまでできるかやってみようと思って始めましたが、ほぼコーディング無しでゲーム部分が作れたのでとても驚きました。今後はシーン遷移を実装してタイトル画面とクリア画面を作って遊べる形のゲームにできるよう頑張ります。

3年次 いっちー

開発環境 DXライブラリ

 お題のひとつ「目玉焼き」を飛ばすゲームです。マウスをドラッグすることで、目玉焼きの飛ばす方向と力を決定します。目玉焼きをお皿の上に乗せることができればゲームクリアとなりますが、床の上に落ちるともう一度となります。

 ゲームジャム終了後に思い付いた上に、開発期間として1週間ほどかかったので、限られた時間でゲームを作るゲームジャムの趣旨とは違うものになってしまいました。

 ゲームジャム当日は、目玉焼きを作るゲームを作ろうと思ったのですが、良い案が浮かばず、ただ卵を割るプログラムができました。

4年次 HIM

開発環境 Webアプリケーション

『お絵かきソフト』

お題: 一筆書き
という訳で、作りました。
一筆ではないですが(挫折しましたorz)、お絵かきできます。

Javascriptとcanvasで作りました。

マウスで描きます。色とペンの太さを選べます。

一筆書がどーしても動かなくて断念したのが悔しかったです。次こそは…

最後に

 やっぱりゲームジャムは良いですね(テンプレ)。やる気も出ますし、何か新しいことにチャレンジする機会にもなるので。冬休みとかにまた開催したいですね。

 それと、今回試験的に1日だけの超短期間ゲームジャムを開催しましたが、皆ある程度形になっていて良かったです。これの影響でジャムの参加ハードルが下がればいいなと思います。

 それでは今回はこのあたりで。最後まで読んでいただいてありがとうございました。また次回のゲームジャム記事(多分)で会いましょう。

【月一】C++っておいしいの?

はじめに

お待たせ。待った?どうもプログラミングサークルTNP所属の広報担当kurokuです。(キツ…

先日サークル内で役職の引継ぎがあり、見事、広報担当(ブログ・Twitter更新)になってしまいましたなりました。

引継ぎの際に反省会も行われ、更新頻度について触れました。いい機会なので僕の目標というか、目安として(最低でも)月一回はブログを更新していきたいと思います。

 

そうはいうものの、毎月更新するとなると話題がなくなります。ただでさえ僕はグラブル、YouTubeでしか時間をつぶしていない気がするので、こんなことなら別に書かなくてもいいよなぁとか思うわけです。(むしろ書かない方がいい

そこで、サークル室のホワイトボードにブログの題材として質問などを受け付けようと考えました。誰でもいいのでゲーム制作でわからないことやプログラミングについてなどどんなことでもいいので書いてみてください。(コメント等でも歓迎です!

それについて僕が少し勉強して、このブログでできるだけ簡潔に、情報共有ができればなと思います。

(ただ、あまりにおじさんを悩ませるような難しい質問をすると僕の独断でなかったことにしてしまうかもしれません…)

 

C++ってどうなの?

さて、いよいよ本題です!ホワイトボードに早速題材が書いてありました。

「C++について」

 

いやいや。。

(雑じゃない?)

 

まぁいいんです。書きます。こんな感じでどんどん題材ください!

(できればもうちょい具体的に!

C++とは、手続型プログラミング言語であったC言語にオブジェクト指向やジェネリックプログラミングの考えを取り込んだ言語です。それぞれわかりやすく言うと、

・手続型

 プログラムを順番に実行していく

・オブジェクト指向

 オブジェクト(データと処理内容)ごとに独立させる考え

・ジェネリックプログラミング

 型などを意識させないように抽象化して記述する

といった感じ。

一見してC言語をもりもりにパワーアップさせたのがC++といった感がしますが、それは間違いありません。

しかし、そんなC++にも弱点はあります。

それは文法が難しいこと。

 
(僕はC言語由来のプログラムしか書けないのでわかりませんが)多重継承というのを組み込んだせいでポリモーフィズムにも影響が出たりでなかったり(?)
 
 
 
 

よくわかんないですねーー。

 
 
 
ですがサークル内でゲームを作る分には使えて損はないです。ライブラリもリファレンスも結構多めですし、何よりC言語が書ければC++も書ける!

これで終わってもいいんですが、内容がなさすぎるのでどんなことができるのかについて軽く触れたいと思います。

#include<iostream>

#include<string>

int main(void) {

std::string s = “hello”;

std::cout << s << std::endl;  //hello

       return 0;

}

C言語だとchar型の配列で書く必要があった文字列もC++ではstring型(正確にはstringクラス)に格納することができます。それに加え、文字列同士の足し算や部分文字列(例えば”ell”)を取り出したりなんかもできます。

std::cout<<s+s<<std::endl;  //hellohello

std::cout<<s.substr(1,3)<<std::endl;  //ell

#include<iostream>
#include<vector>
int main(void) {
  std::vector<int> vec;
  vec.push_back(0);
  vec.push_back(1);
  vec.push_back(2);
  for (int i = 0; i < vec.size(); i++) {
    std::cout << vec[i] << std::endl;  //0,1,2
  }                   

      return 0;
}

vector型(クラス)は配列とほとんど同じ挙動をします。ただ、宣言の部分で要素数を書いていないにもかかわらず値を格納することができています。

vectorは可変長配列と言われ、要素数を自由に変化させることができます。上の例だと宣言時は要素数は0でしたがpush_back()するたびに自身で要素を増やし格納しています!(push_backは末尾に格納するメソッド(関数))

さらにvectorはジェネリックプログラミングの要素も持っています。宣言する際にvector<int>としていますが、これはint型を要素に持つvectorを宣言しています。たとえばintの部分をdoubleやboolあるいは、自作の型MyDataとしてもvector<int>と同じく扱うことができます!

最後に紹介するのは演算子のオーバーロードです。

関数やデータ構造をユーザ側で定義できるのは知っていると思いますが、演算子についてもユーザが定義することができます!

例えば、

#include
#include
std::vector<int> operator*(const std::vector<int>& vec, const int& t) {
  std::vector<int>v(vec.size());
  for (int i = 0; i < vec.size(); i++) {
    v[i] = vec[i] * t;
  }
  return v;
}
int main(void) {
  std::vector<int> v = { 0, 1, 2, 3, 4 };
  v = v * 5;
  for (int i = 0; i < v.size(); i++) {
    std::cout << v[i] << std::endl;  //0,5,10,15,20
  }
  return 0;
}

と書いてみます。本来vector<int>*intなんてできませんが自分で*を定義することでそれを実現できてしまいます!

しかし、演算子オーバーロードを闇雲に使うと演算子本来の挙動と整合性が取れなくなりとても危険です!詳しいことは各自で調べてもらうとして、できるだけあらかじめ実装されているものを使うようにしましょう。

まとめ

大したこと書いてないのでまとめもくそもないんですが、まぁC++はいろいろ楽だよってことが伝わればいいかなと思います。興味が出てきた人はC++について調べたり、聞いたりして闇をのぞき込んでみればいいと思います。

こんな感じの雑まとめをこれからも月一以上で出していくのでどうぞお楽しみに!kurokuでした~。

ゲームジャム(夏休み編)

はじめに

 こんにちは。2年次のまんじゅうです。
記事を書くのは初めてなので、変なところとかあるかもしれないですが、どうか温かい目で読んでくれればと思います。

 今回のゲームジャムは8月14日と15日に開催しました。お盆でしたがそこそこ参加者がいて嬉しかったです。
 また14日、15日のどちらも猛暑日だったので、誰も熱中症にならなくて良かったと思います。

 今回はお題に沿って何か作るのではなく、なるべく自分で考えて制作する、という方向で企画していました。
 そのため、お題ではなく、あくまで何を作るか思いつかない人への救済措置として「倉庫」、「火」、「駐車場」、「重力」、「落とす」という単語を提示しました。

作品紹介

1年次 UMA

開発環境 DXライブラリ

 初年次講義で扱った「フラッピーバード」のソースコードを元に作ったそうです。
飛んでくる敵を避けたり、うまく弾を当てたりしてスコアを稼ぐゲームとなっています。
 元にしたゲームがある、という点を加味しても、初めての制作物としては完成度が高いと思いました。

2年次 たか

開発環境 DXライブラリ

 卍型の自機が卍の先端から放つ攻撃を敵に当てる、というゲームのようです。
攻撃を放つと、次の攻撃が可能になるまでの待機時間が発生したり、敵がランダムで生成してされた瞬間に攻撃されないよう、
敵の攻撃不能時間を設定していたりと、細かいところまで作り込んでいると感じました。

2年次 まんじゅう

開発環境 Siv3D

 「街コロ」というボードゲームを作ってみようと頑張ってました。
ダイスを振る機能と、出た目による建物の効果の処理は実装できたのですが、
 時間が足りなかったために建物購入の処理が完成せず、ゲームとしてはまだ成り立っていない状態です‥。

2年次 ズッキー

開発環境 Unity

 今年の夏コミに出した迷路ゲームを改良したものだそうです。
ランダムで壁を生成するようにし、それによって起こりうる詰み状態を防止するために壁を壊す機能を追加したそうです。
 また、壊した壁の種類と枚数によってゲーム終了時のスコアが増減するようにして、高いスコアを出すにはしっかり迷路を歩かないといけないようになっていました。

3年次 いっちー

開発環境 Unity

 なんと時間内に2作品完成していました。
 1つが火事の建物から人を避難させるゲームで、円形の足場を操作して障害物を避けつつ、小島まで避難させる、というものでした。
足場で人がバウンドする上に、小島が小さいため、難易度は高そうに見えました。

 2つめが、人を前に飛ばして、乗るとジャンプするキノコを駆使して停止するまでの距離を競うゲームでした。
地面に人がぶつかって転がり、その先のキノコに当たってまたジャンプ、という動きをしていたので、見ていて面白かったです。

3年次 うおちー

開発環境 Unity

 下に重力がかかっている空間で、上下に移動して火の玉を避けるゲームです。
当たり判定が実装できていないとのことですが、ゲームとしてはほとんど完成しているように感じました。

最後に

 やっぱりゲームジャムは良いですね。
他の人のアイデアやコードの組み方などを見て学べる機会になりますし、自分の制作活動への意欲も高まります。
 夏休みは長いのでだらけてしまいがちですが、今回の会でのやる気を思い出して頑張って制作していこうと思います。