ゲーム制作において

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ゲーム制作において

Re: ゲーム制作において

#3

by 黎夜 » 4年前

あたっしゅ さんが書きました:
4年前

コード:

//#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h> // system()
#include <windows.h> // Sleep()
#include <time.h>  // time()


#define SIZE_X 14
#define SIZE_Y 21
#define WALL 1
#define BLOCK 4

int main()
{
	int c = 0;
	int wait_time = 600;
	int x, y;
	int bx, by; //ブロックの座標
	int r;
	int timecount = 60;
	int field[SIZE_Y][SIZE_X] =
	{
		{1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1}, //センター
		{1,0,0,0,0,0,0,0,0,0,0,0,1}, //センター
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1},
	};

	//ブロックを初期位置へ
	bx = 1, by = 1;
	srand(time(NULL)); //横方向のBLOCK表示は乱数でランダムに // Mainloop の外に移動。

	while (1)
	{
		// BLOCK を下にスクロール。
		for (y = SIZE_Y - 4; y>0; y--)
		{
			for (x = 1; x < SIZE_X - 1; x++)
			{
				field[y + 1][x] = field[y][x];
			}
		}

		//BLOCK 発生
		for (bx = 1; bx < 11; bx++) //1つずつ決めていく
		{
			r = rand() % 2;
			switch (r)
			{
			case 0: //r=0なら表示しない
				field[by][bx] = 0;
				break;

			case 1: //r=1なら表示
				field[by][bx] = BLOCK;
				break;
			}
		}
		//by++; //1座標進める 

		//if (by == 19) //もしブロックが一番下まで到達したらゲームオーバー
		//{
		//	printf("GAME OVER \n");
		//	break;
		//}

		//画面表示 
		for (y = 0; y < SIZE_Y; y++)
		{
			for (x = 0; x < SIZE_X; x++)
			{
				switch (field[y][x])
				{
				case 0:
					printf(" ");
					break;
				case WALL: //壁
					printf("■");
					break;
				case BLOCK: //ブロック
					printf("□");
					break;
				}
			}
			printf("\n");
		}

		// BLOCK ブロックが一番下まで到達しているか ?
		for (x = 1; x < SIZE_X - 1; x++)
		{
			if (field[SIZE_Y - 3][x] == BLOCK) {
				printf("GAME OVER \n");
				break;
			}
		}


		Sleep(wait_time); //少しの時間止める
		system("cls"); //画面消去
	}
	return 0;
}


// end.
東上☆海美☆「
VS2019 コンソール C++ モード。
こんな感じみみ ?
(掲示板初心者なもので質問投稿の仕方を間違えていました別垢で失礼いたします)
な、なるほど…分かりやすくありがとうございます...!
これからも精進します
ありがとうございました...!!

Re: ゲーム制作において

#2

by あたっしゅ » 4年前

コード:

//#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h> // system()
#include <windows.h> // Sleep()
#include <time.h>  // time()


#define SIZE_X 14
#define SIZE_Y 21
#define WALL 1
#define BLOCK 4

int main()
{
	int c = 0;
	int wait_time = 600;
	int x, y;
	int bx, by; //ブロックの座標
	int r;
	int timecount = 60;
	int field[SIZE_Y][SIZE_X] =
	{
		{1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1}, //センター
		{1,0,0,0,0,0,0,0,0,0,0,0,1}, //センター
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1},
	};

	//ブロックを初期位置へ
	bx = 1, by = 1;
	srand(time(NULL)); //横方向のBLOCK表示は乱数でランダムに // Mainloop の外に移動。

	while (1)
	{
		// BLOCK を下にスクロール。
		for (y = SIZE_Y - 4; y>0; y--)
		{
			for (x = 1; x < SIZE_X - 1; x++)
			{
				field[y + 1][x] = field[y][x];
			}
		}

		//BLOCK 発生
		for (bx = 1; bx < 11; bx++) //1つずつ決めていく
		{
			r = rand() % 2;
			switch (r)
			{
			case 0: //r=0なら表示しない
				field[by][bx] = 0;
				break;

			case 1: //r=1なら表示
				field[by][bx] = BLOCK;
				break;
			}
		}
		//by++; //1座標進める 

		//if (by == 19) //もしブロックが一番下まで到達したらゲームオーバー
		//{
		//	printf("GAME OVER \n");
		//	break;
		//}

		//画面表示 
		for (y = 0; y < SIZE_Y; y++)
		{
			for (x = 0; x < SIZE_X; x++)
			{
				switch (field[y][x])
				{
				case 0:
					printf(" ");
					break;
				case WALL: //壁
					printf("■");
					break;
				case BLOCK: //ブロック
					printf("□");
					break;
				}
			}
			printf("\n");
		}

		// BLOCK ブロックが一番下まで到達しているか ?
		for (x = 1; x < SIZE_X - 1; x++)
		{
			if (field[SIZE_Y - 3][x] == BLOCK) {
				printf("GAME OVER \n");
				break;
			}
		}


		Sleep(wait_time); //少しの時間止める
		system("cls"); //画面消去
	}
	return 0;
}


