Oppure

Loading
16/04/20 14:48
Scarsoinformatico
Verifica di Informatica
Scrivere nel linguaggio C++ il codice che implementi un software atto a realizzare il gioco di un labirinto. Il gioco sarà tale che due giocatori potranno sfidarsi e scambiarsi i ruoli di volta in volta. Pertanto, un giocatore potrà disegnare un labirinto mentre l'altro giocatore dovrà risolvere il labirinto.
Requisiti:
1. Il labirinto sarà costituito da una matrice 'm x n' di caratteri '#' che delimiteranno le aree che non sarà possibile percorrere. 2. Il percorso sarà fatto di caratteri spazio vuoto ' '. 3. Indicare il punto di partenza del labirinto con la lettera S. 4. Indicare il punto di arrivo con la lettera A. 5. Indicare con un asterisco * il percorso fatto per risolvere il labirinto. 6. Indicare con la lettera @ quando si sbaglia e bisogna tornare indietro. 7. Indicare alla fine il numero di errori commessi, ossia quante lettere @ sono presenti.
Inoltre, dalla premessa fatta si evince che il gioco sarà costituito di due componenti logiche simili, ma distinte:
1. Nella prima componente sarà implementato un codice che servirà per disegnare il labirinto, usando le 4 frecce per indicare la direzione nel quale tracciare il percorso. 2. Nella seconda componente sarà implementato il codice che servirà per risolvere il labirinto. Il giocatore percorra' il labirinto usando le 4 frecce per indicare la direzione. Il gioco funzionerà sul prompt dei comandi, e sarà implementato usando solo le funzionalità sino ad ora viste.
Di seguito, sono descritte alcune funzionalità specifiche che saranno utili al fine di implementare un software funzionante.
1. La cattura del segnale da tastiera delle quattro frecce. Le quattro frecce potrebbero essere individuate da 4 lettere, che possiamo usare per poter decidere la direzione in cui muoverci. Es: si potrebbero usare le lettere: o A (65) per indicare SINISTRA o D (68) per indicare DESTRA o W (87) per indicare SU o S (83) per indicare GIU Allo stesso modo è possibile catturare le 4 frecce, ma in questo caso occorrerà un ulteriore accorgimento. Le frecce come le lettere hanno dei corrispondenti valori numerici: o 75 per indicare SINISTRA o 77 per indicare DESTRA o 72 per indicare SU o 80 per indicare GIU
2. Per evitare che l'utente debba premere invio tutte le volte che si clicca sulla freccia o sul carattere corrispondente, occorrerà usare il comando _getch(), per poter leggere il carattere corrente. Es: char input_utente = _getch();

3. Usare il commando system("cls";); per pulire il promp dei comandi dalle digitazioni precedenti. Senza tale comando, il software funzionerà comunque, ma si vedrà un testo che scorre, mentre con il comando "system(cls);" si darà l'idea di vedere il labirinto come una immagine statica.
aaa
16/04/20 17:20
nessuno
E la verifica di informatica te la dobbiamo fare noi?

Thread da chiudere di filata..
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
16/04/20 20:31
Goblin
Postato originariamente da nessuno:

E la verifica di informatica te la dobbiamo fare noi?

Thread da chiudere di filata..


Mi sembra giusto... però così ci togli il divertimento... facciamo così...
Scarsoinformatico ... butta giù qualche linea di codice, un idea, i tuoi dubbi e le tue certezze.
Qui sicuramente trovi qualche anima pia che ti aiuta, ovvio se tu (Scarsoinformatico) non ti sforzi e non dai contributi, non avrai niente in cambio
G.
Ibis redibis non morieris in bello
16/04/20 22:32
Carlo
Se ti hanno dato un esercizio così, significa che di programmazione ne devi già sapere abbastanza da scrivere un tuo programma.
Se poi non riesci a fare qualcosa, o qualcosa non va come ti eri prefissato, l'aiuto non mancherà.
Se invece non sai scrivere nulla, la verifica non la devi passare, e ti devi mettere a studiare....
in programmazione tutto è permesso
17/04/20 7:10
AldoBaldo
Il modo in cui viene spiegata la dinamica del "gioco" è penoso. Quell'uso contorto (e non sempre esplicito come dovrebbe) della lingua italiana sembra essere parecchio diffuso tra chi prepara questi testi. Mi sa che è il frutto avvelenato dell'iperspecializzazione che affligge un po' tutti i campi -- gente preparatissima nel suo ramo, ma tarpata negli altri, incluso quello della comunicazione verbale.
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
18/04/20 17:35
Scarsoinformatico
Postato originariamente da Goblin:
Postato originariamente da nessuno:

