• ベストアンサー

C言語で簡単なゲームを作る方法

僕はC言語を学び始めた程度ですが、一番簡単に作れるゲームとその作り方(ソース)を教えて下さい。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★じゃんけんゲームのソースです。 #include <conio.h> #include <stdio.h> #include <stdlib.h> // じゃんけん定数 #define JKN_GOO  (0) #define JKN_CHOKI (1) #define JKN_PA  (2) // 勝敗の定数 #define TYP_KATI (0) #define TYP_MAKE (1) #define TYP_AIKO (2) // じゃんけんの判定関数 int check( int human, int computer ) {  if ( human == computer ){   return TYP_AIKO;  }  switch ( human ){   case JKN_GOO:  return ((computer == JKN_CHOKI) ? TYP_KATI : TYP_MAKE);   case JKN_CHOKI:  return ((computer == JKN_PA) ? TYP_KATI : TYP_MAKE);   case JKN_PA:  return ((computer == JKN_GOO) ? TYP_KATI : TYP_MAKE);   default:   return -1;  } } // じゃんけんゲーム int main( void ) {  // ゲーム変数  int count;  // 勝負回数  int kati = 0; // 勝ちカウンタ  int make = 0; // 負けカウンタ  // 一時変数  int human;  // キー入力の一時変数(人間用)  int computer; // 乱数発生の一時変数(コンピュータ用)    // (6)じゃんけん勝負を10回行う  printf( "★じゃんけんゲーム(10回勝負)\n\n" );  for ( count = 1 ; count <= 10 ; count++ ){   // (1)人間:3つの状態を入力   printf( "%2d回目…[1]グー [2]チョキ [3]パー を入力して下さい:", count );   do {    // (2)キー入力    switch ( getche() ){     case '1': human = JKN_GOO; break;     case '2': human = JKN_CHOKI; break;     case '3': human = JKN_PA; break;     default: human = -1; break;    }   } while ( human == -1 );      // (3)コンピュータ:3つの状態を乱数で決める   computer = (rand() % 3);   // (4)人間vsコンピュータの勝負   switch ( check(human,computer) ){    case TYP_KATI:     kati++;     printf( "⇒勝ち。\n" );     break;    case TYP_MAKE:     make++;     printf( "⇒負け。\n" );     break;    case TYP_AIKO:     printf( "⇒引き分け。\n" );     break;    default:     printf( "⇒エラー。\n" );     break;   }  }  // (7)結果表示  printf( "\n★じゃんけんゲームの結果\n" );  printf( "人間    :%d 回勝ち\n", kati );  printf( "コンピュータ:%d 回勝ち\n", make );  printf( "※引き分け回数は %d 回でした。\n", (10 - kati - make) );  return 0; } 注意:全角空白をタブ文字に変換して下さい。

mantis777
質問者

お礼

ありがとうございます。このソースを使って勉強してみます。

その他の回答 (4)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

>ありがとうございます。一日50ページのペースで進んでポインタでつまずきました。このポインタの先が「11.関数の作り方」みたいです。数あてゲームはだいたいわかりましたがvoidというのが本になくてわからりませんでした。 ポインタですか。C言語でつまずく人は多いんですよ。 ポインタ入門をいくつか紹介↓自分なりにわかり易い所を読んでください。 http://itpro.nikkeibp.co.jp/article/COLUMN/20061206/256198/?ST=develop http://www.stackasterisk.jp/tech/program/c01_05.jsp http://www.cda.ics.saitama-u.ac.jp/~maekawa/lect/C/ http://www.binzume.net/library/robo/c08.html voidについて解説します。 void func(void) { //関数の中身 } という関数があった場合、 関数は値を返すのが普通です。intとかfloatとか。でも値を返さなくてよい関数があった場合は関数名の左側にvoidと書きます。この関数は値を返しませんって意味です。 関数名の右側の()なかにあるvoidは、パラメータを一切受け取りませんという意味です。 両方ともvoidだと何も受け取ったり、何も返しませんってことになりますが、紹介した「数あてゲーム」だとグローバル変数でaで情報を関数submに渡してます。 今見ると「数当てゲーム」のソースコードは、あんまり良くない例ですね。もっとわかり易くソースコード書けます。 subm→chiisai→submと関数呼び出しが深くなる必要はないので、whileループを使ったほうがシンプルで分かりやすくなるでしょう。 C言語の理解力アップのために自分なりに書き換えに挑戦してみてください。

