Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

c++ pytanie losowanie wolnych pol


Rekomendowane odpowiedzi

Opublikowano

Witam mam problem nie mam pojecia jak zrobic algorytm ktory by losowal wolne pola w tablicy zaluzmy ze mamy pole = tab[4][4] i chce sprawdzic czy pola otaczajace to pole sa wolne czy nie i wylosowac tylko 1 z tych wolnych jak to zrobic?

 

Zrobilem cos takiego ale nie wiem czy bedzie dobrze dzialac i w wiekszej skali chyba jest malo wydajne

 

if(map[y][x+1]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[0]=true;
				}
			else
			wolne[0]=false;
			if(map[y][x-1]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[1]=true;
				}
			else
			wolne[1]=false;
			if(map[y+1][x]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[2]=true;
				}
			else
			wolne[2]=false;
			if(map[y-1][x]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[3]=true;
				}
			else
			wolne[3]=false;
			
			
			// 778933
			k=rand()%4;
			Sleep(100);
			while(wolne[k]==false)
			{
			k=rand()%4;
			cout<<k;
			}
Opublikowano

Masz 8 opcji

 

xxx
xox
xxx

Zrób sobei 8 elementową tablicę booli, która będzie przetrzymywać informację czy na dane pole było już sprawdzone, podziel plansze np tak

 

 

123
4o5
678

 

gdzie o to Twoja pozycja, w obiegu pentli losuj jedną z 8 pozycji i sprawdzaj czy jest wolne i ustaw wartosc w tablicy dla tego pola jesli nie wolne.

Tobie pozostawiam jak rozwiązać ponowne wylosowanie tej samej zajętej liczby ;). A i tak gieneralnie to można by to rozwiązać mądrzej, wręcz wypadałoby :).

linki zewn.

Opublikowano

narazie mam cos takiego co nalezalo by zmienic?

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

int main()
{
	char map[20][40];
	
	for(int i=0;i<20;i++)
		for(int j=0;j<40;j++)
			map[i][j]=char(219);
	
	srand(time(NULL));
	int x,y;
	
	x=rand()%40;
	y=rand()%20;
	
	map[y][x]=' ';
	
	
	for(int i=0;i<20;i++)
		for(int j=0;j<40;j++)
			{
				cout << map[i][j];
				if(j==39)
				cout << endl;
			}
	int k;
	int zlicz=0;
	int tosamo=0;
	bool wolne[8];
	for(int i=0;i<20;i++)
		{
			system("cls");
			
			if(map[y][x+1]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[0]=true;
					tosamo=tosamo+1;
				}
			else
			wolne[0]=false;
			if(map[y][x-1]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[1]=true;
					tosamo=tosamo+1;
				}
			else
			wolne[1]=false;
			if(map[y+1][x]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[2]=true;
					tosamo=tosamo+1;
				}
			else
			wolne[2]=false;
			if(map[y-1][x]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[3]=true;
					tosamo=tosamo+1;
				}
			else
			wolne[3]=false;
			
			if(map[y-1][x+1]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[4]=true;
					tosamo=tosamo+1;
				}
			else
			wolne[4]=false;
			if(map[y+1][x-1]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[5]=true;
					tosamo=tosamo+1;
				}
			else
			wolne[5]=false;
			if(map[y-11][x+1]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[6]=true;
					tosamo=tosamo+1;
				}
			else
			wolne[6]=false;
			if(map[y-1][x-1]==(char)219)
				{
					zlicz=zlicz+1;
					wolne[7]=true;
					tosamo=tosamo+1;
				}
			else
			wolne[7]=false;
			
			
			// 778933
			k=rand()%4;
		//	Sleep(100);
			while(wolne[k]==false)
			{
			k=rand()%8;
			cout<<k;
			}
			
			switch(k)
				{
					case 0:
						x++;
						break;
					case 1:
						x--;
						break;
					case 2:
						y++;
						break;
					case 3:
						y--;
						break;
					case 4:
						x--;
						y++;
						break;
					case 5:
						x++;
						y++;
						break;
					case 6:
						x++;
						y--;
						break;
					case 7:
						x--;
						y--;
						break;
				}
				
			map[y][x]=' ';
			zlicz=0;
			for(int i=0;i<20;i++)
				for(int j=0;j<40;j++)
					{
						cout << map[i][j];
						if(j==39)
						cout << endl;
					}
			cout<<"okrazenie:"<<i<<endl;
		}
	
	
		
}


to ma losowac wolne pole i je zmienic naraziem oze byc wyciek przy odpalaniu b o nie robilem zabezpieczen na losowanie liczb poza tablica

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...