// This may look like C code, but it is really -*- C++ -*-
///////////////////////////////////////////////////////////////////////////
//
//  AMIGA Minesweeper - Declaration of the Field-object
//
//  (c) 1992 Hubert Feyrer (c9020@rrzc1.rz.uni-regensburg.de)
//
///////////////////////////////////////////////////////////////////////////

#ifndef _FIELD_H
#define _FIELD_H

//
// Klassendeklaration für ein Feld des Mine-Programmes
// Die Felder werden in einem Feld gespeichert.
//
class Field {
  private:
    int _cnt;                      // Anzahl Nachbar-Minen; -1 bei Minen
    int _open;                     // Flag; 1=aufgedeckt;
    struct Gadget *_gad;           // gad->UserData=this;
    char txt[2];                   // Gadget-Text
    int _i,_j;                     // Position im Minenfeld (x,y)
  public:
    enum { MARK  = 'X', BOMB  = '*', NUM   = '0', BLANK = ' ' };
    static Gadget *lastgad;        // Um Liste aufzubauen;
    int cnt(int c) const { _cnt=c; return _cnt; }
    int cnt(void) const { return _cnt; }
    int i(void) const { return _i; }
    int j(void) const { return _j; }
    GameStat check(int force=0);        // Feld und Nachbarfelder prüfen; 0=OK, 1=Bombe!
                                   // force=1; trotz Markierung prüfen
    void open(int show=0);         // Feld aufdecken; show=1: Nur Bomben hervorhe-
                                   // ben, sonstige Felder grau und Blank
    void clear(void);              // Feld abdecken, Spuren verwischen
    GameStat mark(void);                // mit X markieren;
    Field(int x, int y, int i, int j);
    ~Field(void);
};

#endif /* _FIELD_H */
