c++で桃電のような人生ゲームを作るには

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
村人Cに昇格

c++で桃電のような人生ゲームを作るには

#1

投稿記事 by 村人Cに昇格 » 13年前

毎度毎度この掲示板のお世話になっている者です

この前学校の提出物用に龍神録を基に作った弾幕系シューティングゲームを作成させていただきました。
龍神録の製作者様並びに関係各所様に大変感謝をしています。

今回、学校の教師から
「作ったゲームが面白かった!
卒業までに桃電みたいなボードゲームって作れる!?」
と依頼されました。

僕自身プログラミングを初めて半年の超初心者ですし
(弾幕ゲーを作れたのも周りの同級生からのアドバイスや先生のすばらしい指導のおかげ)
作成してる中でとても勉強になることだらけだったためかなり不安ではあります。

ここで

◆人生ゲーム(桃電に限らず)などのボードゲームを作成するにはc++でも十分作成できるのかどうか
◆オープンソースの見本などはあるかどうか
◆ボードゲームを作成する上で最低限必要な考え(アイデア・アドバイス)やゲーム機能

などを教えてくださると嬉しいです
長くなり大変申し訳ございませんm( __ __ )m

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: c++で桃電のような人生ゲームを作るには

#2

投稿記事 by beatle » 13年前

村人Cに昇格 さんが書きました: ◆人生ゲーム(桃電に限らず)などのボードゲームを作成するにはc++でも十分作成できるのかどうか
◆オープンソースの見本などはあるかどうか
◆ボードゲームを作成する上で最低限必要な考え(アイデア・アドバイス)やゲーム機能
ボードゲームに限らずゲーム業界ではC++が人気だそうです。
原理的にはC++で作ることができます。
十分というより、他のどの言語よりもゲーム作成能力は高いと思いますよ(C++を使いこなせれば、の話ですけども)。

プログラミング半年でオープンソースのソースコードが読めるかどうか分かりません。
そして僕はオープンソースのボードゲームの例を知らないので教えられません。ごめんなさい。

ボードゲームを作り始める前に、色々なボードゲームの共通点と相違点を列挙したらどうでしょうか。
その共通点は色々なゲームで共通に使えるクラスになるでしょうし、相違点はゲーム別のクラスになるでしょうね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: c++で桃電のような人生ゲームを作るには

#3

投稿記事 by softya(ソフト屋) » 13年前

◆人生ゲーム(桃電に限らず)などのボードゲームを作成するにはc++でも十分作成できるのかどうか

C++で出来なかったら他の言語でも出来ないと断言しておきます。
と言うよりC言語でも十分です。もしかしてC言語とC++の違いが区別できていないのでは?

◆オープンソースの見本などはあるかどうか

オープンソースも見たことが無いですし龍神録を完璧に理解できていれば必要ないと思います。
他の言語ならソースコードが公開されていますけどね。

「すごろくのソースと解説」
http://www.shurey.com/Soft/JS/craft/sug ... ource.html

◆ボードゲームを作成する上で最低限必要な考え(アイデア・アドバイス)やゲーム機能

まず、マップ表示ができないと話になりません。
それとボード上のコマを進める道の管理でしょうね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

村人Cに昇格

Re: c++で桃電のような人生ゲームを作るには

#4

投稿記事 by 村人Cに昇格 » 13年前

beartle様
ボードゲームを作り始める前に、色々なボードゲームの共通点と相違点を列挙したらどうでしょうか。
その共通点は色々なゲームで共通に使えるクラスになるでしょうし、相違点はゲーム別のクラスになるでしょうね。
適切なアドバイス、並びにご指導ありがとうございます!
確かに焦りすぎてましたね^^;
もっといろんなゲームを勉強してみます!
それにまだ制作期限(卒業)までに2年半も猶予がありますからね^^

