「龍神録2プログラミングの館」を開設しました [雑談]

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

「龍神録2プログラミングの館」を開設しました [雑談]

#1

投稿記事 by Dixq (管理人) » 2年前

龍神録2の作り方を解説するサイト「龍神録2プログラミングの館」を開設しました。
現在17章まで出来たので公開します。
龍神録2をそのままオープンソースにすると、チートされたり海賊版が出たり原作に被害が出るので、
悩んだ結果、龍神録2と似た公開用の別のゲームをもう一つ作って公開することにしました。

http://dixq.net/rp2/

このサイトではC++によるオブジェクト指向で中規模以上の設計実装をする方法を紹介していきます。
またデザインパターンや先人のTips等を組み込み適切な設計を目指しています。
特に序盤ではシーン管理や異なる画面間でのデータの受け渡し、ゲームの骨格の作り方などを紹介しており、
ここでの質問で過去によくあったことを解決できる手伝いになるのではないかと思います。

公開しているコードに突っ込み等あれば是非お願いいたします。

アバター
にこよん
記事: 112
登録日時: 2年前
住所: 大阪府
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#2

投稿記事 by にこよん » 2年前

竜神録2も解説サイト作られたんですね!!
お疲れ様です。

ゲームプログラミングの館と竜神録プログラムの館ではとてもお世話になりました。
早速見てきたのですがサイトが完成するのが楽しみです。
竜神録の館よりも本格的?そうで時間ができたら読むのを楽しみにしています。
それと DXライブラリ著作権表記 のリンクが昔のホームページなのですが、これは仕様でしょうか?
(他のサイトもDXライブラリのホームページのリンクが古いのが多かったような...)
最近は東方風アクションゲームを少しずつ作ってる人です
東方翠風燐FreeDownload⇒http://dxlib.o.oo7.jp/cgi/patio/read.cgi?no=212

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#3

投稿記事 by Dixq (管理人) » 2年前

にこよんさん

ご指摘ありがとうございます。
著作権表記はずっと古い物をコピペして再利用しており、実際にクリックして確かめていなかったので気づきませんでした。直しておきます。

旧龍神録プログラミングの館はC++ではなくC言語による設計方法で、なるべく難しい構文を使わない等をモットーに作ったものの、
適切な手法より簡単な手法を最大限選出して作っていった結果とんでもないコードになってしまって・・。
一度開設したら、閉館しようにも閉館しては困るとの声で閉館できず困っていました。
龍神録2プログラミングの館では、しっかり適切な方法で設計できるように心がけています。
その分C++の知識やオブジェクト指向設計の知識がいるので難しい内容にはなりますが、今後は新しい方を見て頂きたいです。
龍神録2プログラミングの館が完成したら、旧館の方は徐々にフェードアウトするようにしていきます。
(消しはしないのでどこかにリンクを残しておくと思います)

だんきゅん

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#4

投稿記事 by だんきゅん » 2年前

「龍神録2プログラミングの館」開設おめでとうございます!
2が公開されてから、フルボイスとはいかないまでも「SE程度にボイスが入るSTGを作りたい」と思い、過去の館で勉強していました。

今後も勉強してSTGを一本完成させるつもりでいますが、そもそもC言語にも触れたことがない者です。
いきなりC++ & DXライブラリを勉強するにあたり、「この本は参考になるよ」みたいな書籍はありますか?
(やさしいC言語かやさしいC++を購入して基礎を勉強しようと思っているのですが…)

アバター
にこよん
記事: 112
登録日時: 2年前
住所: 大阪府
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#5

投稿記事 by にこよん » 2年前

> Dixq (管理人)

今でさえC++の知識やオブジェクト指向設計の知識は薄いので勉強を始めたころのわたしは
竜神録プログラミングの館ぐらいのコードじゃないと理解できなかったので、
初心のわたしが本格的なゲームを作るための基本的な知識を得るのにはとてもよかったのです。
竜神録2プログラミングの館はヘッダファイルの量が多かったので初心の頃に見たらやる気がそがれそうです(笑)


>だんきゅんさん

C言語は入門サイトが多いため最初からわざわざ書籍を買う必要はないと思います。
C言語だけでもゲームは作れますし、まずは↓サイトでC言語の基礎を覚えてから
http://9cguide.appspot.com/
新・ゲームプログラミングの館で勉強すれば簡単なゲームは作れるようになります。
http://dixq.net/g/
シューィングを作るならそのあとで竜神録プログラミングの館や竜神録2プログラミングの館を見るというのがおすすめです。

それとも書籍である必要があるのでしょうか?
最近は東方風アクションゲームを少しずつ作ってる人です
東方翠風燐FreeDownload⇒http://dxlib.o.oo7.jp/cgi/patio/read.cgi?no=212

アバター
にこよん
記事: 112
登録日時: 2年前
住所: 大阪府
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#6

投稿記事 by にこよん » 2年前