mantis777
質問者

お礼

ありがとうございます。やはりポインタはC言語の難関のようですね。ここは急がず落ち着いて勉強しようと思います。voidの説明もありがとうございました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★簡易ゲーム講座。 >一番簡単に作れるゲームとその作り方(ソース)を教えて下さい。お願いします。  ↑  あらら…。とにかくゲームを作りたいんだ。 ・いろいろありますが『じゃんけんゲーム』はどうですか?  仕組みは  (1)キー入力を待つ。→getch() 関数  (2)キー入力から『グー』、『チョキ』、『パー』の3つの状態を得る。  (3)乱数を使ってコンピュータの『グー』、『チョキ』、『パー』を決める。→rand() 関数  (4)(2)の状態と(3)の状態から勝敗を決める。→switch文で条件分岐  (5)『勝ちカウンタ』や『負けカウンタ』を増加させる。→kati++、make++  (6)じゃんけんの勝負を 10 回行ったかチェックする。  (7)10 回以下なら(1)へ戻り続ける。10 回なら終了して結果を表示。  こんな感じでどうですか。 ・テキスト・ベースのゲームですが基本はしっかりとおさえているはずです。  ポイントはキー入力、3つの状態、乱数を使ったゲーム性、終了条件の仕組みなどです。  前回、パズルゲームを作りたいとなっていましたが、パズルを動かすためにキー入力の  処理は不可欠です。そして条件判断も必要です。終了条件はもっと重要です。  C言語のテキスト本には載っていない事ばかりです。  でもこの載っていないことを自分で考えることが重要なのです。→ゲームの『アルゴリズム』と呼ぶ。  前回の『回答へのお礼』にアルゴリズムはどうやって勉強したらいいでしょうか。となっていましたね。  まずは基本の if、else、switch、for、while、関数などをしっかりと理解してから、  それらを使ってコンピュータでどのように処理すれば良いかの手順を考えます。  最初はイメージがわかなかったり、コツがつかめないので難しく感じるでしょう。 ・そこで今回はじゃんけんゲームを通してアルゴリズムを少し紹介したわけです。  上記の(1)~(7)が『じゃんけんゲーム』のアルゴリズムという事になります。  それでは上記の(1)~(7)を元に『じゃんけんゲーム』を作って見ましょう。→簡易ゲーム講座。  まずゲームで必要な変数を整理します。  (1)じゃんけんゲームの勝負回数を管理する『カウンタ変数』→count  (2)勝負したときの『勝ちカウンタ』と『負けカウンタ』を用意→kati、make  (3)人間のキー入力用の変数を用意→human  (4)コンピュータ用の変数を用意→computer  上記の4つの変数を用意すれば出来そうです。 ・次の回答で『じゃんけんゲーム』のソースを載せておきます。  いきなりすべてを理解できるとは思えませんが、次のポイントを持っている C 言語のテキストを  読み直しながら遊んでみて下さい。  サンプルゲームのポイントは  (1)変数の宣言と使われ方(役割)。  (2)for 文による勝負回数。  (3)getche() 関数によるキー入力と do-while 文の使われ方。  (4)switch 文の使い方と処理の記述。  (5)結果表示の printf() 関数の使い方。  (6)main() 関数と check() 関数に処理を分けている点。  (7)check() 関数でグー、チョキ、パーの3つの状態を判定するアルゴリズム。   (a)『human == computer』で引き分け。   (b)switch 文で人間のグー、チョキ、パー状態での勝ち、負け判定。  (8)記号定数を利用してのプログラミング。  (9)check() 関数で使っている条件演算子。→(a ? b : c)という部分。  以上の項目を持っているテキストなどを使って確認して置きましょう。  紹介した『じゃんけんゲーム』は自由に改変して構いません。どうぞ。 ・以上。→コンパイルして少し楽しんでみて下さい。

