Campo Minato. in java

Похожие документы
Calcolare con il computer: Excel. Saro Alioto 1

Foglio elettronico Microsoft Office Excel 2003

Excel. Il foglio di lavoro. Il foglio di lavoro Questa viene univocamente individuata dalle sue coordinate Es. F9

Menù principale di Calc

La classe java.lang.object

EXCEL: FORMATTAZIONE E FORMULE

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

EXCEL: FORMATTAZIONE E FORMULE

TESINA INFORMATICA CARTELLA CLINICA IN ACCESS

Appunti sui Fogli Elettronici. Introduzione. D. Gubiani. 19 Luglio 2005

Figura 1 - Finestra Tabella

EXCEL software Excel .xlxs, La cella intestazione della colonna intestazione di righe l indirizzo della cella testo numeri formule

TESINA INFORMATICA CARTELLA CLINICA IN ACCESS. Tesina: CARTELLA CLINICA IN ACCESS

13 Esercizi di Riepilogo

ESERCIZIO N. 4 Primo passaggio: Creare una cartella

Esempio: Ogni colonna può contenere un solo tipo di dati. Colonne e righe sono numerate partendo da zero. L Header non conta nella numerazione:

Come utilizzare i riferimenti assoluti e relativi in Microsoft Excel

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Modulo 3 - Elaborazione Testi 3.4 Oggetti

Operazioni preliminari: creare una cartella in Documenti

Implementazione dell albero binario in linguaggio C++

nome di un menu per visualizzarlo e poi selezionate facendo clic sul comando che vi interessa.

EXCEL. Alfabetizzazione Informatica Prof. GIUSEPPE PATTI

Corso sul PACCHETTO OFFICE. Modulo Access

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

Le basi del linguaggio Java

Calcoli con Fogli Elettronici

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

La nostra finestra dovrebbe essere come mostra la figura: Diamo innanzitutto un occhiata alle componenti principali di input/output:

Esercizi Scratch: Sensori

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Un documento ben formato

Laboratorio di Applicazioni numeriche

METODI ESERCIZI. 07-xx_Esercizi[01] Versione del: venerdì 3 maggio Andrea Zoccheddu CORSO INFORMATICA ITI ANGIOY SASSARI

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

Programmazione ad Oggetti. JFrame è la classe di base per le finestre Fornisce tutte le caratteristiche di una finestra vuota

Cultura Tecnologica di Progetto

Fogli Elettronici: MS Excel

Analisi dei dati con Excel

SUDOKU Come si gioca Regole del Gioco Risolvere un Sudoku Consigli

Proprietà delle potenze

Esempio su strutture dati dinamiche: ArrayList

Uguaglianza e copia di oggetti

Generazione di una mesh rettangolare

Classe Vettore (i) Creare una classe che consenta di gestire un vettore di N elementi reali (double), che preveda i seguenti metodi:

Biblioteca di Cervia I FOGLI DI CALCOLO

Esempi in Java di program.ne O-O

TIPI PRIMITIVI E CLASSI WRAPPER

Informatica d ufficio

Video Scrittura (MS Word)

ESERCIZIO 1 (FILE DI TESTO)

Codice Gray. (versione Marzo 2007)

Operazioni preliminari: creare una cartella in Documenti

Uso di metodi statici. Walter Didimo

Inserire record. Microsoft Access. Inserire/modificare record. Inserire record. Cancellare record. Inserire/modificare record

GUI e java swing. Elmenti della GUI. Eventi e listener contenitori componenti layout manager. caratteristiche speciali

L Abstract Windowing Toolkit. Le GUI in Java. Il Frame. Cenni sull ereditarietà. Gianpaolo Cugola - Sistemi Informativi in Rete

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

L INTERFACCIA GRAFICA DI EXCEL

Lena Cota Guido Corso di Informatica - II livello. Excel 2003 Formule. Imparare a usare le formule con la pratica

Programmazione a oggetti

Fondamenti di Informatica T-1. Classi e array

Esempio su strutture dati dinamiche: ArrayList

Modulo 3 DATI E OPERATORI. 1. Assegnare i dati da tastiera 2. Variabili e tipi di dati 3. Le stringhe 4. Un po di logica

Implementazione Java di un ADT

Database Modulo 6 CREAZIONE DI MASCHERE

Appendice B - Othello come applet

RE Genitori e Alunni

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Relazioni. Microsoft Access. Relazioni. Relazioni

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Fondamenti di Informatica

Транскрипт:

Campo Minato in java

Il gioco campo rettangolare o quadrato suddiviso in tanti quadratini Il giocatore deve sminare il campo, cliccando sui quadratini, col tasto destro o col tasto sinistro

il gioco cliccando su un quadratino: a. se il quadratino su cui si clicca contiene una bomba il gioco è finito b. se il quadratino non contiene una bomba viene mostrato il numero di bombe presente nei quadrati vicini se tutti i quadrati vicini non contengono bombe, vengono scoperte tutte le caselle fino a quando non si trovano caselle nelle cui immediate vicinanze ci sia una bomba. è possibile segnare una possibile bomba col

il gioco - esempio cliccando nella prima cella in alto a sx, in questo caso si scoprono le 3 celle sottostanti e in modo recursivo tutte le celle segnate di blu

