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

Minefield obiektowo - zadanie

Object Storage Arubacloud
0 głosów
448 wizyt
pytanie zadane 25 grudnia 2016 w C i C++ przez niezalogowany

Wesołych świąt! Ostatnio na zajęciach otrzymałem zadanie napisania jakiejś odmiany sapero-podobnej gry i zatrzymałem się na punkcie stworzenia planszy.

Ogólny zarys zadania:

 

1 odpowiedź

0 głosów
odpowiedź 25 grudnia 2016 przez Szymon Polaczy Obywatel (1,660 p.)
Zatrzymałeś się na tworzeniu planszy. A na w czym dokładnie był problem?
komentarz 25 grudnia 2016 przez niezalogowany
Dokładnie z jej stworzeniem. Od jej wyświetlania do wyświetlania na niej min oraz sapera
komentarz 25 grudnia 2016 przez Szymon Polaczy Obywatel (1,660 p.)
Chyba jestem jakiś niekumaty. Czyli ty masz problem z wylosowaniem pozycji min i gracza czy z samym rysowaniem?
komentarz 25 grudnia 2016 przez Szymon Polaczy Obywatel (1,660 p.)

Bo jeżeli z rysowaniem to ja to robię tak:

void Plansza(Punkt s, PoleMinowe m)
{
for(int H=0;H<Height;H++)
{
for(int W=0;W<Width;W++)
{
if(H == s.pozycjay && W == s.pozycjax)
cout<<"O";

else if(H == m.pozycjay && W == m.pozycjax)
cout<<"M";

else cout<<" ";
}
cout<<endl;
}
}

Nie wiem czy o to chodzi , ale mam nadzieje że jakoś pomoże

 

komentarz 25 grudnia 2016 przez Szymon Polaczy Obywatel (1,660 p.)
Powiem jeszcze że jeśli całą gre masz w jakiejś pętli to fukcja getch() ci ją zatrzyma (do momentu aż ktoś wciśnie przycisk). Tak więc polecałbym włożenie wywołania tej fukcji do if-a if(kbhit()). Fukcja kbhit() zwraca prawdę jęzeli istnieją jeszcze jakieś znaki do wczytania z klawiatury. Biblioteka conio.h z tego co pamiętam
komentarz 25 grudnia 2016 przez niezalogowany
Mam wylosowane x i y np 10 min. Teraz muszę napisać funkcję, która wyświetli mi plansze tak jak jest to pokazane na slajdzie. Dodam, że pozycję min są umieszczone w dynamicznej tablicy typu Punkt, czyli dostęp do nich w funkcji void plansza(Punkt s, PoleMinowe m) jest następujący: m.miny[i].x/y. Problem jest z iterowaniem kolejnych min, wie  jak sprawdzić ich pozycję
komentarz 25 grudnia 2016 przez niezalogowany

Klasy:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

class Punkt
{
public:
	int x, y;

	void UstawPunkt(int X, int Y) { x = X; y = Y; }
};

class PoleMinowe
{
public:
	int liczbaMin;
	Punkt *miny;

	void UstawMiny(int lmin);
};

void menu();
void NowaGra();
void plansza(PoleMinowe m, Punkt s);

Funkcje: 

#include "plik.h"

Punkt ss;
PoleMinowe mm;

void menu()
{
	cout << "WITAJ W GRZE... MINEFIELD!!!!" << endl;
	cout << "Co chcesz zrobic?" << endl;
	cout << "1. Nowa gra" << endl;
	cout << "2. Informacje o grze i autorze" << endl;
	cout << "0. Wyjscie" << endl;
	cout << "Wybieram: ";
}

void NowaGra()
{
	int a;
	cout << "---===MINEFIELD!===---" << endl;
	cout << "Rozpoczynamy nowa gre" << endl;
	cout << "Podaj liczbe min: ";
	cin >> a;
	mm.UstawMiny(a);
	ss.UstawPunkt(1, 39);
	plansza(mm, ss);
}

void PoleMinowe::UstawMiny(int lmin)
{
	srand(time(NULL));
	liczbaMin = lmin;
	miny = new Punkt[lmin];
	for (int i = 0; i < lmin; i++)
	{
		miny[i].x = rand() % 39 + 1;
		miny[i].y = rand() % 39 + 1;
	}
	for (int i = 0; i < lmin; i++)
	{
		cout << "Mina nr: " << i << ", " << miny[i].x << ", " << miny[i].y << endl;
	}
}

void plansza(PoleMinowe m, Punkt s)
{
	int a = 0;

	for (int j = 0; j < 40; j++)
	{
		for (int k = 0; k < 40; k++)
		{
                     //tutaj sprawdzenie pozycji min i sapera oraz ich wyświetlenie
		
		}
		cout << endl;
	}
}

 

komentarz 25 grudnia 2016 przez Szymon Polaczy Obywatel (1,660 p.)
No z pozycją sapera pewnie nie masz problemów. A z pozycją min sam niestety ci nie pomogę. Miałem taki problem przy robieniu konsolowego snake i nie umiałem go rozwiązać. Niestety moja pomoc ograniczy się do słów: POWODZENIA. Sam również podłączam się pod pytanie
komentarz 25 grudnia 2016 przez niezalogowany

Rozwiązanie: 

void plansza(PoleMinowe m, Punkt s)
{
	int tmp = 0; 

	for (int i = 0; i < 40; i++)
	{
		for (int j = 0; j < 40; j++)
		{
			for (int k = 0; k < m.liczbaMin; k++)
			{	
				if ((m.miny[k].x == i) && (m.miny[k].y == j))
				{ 
					cout << "X";
					tmp = 1;	// jest mina 
				}
				else
				{	
					tmp = 0;	// nie ma miny
				}
			}
			cout << " ";
		}
		cout << endl;
	}
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,036 wizyt
pytanie zadane 7 marca 2016 w C i C++ przez Lukasz95 Bywalec (2,160 p.)
0 głosów
2 odpowiedzi 365 wizyt
pytanie zadane 12 października 2017 w PHP przez makoszet Początkujący (360 p.)
0 głosów
1 odpowiedź 338 wizyt
pytanie zadane 25 lipca 2017 w PHP przez Bartess Gaduła (3,630 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...