summaryrefslogtreecommitdiffstats
path: root/klines/linesboard.h
blob: 044887b4f263bd7bd0ec9da2cde737ff336f6cbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/***************************************************************************
    begin                : Fri May 19 2000
    copyright            : (C) 2000 by Roman Merzlyakov
    email                : roman@sbrf.barrt.ru
    copyright            : (C) 2000 by Roman Razilov
    email                : Roman.Razilov@gmx.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef linesboard_h
#define linesboard_h

#include <qwidget.h>
#include <qpixmap.h>
#include <qtimer.h>
#include <qlabel.h>

#include <krandomsequence.h>

#include "field.h"
//#include "shotcounter.h"
#include "ballpainter.h"

class LinesBoard : public Field
{
  Q_OBJECT
public:
  LinesBoard( BallPainter * abPainter, QWidget* parent=0, const char* name=0 );
  ~LinesBoard();

  int width();
  int height();
  int wHint();
  int hHint();
//  void doAfterBalls();
  void placeBalls(int nextBalls[BALLSDROP]);
  void undo();
  bool gameOver() { return bGameOver; }
  void setGameOver(bool b);
  int random(int max) { return (level == DEMO_LEVEL) ? rnd_demo.getLong(max) : rnd.getLong(max); }
  void saveRandomState() { rnd_saved = rnd; }
  void restoreRandomState() { rnd = rnd_saved; }
  void setLevel(int _level) { level = _level; }
  void startDemoMode();
  void adjustDemoMode(bool allowMove, bool off);
  void showDemoText(const QString &);
  void hideDemoText();
  void demoClick(int x, int y);
  void demoAdjust(int a);

signals:
  void endTurn();
  void endGame();
  void eraseLine(int nb);
  void userTurn();

private:
  int anim;

  struct Waypoints {
        int x,y;
  } *way;
  int nextBalls[BALLSDROP];

  int animmax;

  //used for running and animation phase
  int painting;
  int animstep;
  int animdelaycount;
  int animdelaystart;
  int direction;


  int nextBallToPlace;
  int jumpingCol;
  int jumpingRow;

  int focusX;
  int focusY;

  int level;

  QTimer* timer;
//  ShotCounter* shCounter;
  BallPainter* bPainter;
  bool bGameOver;
  KRandomSequence rnd;
  KRandomSequence rnd_saved;
  KRandomSequence rnd_demo;

  QLabel *demoLabel;
  bool bAllowMove;

  void paintEvent( QPaintEvent* );
  void mousePressEvent( QMouseEvent* );

  void AnimStart(int panim);
  void AnimNext();
  int AnimEnd();
  int getAnim(int x, int y ); // returns if the specifyed cell is animated..
  void AnimJump( int col, int row );

  int  erase5Balls();
  bool existPath(int ax, int ay, int bx, int by);
  void placeBall();
  void placePlayerBall(int col, int row);
  void moveFocus(int dx, int dy);

public slots:
  void moveLeft();
  void moveRight();
  void moveUp();
  void moveDown();
  void placePlayerBall();

protected slots:
  void timerSlot();
  void demoClickStep();
};

#endif