// end.
東上☆海美☆「
VS2019 コンソール C++ モード。
こんな感じみみ ?

ゲーム制作において

#1

by 零夜 » 4年前

今、VisualStudio2019,C言語にてシンプルなゲームを制作しています。

テトリスのようなフィールドで、上から降りてくるブロックをフィールドの一番下にいる自機から発射される弾で撃っていき、ブロックがフィールドの一番下まで来てしまったらゲームオーバー、ブロックが一番下まで来ないように1分間耐えられたらゲームクリアといったものを考えています。
その降りてくるブロックのことなのですが、思ったように動かせていません。

下記のように動かしたいです。

<現在>
■■■ ■ ■■■■■   ■■■ ■ ■■■■■   ■■■ ■ ■■■■■
        →  ■■ ■■■■■■■■ → ■■ ■■■■■■■■
                     ■■■■■ ■■ ■■
<目標>
■■■ ■ ■■■■■   ■■ ■■■■■■■■   ■■■■■ ■■ ■■
        →  ■■■ ■ ■■■■■ → ■■ ■■■■■■■■
                     ■■■ ■ ■■■■■
(ブロックのずれは関係ないです)

以下コードです

コード:

#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h> // system()
#include <windows.h> // Sleep()

#define SIZE_X 14
#define SIZE_Y 21
#define WALL 1
#define BLOCK 4

int main()
{
	int c = 0;
	int wait_time = 600;
	int x, y;
	int bx, by; //ブロックの座標
	int r;
	int timecount = 60;
	int field[SIZE_Y][SIZE_X] =
	{
		{1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1}, //センター
		{1,0,0,0,0,0,0,0,0,0,0,0,1}, //センター
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,0,0,0,0,0,1},
		{1,1,1,1,1,1,1,1,1,1,1,1,1},
	};
	//ブロックを初期位置へ
	bx = 1, by = 1;

	while (1)
	{
		//BLOCKの動き
		srand(time(NULL)); //横方向のBLOCK表示は乱数でランダムに
		for (bx = 1; bx < 11; bx++) //1つずつ決めていく
		{
			r = rand() % 2;
			switch (r)
			{
			case 0: //r=0なら表示しない
				field[by][bx] = 0;
				break;

			case 1: //r=1なら表示
				field[by][bx] = BLOCK;
				break;
			}
		}
		by++; //1座標進める 

		if (by == 19) //もしブロックが一番下まで到達したらゲームオーバー
		{
			printf("GAME OVER \n");
			break;
		}

		//画面表示 
		for (y = 0; y < SIZE_Y; y++)
		{
			for (x = 0; x < SIZE_X; x++)
			{
				switch (field[y][x])
				{
				case 0:
					printf(" ");
					break;
				case WALL: //壁
					printf("■");
					break;
				case BLOCK: //ブロック
					printf("□");
					break;
				}
			}
			printf("\n");
		}

		Sleep(wait_time); //少しの時間止める
		system("cls"); //画面消去
	}
	return 0;
}
C言語は主に入出力、反復、条件、配列を勉強済です。

よろしくお願いいたします。

ページトップ