summaryrefslogtreecommitdiffstats
path: root/examples/life/life.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2011-11-08 12:31:36 -0600
committerTimothy Pearson <[email protected]>2011-11-08 12:31:36 -0600
commitd796c9dd933ab96ec83b9a634feedd5d32e1ba3f (patch)
tree6e3dcca4f77e20ec8966c666aac7c35bd4704053 /examples/life/life.cpp
downloadtqt3-d796c9dd933ab96ec83b9a634feedd5d32e1ba3f.tar.gz
tqt3-d796c9dd933ab96ec83b9a634feedd5d32e1ba3f.zip
Test conversion to TQt3 from Qt3 8c6fc1f8e35fd264dd01c582ca5e7549b32ab731
Diffstat (limited to 'examples/life/life.cpp')
-rw-r--r--examples/life/life.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/examples/life/life.cpp b/examples/life/life.cpp
new file mode 100644
index 000000000..413a7db40
--- /dev/null
+++ b/examples/life/life.cpp
@@ -0,0 +1,136 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "life.h"
+
+#include <qpainter.h>
+#include <qdrawutil.h>
+#include <qcheckbox.h>
+#include <qevent.h>
+#include <qapplication.h>
+
+// The main game of life widget
+
+LifeWidget::LifeWidget( int s, TQWidget *parent, const char *name )
+ : TQFrame( parent, name )
+{
+ SCALE = s;
+
+ maxi = maxj = 50;
+ setMinimumSize( MINSIZE * SCALE + 2 * BORDER,
+ MINSIZE * SCALE + 2 * BORDER );
+ setMaximumSize( MAXSIZE * SCALE + 2 * BORDER,
+ MAXSIZE * SCALE + 2 * BORDER );
+ setSizeIncrement( SCALE, SCALE);
+
+ clear();
+ resize( maxi * SCALE + 2 * BORDER , maxj * SCALE + 2 * BORDER );
+
+}
+
+
+void LifeWidget::clear()
+{
+ current = 0;
+ for ( int t = 0; t < 2; t++ )
+ for ( int i = 0; i < MAXSIZE + 2; i++ )
+ for ( int j = 0; j < MAXSIZE + 2; j++ )
+ cells[t][i][j] = FALSE;
+
+ repaint();
+}
+
+
+// We assume that the size will never be beyond the maximum size set
+// this is not in general TRUE, but in practice it's good enough for
+// this program
+
+void LifeWidget::resizeEvent( TQResizeEvent * e )
+{
+ maxi = (e->size().width() - 2 * BORDER) / SCALE;
+ maxj = (e->size().height() - 2 * BORDER) / SCALE;
+}
+
+
+void LifeWidget::setPoint( int i, int j )
+{
+ if ( i < 1 || i > maxi || j < 1 || j > maxi )
+ return;
+ cells[current][i][j] = TRUE;
+ repaint( index2pos(i), index2pos(j), SCALE, SCALE, FALSE );
+}
+
+
+void LifeWidget::mouseHandle( const TQPoint &pos )
+{
+ int i = pos2index( pos.x() );
+ int j = pos2index( pos.y() );
+ setPoint( i, j );
+}
+
+
+void LifeWidget::mouseMoveEvent( TQMouseEvent *e )
+{
+ mouseHandle( e->pos() );
+}
+
+
+void LifeWidget::mousePressEvent( TQMouseEvent *e )
+{
+ if ( e->button() == TQMouseEvent::LeftButton )
+ mouseHandle( e->pos() );
+}
+
+
+void LifeWidget::nextGeneration()
+{
+ for ( int i = 1; i <= MAXSIZE; i++ ) {
+ for ( int j = 1; j <= MAXSIZE; j++ ) {
+ int t = cells[current][i - 1][j - 1]
+ + cells[current][i - 1][j]
+ + cells[current][i - 1][j + 1]
+ + cells[current][i][j - 1]
+ + cells[current][i][j + 1]
+ + cells[current][i + 1][j - 1]
+ + cells[current][i + 1][j]
+ + cells[current][i + 1][j + 1];
+
+ cells[!current][i][j] = ( t == 3 ||
+ t == 2 && cells[current][i][j] );
+ }
+ }
+ current = !current;
+ repaint( FALSE ); // repaint without erase
+}
+
+
+void LifeWidget::paintEvent( TQPaintEvent * e )
+{
+ int starti = pos2index( e->rect().left() );
+ int stopi = pos2index( e->rect().right() );
+ int startj = pos2index( e->rect().top() );
+ int stopj = pos2index( e->rect().bottom() );
+
+ if (stopi > maxi)
+ stopi = maxi;
+ if (stopj > maxj)
+ stopj = maxj;
+
+ TQPainter paint( this );
+ for ( int i = starti; i <= stopi; i++ ) {
+ for ( int j = startj; j <= stopj; j++ ) {
+ if ( cells[current][i][j] )
+ qDrawShadePanel( &paint, index2pos( i ), index2pos( j ),
+ SCALE - 1, SCALE - 1, colorGroup() );
+ else if ( cells[!current][i][j] )
+ erase(index2pos( i ), index2pos( j ), SCALE - 1, SCALE - 1);
+ }
+ }
+ drawFrame( &paint );
+}