softya(ソフト屋)様
いつもいつも手厳しい中に適切かつ親切な解凍をして下さり大変感謝しています!
C++で出来なかったら他の言語でも出来ないと断言しておきます。
なるほど、c++がどれほどゲームに特化しているかわかる一言です
オープンソースも見たことが無いですし龍神録を完璧に理解できていれば必要ないと思います。
他の言語ならソースコードが公開されていますけどね。
おっしゃる通りですね^^;
もっと龍神録を改造してソースを完全に理解できるように勉強してきます!
まず、マップ表示ができないと話になりません。
それとボード上のコマを進める道の管理でしょうね。
確かに基礎・基本は重要ですからね
他には何か『これは忘れるな!』ってアドバイスはありますか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: c++で桃電のような人生ゲームを作るには

#5

投稿記事 by softya(ソフト屋) » 13年前

C++はゲーム専用じゃないですよ。何でもできるだけですが、その自由度故に難易度が高いのですけどね。
あとC言語とC++は混同されていませんよね?

>おっしゃる通りですね^^;
>もっと龍神録を改造してソースを完全に理解できるように勉強してきます!

私は龍神録では無いSTGを龍神録を参考程度(余り見ない事)にして自力で構築する事をおすすめします。
その方が力が付きます。
あるいは、いきなりボードゲームに必要な部品を練習で作って良いでしょう。

>確かに基礎・基本は重要ですからね
>他には何か『これは忘れるな!』ってアドバイスはありますか?

ボードゲームを詳細に分解して要素を取り出すこと。つまり分析をしないといけません。
その分析を元に設計して、その後にやっとプログラミングです。
やっておくべき基礎は、こういう工程を段階を追って考えれるようになることです。
疑問点を明確にするためにも必要なことですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

村人Cに昇格

Re: c++で桃電のような人生ゲームを作るには

#6

投稿記事 by 村人Cに昇格 » 13年前

softya(ソフト屋)様
迅速かつ適切な解答ありがとうございます!
C++はゲーム専用じゃないですよ。何でもできるだけですが、その自由度故に難易度が高いのですけどね。
あとC言語とC++は混同されていませんよね?
スイマセン
こちらの言い方が悪かったですね
『C=プログラムの基礎』
『c++=Cの発展的な物で可能性は無限大な便利物』という考えを持っているのですがそれで正しいですよね?
私は龍神録では無いSTGを龍神録を参考程度(余り見ない事)にして自力で構築する事をおすすめします。
その方が力が付きます。
あるいは、いきなりボードゲームに必要な部品を練習で作って良いでしょう。
なるほど!
やはり自分で0から考えて作るほうが力は付きますね^^
ありがたいアドバイスです!
ボードゲームを詳細に分解して要素を取り出すこと。つまり分析をしないといけません。
その分析を元に設計して、その後にやっとプログラミングです。
やっておくべき基礎は、こういう工程を段階を追って考えれるようになることです。
疑問点を明確にするためにも必要なことですね。
変な事を言ってしまうと
『ドンキなどで安く人生ゲームなりなんなりを買ってきてそれを参考にして一つ一つの機能や役割を真剣に考える』
とか
どんな小さな疑問点でも真剣に考えて理解して基礎の土台を作っていく
みたいなことをすることでプログラミングの力も付くという考えですね?
参考になります!

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

Re: c++で桃電のような人生ゲームを作るには

#7

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

まず、今ご存じなのは、Cだけであって、次に制作するのはC++で行いたいということでしょうか?

