3
1

More than 1 year has passed since last update.

C言語学んで1ヶ月で爆弾探すゲーム作ってみた

Last updated at Posted at 2022-05-15

学校に通い始めて1ヶ月と少し。
配列位まで使えるようになって、今は思いついたゲームを作るのが楽しく、普段からc言語のことばかり考えるほどです。

そんな中普通にプレイしてて楽しいと思えるくらいのゲームが作れたので、投稿してみます。

指摘やアドバイスなどなんでもお待ちしております。

ルールはコード内に書いてあります。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){

	int a, b, n, i, j, rx, ry, bx, by;
	int rfield[7][7];
	int bfield[7][7];

	printf("\n"
			"5×5マスのどこかに赤い爆弾と青い爆弾が設置されています!!\n\n"
			"5手で得た情報をヒントに爆弾の位置を特定してください。\n"
			"片方でも爆弾の位置を間違えた場合爆発してしまいます。\n"
			"頑張って探し当ててください;;\n\n"

			"~ルール説明~\n\n"

			"何行目、何列目の順に数値を入力してください。\n\n"
			"・ そのマスに爆弾が設置されていた場合、「2」、\n"
			"・ そのマスの周囲8マスに爆弾が設置されていた場合、「1」、\n"
			"・ 上記の範囲に爆弾が存在しない場合、「0」と出力されます。\n"
			"\n\n"
			"5回この作業を繰り返した後、2つの爆弾の位置を聞きます。"
			"どちらか片方でも外れた場合、爆発し、GAME OVERとなります。"
			"情報をたよりに爆弾を2つとも探し当ててください。\n\n"

			"では、Enterを押してGAME START!!!\n\n");

	getchar();

	srand((unsigned int)time(NULL));

	rx = rand()%5+1;
	ry = rand()%5+1;
	bx = rand()%5+1;
	by = rand()%5+1;

	//red[rx][ry];
	//blue[bx][by];

	for(j=1;j<=5;j++){//field作成
		for(i=1;i<=5;i++){
			rfield[i][j]=0;
			bfield[i][j]=0;
		}
	}

	for(n=1;n<=5;n++){
		printf("%d 回目\n", n);
		printf("何行目?: "); scanf("%d", &a);
		printf("何列目?: "); scanf("%d", &b);

		if(a==rx && b==ry){//redbombの処理
			rfield[b][a]=2;
			printf("2");
		}
		else if((a-1<=rx && rx<=a+1) && (b-1<=ry && ry<=b+1)){
			printf("1");
			for(j=a-1;j<=a+1;j++){
				for(i=b-1;i<=b+1;i++){
					rfield[i][j]=1;
				}
			}
			rfield[b][a]=0;
		}
		else printf("0");

		if(a==bx && b==by){//bluebombの処理
			printf("2");
			bfield[b][a]=2;
		}
		else if((a-1<=bx && bx<=a+1) && (b-1<=by && by<=b+1)){
			printf("1");
			for(j=a-1;j<=a+1;j++){
				for(i=b-1;i<=b+1;i++){
					bfield[i][j]=1;
				}
			}
			bfield[b][a]=0;
		}
		else printf("0");

		printf("\n\n");

		printf("赤い爆弾の検知結果\t青い爆弾の検知結果\n");

		for(j=1;j<=5;j++){//field作成
			for(i=1;i<=5;i++){
				printf("%d", rfield[i][j]);
			}
			printf("\t\t\t");
			for(i=1;i<=5;i++){
				printf("%d", bfield[i][j]);
			}
			printf("\n");
		}

		for(j=1;j<=5;j++){//field作成
			for(i=1;i<=5;i++){
				rfield[i][j]=0;
				bfield[i][j]=0;
			}
		}
		printf("\n\n");
	}

	printf("5回の動作を終えました。\n\n"
			"いよいよ運命の時です。\n"
			"あなたが予\想する爆弾の位置を、赤い爆弾、青い爆弾の順に入力してください。\n\n");

	int arx, ary, abx, aby;

	printf("赤い爆弾:\t何行目?: "); scanf("%d", &arx);
	printf("\t	何列目?: "); scanf("%d", &ary);

	printf("青い爆弾:\t何行目?: "); scanf("%d", &abx);
	printf("\t	何列目?: "); scanf("%d", &aby);

	printf("\n\n");

	if((arx==rx && ary==ry) && (abx==bx && aby==by)){
		printf("おめでとうございます!!!\n爆弾は両方とも爆発しませんでした!!!\n\n");
	}
	if((arx==rx && ary==ry) && (abx!=bx || aby!=by)){
		printf("ドカン!青い爆弾が爆発してしまいました。。\nもう一度挑戦してみてね!\n\n");
	}
	if((arx!=rx || ary!=ry) && (abx==bx && aby==by)){
		printf("ドカン!赤い爆弾が爆発してしまいました。。\nもう一度挑戦してみてね!\n\n");
	}
	if((arx!=rx || ary!=ry) && (abx!=bx || aby!=by)){
		printf("どっかーーーん!!!!!\n爆弾が両方とも爆発してしまいました!!!\nもう二度とプレイするな!!\n\n");
	}

	printf("正解は、\n\n"
			"赤い爆弾は%d行目の%d列目、\n"
			"青い爆弾は%d行目の%d列目でした!\n\n"
			"また遊んでね!", rx, ry, bx, by);

	getchar();
	getchar();
	return 0;
}
3
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1