summaryrefslogtreecommitdiffstats
path: root/ksnake/basket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ksnake/basket.cpp')
-rw-r--r--ksnake/basket.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/ksnake/basket.cpp b/ksnake/basket.cpp
new file mode 100644
index 00000000..c03b1deb
--- /dev/null
+++ b/ksnake/basket.cpp
@@ -0,0 +1,118 @@
+/**
+ * Copyright Michel Filippi <mfilippi@sade.rhein-main.de>
+ * Robert Williams
+ * Andrew Chant <andrew.chant@utoronto.ca>
+ * André Luiz dos Santos <andre@netvision.com.br>
+ * Benjamin Meyer <ben+ksnake@meyerhome.net>
+ *
+ * This file is part of the ksnake package
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <qtimer.h>
+#include <qptrlist.h>
+
+#include "board.h"
+#include "basket.h"
+#include "pixServer.h"
+
+Kaffee::Kaffee(int pos, int r1, int r2)
+{
+ p = pos;
+ t = Red;
+ r = r2;
+ QTimer::singleShot( r1, this, SLOT(golden()) );
+ dirty = true;
+}
+
+void Kaffee::golden()
+{
+ dirty = true;
+ t = (t == Red ? Golden : Red);
+ QTimer::singleShot( r, this, SLOT(golden()) );
+}
+
+Basket::Basket(Board *b, PixServer *p)
+{
+ board = b;
+ pixServer = p;
+ list = new QPtrList<Kaffee>;
+ list->setAutoDelete( true );
+}
+
+Basket::~Basket()
+{
+ delete list;
+}
+
+void Basket::clear()
+{
+ if( !list->isEmpty())
+ list->clear();
+}
+
+void Basket::newApples()
+{
+ int x;
+ int i = 0;
+
+ while(i < 10) {
+ x = random.getLong(board->size());
+ if ((unsigned)x < board->size() && board->isEmpty(x) && x > BoardWidth+4) {
+ Kaffee *g = new Kaffee(x, random.getLong(40000), random.getLong(40000));
+ board->set(x, Apple);
+ list->append(g);
+ i++;
+ }
+ }
+}
+
+void Basket::repaint(bool dirty )
+{
+ Kaffee *g;
+ for ( g = list->first(); g != 0; g = list->next()) {
+ if (dirty) {
+ pixServer->draw(g->position(), ApplePix, (int)g->type());
+ g->dirty = false;
+ }
+ else if (g->dirty) {
+ pixServer->draw(g->position(), ApplePix, (int)g->type());
+ g->dirty = false;
+ }
+ }
+}
+
+Fruits Basket::eaten(int i)
+{
+ Kaffee *g;
+ Fruits f = Red;
+
+ for (g = list->first(); g != 0; g = list->next() )
+ {
+ if (g->position() == i) {
+ f = g->type();
+ list->remove(g);
+ break;
+ }
+ }
+ if (list->isEmpty())
+ emit openGate();
+
+ return f;
+}
+
+#include "basket.moc"