それとここに書くべきじゃないかもしれませんが、
下のようにコードとして貼り付けた時に表示される[すべて選択]ボタンをクロームでクリックすると
なぜかページの一番上に飛ばされてしまいます。
他のブラウザではちゃんと選択されるのですが...
クロームの設定の問題だったりするのでしょうか?
修正できるようなら修正していただけるとありがたいです。

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
    {
         return -1;    // エラーが起きたら直ちに終了
    }

    DxLib_End() ;        // DXライブラリ使用の終了処理

    return 0 ;        // ソフトの終了
}
最近は東方風アクションゲームを少しずつ作ってる人です
東方翠風燐FreeDownload⇒http://dxlib.o.oo7.jp/cgi/patio/read.cgi?no=212

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#7

投稿記事 by みけCAT » 2年前

にこよん さんが書きました:下のようにコードとして貼り付けた時に表示される[すべて選択]ボタンをクロームでクリックすると
なぜかページの一番上に飛ばされてしまいます。
他のブラウザではちゃんと選択されるのですが...
うちの環境(Windows 7 x64)では、Firefox 55.0.2 (64 ビット)でも再現します。
コンソールを見ると、

コード:

08:03:38.389 IndexSizeError: Index or size is negative or greater than the allowed amount 1 forum_fn.js:208
	selectCode http://dixq.net/forum/styles/cboard/template/forum_fn.js:208:4
	onclick http://dixq.net/forum/viewtopic.php:1:1
と出ました。
また、Google Chrome 60.0.3112.101(Official Build) (64 ビット) では、

コード:

