• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego losuje ten sam klocek w Tetrisie?

Object Storage Arubacloud
+2 głosów
301 wizyt
pytanie zadane 4 kwietnia 2015 w C i C++ przez Kamil Zemczak Początkujący (270 p.)

Tworze prostą grę w konsoli TETRIS, mam problem, program losuje mi caly czas ten sam klocek.

>>>>Klocki.h<<<<


#pragma once

#include <windows.h>
#include <Windows.h>
#include <time.h>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <iostream>
using namespace std;


char klocki[4][4][4][4] = {

		{
			{
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', ' ', ' ', }
			},

			{
				{ '#', '#', '#', '#', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},
			{
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', ' ', ' ', }
			},
			{
				{ '#', '#', '#', '#', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			}


		},

		{
			{
				{ ' ', '#', '#', ' ', },
				{ ' ', '#', '#', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},

			{
				{ ' ', '#', '#', ' ', },
				{ ' ', '#', '#', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},
			{
				{ ' ', '#', '#', ' ', },
				{ ' ', '#', '#', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},
			{
				{ ' ', '#', '#', ' ', },
				{ ' ', '#', '#', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			}
		},

		{

			{

				{ ' ', ' ', ' ', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', '#', ' ', }
			},

			{
				{ ' ', ' ', ' ', '#', },
				{ ' ', '#', '#', '#', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},

			{

				{ ' ', '#', '#', ' ', },
				{ ' ', ' ', '#', ' ', },
				{ ' ', ' ', '#', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},

			{
				{ '#', '#', '#', ' ', },
				{ '#', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			}


		},

		{
			{
				{ ' ', '#', ' ', ' ', },
				{ ' ', '#', '#', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},

			{
				{ ' ', '#', ' ', ' ', },
				{ '#', '#', '#', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},
			{
				{ ' ', '#', ' ', ' ', },
				{ '#', '#', ' ', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			},
			{
				{ '#', '#', '#', ' ', },
				{ ' ', '#', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', },
				{ ' ', ' ', ' ', ' ', }
			}
		}
};





>>>>Tetris.cpp<<<<<

// Tetris.cpp : Defines the entry point for the console application.
//



#include "stdafx.h"
#include "Klocki.h"

using namespace std;


char studnia[20][20] = {
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'x' },
		{ 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x' }

};

int losujKlocek()
{
	return (rand()%4;
}

int losujObrot()
{
	return (rand()%4;

}

void rysuj(char _studnia[20][20])
{
	for (int i = 0; i < 20; i++)
	{
		for (int j = 0; j < 20; j++)
		{
			cout << _studnia[i][j];
		}
		cout << endl;
	};
}

void wpiszKlocek(char _studnia[20][20], int _x, int _y, char _klocki[4][4][4][4], int _klocek, int _obrot)
{
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
		{	
			if (_klocki[_klocek][_obrot][i][j] == '#')
			_studnia[i + _y][j + _x] = _klocki[_klocek][_obrot][i][j];
		}
		
	};
}

void kasujKlocek(char _studnia[20][20], int _x, int _y)
{
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			if (_studnia[i + _y][j + _x] == '#')
			{
				_studnia[i + _y][j + _x] = ' ';
			}
		}

	}
}

bool czyBetonuj(char _studnia[20][20], int _x, int _y, char _klocki[4][4][4][4], int _klocek, int _obrot)
{
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			if ((_studnia[(i + 1) + _y][j + _x] == 'o') || (_studnia[(i + 1) + _y][j + _x] == 'x'))
			{
				if (_klocki[_klocek][_obrot][i][j] == '#')
				return true;
			}
		}
	}
	return false;
}

void betonuj(char _studnia[20][20], int _x, int _y, char _klocki[4][4][4][4], int _klocek, int _obrot)
{
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			if (_klocki[_klocek][_obrot][i][j] == '#')
				_studnia[i + _y][j + _x] = 'o';
		}

	};
}

int _tmain(int argc, _TCHAR* argv[])
{
	srand(time(NULL));

	

	//opcje//
	int start_x = 8, start_y = 0;
	/////////

	int x, y;
	int klocek = losujKlocek();
	int obrot = losujObrot();
	y = start_y;
	x = start_x;
	
	


		do
		{

				if (czyBetonuj(studnia, x, y, klocki, klocek, obrot))
				{
					betonuj(studnia, x, y, klocki, klocek, obrot);
			
					y = start_y;
					x = start_x;



					int klocek = losujKlocek();
					int obrot = losujObrot();
				}
				else
				{
					kasujKlocek(studnia, x, y);
					y++;
				}
				
				
					system("CLS");

					wpiszKlocek(studnia, x, y, klocki, klocek, obrot);
					rysuj(studnia);
					kasujKlocek(studnia, x, y);

					
				
			Sleep(500);


		} while (1); //czy koniec
		

	
		
		


	


	system("PAUSE");
	return 0;
}




 

5 odpowiedzi

+4 głosów
odpowiedź 4 kwietnia 2015 przez rafiten Nowicjusz (220 p.)
linie 183 i 188 niedomknięte nawiasy - czy to się w ogóle kompiluje?
+2 głosów
odpowiedź 4 kwietnia 2015 przez szmq Pasjonat (22,770 p.)
Spróbuj srand(time(NULL)) zapisać przed rand() :)
komentarz 4 kwietnia 2015 przez Kamil Zemczak Początkujący (270 p.)
Wpisałem przed rand() w kazdej z funkcji losujących i nadal losuje tylko raz podczas uruchomienia programu. Po zabetonowaniu pojawia się ten sam rodzaj klocka.
komentarz 4 kwietnia 2015 przez szmq Pasjonat (22,770 p.)
Spróbuj zaraz pod using namespace. Powinno pomóc. Jeżeli nie to może masz coś źle zapisane.
+1 głos
odpowiedź 4 kwietnia 2015 przez Harsay Pasjonat (23,640 p.)
int losujKlocek()
{
    return (rand()%4;
}

Usuń "(" przed rand()%4

Możliwe, że to powoduje błąd. Mi kompilator nie przepuszcza takiego zapisu.

0 głosów
odpowiedź 4 kwietnia 2015 przez Kamil Zemczak Początkujący (270 p.)
Panowie, znalazlem przyczyne... Ale ja jestem głupi :) Po funkcji Betonuj() mam ponowną deklarację zmiennych.

 

Zerknijcie na linie 292 i 293...
komentarz 4 kwietnia 2015 przez rafiten Nowicjusz (220 p.)
Dlatego kopiuj wklej nie jest najlepszą metodą :)
–2 głosów
odpowiedź 4 kwietnia 2015 przez chomek Gaduła (4,500 p.)

użyj w środku tej funkcji losującej:

srand(time(NULL))

 

komentarz 4 kwietnia 2015 przez Kamil Zemczak Początkujący (270 p.)
Jest użyta w funkcji Main()

Podobne pytania

–3 głosów
3 odpowiedzi 476 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez AdiM Nowicjusz (210 p.)
0 głosów
1 odpowiedź 666 wizyt
0 głosów
0 odpowiedzi 232 wizyt
pytanie zadane 25 lutego 2021 w HTML i CSS przez raul120 Nowicjusz (120 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...