Implementazione Si può partire da una matrice di interi.. ogni quadratino conterrà -1 se c è la bomba, oppure un numero compreso tra 0 e 8 (al massimo può avere 8 bombe avendo 8 quadratini vicini). int[][] quadrati = new int[num_colonne][num_righe]; Attenzione che, se il campo è rettangolare, è diverso scrivere int[][] quadrati = new int[num_righe][num_colonne]

Implementazione All inizio ogni elemento della matrice è composta di 0. (metodo inizializzacampo() ) Successivamente si possono estrarre a sorte un certo numero di bombe, per esempio un 10% delle celle (metodo posizionabombe()) Individuo 2 coordinate casuali, se la cella non contiene una bomba, setto il contenuto a -1 e incremento il numero delle bombe inserite.

Implementazione Una volta posizionate le bombe, bisogna che ogni cella contenga il numero di bombe che si trovano nelle otto celle adiacenti. Può essere comodo avere un metodo int getnumbombevicine(int x, int y) che riceve 2 parametri (le 2 coordinate della tabella) e restituisce il numero tra 0 e 8.

Implementazione Può essere utile adoperare due vettori che contengono i valori per guardare attorno al quadratino. I quadratini situati ai bordi avranno meno vicini.. qudratino (x-1,y-1) qudratino (x +0,y-1) qudratino (x+1,y-1) qudratino (x-1,y+0) quadratino (x,y) qudratino (x+1,y+0) qudratino (x-1,y+1) qudratino (x+0,y+1) qudratino (x+1,y+1)

Implemantazione utilizzare un metodo stampaquadraticonsole() che produca un output sul terminale, per comodità di visualizzazione utilizzare una X o un asterisco al posto del valore -1

Implementazioni gui Per l interfaccia grafica possiamo creare una classe che estenda JFrame che conterrà tutto il campo da gioco. (FrameCampoMinato) Possiamo utilizzare una classe che estende JLabel per creare i singoli quadratini grafici. (Cella)

Implementazione gui FrameCampoMinato sarà attivata dalla classe CampoMinato; nel costruttore riceverà numcolonne, numrighe e la matrice di interi la matrice di interi sarà renderizzata dalla classe Cella che estende JLabel e implementa l interfaccia java.awt.event.mouselisterner

interfaccia gui FrameCampoMinato avrà un metodo pubblico (o almeno protetto) Cella getcella(colonna, riga) che ritorna un puntatore alla cella che si trova nella riga e colonna specificata. avrà anche un metodo void giocofinitoesplosionetotale() che farà esplodere tutte le bombe

interfaccia gui Altri metodi per FrameCampoMinato boolean isgiocoterminato() guarda se tutte le celle tranne le bombe sono scoperte.. e tutte le bombe segnate.

interfaccia gui Cella La classe cella estende JLabel. Per ogni cella è utile sapere riga e colonna (interi), se è girata o se è segnata (boolean). Sarà utile mantenere un puntatore all oggetto che la contiene (l oggetto che l ha creata.. di classe FrameCampoMinato) E conveniente passare riga, colonna e frame direttamente nel costruttore

interfaccia gui Cella Questa classe avrà al suo interno la logica del gioco, in quanto implementerà l interfaccia MouseListener, responsabile dei classici comportamenti del mouse (mouseover, mousedown, ecc..) class Cella extends JLabel implements MouseListeners { } } public Cella(int c, int r, int v, int obj ){ this.addmouselistener(this)

interfaccia gui al click del mouse, se premo tasto destro dovrò segnalare/non segnalare una possibile bomba (tramite il boolean segnata) se premo tasto sinistro dovrò scoprire il quadratino (boolean girata) e...

interfaccia gui - classe Cella se il valore della cella è BOMBA - ho finito il gioco (eventuale metodo esplodibomba della classe Cella) e chiamata al metodo giocofinitoesplosionetotale() dell oggetto contenitore.. se il valore della cella è compreso tra 0 e 8 - chiamo il metodo della classe Cella void scopricella()

interfaccia gui - classe Cella il metodo scopricella() - segna la cella come girata - guarda il valore della cella: se è compreso tra 1 e 8 semplicemente lo scrive - se è 0 viene chiamato il metodo della classe Cella scopricellarecursivo(riga, colonna)

interfaccia gui - classe Cella scopricellarecursivo(riga, colonna) - calcola le coordinate dei vicini.. notare che per sapere se sono valide abbiamo bisogno di sapere (tramite metodi getter dell oggetto contenitore) il numero massimo di righe e di colonne inoltre mi interessano soltanto le celle che non sono ancora state girate e non sono segnate!

interfaccia gui - classe Cella scopricellarecursivo(riga, colonna) la singola Cella non può accedere direttamente alle altre celle, per questo dobbiamo utilizzare il metodo getcella(colonna,riga) definito sull oggetto contenitore (FrameCampoMinato). Se abbiamo un generico Object contenitore possiamo utilizzare l operatore di cast ( (FrameCampoMinato) c).getcella(c,r)

interfaccia gui - classe Cella Una volta individuate le celle, per ogni cella che non contiene una bomba viene invocato il metodo scopricella() che, se trova altre celle con 0, chiamerà nuovamente scopricellarecursivo con nuove coordinate. if (valorevicino!= CampoMinato.BOMBA) { } c.getcella(posx, posy).scopricella();