forum_fn.js:208 Uncaught DOMException: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset 300.
    at selectCode (http://dixq.net/forum/styles/cboard/template/forum_fn.js:208:6)
    at HTMLAnchorElement.onclick (http://dixq.net/forum/viewtopic.php?f=3&t=19493:499:321)
selectCode @ forum_fn.js:208
onclick @ viewtopic.php?f=3&t=19493:499
と出ました。

この不都合は報告済みです。

ただし、Internet Explorer 11.0.9600.18738 では正常に選択されました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

inemaru
記事: 108
登録日時: 3年前

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#8

投稿記事 by inemaru » 2年前

毎度、お世話になっております
「龍神録2プログラミングの館」開設おめでとうございます
Dixq (管理人) さんが書きました: 公開しているコードに突っ込み等あれば是非お願いいたします。
早速ですが、「龍神録2プログラミングの館」の公開コードの命名規則について
素人目で申し訳ないのですが、質問です。

下記等のように、公開されているコードの変数名が、アンダースコアから始まっていることについての疑問です。

コード:

std::map<std::string, int> _map;
自分の認識として、アンダースコアから始まる変数名は、C++において推奨されない認識ですが、
こういった命名規則になっている経緯などありますでしょうか。
MSDN 予約名 さんが書きました: 予約名

コードの規格への準拠と移植性を最大限に保つため、自分のプログラムでこのような名前を定義することは避けてください。
この規定を覚えやすくするため、2 連のアンダースコア文字と
先頭のアンダースコア文字は言語やスコープに関係なく常に避けるのがよいでしょう。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#9

投稿記事 by Dixq (管理人) » 2年前

だんきゅんさん

ありがとうございます。
そもそもC言語にふれたことがないとなるといきなり龍神録2プログラミングの館の内容は難しいと思います。
クラスのことやC++の一般的な知識はある前提で解説しています。
DXライブラリの知識はゲームプログラミングの館の内容が一通り理解できるレベルも前提にしています。

龍神録2プログラミングの館の位置付けは「中級者以上の人が本格的で適切な大きなコードの設計をする方法を学ぶ」としています。
言語を触ったことも無いレベルであれば、まずは言語の勉強をし、ゲームプログラミングの館を見ながら少しずつ小さいゲームでもいいので自分で作ってみる所から始めてみて下さい。

C言語の学習をする時にお勧めの本はこちらです。


C++を初めて勉強するならこの辺がとっつきやすく読みやすいでしょう。


参考書というものは人によって読みやすいと感じる感じ方が違うので、大きな書店に行って端から読んでみるのが良いです。
自分にあった参考書を探してみて下さい。
C言語、C++の入門書は山ほどあります。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#10

投稿記事 by Dixq (管理人) » 2年前

にこよんさん

適切さを削らずに分かりやすさに特化出来ればいいんでしょうけど、私にはその技量がありません・・。
今回は思い切って中級者以上をターゲットに絞ることで住み分けをしようと思っています。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#11

投稿記事 by Dixq (管理人) » 2年前

inemaruさん

> 先頭のアンダースコア文字は言語やスコープに関係なく常に避けるのがよいでしょう

という表現は個人的には言い過ぎというか間違いかと思います。
言語が違えば文化も違うし、仕様も異なります。
例えばJAVAでは先頭にアンダースコアにする記法がかなり一般的だと思います。
C++では言語仕様として予約語は
・アンダースコアの次が大文字
・アンダースコアが2連続
であるので、1つのアンダースコアの次が小文字であれば予約語ではありません。
C++の予約語の表現に近いから似ている物は全て避けなさい、しかも言語が何の言語であったとしても、という表現は乱暴過ぎだと思います。

とは言え、C++ではメンバ変数にアンダースコアを付けることが一般的ではないこと承知しています。
ただ私はJAVAを書いている時間の方が圧倒的に長いのでJAVAの慣習に慣れてしまい、私がかきやすいのでこの表記を使っています。
言語仕様上間違いではないので、JAVAの慣習をそのまま流用していますが、気持ち悪ければアンダースコアをmに書き換えてもらっても構いません。

だんきゅん

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#12

投稿記事 by だんきゅん » 2年前

>にこよんさん

 ご返信ありがとうございます!
書籍だと電車の移動中や仕事の休憩中に読めるかな~と思っていたのですが、よく考えたらそんな短時間で理解できるほど簡単じゃないですね(汗) 確かにネット上にも勉強できるサイトがありますので、覚えていきたいと思います。


>Dixq(管理人)様

 ご返信ありがとうございます!
  >まずは言語の勉強をし、ゲームプログラミングの館を見ながら少しずつ小さいゲームでもいいので自分で作ってみる所から始めてみて下さい。

 「いきなり大作を作ろうとすると挫折しやすい」と説よく聞きますので、ゲームプログラミングの館の内容に沿って勉強して、「まずは1面を完成させる」を目標にしたいと思います。また書籍の紹介もありがとうございました。大型電気店ではなく大型書店へ行って、基礎の基礎が学べるものを探してみようと思います。

>にこよんさん、管理人様
 お二方とも、ご返信ありがとうございました!

inemaru
記事: 108
登録日時: 3年前

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#13

投稿記事 by inemaru » 2年前

Dixq (管理人) さんが書きました: とは言え、C++ではメンバ変数にアンダースコアを付けることが一般的ではないこと承知しています。
ただ私はJAVAを書いている時間の方が圧倒的に長いのでJAVAの慣習に慣れてしまい、私がかきやすいのでこの表記を使っています。
言語仕様上間違いではないので、JAVAの慣習をそのまま流用していますが、気持ち悪ければアンダースコアをmに書き換えてもらっても構いません。
ご回答ありがとうございます。
経緯について、承知いたしました。
命名規則自体には違和感はないのですが、C++でこの規則を使用している点が気になって質問しました。
オフトピック
(説明足らずで、うまく伝わらなかったので、)
一応、あとで読まれる方のためにMSDNの方のフォローをしておきますと、
「コードの規格への準拠と移植性を最大限に保つため」という前提の上に、
「2 連のアンダースコア文字と先頭のアンダースコア文字は”言語やスコープに関係なく”常に避けるのがよいでしょう。」
と書かれています。
「言語やスコープに関係なく」と書かれているのは、
C++への移植を考慮するための記述なので、そもそも移植しないのであれば、
他の言語では、気にする話ではないです。
Dixq (管理人) さんが書きました: という表現は個人的には言い過ぎというか間違いかと思います。
言語が違えば文化も違うし、仕様も異なります。
C++以外の話になっていたので、捕捉でした。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#14

投稿記事 by Dixq (管理人) » 2年前

だいきゅんさん

最初のうちは左手には教科書、目の前にはPCとコンパイラを用意し、教科書に書いてあるコードをコンパイラに自分で手打ちし、あれこれ変更して実行結果がどう変わるのか確認しながら学ぶことをお勧めします。
ある程度慣れて来たらコンパイラなく、ただ通勤中に読むだけでも身に着くと思います。


inemaruさん

既述されている背景に移植があることは把握しています。
ただ他の言語で書かれた物をC++に移植する作業は巷にいくつか変換ツールはあるもののメンバ変数を揃える位で簡単化できるような物でもないと思いますし、
AndroidStudio3.0でJAVAからKotlinへIDEが全力でコード変換をサポートしてくれるような仕組みが無い限り
乱暴な決まりを守ってまで得る恩恵は少ないと考えます。

なお、最近のコンパイラはコマンド一つでメンバ変数の名前が変えられるので気になれば変換すればいいと思いますが、
そもそも予約語を犯していないので気にする必要が無いという考えです。

inemaru
記事: 108
登録日時: 3年前

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#15

投稿記事 by inemaru » 2年前

Dixq (管理人)さま

管理人さんの考えとしては、
  • (C++で一般的でないものの)規約違反をしているわけでないし、
    MSDNの命名規則を使用しても得られる恩恵は少ない
  • 気になるならリファクタできる
ということと把握しました。
お手数おかけしました。

ぽん

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#16

投稿記事 by ぽん » 2年前

ページの18章の
関数ポインタ movePattern[] = { &movePatter00, &movePatter01, &movePattern02};
のmovePatter00とmovePatter01はmovePattern00とmovePattern01なのでしょうか?

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: 「龍神録2プログラミングの館」を開設しました [雑談]

#17

投稿記事 by Dixq (管理人) » 2年前

すみません、スペルミスです!直しますね。

返信

“C言語何でも質問掲示板” へ戻る