mantis777
質問者

お礼

長文ありがとうございます。ifなどはちょうど勉強が終わったところです。アルゴリズムは計算とかの手順のことなのですね。それにしてもC言語ってたくさんあるんですね。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

えっ、この間「プログラミング学習シリーズ C言語1 初めてのCプログラミング」を読み始めたばかりで、そこまで進んじゃいました? 急ぐのも良いですが、C言語の基本を身につけていないと人の書いたプログラムを読みこと自体難しいですよ。 私の紹介した苦Cの練習問題で、最低でも「11.関数の作り方」までの練習問題が簡単に答えられるぐらいの知識はほしいところです。 http://homepage3.nifty.com/mmgames/c_guide/ とりあえず何点か紹介しときます。 http://www5f.biglobe.ne.jp/~ymlab/program/c/kazuatec.htm http://www5f.biglobe.ne.jp/~ymlab/program/c/denntakuc.htm http://www5f.biglobe.ne.jp/~ymlab/program/c/blackc.htm http://homepage3.nifty.com/aokura/src/janken.html http://homepage3.nifty.com/aokura/src/puzzle.html http://www.c-production.com/contents/c/sec07.html さらに複雑ですが、オセロゲーム。 http://www.geocities.jp/civiltool/index/osero/osero.html まず見てみて理解できそうか教えてほしいです。

mantis777
質問者

お礼

ありがとうございます。一日50ページのペースで進んでポインタでつまずきました。このポインタの先が「11.関数の作り方」みたいです。数あてゲームはだいたいわかりましたがvoidというのが本になくてわからりませんでした。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

作り方  1)ゲームの種類を決める  2)プレイヤーへの報酬/ペナルティを決める  3)終了方法を決める 大雑把にこんな感じです。 簡単なゲームであれば、テーブルゲームが良いでしょう。 「1から10までの数字から一つをランダムに選び、それを当てさせる」 「1から13までの数字から一つをランダムに選び、それが 7より大きいか小さいかを当てさせる」 「二つのサイコロを振り、合計が偶数か奇数かを当てさせる」 など、実際にあるゲームを思いつくままに作成してはどうでしょう。 報酬や、終了時はその状態を記憶させるかなどは自身のセンスに任せて良いですよ。 ソースを示され、それをそのまま入力しただけではプログラムを組めるようにはなりません。 何をしたいのか、何をさせたいのかを自分で理解したうえでプログラムを組まなければ覚える事はできません。 どのようにすれば、思ったことができるのか・・・どうしても分からないときに他人に頼るようにしましょう。 まったく分からないのであれば、教本にできそうなガイドブックを一冊購入しましょう。 ひとつの例として  Amazon.co.jp / たのしいC  http://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84C-%E6%9F%B4%E7%94%B0-%E6%9C%9B%E6%B4%8B/dp/479732791X などどうでしょう。 基礎から覚えようという人でも十分理解できる内容です。

mantis777
質問者

お礼

ありがとうございます。ソースをそのまま入力するだけではだめですよね。もっと本を読んでいろいろ研究してみます。