C++はCの書き方でもコンパイルできてしまうため、C→C++(オブジェクト指向設計)にステップアップしようとした時、どうしてもCの考え方が抜けないことが多いと思います。
そういう時は、完全にオブジェクト指向でなければコンパイルすらできない言語を学んでみるのも手です。
JavaやC#はクラス単位でしかコンパイル出来ませんし、Cにはない便利な考え方も多いです。
(まぁやろうと思えばJavaやC#でもオブジェクト指向ではないコーディングもできるわけですが・・)

まだそこまで大きくステップアップするのが難しく、とりあえずCでいいから次に新しいゲームを作ってみたいというのであればそれでも全然良いと思います。

>◆人生ゲーム(桃電に限らず)などのボードゲームを作成するにはc++でも十分作成できるのかどうか

既に述べられているので省略しますが、何でも作れますし、最もふさわしい言語の一つでしょう。

>◆オープンソースの見本などはあるかどうか

これは知りませんが、もし一つゲームを既に作られたのであれば、人のコードを参考にすることなく、1から作ってみてはいかがでしょう。
龍神録の館のコードは良いサンプルではありませんが、それでもどのように計算すればゲームプログラムとして成り立つのかはお分かりになったのではないかと思います。

>◆ボードゲームを作成する上で最低限必要な考え(アイデア・アドバイス)やゲーム機能

ゲーム機能については省略し、設計・コーディングについてのみ書きます。
重ねますが、一度一から作ってみることをお勧めします。
正直、龍神録の館のコードは出来るだけ難しい構文を使わないようにしようとした結果、完全に破たんしたコードになってしまいました・・。
そこで、より拡張性・汎用性・可読性の高いコーディング・設計を目指してみてはいかがでしょう。
ゲームの設計について、
http://dixq.net/g/ 「ゲームプログラミング設計」で
少し触れていますが、C++で設計しないのであれば、「CでありながらC++っぽく書く」ことで、ステップアップしやすい設計にトライしてみてはいかがでしょう。

いきなり大きなプログラムを書くのが抵抗あるのであれば、小さなものから作っていくと良いと思います。
最初は「ボードにトランプを表示するだけ」とかでも良いと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: c++で桃電のような人生ゲームを作るには

#8

投稿記事 by softya(ソフト屋) » 13年前

>こちらの言い方が悪かったですね
>『C=プログラムの基礎』
>『c++=Cの発展的な物で可能性は無限大な便利物』という考えを持っているのですがそれで正しいですよね?

C言語は基礎と言って良いのかどうか。こっちの可能性も出来ないことはないので無限大なんですよ。
LinuxOSのカーネルはC言語だけで作られていますからね。

C++はC言語をオブジェクト指向やジェネリック・プログラミングで拡張した言語で大規模開発に向いています。
あるいはC++を高機能なC(ベターC)として使うことでバグを減らすことやコーディング効率をアップさせることが可能です。
ただし、自分が今C言語で作っているのか、ベターCなのか、C++なのかを明確に意識しないとごちゃごちゃしたコードになるだけです。

>変な事を言ってしまうと
>『ドンキなどで安く人生ゲームなりなんなりを買ってきてそれを参考にして一つ一つの機能や役割を真剣に考える』
>とか
>どんな小さな疑問点でも真剣に考えて理解して基礎の土台を作っていく
>みたいなことをすることでプログラミングの力も付くという考えですね?
>参考になります!

プログラム化のためには分析・設計を行わないと行けません。
最初の作りたいものを考えた時はとても曖昧なので、それを実に細かく分析・検討して事細か決める必要があります。

例えば机を日曜大工で作るとしましょう。
さて?どこから始めよう。って考えますよね。
机の作りかたや木工の方法を調べて、ホームセンターで木材とか価格を調べて、設計図を引いたりして、そこからやっととりかかると思います。
何も調べずにプログラムをするというのは、何も調べずに大きな木の板を買ってきて切り始めてから机の作りかたを考えるのと同じです。

まぁ、それはそれとしてプログラムを作る経験が不足していると設計ができないので、まず作り始めるということも必要な場合もあります。
何度作りなおしながら完成に近づけるという作りかたも一つの方法です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: c++で桃電のような人生ゲームを作るには

#9

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

>◆オープンソースの見本などはあるかどうか

ということで、オープンソースなボードゲームをちょっと作ってみました。

http://dixq.net/code/Gomoku.zip
「五目並べ.exe」を実行すれば遊んでみれます。

と言ってもあまりにコードが大きいと抵抗あるでしょうから、必要最小限にとどめてあります。
そしてピュアCで書いています。
設計の仕方は
http://dixq.net/g/
d.5章の続きに位置するようなイメージで作っています。

まず、main.cppからご覧ください。
ここからコールしているのはほとんどGameMgrモジュールだけです。
ほとんどのモジュールはGameMgrが指示しています。
データはDataフィルタ内にあります。数はいくつかありますが、使い方のパターンが違うので紹介程度に用意しました。

コメントを沢山入れておいたので、コードを読んで頂ければお分かり頂けると思います。

ただ、Board.cppにある、ボード上の駒を数える関数である

//同じピースを数える。
static int Count_SamePiece(int x, int y, eDirection_t dir, ePlayerID id, int cnt);

は再帰関数を使っているのでちょっと分かりにくいかもしれません。
再帰関数はパズルゲームや隣接した物体のカウント、ソート、漸化式の計算等によく使われる手法ですが使い方を知らないとなかなか分かりにくい関数かもしれません。
もし不明な点があればお聞き下さい。
添付ファイル
winner.png
playing.png
playing.png (62.65 KiB) 閲覧数: 9193 回

村人Cに昇格

Re: c++で桃電のような人生ゲームを作るには

#10

投稿記事 by 村人Cに昇格 » 13年前

Dixq様
返信ありがとうございます!
少し前にメールで龍神録をベースにして作った弾幕ゲーの提出許可をお願いした者です(覚えてるかどうかわかりませんがw)
あの時は大変お世話になりました!
まず、今ご存じなのは、Cだけであって、次に制作するのはC++で行いたいということでしょうか?
現在はVisual Studio c/c++を学校で勉強しています
学校の方針としてはできれば提出関係は学校内で学習した成果を発表するのだからc/c++でやってほしいそうです
僕としてはCをもっと勉強した上で一旦Cで作ってみて
それからc++でバージョンアップをしようと思っています
もし一つゲームを既に作られたのであれば、人のコードを参考にすることなく、1から作ってみてはいかがでしょう。
龍神録の館のコードは良いサンプルではありませんが、それでもどのように計算すればゲームプログラムとして成り立つのかはお分かりになったのではないかと思います。
そうですね、確かにオープンソースを参考にしまくるのではなく自分だけの力でどこまで行けるか挑戦しようと思います!
それに龍神録のオープンソースはとても勉強になるような(教科書にできるくらいわかりやすかったです!)見やすく、とてもわかりやすいコードでしたよ^^
いきなり大きなプログラムを書くのが抵抗あるのであれば、小さなものから作っていくと良いと思います。
最初は「ボードにトランプを表示するだけ」とかでも良いと思います
先輩の作ったゲームの中に「ブラックジャック」があったのでまずはその辺から挑戦してみようかと思います!


softya(ソフト屋)様
C言語は基礎と言って良いのかどうか。こっちの可能性も出来ないことはないので無限大なんですよ。
LinuxOSのカーネルはC言語だけで作られていますからね。

C++はC言語をオブジェクト指向やジェネリック・プログラミングで拡張した言語で大規模開発に向いています。
あるいはC++を高機能なC(ベターC)として使うことでバグを減らすことやコーディング効率をアップさせることが可能です。
ただし、自分が今C言語で作っているのか、ベターCなのか、C++なのかを明確に意識しないとごちゃごちゃしたコードになるだけです。
φ(゚Д゚ )フムフム…
Cを甘く見てましたw
Cにもc++と同じで無限大の可能性があるんですねぇ
プログラムを作る経験が不足していると設計ができないので、まず作り始めるということも必要な場合もあります。
何度作りなおしながら完成に近づけるという作りかたも一つの方法です。
自分は弾幕ゲーを作ってるときは
「この数字を変えたらどうなるんだろう?」
「このコードはどんな役割があってコイツを変えたらどう変わるんだろう?」
みたいに実際に自分でいろいろ変えて、分からなかったら調べてみて、それでも分からなかったら先生に聞くなどして
『とりあえずそのコードの意味を理解する』ということを重視しました。
このやり方であっているのですか?
このやり方も正解ならこれからもそうやって力をつけたいと思っています!

村人Cに昇格

Re: c++で桃電のような人生ゲームを作るには

#11

投稿記事 by 村人Cに昇格 » 13年前

Dixq様
ということで、オープンソースなボードゲームをちょっと作ってみました。
(ノ゚ο゚)ノ オオォォォ-
ありがとうございます!!!
もぅ何から何までお世話になります!(´;ω;`)
Board.cppにある、ボード上の駒を数える関数である

//同じピースを数える。
static int Count_SamePiece(int x, int y, eDirection_t dir, ePlayerID id, int cnt);

は再帰関数を使っているのでちょっと分かりにくいかもしれません。
再帰関数はパズルゲームや隣接した物体のカウント、ソート、漸化式の計算等によく使われる手法ですが使い方を知らないとなかなか分かりにくい関数かもしれません。
もし不明な点があればお聞き下さい。
はい!
まずは一通りのコードを理解して、その上でわからないことがあればメールなりトピックなりで聞こうと思います!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: c++で桃電のような人生ゲームを作るには

#12

投稿記事 by softya(ソフト屋) » 13年前

自分は弾幕ゲーを作ってるときは
「この数字を変えたらどうなるんだろう?」
「このコードはどんな役割があってコイツを変えたらどう変わるんだろう?」
みたいに実際に自分でいろいろ変えて、分からなかったら調べてみて、それでも分からなかったら先生に聞くなどして
『とりあえずそのコードの意味を理解する』ということを重視しました。
このやり方であっているのですか?
このやり方も正解ならこれからもそうやって力をつけたいと思っています!
それは第一段階の学習法としては良い方法だと思います。
ただ、その次に進むためには0から作り出す力が必要となります。
サンプルに頼らない自分でプログラムを書いていくことが出来ないと何も出来ないと言って良いと思います。
なので、簡単なもので良いのでサンプルを見ずに作る事から始めてみてください。
あるいは、一度見たことあるものを0から作るのも良いでしょう。

>先輩の作ったゲームの中に「ブラックジャック」があったのでまずはその辺から挑戦してみようかと思います!

「ブラックジャック」をサンプルを見ずに書いてみてはどうでしょうか?
先輩のもネット上のものも見ずに0から書いてみると良いでしょう。
出来上があったら比べてみるのです。
難しそうなら、最初はコンソールアプリで良いと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

村人Cに昇格

Re: c++で桃電のような人生ゲームを作るには

#13

投稿記事 by 村人Cに昇格 » 13年前

softya(ソフト屋)様
それは第一段階の学習法としては良い方法だと思います。
ただ、その次に進むためには0から作り出す力が必要となります。
サンプルに頼らない自分でプログラムを書いていくことが出来ないと何も出来ないと言って良いと思います。
なので、簡単なもので良いのでサンプルを見ずに作る事から始めてみてください。
あるいは、一度見たことあるものを0から作るのも良いでしょう。
なるほど、第二段階へステップアップしなさいってことですね
「ブラックジャック」をサンプルを見ずに書いてみてはどうでしょうか?
先輩のもネット上のものも見ずに0から書いてみると良いでしょう。
出来上があったら比べてみるのです。
難しそうなら、最初はコンソールアプリで良いと思いますよ。
分かりました
まずは自分なりにDixq様の五目並べや
先輩のブラックジャックを0から作ってみようと思います!


数多くの返信ありがとうございました!
これからも龍神録を応援していきたいと思っています!
長くなりましたが大変参考になりました!
またの機会もお世話になるかと思いますがよろしくお願いします!

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

Re: c++で桃電のような人生ゲームを作るには

#14

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

> 少し前にメールで龍神録をベースにして作った弾幕ゲーの提出許可をお願いした者です(覚えてるかどうかわかりませんがw)

あぁ、村人Bさんでしたっけ。
良ければ画面右下のユーザー登録から登録して頂ければ使える機能が増えて、コテハンにできるのできますよ。

> まずは一通りのコードを理解して、その上でわからないことがあればメールなりトピックなりで聞こうと思います!

はい、頑張って下さいね。
後、質問される際は公開されて困る情報ではない限り掲示板で聞いてもらえると幸いです。

閉鎖

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