This keyword is not expanded by Git which means it's not replaced with the correct revision value in the releases made using git-based scripts and it's confusing to have lines with unexpanded "$Id$" in the released files. As expanding them with Git is not that simple (it could be done with git archive and export-subst attribute) and there are not many benefits in having them in the first place, just remove all these lines. If nothing else, this will make an eventual transition to Git simpler. Closes #14487. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			166 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        game.h
 | |
| // Purpose:     Life! game logic
 | |
| // Author:      Guillermo Rodriguez Garcia, <guille@iies.es>
 | |
| // Modified by:
 | |
| // Created:     Jan/2000
 | |
| // Copyright:   (c) 2000, Guillermo Rodriguez Garcia
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _LIFE_GAME_H_
 | |
| #define _LIFE_GAME_H_
 | |
| 
 | |
| // --------------------------------------------------------------------------
 | |
| // LifePattern
 | |
| // --------------------------------------------------------------------------
 | |
| 
 | |
| // A class which holds a pattern
 | |
| class LifePattern
 | |
| {
 | |
| public:
 | |
|     // This ctor is used by the LifeReader class
 | |
|     LifePattern(wxString      name,
 | |
|                 wxString      description,
 | |
|                 wxString      rules,
 | |
|                 wxArrayString shape)
 | |
|     {
 | |
|         m_name        = name;
 | |
|         m_description = description;
 | |
|         m_rules       = rules;
 | |
|         m_shape       = shape;
 | |
|     };
 | |
| 
 | |
|     // A more convenient ctor for the built-in samples
 | |
|     LifePattern(wxString      name,
 | |
|                 wxString      description,
 | |
|                 int           width,
 | |
|                 int           height,
 | |
|                 const char   *shape)
 | |
|     {
 | |
|         m_name        = name;
 | |
|         m_description = description;
 | |
|         m_rules       = wxEmptyString;
 | |
|         // TODO: add the positions later, since the formatting command
 | |
|         // causes a crash due to conversion objects not being available
 | |
|         // during initialisation.
 | |
| #ifndef __WXMAC__
 | |
|         m_shape.Add( wxString::Format(wxT("%i %i"), -width/2, -height/2) );
 | |
| #endif
 | |
|         for(int j = 0; j < height; j++)
 | |
|         {
 | |
|             wxString tmp;
 | |
| 
 | |
|             for(int i = 0; i < width; i++)
 | |
|             {
 | |
|                 tmp += wxChar(shape[j * width + i]);
 | |
|             }
 | |
| 
 | |
|             m_shape.Add( tmp );
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     wxString      m_name;
 | |
|     wxString      m_description;
 | |
|     wxString      m_rules;
 | |
|     wxArrayString m_shape;
 | |
| };
 | |
| 
 | |
| 
 | |
| // --------------------------------------------------------------------------
 | |
| // Life
 | |
| // --------------------------------------------------------------------------
 | |
| 
 | |
| // A struct used to pass cell coordinates around
 | |
| struct LifeCell
 | |
| {
 | |
|     wxInt32 i;
 | |
|     wxInt32 j;
 | |
| };
 | |
| 
 | |
| // A private class that contains data about a block of cells
 | |
| class LifeCellBox;
 | |
| 
 | |
| // A class that models a Life game instance
 | |
| class Life
 | |
| {
 | |
| public:
 | |
|     // ctor and dtor
 | |
|     Life();
 | |
|     ~Life();
 | |
| 
 | |
|     // accessors
 | |
|     inline wxUint32 GetNumCells() const    { return m_numcells; };
 | |
|     inline wxString GetRules() const       { return m_rules; };
 | |
|     inline wxString GetDescription() const { return m_description; };
 | |
|     bool IsAlive(wxInt32 x, wxInt32 y);
 | |
|     void SetCell(wxInt32 x, wxInt32 y, bool alive = true);
 | |
|     void SetPattern(const LifePattern &pattern);
 | |
| 
 | |
|     // game control
 | |
|     void Clear();
 | |
|     bool NextTic();
 | |
| 
 | |
|     // navigation
 | |
|     LifeCell FindNorth();
 | |
|     LifeCell FindSouth();
 | |
|     LifeCell FindWest();
 | |
|     LifeCell FindEast();
 | |
|     LifeCell FindCenter();
 | |
| 
 | |
|     // The following functions find cells within a given viewport; either
 | |
|     // all alive cells, or only those cells which have changed since last
 | |
|     // generation. You first call BeginFind() to specify the viewport,
 | |
|     // then keep calling FindMore() until it returns true.
 | |
|     //
 | |
|     // BeginFind:
 | |
|     //  Specify the viewport and whether to look for alive cells or for
 | |
|     //  cells which have changed since the last generation and thus need
 | |
|     //  to be repainted. In this latter case, there is no distinction
 | |
|     //  between newborn or just-dead cells.
 | |
|     //
 | |
|     // FindMore:
 | |
|     //  Fills an array with cells that match the specification given with
 | |
|     //  BeginFind(). The array itself belongs to the Life object and must
 | |
|     //  not be modified or freed by the caller. If this function returns
 | |
|     //  false, then the operation is not complete: just process all cells
 | |
|     //  and call FillMore() again.
 | |
|     //
 | |
|     void BeginFind(wxInt32 x0, wxInt32 y0,
 | |
|                    wxInt32 x1, wxInt32 y1,
 | |
|                    bool changed);
 | |
|     bool FindMore(LifeCell *cells[], size_t *ncells);
 | |
| 
 | |
| private:
 | |
|     // cellbox-related
 | |
|     LifeCellBox *CreateBox(wxInt32 x, wxInt32 y, wxUint32 hv);
 | |
|     LifeCellBox *LinkBox(wxInt32 x, wxInt32 y, bool create = true);
 | |
|     void KillBox(LifeCellBox *c);
 | |
| 
 | |
|     // helper for BeginFind & FindMore
 | |
|     void DoLine(wxInt32 x, wxInt32 y, wxUint32 alive, wxUint32 old = 0);
 | |
| 
 | |
| 
 | |
|     // pattern description
 | |
|     wxString   m_name;          // name (currently unused)
 | |
|     wxString   m_rules;         // rules (currently unused)
 | |
|     wxString   m_description;   // description
 | |
| 
 | |
|     // pattern data
 | |
|     LifeCellBox   *m_head;          // list of alive boxes
 | |
|     LifeCellBox   *m_available;     // list of reusable dead boxes
 | |
|     LifeCellBox  **m_boxes;         // hash table of alive boxes
 | |
|     wxUint32   m_numcells;      // population (number of alive cells)
 | |
| 
 | |
|     // state vars for BeginFind & FindMore
 | |
|     LifeCell  *m_cells;         // array of cells
 | |
|     size_t     m_ncells;        // number of valid entries in m_cells
 | |
|     wxInt32    m_x, m_y,        // counters and search mode
 | |
|                m_x0, m_y0,
 | |
|                m_x1, m_y1;
 | |
|     bool       m_changed;
 | |
|     bool       m_findmore;
 | |
| };
 | |
| 
 | |
| #endif  // _LIFE_GAME_H_
 |