関連するQ&A

  • ゲーム作りたいがC言語かJAVAか迷う。

    私は将来、ゲーム・デザイナーになりたくて、プログラミングの勉強をしたいと思っています。それに向けて、学習するべき言語というのはCなのかJAVAなのかでまよっているのです。よくプログラミング言語など似たようなところがあり、ひとつの言語を身につければ他の言語も身につきやすいともいいますが、なるべく効率的に学んでいきたいですし、一番使用されることの多い言語を選びたいです。私が作りたいのは携帯電話用の比較的簡単なゲームでなく、ある程度大掛かりなというか、本格的なゲームを開発してみたいという思いがあります。これは特殊な例かもしれませんが、例えばコンピュータ将棋のプログラムなどではほとんどC、C++で開発されています。JAVAなどで作成されたソフトは見かけませんでした。やはり、JAVAの利点もあるでしょうが、結局、一番普遍的なというか、汎用性のあるプログラミング言語としてはC言語を選択するのが最良の策かなと考えています。これは妥当な筋道なのかとお尋ねしたく質問させていただきました。

  • C言語・ゲーム作成で挫折気味の対処方法

    こんばんは。ゲーム作成に関わらず、C言語で挫折気味の時、みなさんはどのように対処してきましたか? 以下、私の現在の状況を説明致します。 C言語でゲームを作成するという目的でC言語を勉強し、ゲーム作成の勉強をしていました。 C言語の書籍を一通り行い、DXライブラリを使用して、それに関するサイト(ゲームプログラミングの館等)を参考にしながらゲーム作成の勉強をしていました。 しかし、除々に分からなくなり、手がつけられなくなってしまいました。 ゲームを早く作成してみたいという気持ちが先走り、C言語の知恵が足りない(勉強期間:1ヶ月程度)のに ゲーム作成に取り掛かろうとしたことがが原因のひとつだと思い、もう一度、C言語を勉強し直そうと考えています。 しかし、数ある書籍やサイトの中でどれがゲームプログラミングを学ぶのに適しているの分かりません。 みなさんがゲームプログラミングをするにあたって利用した書籍やサイトはどのようなものでしょうか? また、同じようにC言語でゲームを作成している方にお聞きしたいのですが、C言語をどの程度勉強されてからゲーム作成に取り掛かったのでしょうか? みなさんの意見を参考にして、勉強していきたいので、よろしければアドバイスをお願い致します。

  • c言語でできること

    c言語は具体的には何ができるのでしょうか ものすごくがんばれば市販のゲームソフトなども作れるようになるのでしょうか というのは 今、僕はc言語のプログラミングを勉強しています コンパイルするとms-dosの黒い画面が表示されますよね。オセロなどのゲームはとても見にくいです。 あのようなゲームではなく、ちゃんと絵があるようなゲームは作れるのでしょうか?? また3Dのゲームはつくれるのでしょうか? 「c言語のゲーム」とググってもありません c言語だけではできなくてdirectxなどがいることは知っています。 プログラミングを学ぶ上でなにか目標ができたら それに向けてがんばれると思うので情報よろしくお願いします。 わかりにくい文章ですいません^^;

  • C言語でゲーム作り

    フリーゲームに影響され、自分も作ってみたいと思いC言語勉強し始めました 趣味の範囲で、こつこつ頑張っていこうと思ってます 今現在、C言語の初初心者向けの本を一通り読み終えて次の本を読んでます 一応、一つの目標としてアクションゲーム(マリオみたいな)を作りたいんですが C言語の他にどんなこと勉強すればいいでしょうか? あと、C言語から次のステップに移るときは やはり上級者向けの本は理解できるくらいまで頑張ってからでしょうか?

  • C言語をつかうと?

    C言語をつかうと何が出来ますか? C言語でゲームを作れますか?

  • C言語のゲームのプログラミングの本教えてください

    自分は現在高専の情報系の二年生です。 自分は将来はゲームのプログラマーになりたいと考えています。 そこで今から少しずつゲームのプログラミングについて学んでいこうと考えています。 色々な会社の採用情報をみると「C言語やアセンブラなどでのゲームのプログラミング経験があるといいです」みたいに書いていることがあります。 なのでせめてC言語のゲームのプログラミングの本を読んで学んでいきたいと考えています。 そこでおすすめの本があると言う方は教えてください。

  • C言語でゲーム作り テトリス

     忙しい中失礼します。愚問過ぎて済みませんが・・・  今C言語に興味が沸いて来て、ゲームを作りたい、と思っています。  最終的にはC言語を駆使してテトリスを作りたい、と思っています。  あの、アーケードゲームにあるやつ(ブロックの絵があり、カーソルスティック?でブロックの方向を変えて等)、そのまま作りたい、と思っています。  可能でしょうか?やはりC++言語は必要になってくるのでしょうか?  要はC、またはC++(←出来ればこの2言語まででテトリスゲームを作成したい)等、Cに関する言語を使って、ゲームを完成させたい、と思っているのです。  開発環境はWindows XP Home Edition  C言語:http://www.codegear.com/jp/downloads/free/cppbuilder  にあります、Borland C++Compiler / Turbo Debugger  を使っています。  知らない言語を学ぶ場合、まずはウェブサイトを通して学びたい、と思っています。  なので、参照となるURLがあればご提示願います。  結局本だと相性があるので・・・。まあ、ウェブサイトもそうですが、お金がかからない・・・という時点でウェブサイトを探したい、と思っているのです。  その後必要な本を探す、という手立てで考えています。  宜しければ教えて下さい。お願いします。  下記のURLを参照してからこの質問を書き込みました:  http://oshiete1.goo.ne.jp/qa1601586.html  http://oshiete1.goo.ne.jp/qa2586359.html  また、最終的にテトリスゲームなので、  ステップ1:C言語でじゃんけんゲームを作る必要有、で言語はC言語のみで十分  ステップ2:じゃんけんゲームでグラフィックを次に付け足す、言語はC言語で作成可、Graphic?関数を使う必要有  みたいな、手順を踏んでいこうと思っています。先ずは小さなものから・・・始めていこう、と思っています。

  • C言語でゲームを作りたい。

    C言語でゲームを作りたい。 小6の息子がゲームを作りたいと言うので、挑戦しようと思いますが、どのようなソフトでどのように作ればいいのか分かりません。 ちなみに、私は普段パソコンは、adobeソフトで画像処理や、グラフィックデザインを少しやっている程度です。 ネットで調べても、初心者用からプロ用まで、たくさんのソフトがあり、分かりませんでした。 使用法やプログラムは、たくさん検索されるのですが、基本的にそれぞれのソフトの特徴や初心者用の説明が見当たらないので 本はないかと調べたら 「14歳からはじめるC言語わくわくゲームプログライング教室」があり、挑戦しようと思っています。 ↓ http://www.rutles.net/books/151.html そこで質問が3つあります。 ----- 質問1 ----- この本で紹介している、「ビジュアルスタジオ」というソフトは、テキストエディタとコンパイラの両方が出来るのでしょうか? ----- 質問2 ----- この本は「ビジュアルスタジオ」を使用して解説してあるそうですが、他のソフトで例えば「adobe flex」でも出来るのですか? ----- 質問3 ----- C言語を作成するソフトは、初心者用からプロ用、無料から有料までたくさんありますが、何がどう違うのでしょうか? まずは、初心者用のソフトを使用して、慣れたらレベルアップしたソフトを使用できるのでしょうか? 専門用語も分からない初心者です。 ご存知の方、よろしくお願いいたします。

  • C言語でゲームを作りたいんですど・・・

    変数4つ、配列一つ 制御文はif文、switch文、繰り返し制御をそれぞれ1回以上使って、C言語のゲームを作りたいんですけど、まったくわかりません。 どんなソースを作ればいいでしょうか??

  • C言語のシューティングゲームを作りたい

    C言語でシューティングゲームを作りたいのですが、どう勉強すればいいのでしょうか?例えば、このサイトがいいとか、この本がいいなど。 よろしくお願いします。

専門家に質問してみよう