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;
}
注意:全角空白をタブ文字に変換して下さい。
No.5
- 回答日時:
>ありがとうございます。
一日50ページのペースで進んでポインタでつまずきました。このポインタの先が「11.関数の作り方」みたいです。数あてゲームはだいたいわかりましたがvoidというのが本になくてわからりませんでした。ポインタですか。C言語でつまずく人は多いんですよ。
ポインタ入門をいくつか紹介↓自分なりにわかり易い所を読んでください。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061 …
http://www.stackasterisk.jp/tech/program/c01_05. …
http://www.cda.ics.saitama-u.ac.jp/~maekawa/lect …
http://www.binzume.net/library/robo/c08.html
voidについて解説します。
void func(void)
{
//関数の中身
}
という関数があった場合、
関数は値を返すのが普通です。intとかfloatとか。でも値を返さなくてよい関数があった場合は関数名の左側にvoidと書きます。この関数は値を返しませんって意味です。
関数名の右側の()なかにあるvoidは、パラメータを一切受け取りませんという意味です。
両方ともvoidだと何も受け取ったり、何も返しませんってことになりますが、紹介した「数あてゲーム」だとグローバル変数でaで情報を関数submに渡してます。
今見ると「数当てゲーム」のソースコードは、あんまり良くない例ですね。もっとわかり易くソースコード書けます。
subm→chiisai→submと関数呼び出しが深くなる必要はないので、whileループを使ったほうがシンプルで分かりやすくなるでしょう。
C言語の理解力アップのために自分なりに書き換えに挑戦してみてください。
ありがとうございます。やはりポインタはC言語の難関のようですね。ここは急がず落ち着いて勉強しようと思います。voidの説明もありがとうございました。
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)という部分。
以上の項目を持っているテキストなどを使って確認して置きましょう。
紹介した『じゃんけんゲーム』は自由に改変して構いません。どうぞ。
・以上。→コンパイルして少し楽しんでみて下さい。
長文ありがとうございます。ifなどはちょうど勉強が終わったところです。アルゴリズムは計算とかの手順のことなのですね。それにしてもC言語ってたくさんあるんですね。
No.2
- 回答日時:
えっ、この間「プログラミング学習シリーズ C言語1 初めてのCプログラミング」を読み始めたばかりで、そこまで進んじゃいました?
急ぐのも良いですが、C言語の基本を身につけていないと人の書いたプログラムを読みこと自体難しいですよ。
私の紹介した苦Cの練習問題で、最低でも「11.関数の作り方」までの練習問題が簡単に答えられるぐらいの知識はほしいところです。
http://homepage3.nifty.com/mmgames/c_guide/
とりあえず何点か紹介しときます。
http://www5f.biglobe.ne.jp/~ymlab/program/c/kazu …
http://www5f.biglobe.ne.jp/~ymlab/program/c/denn …
http://www5f.biglobe.ne.jp/~ymlab/program/c/blac …
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/os …
まず見てみて理解できそうか教えてほしいです。
ありがとうございます。一日50ページのペースで進んでポインタでつまずきました。このポインタの先が「11.関数の作り方」みたいです。数あてゲームはだいたいわかりましたがvoidというのが本になくてわからりませんでした。
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 …
などどうでしょう。
基礎から覚えようという人でも十分理解できる内容です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# Windows10,visal studio2019,C言語でゲームを作っているのですが、任天堂スイ 1 2022/09/16 19:14
- 写真・ビデオ MP4からDVDを作製する簡単な方法を教えて下さい Windows10パソコンとAndroidタブレ 2 2022/11/13 08:19
- フリーソフト 日本語に対応していないPCゲームの日本語化ファイルをダウンロードしてウィルスに感染するケースは? 1 2023/07/06 21:32
- 日本語 「私ぐらいに作れる」という言い方は? 8 2023/03/02 13:14
- テレビ DVD作成 テレビ番組を録画した外付けHDDから DVD作成する簡単な方法ありましたら 教えて下さい 5 2022/12/19 08:42
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- 英語 英語の課題で質問です。 英語で自己紹介をするのですが、なかなか文章が埋まりません。 中学一年生程度の 3 2022/05/08 20:32
- C言語・C++・C# C言語 3 2023/07/11 19:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラマーは誘惑にさらされ...
-
ニンテンドーDSのソフト作成に...
-
Now Loadingについて
-
★C++(DirectX) vs Java(Java3D)★
-
Flashゲームの画面の大きさは一...
-
恋愛シミュレーション制作にゲ...
-
スロットマシーンのようなゲーム
-
abnormal program termination
-
ゲームの開発言語(1980~2010年)
-
趣味レベルでプログラミングを...
-
プログラムに書かれる"%"記号の...
-
procってなんですか?
-
Kotlin言語について。
-
アセンブリ名とは??
-
C言語、C+、C++、C#の違い
-
HOLONついて教えてください。
-
UNITY Float型の接尾辞fって
-
vbaとc言語の関連性について
-
どのソフトでHPを作っているか...
-
getsockopt関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラマーは誘惑にさらされ...
-
ニンテンドーDSのソフト作成に...
-
ゲームの開発言語(1980~2010年)
-
フリーゲームを解析したい
-
Now Loadingについて
-
C言語で簡単なゲームを作る方法
-
abnormal program termination
-
ゲームを日本語化しようとする...
-
ノベルゲームを作ろうとおもっ...
-
乱数について(Rnd関数)
-
恋愛シミュレーション制作にゲ...
-
C言語でのsleep機能について
-
ハイスコア
-
ポトリスのようなゲームを作り...
-
ゲームのソースコードを解析し...
-
課題研究でVisual C#でトランプ...
-
ゲームプログラマーとシステム...
-
javaFXで機能的にゲームを作る...
-
Unityでブラックジャックゲーム
-
C#で音楽の2曲同時再生の仕方
おすすめ情報