E la verifica di informatica te la dobbiamo fare noi?

Thread da chiudere di filata..


Mi sembra giusto... però così ci togli il divertimento... facciamo così...
Scarsoinformatico ... butta giù qualche linea di codice, un idea, i tuoi dubbi e le tue certezze.
Qui sicuramente trovi qualche anima pia che ti aiuta, ovvio se tu (Scarsoinformatico) non ti sforzi e non dai contributi, non avrai niente in cambio
G.


Buongiorno ragazzi,
non sono uno scansafatiche e vi assicuro che, nonostante gli sforzi, non riesco a fare molto. Sto frequentando la 3^ e da ottobre scorso ho scoperto l'informatica. Non punto il dito contro nessuno, se ho problemi con la materia, il primo ad esserne responsabile sono io ma la nostra classe, fin da subito, si è divisa in due gruppi: uno gruppo di "bravi" che corre e un gruppo di "scarsi" che arranca. Il docente pensa a rispettare il programma e il mio gruppo è sempre più col fiatone.
Posto qualche pezzo di codice oltre al quale non so andare. Se qualcuno volesse aggiungerci qualcosa ne sarei felice.
Grazie

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
const int righe=20;
const int cols=20;
char matrice[righe][cols];

for(int i=0; i<righe; i++)
{
for(size_t j=0; j<cols; j++)
{
matrice[i][j] = '#';
if(j==1)
matrice[i][j]='#';
}
}
for(int i=0; i<righe; i++)
{
for(size_t j=0; j<cols; j++)
{
cout<<matrice[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
aaa
18/04/20 19:49
Carlo
Ho dato uno sguardo a quanto hai postato, è in C, io gioco un po' con C++ e senza entrare nel merito vedo un errore, se fosse in C++ la dichiarazione della matrice bidimensionale :

char matrice[righe][cols];

in C++ impone che poi sia usata con ambedue i parametri ecco il codice corretto:

#include <iostream>
#include <string>

		using namespace std;

		int main(int argc, char* argv[])
		{
			const int righe = 20;
			const int cols = 20;
			char matrice[righe][cols];

			for (int i = 0; i < righe; i++)
			{
				for (size_t j = 0; j < cols; j++)
				{
					matrice[j][i] = '#';
					if (j == 1)
						matrice[j][i] = '#';
				}
			}
			for (int i = 0; i < righe; i++)
			{
				for (size_t j = 0; j < cols; j++)
				{
					cout << matrice[j][i] << " ";
				}
				cout << endl;
			}
			return 0;
		}


mettendo anche il secondo valore la matrice si riempie con tutti #
e cout mostra uno schema 20x20 di tutti #
Ultima modifica effettuata da Carlo 18/04/20 19:53
in programmazione tutto è permesso
18/04/20 21:07
Goblin
Concordo con tutto quello che ha detto Carlo, soprattutto sul codice che sembra più vicino al C piuttosto che al C++, io nel mio piccolo dovendo seguire la traccia data avrei fatto :

#include <iostream>
#include <string>

using namespace std;
const int Colonne = 18;
const int Righe=22;

class Labirinto {
	private:
	char  Matrice[Righe][Colonne]; // array di Righe x Colnne
	public:
	Labirinto();  // per creare il labirinto con i cicli for
	void Visualizza();  // si fa vedere il labirinto creato
};

Labirinto::Labirinto() {
    for(int i = 0; i < Righe; i++)
        for(int j = 0; j < Colonne; j++)
            Matrice[i][j] = '#';
}

void Labirinto::Visualizza(){

	for(int i=0; i<Righe; i++) {
  	  for(int j=0; j< Colonne; j++)
		printf("%c ", Matrice[i][j]);
		cout << endl;
	}
	cout << endl;
}

int main(int argc, char *argv[])
{
	Labirinto  Lab;
	Lab.Visualizza();
          
    system("PAUSE");
    return EXIT_SUCCESS;
}


Ossia avrei ragionato OO come nella logica C++, creando una classe labirinto e poi lavorandoci sopra...

PS: il mio C++ è molto arruginito, non ho un compilatore sotto mano, dunque mi scuso se il codice non compila o ci sono errori.
G.
Ibis redibis non morieris in bello