summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/backgammon/backgammon.cpp3
-rw-r--r--noncore/games/backgammon/filedialog.cpp4
-rw-r--r--noncore/games/backgammon/main.cpp1
-rw-r--r--noncore/games/backgammon/moveengine.cpp1
-rw-r--r--noncore/games/backgammon/themedialog.cpp2
-rw-r--r--noncore/games/bounce/game.cpp1
-rw-r--r--noncore/games/bounce/kbounce.cpp4
-rw-r--r--noncore/games/bounce/main.cpp1
-rw-r--r--noncore/games/buzzword/buzzword.cpp1
-rw-r--r--noncore/games/buzzword/main.cpp1
-rw-r--r--noncore/games/fifteen/fifteen.cpp5
-rw-r--r--noncore/games/go/gowidget.cpp4
-rw-r--r--noncore/games/go/main.cpp1
-rw-r--r--noncore/games/kbill/MCursor.cc5
-rw-r--r--noncore/games/kbill/Picture.cc2
-rw-r--r--noncore/games/kbill/UI.cpp3
-rw-r--r--noncore/games/kbill/field.cpp1
-rw-r--r--noncore/games/kbill/inputbox.cpp1
-rw-r--r--noncore/games/kbill/kbill.cpp4
-rw-r--r--noncore/games/kcheckers/kcheckers.cpp1
-rw-r--r--noncore/games/kcheckers/main.cpp2
-rw-r--r--noncore/games/kpacman/board.cpp3
-rw-r--r--noncore/games/kpacman/keys.cpp5
-rw-r--r--noncore/games/kpacman/kpacman.cpp5
-rw-r--r--noncore/games/kpacman/kpacmanwidget.cpp5
-rw-r--r--noncore/games/kpacman/monster.cpp1
-rw-r--r--noncore/games/kpacman/pacman.cpp1
-rw-r--r--noncore/games/kpacman/painter.cpp10
-rw-r--r--noncore/games/kpacman/referee.cpp9
-rw-r--r--noncore/games/kpacman/score.cpp6
-rw-r--r--noncore/games/kpacman/status.cpp2
-rw-r--r--noncore/games/mindbreaker/mindbreaker.cpp4
-rw-r--r--noncore/games/minesweep/main.cpp1
-rw-r--r--noncore/games/minesweep/minefield.cpp4
-rw-r--r--noncore/games/minesweep/minesweep.cpp5
-rw-r--r--noncore/games/oyatzee/oyatzee.cpp6
-rw-r--r--noncore/games/parashoot/base.cpp2
-rw-r--r--noncore/games/parashoot/cannon.cpp1
-rw-r--r--noncore/games/parashoot/helicopter.cpp1
-rw-r--r--noncore/games/parashoot/interface.cpp4
-rw-r--r--noncore/games/parashoot/main.cpp1
-rw-r--r--noncore/games/parashoot/man.cpp1
-rw-r--r--noncore/games/qasteroids/main.cpp1
-rw-r--r--noncore/games/qasteroids/toplevel.cpp2
-rw-r--r--noncore/games/qasteroids/view.cpp3
-rw-r--r--noncore/games/sfcave/helpwindow.cpp2
-rw-r--r--noncore/games/snake/interface.cpp4
-rw-r--r--noncore/games/snake/main.cpp1
-rw-r--r--noncore/games/snake/snake.cpp2
-rw-r--r--noncore/games/solitaire/canvascard.cpp5
-rw-r--r--noncore/games/solitaire/canvascardgame.cpp8
-rw-r--r--noncore/games/solitaire/canvascardwindow.cpp5
-rw-r--r--noncore/games/solitaire/canvasshapes.cpp2
-rw-r--r--noncore/games/solitaire/card.cpp3
-rw-r--r--noncore/games/solitaire/cardpile.cpp2
-rw-r--r--noncore/games/solitaire/chicanecardgame.cpp1
-rw-r--r--noncore/games/solitaire/freecellcardgame.cpp1
-rw-r--r--noncore/games/solitaire/harpcardgame.cpp1
-rw-r--r--noncore/games/solitaire/main.cpp1
-rw-r--r--noncore/games/solitaire/patiencecardgame.cpp1
-rw-r--r--noncore/games/solitaire/teeclubcardgame.cpp1
-rw-r--r--noncore/games/tetrix/main.cpp1
-rw-r--r--noncore/games/tetrix/ohighscoredlg.cpp3
-rw-r--r--noncore/games/tetrix/qtetrix.cpp3
-rw-r--r--noncore/games/tetrix/qtetrixb.cpp2
-rw-r--r--noncore/games/tictac/main.cpp1
-rw-r--r--noncore/games/tictac/tictac.cpp4
-rw-r--r--noncore/games/wordgame/main.cpp1
-rw-r--r--noncore/games/wordgame/wordgame.cpp9
-rw-r--r--noncore/games/zlines/ballpainter.cpp3
-rw-r--r--noncore/games/zlines/field.cpp1
-rw-r--r--noncore/games/zlines/klines.cpp9
-rw-r--r--noncore/games/zlines/linesboard.cpp3
-rw-r--r--noncore/games/zlines/main.cpp1
-rw-r--r--noncore/games/zlines/mwidget.cpp1
-rw-r--r--noncore/games/zsame/StoneWidget.cpp5
-rw-r--r--noncore/games/zsame/ZSameWidget.cpp7
77 files changed, 2 insertions, 223 deletions
diff --git a/noncore/games/backgammon/backgammon.cpp b/noncore/games/backgammon/backgammon.cpp
index e9e5467..51020a0 100644
--- a/noncore/games/backgammon/backgammon.cpp
+++ b/noncore/games/backgammon/backgammon.cpp
@@ -1,207 +1,204 @@
#include "backgammon.h"
#include "aidialog.h"
#include "filedialog.h"
#include "playerdialog.h"
#include "rulesdialog.h"
#include "themedialog.h"
-#include <qdatetime.h>
#include <qfile.h>
#include <qlayout.h>
#include <qmessagebox.h>
-#include <qstring.h>
#include <qtimer.h>
-#include <qmainwindow.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qmenubar.h>
#include <qpe/resource.h>
#include <stdlib.h>
BackGammon::BackGammon(QWidget* parent, const char* name, WFlags fl)
: QMainWindow(parent, name, fl)
{
if (!name) setName("BackGammon");
setCaption(tr( "Backgammon") );
setIcon( Resource::loadPixmap( "backgammon" ) );
//general counter varaible
int a=0;
//the game engine
move=new MoveEngine();
//load the default theme
Config conf("backgammon");
if(!conf.isValid())
{
qDebug("config file does not exist");
conf.setGroup("general");
conf.writeEntry("theme","default");
conf.setGroup("rules");
conf.writeEntry("move_with_pieces_out",false);
conf.writeEntry("nice_dice",false);
conf.setGroup("display");
conf.writeEntry("small",false);
conf.writeEntry("warning",true);
conf.setGroup("ai");
conf.writeEntry("rescue",6);
conf.writeEntry("eliminate",4);
conf.writeEntry("expose",1);
conf.writeEntry("protect",5);
conf.writeEntry("safe",3);
conf.writeEntry("empty",2);
}
conf.setGroup("general");
theme_name=conf.readEntry("theme","default");
QString theme_file=QPEApplication::qpeDir()+"/backgammon/"+theme_name+".theme";
//the rules
conf.setGroup("rules");
rules.move_with_pieces_out=conf.readBoolEntry("move_with_pieces_out",false);
rules.generous_dice=conf.readBoolEntry("nice_dice",false);
move->setRules(rules);
//get the AI settings
AISettings ai;
conf.setGroup("ai");
ai.rescue=conf.readNumEntry("rescue",6);
ai.eliminate=conf.readNumEntry("eliminate",4);
ai.expose=conf.readNumEntry("expose",1);
ai.protect=conf.readNumEntry("protect",5);
ai.safe=conf.readNumEntry("safe",3);
ai.empty=conf.readNumEntry("empty",2);
move->setAISettings(ai);
//get the theme component names
Config theme(theme_file,Config::File);
if(!theme.isValid())
{
qDebug("theme file does not exist");
theme.setGroup("theme");
theme.writeEntry("board","casino_board_1");
theme.writeEntry("pieces1","casino_pieces_blue");
theme.writeEntry("pieces2","casino_pieces_white");
theme.writeEntry("dice1","casino_dice");
theme.writeEntry("dice2","casino_dice");
theme.writeEntry("table","casino_table_green");
theme.writeEntry("odds","casino_odds");
}
theme.setGroup("theme");
board_name=theme.readEntry("board","casino_board_1");
piecesA_name=theme.readEntry("pieces1","casino_pieces_blue");
piecesB_name=theme.readEntry("pieces2","casino_pieces_white");
diceA_name=theme.readEntry("dice1","casino_dice");
diceB_name=theme.readEntry("dice2","casino_dice");
table_name=theme.readEntry("table","casino_table_green");
odds_name=theme.readEntry("odds","casino_odds");
//the menu
QMenuBar* menuBar = new QMenuBar(this);
QPopupMenu* gamemenu= new QPopupMenu(this);
gamemenu->insertItem(tr( "New" ),this,SLOT(newgame()));
gamemenu->insertSeparator();
gamemenu->insertItem(tr( "Load" ),this,SLOT(loadgame()));
gamemenu->insertItem(tr( "Save" ),this,SLOT(savegame()));
gamemenu->insertSeparator();
gamemenu->insertItem(tr( "Delete" ),this,SLOT(deletegame()));
menuBar->insertItem(tr( "Game" ),gamemenu);
QPopupMenu* thememenu= new QPopupMenu(this);
thememenu->insertItem(tr( "New" ),this,SLOT(newtheme()));
thememenu->insertSeparator();
thememenu->insertItem(tr( "Load"),this,SLOT(loadtheme()));
thememenu->insertItem(tr( "Save" ),this,SLOT(savetheme()));
thememenu->insertSeparator();
thememenu->insertItem(tr( "Default"),this,SLOT(themedefault()));
thememenu->insertItem(tr( "Delete" ),this,SLOT(deletetheme()));
menuBar->insertItem(tr( "Theme" ),thememenu);
QPopupMenu* optionmenu=new QPopupMenu(this);
optionmenu->insertItem(tr( "Player" ),this,SLOT(playerselect()));
optionmenu->insertSeparator();
optionmenu->insertItem(tr( "AI" ),this,SLOT(modify_AI()));
optionmenu->insertItem(tr( "Rules" ),this,SLOT(setrules()));
menuBar->insertItem(tr( "Options"),optionmenu);
QWidget* mainarea=new QWidget(this);
setCentralWidget(mainarea);
//the main area
QBoxLayout* layout=new QBoxLayout(mainarea,QBoxLayout::TopToBottom);
area=new QCanvas(235,235);
boardview=new BackGammonView(area,mainarea);
boardview->setMaximumHeight(240);
layout->addWidget(boardview);
connect(boardview,SIGNAL(mouse(int,int)),this,SLOT(mouse(int,int)));
//status bar
message=new QLabel("<b>Backgammon</b>",mainarea);
message->setAlignment(AlignHCenter);
layout->addWidget(message);
//the marker
marker_current=new QCanvasRectangle(area);
marker_current->setBrush(QColor(0,0,255));
marker_current->setSize(15,5);
marker_current->setZ(1);
for(a=0;a<4;a++)
{
marker_next[a]=new QCanvasRectangle(area);
marker_next[a]->setBrush(QColor(0,255,0));
marker_next[a]->setSize(15,5);
marker_next[a]->setZ(1);
}
connect(move,SIGNAL(done_dice1()),this,SLOT(done_dice1()));
connect(move,SIGNAL(done_dice2()),this,SLOT(done_dice2()));
connect(move,SIGNAL(done_dice3()),this,SLOT(done_dice3()));
connect(move,SIGNAL(done_dice4()),this,SLOT(done_dice4()));
connect(move,SIGNAL(nomove()),this,SLOT(nomove()));
connect(move,SIGNAL(player_finished(int)),this,SLOT(finished(int)));
//the pieces
p1=new CanvasImageItem*[15];
p1_side=new CanvasImageItem*[15];
QImage piece_1_all(Resource::loadImage("backgammon/pieces/"+piecesA_name));
QImage piece_1_front=piece_1_all.copy(0,0,15,15);
QImage piece_1_side=piece_1_all.copy(0,15,15,5);
p2=new CanvasImageItem*[15];
p2_side=new CanvasImageItem*[15];
QImage piece_2_all(Resource::loadImage("backgammon/pieces/"+piecesB_name));
QImage piece_2_front=piece_2_all.copy(0,0,15,15);
QImage piece_2_side=piece_2_all.copy(0,15,15,5);
for(a=0;a<15;a++)
{
p1[a]=new CanvasImageItem(piece_1_front,area);
p1[a]->setSize(15,15);
p1_side[a]=new CanvasImageItem(piece_1_side,area);
p1_side[a]->setSize(15,5);
p2[a]=new CanvasImageItem(piece_2_front,area);
p2[a]->setSize(15,15);
p2_side[a]=new CanvasImageItem(piece_2_side,area);
p2_side[a]->setSize(15,5);
}
draw();
//the dice
QImage dicebgA_all(Resource::loadImage("backgammon/dice/"+diceA_name));
diceA1=new CanvasImageItem*[7];
diceA2=new CanvasImageItem*[7];
QImage dicebgB_all(Resource::loadImage("backgammon/dice/"+diceB_name));
diceB1=new CanvasImageItem*[7];
diceB2=new CanvasImageItem*[7];
QImage oddsbg_all=(Resource::loadImage("backgammon/odds/"+odds_name));
//oddsDice=new CanvasImageItem*[6];
for(a=0;a<7;a++)
diff --git a/noncore/games/backgammon/filedialog.cpp b/noncore/games/backgammon/filedialog.cpp
index a5e71c9..e0a2914 100644
--- a/noncore/games/backgammon/filedialog.cpp
+++ b/noncore/games/backgammon/filedialog.cpp
@@ -1,65 +1,61 @@
#include "filedialog.h"
#include <qdir.h>
-#include <qfileinfo.h>
-#include <qmessagebox.h>
-#include <qpixmap.h>
-#include <qpushbutton.h>
#include <qpe/qpeapplication.h>
FileDialog::FileDialog(QWidget* parent,QString header,QString extension,const char* name,bool modal,WFlags f)
:QDialog(parent,name,modal,f)
{
setCaption(header);
ext=extension;
dirselector=new QListView(this);
dirselector->setGeometry(1,10,235,200);
dirselector->addColumn("Files");
connect(dirselector,SIGNAL(clicked(QListViewItem*)),this,SLOT(selectorclicked(QListViewItem*)));
getCurrentDir();
file_name="user";
fileinput=new QLineEdit(file_name,this);
fileinput->setGeometry(1,220,235,20);
QPEApplication::showDialog( this );
}
FileDialog::~FileDialog()
{}
void FileDialog::selectorclicked(QListViewItem* entry)
{
if(entry==NULL)
return;
file_name=entry->text(0);
fileinput->setText(file_name);
}
void FileDialog::getCurrentDir()
{
dirselector->clear();
QDir dir(QPEApplication::qpeDir()+"/backgammon");
dir.setFilter(QDir::Files);
QFileInfoListIterator it(*(dir.entryInfoList()));
QFileInfo* fi;
int ext_length=ext.length();
while((fi=it.current())) // go through all file and subdirs
{
QString file=fi->fileName();
if(file.right(ext_length)==ext && file)
{
file=file.left(file.length()-ext_length);
new QListViewItem(dirselector,file);
}
++it;
}
}
QString FileDialog::filename()
{
return file_name;
}
diff --git a/noncore/games/backgammon/main.cpp b/noncore/games/backgammon/main.cpp
index 58ced10..6316040 100644
--- a/noncore/games/backgammon/main.cpp
+++ b/noncore/games/backgammon/main.cpp
@@ -1,8 +1,7 @@
-#include <qpe/qpeapplication.h>
#include "backgammon.h"
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<BackGammon> )
diff --git a/noncore/games/backgammon/moveengine.cpp b/noncore/games/backgammon/moveengine.cpp
index 37b73a6..7de7147 100644
--- a/noncore/games/backgammon/moveengine.cpp
+++ b/noncore/games/backgammon/moveengine.cpp
@@ -1,195 +1,194 @@
#include "moveengine.h"
-#include <qmessagebox.h>
#include <qtimer.h>
#include <stdlib.h>
MoveEngine::MoveEngine()
: QObject()
{
int offset=7;
int a=0; //counter variable
int xfill[]={210,185,170,155,140,125,110,85,70,55,40,25,10,10,25,40,55,70,85,110,125,140,155,170,185,210};
for(a=0;a<26;a++)
{
x_coord[a]=xfill[a];
}
int yfill[]={10,25,40,55,70,10+offset,25+offset,40+offset,55+offset,25,40,55, 25+offset,40+offset,40};
int zfill[]={1,1,1,1,1,2,2,2,2,3,3,3,4,4,5};
for(a=0;a<15;a++)
{
yup_coord[a]=yfill[a];
ylow_coord[a]=185-(yfill[a]);
z_coord[a]=zfill[a];
}
for(a=0;a<5;a++)
{
if(a<3)
{
x_fin1[a]=65+a*15;
x_fin2[a]=155-a*15;
}
y_fin[a]=225-a*5;
}
z_fin=1;
reset();
}
MoveEngine::~MoveEngine()
{}
void MoveEngine::position(Pieces& pieces,bool non_qte)
{
int player1_counter=0;
int player2_counter=0;
//non qte styles are smaller !!
int offset=(non_qte) ? 5 : 0;
for(int a=0;a<28;a++)
{
for(int b=0;b<abs(population[a].total);b++)
{
if(population[a].total>0) //player 1 pieces
{
pieces.player1[player1_counter].x=x_coord[a]-offset;
if(a>=0 && a<13)
{
pieces.player1[player1_counter].y=yup_coord[b]-offset;
pieces.player1[player1_counter].z=z_coord[b];
pieces.player1[player1_counter].side=false;
player1_counter++;
}
else if(a>12 && a<26)
{
pieces.player1[player1_counter].y=ylow_coord[b]-offset;
pieces.player1[player1_counter].z=z_coord[b];
pieces.player1[player1_counter].side=false;
player1_counter++;
}
else if(a==26)
{
if(b<5)
{
pieces.player1[player1_counter].x=x_fin1[0]-offset;
pieces.player1[player1_counter].y=y_fin[b]-offset;
pieces.player1[player1_counter].z=z_fin;
}
else if(b>=5 && b<10)
{
pieces.player1[player1_counter].x=x_fin1[1]-offset;
pieces.player1[player1_counter].y=y_fin[b-5]-offset;
pieces.player1[player1_counter].z=z_fin;
}
else
{
pieces.player1[player1_counter].x=x_fin1[2]-offset;
pieces.player1[player1_counter].y=y_fin[b-10]-offset;
pieces.player1[player1_counter].z=z_fin;
}
pieces.player1[player1_counter].side=true;
player1_counter++;
}
}
else if(population[a].total<0) //player 2 pieces
{
pieces.player2[player2_counter].x=x_coord[a]-offset;
if(a>=0 && a<13)
{
pieces.player2[player2_counter].y=yup_coord[b]-offset;
pieces.player2[player2_counter].z=z_coord[b];
pieces.player2[player2_counter].side=false;
player2_counter++;
}
else if(a>12 && a<26)
{
pieces.player2[player2_counter].y=ylow_coord[b]-offset;
pieces.player2[player2_counter].z=z_coord[b];
pieces.player2[player2_counter].side=false;
player2_counter++;
}
else if(a==27)
{
if(b<5)
{
pieces.player2[player2_counter].x=x_fin2[0]-offset;
pieces.player2[player2_counter].y=y_fin[b]-offset;
pieces.player2[player2_counter].z=z_fin;
}
else if(b>=5 && b<10)
{
pieces.player2[player2_counter].x=x_fin2[1]-offset;
pieces.player2[player2_counter].y=y_fin[b-5]-offset;
pieces.player2[player2_counter].z=z_fin;
}
else
{
pieces.player2[player2_counter].x=x_fin2[2]-offset;
pieces.player2[player2_counter].y=y_fin[b-10]-offset;
pieces.player2[player2_counter].z=z_fin;
}
pieces.player2[player2_counter].side=true;
player2_counter++;
}
}
}
}
}
void MoveEngine::diceroll(const int& newplayer,const int& face1,const int& face2,const int& face3,const int& face4,bool computer)
{
checkstate();
player=newplayer;
otherplayer=(player==1) ? 2 : 1;
dice[0]=face1;
dice[1]=face2;
dice[2]=face3;
dice[3]=face4;
marker_current=-1;
if(getPossibleMoves()==0)
{
emit nomove();
return; // player will be changed
}
if(!computer)
return; //human intervention required
QTimer::singleShot(2000,this,SLOT(automove()));
}
void MoveEngine::automove()
{
//the maximimum possibility
int maxpos=0;
//the position in the moves array
int from=-1;
int to=-1;
//dice1 or dice 2 ??
int index_dice=0;
for(int counter=0;counter<26;counter++)
{
int a=(player==1) ? counter : 25-counter;
for(int b=0;b<4;b++)
{
if(moves[a].weight[b]>maxpos)
{
maxpos=moves[a].weight[b];
from=a;
to=moves[a].to[b];
index_dice=b+1;
}
}
}
move(from,to,index_dice);
}
void MoveEngine::boardpressed(const int& x,const int& y,Marker& marker,bool non_qte)
{
//get the position of the mouse click
diff --git a/noncore/games/backgammon/themedialog.cpp b/noncore/games/backgammon/themedialog.cpp
index f342381..afd6a1b 100644
--- a/noncore/games/backgammon/themedialog.cpp
+++ b/noncore/games/backgammon/themedialog.cpp
@@ -1,163 +1,161 @@
#include "themedialog.h"
#include <qdir.h>
-#include <qfileinfo.h>
#include <qlabel.h>
-#include <qpushbutton.h>
#include <qpe/qpeapplication.h>
ThemeDialog::ThemeDialog(QWidget* parent,const char* name,bool modal,WFlags f)
:QDialog(parent,name,modal,f)
{
setCaption("Theme Dialog");
QLabel* labelname=new QLabel("name",this);
labelname->setGeometry(0,5,40,20);
lineName=new QLineEdit("user",this);
lineName->setGeometry(40,5,195,20);
QLabel* labelboard=new QLabel("board",this);
labelboard->setGeometry(0,30,40,20);
boxboard=new QComboBox(this,"");
boxboard->setGeometry(40,30,195,20);
fillBox("boards",boxboard);
QLabel* labelpiecesA=new QLabel("pieces1",this);
labelpiecesA->setGeometry(0,70,40,20);
boxpiecesA=new QComboBox(this);
boxpiecesA->setGeometry(40,70,195,20);
fillBox("pieces",boxpiecesA);
QLabel* labelpiecesB=new QLabel("pieces2",this);
labelpiecesB->setGeometry(0,95,40,20);
boxpiecesB=new QComboBox(this);
boxpiecesB->setGeometry(40,95,195,20);
fillBox("pieces",boxpiecesB);
QLabel* labeldiceA=new QLabel("dice1",this);
labeldiceA->setGeometry(0,135,40,20);
boxdiceA=new QComboBox(this);
boxdiceA->setGeometry(40,135,195,20);
fillBox("dice",boxdiceA);
QLabel* labeldiceB=new QLabel("dice2",this);
labeldiceB->setGeometry(0,160,40,20);
boxdiceB=new QComboBox(this);
boxdiceB->setGeometry(40,160,195,20);
fillBox("dice",boxdiceB);
QLabel* labelodds=new QLabel("odds",this);
labelodds->setGeometry(0,200,40,20);
boxodds=new QComboBox(this);
boxodds->setGeometry(40,200,195,20);
fillBox("odds",boxodds);
boxodds->setEnabled(false);
QLabel* labeltable=new QLabel("table",this);
labeltable->setGeometry(0,225,40,20);
boxtable=new QComboBox(this);
boxtable->setGeometry(40,225,195,20);
fillBox("table",boxtable);
QPEApplication::showDialog( this );
}
ThemeDialog::~ThemeDialog()
{}
ImageNames ThemeDialog::getNames()
{
ImageNames names;
names.theme=lineName->text();
names.board=boxboard->currentText();
names.pieces1=boxpiecesA->currentText();
names.pieces2=boxpiecesB->currentText();
names.dice1=boxdiceA->currentText();
names.dice2=boxdiceB->currentText();
names.odds=boxodds->currentText();
names.table=boxtable->currentText();
return names;
}
void ThemeDialog::setCurrent(const ImageNames& current)
{
int a=0;
lineName->setText(current.theme);
for(a=0;a<boxboard->count();a++)
{
if(boxboard->text(a)==current.board)
{
boxboard->setCurrentItem(a);
break;
}
}
for(a=0;a<boxpiecesA->count();a++)
{
if(boxpiecesA->text(a)==current.pieces1)
{
boxpiecesA->setCurrentItem(a);
break;
}
}
for(a=0;a<boxpiecesB->count();a++)
{
if(boxpiecesB->text(a)==current.pieces2)
{
boxpiecesB->setCurrentItem(a);
break;
}
}
for(a=0;a<boxdiceA->count();a++)
{
if(boxdiceA->text(a)==current.dice1)
{
boxdiceA->setCurrentItem(a);
break;
}
}
for(a=0;a<boxdiceB->count();a++)
{
if(boxdiceB->text(a)==current.dice2)
{
boxdiceB->setCurrentItem(a);
break;
}
}
for(a=0;a<boxodds->count();a++)
{
if(boxodds->text(a)==current.odds)
{
boxodds->setCurrentItem(a);
break;
}
}
for(a=0;a<boxtable->count();a++)
{
if(boxtable->text(a)==current.table)
{
boxtable->setCurrentItem(a);
break;
}
}
}
void ThemeDialog::fillBox(QString dirname,QComboBox* thebox)
{
thebox->clear();
QDir dir(QPEApplication::qpeDir()+"/pics/backgammon/"+dirname);
dir.setFilter(QDir::Dirs | QDir::Files);
QFileInfoListIterator it(*(dir.entryInfoList()));
QFileInfo* fi;
while((fi=it.current())) // go through all file and subdirs
{
QString file=fi->fileName();
if(file.right(4)==".png")
{
thebox->insertItem(file.left(file.find(".png")));
}
++it;
}
delete fi;
}
diff --git a/noncore/games/bounce/game.cpp b/noncore/games/bounce/game.cpp
index 6ded218..c07f453 100644
--- a/noncore/games/bounce/game.cpp
+++ b/noncore/games/bounce/game.cpp
@@ -1,215 +1,214 @@
/*
* Copyright (C) 2000 Stefan Schimanski <1Stein@gmx.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program 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 program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdlib.h>
#include <qtimer.h>
#include <qpe/qpeapplication.h>
-#include <qimage.h>
#include "game.h"
#define TILE_SIZE 9
#define TILE_FIRST ((FIELD_WIDTH-2)*(FIELD_HEIGHT-2))
#define TILE_FREE (TILE_FIRST + 0)
#define TILE_BORDER (TILE_FIRST + 1)
#define TILE_WALLEND (TILE_FIRST + 2)
#define TILE_WALLUP (TILE_FIRST + 3)
#define TILE_WALLDOWN (TILE_FIRST + 4)
#define TILE_WALLLEFT (TILE_FIRST + 5)
#define TILE_WALLRIGHT (TILE_FIRST + 6)
#define GAME_DELAY 15
#define BALL_ANIM_DELAY 60
#define WALL_DELAY 100
#define MS2TICKS( ms ) ((ms)/GAME_DELAY)
Arrow::Arrow(QCanvasPixmapArray* array, QCanvas* canvas)
: QCanvasSprite( array, canvas )
{
m_vertical = true;
move(3,3);
}
void Arrow::update()
{
if ( m_vertical )
setFrame( 0 );
else
setFrame( 1 );
}
void Arrow::changeDirection()
{
m_vertical = ! m_vertical;
update();
}
Ball::Ball(QCanvasPixmapArray* array, QCanvas* canvas)
: QCanvasSprite( array, canvas ), m_animDelay( 0 ), m_soundDelay( MS2TICKS(BALL_ANIM_DELAY)/2 )
{
}
void Ball::update()
{
m_animDelay--;
if ( m_animDelay<=0 )
{
m_animDelay = MS2TICKS(BALL_ANIM_DELAY);
int frameNum = frame();
frameNum++;
if ( frameNum>=frameCount() )
frameNum = 0;
setFrame( frameNum );
}
}
void Ball::advance(int stage)
{
bool reflectX = false;
bool reflectY = false;
// check for collisions
if ( collide(xVelocity(), 0) ) reflectX = true;
if ( collide(0, yVelocity()) ) reflectY = true;
if ( !reflectX && !reflectY && collide(xVelocity(), yVelocity()) ) reflectX = reflectY = true;
// emit collision
QRect r = boundingRect();
r.moveBy( xVelocity(), yVelocity() );
JezzField* field = (JezzField *)canvas();
int ul = field->tile( r.left() / TILE_SIZE, r.top() / TILE_SIZE );
int ur = field->tile( r.right() / TILE_SIZE, r.top() / TILE_SIZE );
int bl = field->tile( r.left() / TILE_SIZE, r.bottom() / TILE_SIZE );
int br = field->tile( r.right() / TILE_SIZE, r.bottom() / TILE_SIZE );
if ( ul!=TILE_FREE ) field->emitBallCollisiton( this, r.left() / TILE_SIZE, r.top() / TILE_SIZE, ul ); else
if ( ur!=TILE_FREE ) field->emitBallCollisiton( this, r.right() / TILE_SIZE, r.top() / TILE_SIZE, ur ); else
if ( bl!=TILE_FREE ) field->emitBallCollisiton( this, r.left() / TILE_SIZE, r.bottom() / TILE_SIZE, bl ); else
if ( br!=TILE_FREE ) field->emitBallCollisiton( this, r.right() / TILE_SIZE, r.bottom() / TILE_SIZE, br );
// apply reflection
if ( reflectX ) setXVelocity( -xVelocity() );
if ( reflectY ) setYVelocity( -yVelocity() );
// update field
update();
QCanvasSprite::advance( stage );
}
bool Ball::collide( double dx, double dy )
{
QRect r = boundingRect();
r.moveBy( dx, dy );
JezzField* field = (JezzField *)canvas();
int ul = field->tile( r.left() / TILE_SIZE, r.top() / TILE_SIZE );
int ur = field->tile( r.right() / TILE_SIZE, r.top() / TILE_SIZE );
int bl = field->tile( r.left() / TILE_SIZE, r.bottom() / TILE_SIZE );
int br = field->tile( r.right() / TILE_SIZE, r.bottom() / TILE_SIZE );
return ( ul!=TILE_FREE || ur!=TILE_FREE || bl!=TILE_FREE || br!=TILE_FREE );
}
/*************************************************************************/
Wall::Wall( JezzField *field, int x, int y, Direction dir, int tile, QObject *parent, const char *name )
: QObject( parent, name ), m_dir( dir ), m_field( field ), m_startX( x ), m_startY( y ),
m_tile( tile ), m_delay( MS2TICKS(WALL_DELAY)/2 ), m_active( true )
{
// setup position and direction
m_dx = 0;
m_dy = 0;
switch ( m_dir )
{
case Up: m_dy = -1; break;
case Down: m_dy = 1; break;
case Left: m_dx = -1; break;
case Right: m_dx = 1; break;
}
m_x = m_startX;
m_y = m_startY;
m_field->setTile( m_x, m_y, m_tile );
}
void Wall::finish()
{
m_active = false;
}
bool Wall::isFree( int x, int y )
{
if ( m_field->tile(x, y)==TILE_FREE )
{
// check whether there is a ball at the moment
QCanvasItemList cols = m_field->collisions( QRect(x*TILE_SIZE, y*TILE_SIZE,
TILE_SIZE, TILE_SIZE) );
if ( cols.count()==0 )
return true;
}
return false;
}
void Wall::update()
{
}
void Wall::advance()
{
update();
// move wall
if ( m_active )
{
m_delay--;
if ( m_delay<=0 )
{
m_delay = MS2TICKS(WALL_DELAY);
// set previous tile
m_field->setTile( m_x, m_y, m_tile );
// check whether next place is still free
if ( isFree(m_x+m_dx, m_y+m_dy) )
{
// move ball
m_x += m_dx;
m_y += m_dy;
// set tile
m_field->setTile( m_x, m_y, TILE_WALLEND );
} else
{
finish();
emit finished( this, m_field->tile( m_x+m_dx, m_y+m_dy ) );
}
}
}
}
void Wall::fill( bool black )
{
if ( m_dx )
{
diff --git a/noncore/games/bounce/kbounce.cpp b/noncore/games/bounce/kbounce.cpp
index 211f0ff..3b0cb6f 100644
--- a/noncore/games/bounce/kbounce.cpp
+++ b/noncore/games/bounce/kbounce.cpp
@@ -1,220 +1,216 @@
/*
* Copyright (C) 2000 Stefan Schimanski <1Stein@gmx.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License,Life or (at your option) any later version.
*
* This program 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 program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <qlayout.h>
#include <qtimer.h>
-#include <qlcdnumber.h>
#include <qmessagebox.h>
-#include <qmainwindow.h>
-#include <qpe/qpeapplication.h>
#include "kbounce.h"
#include "game.h"
-#include <qlabel.h>
KJezzball::KJezzball(QWidget *p, const char* n, WFlags f)
: QMainWindow(p,n,f), m_gameWidget( 0 )
{
setCaption(tr("Bounce"));
// setup variables
m_game.level = 1;
m_game.score = 0;
m_state = Idle;
menu = menuBar();
game = new QPopupMenu;
game->insertItem(tr("&New game"), this, SLOT(newGame()), Key_N );
game->insertItem(tr("&Pause game"), this, SLOT(pauseGame()), Key_P );
game->insertSeparator();
game->insertItem(tr("&About"), this, SLOT(about()));
menu->insertItem( tr("&Game"), game );
// create widgets
m_view = new QWidget( this, "m_view" );
setCentralWidget( m_view );
m_layout = new QGridLayout( m_view );
m_layout->setSpacing( 0 );
m_layout->setMargin( 0 );
ScoreLabel = new QLabel( m_view, "ScoreLabel" );
ScoreLabel->setText( tr( "Score: 00" ) );
ScoreLabel->setAlignment( int( QLabel::AlignCenter ) );
m_layout->addWidget( ScoreLabel, 1, 0 );
LivesLabel = new QLabel( m_view, "LivesLabel" );
LivesLabel->setText( tr( "Lives: 0%" ) );
LivesLabel->setAlignment( int( QLabel::AlignCenter ) );
m_layout->addWidget( LivesLabel, 1, 2 );
FilledLabel = new QLabel( m_view, "FilledLabel" );
FilledLabel->setText( tr( "Filled: 00%" ) );
FilledLabel->setAlignment( int( QLabel::AlignCenter ) );
m_layout->addWidget( FilledLabel, 1, 1 );
TimeLabel = new QLabel( m_view, "TimeLabel" );
TimeLabel->setText( tr( "Time: 00" ) );
TimeLabel->setAlignment( int( QLabel::AlignCenter ) );
m_layout->addWidget( TimeLabel, 1, 3 );
// create timers
m_nextLevelTimer = new QTimer( this, "m_nextLevelTimer" );
connect( m_nextLevelTimer, SIGNAL(timeout()), this, SLOT(switchLevel()) );
m_gameOverTimer = new QTimer( this, "m_gameOverTimer" );
connect( m_gameOverTimer, SIGNAL(timeout()), this, SLOT(gameOverNow()) );
m_timer = new QTimer( this, "m_timer" );
connect( m_timer, SIGNAL(timeout()), this, SLOT(second()) );
// create demo game
createLevel( 1 );
}
void KJezzball::newGame()
{
// Check for running game
closeGame();
if ( m_state==Idle )
{
// update displays
m_game.level = 1;
m_game.score = 0;
setCaption(tr("Bounce Level %1").arg(m_game.level));
ScoreLabel->setText( tr( "Score: %1" ).arg(m_game.score) );
// start new game
m_state = Running;
createLevel( m_game.level );
startLevel();
}
}
void KJezzball::about()
{
QMessageBox::information( this, tr("About"),
tr("Written by: Stefan Schimanski\n"
"Ported by: Martin Imobersteg\n"
"\n"
"Click to form walls.\n"
"Hit space to switch wall direction.\n"
"Try to reduce total space by 75%.\n"
"\n"
"This program is distributed under\n"
"the terms of the GPL v2.") );
}
void KJezzball::closeGame()
{
if ( m_state!=Idle )
{
stopLevel();
m_state = Idle;
}
}
void KJezzball::pauseGame()
{
switch ( m_state )
{
case Running:
m_state = Paused;
m_gameWidget->display( tr("Game paused.\nPress P to continue!") );
stopLevel();
break;
case Paused:
case Suspend:
m_state = Running;
m_gameWidget->display( QString::null );
startLevel();
break;
case Idle:
break;
}
}
void KJezzball::gameOver()
{
stopLevel();
m_gameOverTimer->start( 100, TRUE );
}
void KJezzball::gameOverNow()
{
m_state = Idle;
QString score;
score.setNum( m_game.score );
QMessageBox::information( this, "Game Over", tr("Game Over!\nScore: %1").arg(score) );
}
void KJezzball::focusOutEvent( QFocusEvent *ev )
{
if ( m_state==Running )
{
stopLevel();
m_state = Suspend;
}
QMainWindow::focusOutEvent( ev );
}
void KJezzball::focusInEvent ( QFocusEvent *ev )
{
if ( m_state==Suspend )
{
startLevel();
m_state = Running;
}
QMainWindow::focusInEvent( ev );
}
void KJezzball::second()
{
m_level.time--;
TimeLabel->setText( tr( "Time: %1" ).arg(m_level.time) );
if ( m_level.time<=0 )
{
gameOver();
}
}
void KJezzball::died()
{
m_level.lifes--;
LivesLabel->setText( tr( "Lives: %1" ).arg(m_level.lifes) );
if ( m_level.lifes==0 ) gameOver();
}
void KJezzball::newPercent( int percent )
{
FilledLabel->setText( tr( "Filled: %1%" ).arg(percent) );
if ( percent>=75 )
{
m_level.score = m_level.lifes*15 + (percent-75)*2*(m_game.level+5);
diff --git a/noncore/games/bounce/main.cpp b/noncore/games/bounce/main.cpp
index 9ea86a6..a070c4b 100644
--- a/noncore/games/bounce/main.cpp
+++ b/noncore/games/bounce/main.cpp
@@ -1,24 +1,23 @@
/*
* Copyright (C) 2000 Stefan Schimanski <schimmi@kde.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program 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 program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <qpe/qpeapplication.h>
#include "kbounce.h"
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<KJezzball> )
diff --git a/noncore/games/buzzword/buzzword.cpp b/noncore/games/buzzword/buzzword.cpp
index f746065..13eb481 100644
--- a/noncore/games/buzzword/buzzword.cpp
+++ b/noncore/games/buzzword/buzzword.cpp
@@ -1,182 +1,181 @@
/*
* Copyright (C) 2002 Martin Imobersteg <imm@gmx.ch>
*
* 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,Life or (at your option) any later version.
*
* This program 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 program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <qlayout.h>
-#include <qmessagebox.h>
#include <qmainwindow.h>
#include <qlabel.h>
#include <qgrid.h>
#include <qcolor.h>
#include <qbutton.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qstringlist.h>
#include <qmessagebox.h>
#include <qdir.h>
#include <math.h>
#include <stdlib.h>
#include <qpe/qpeapplication.h>
#include "buzzword.h"
BuzzLabel::BuzzLabel( QWidget *parent, const char *name )
: QLabel( parent, name )
{
}
void BuzzLabel::mousePressEvent(QMouseEvent *e)
{
if(e->button() == LeftButton)
{
emit clicked();
}
}
BuzzItem::BuzzItem( int row, int column, QString text, QWidget *parent, const char *name )
: QVBox( parent, name ), _row(row), _column(column)
{
setFrameStyle( QFrame::Panel | QFrame::Raised );
setLineWidth( 1 );
label = new BuzzLabel(this, "label");
label->setText(text);
label->setAlignment( int( QLabel::AlignCenter ) );
connect( label, SIGNAL(clicked()), this, SLOT(flip()) );
}
void BuzzItem::flip()
{
setLineWidth( 1 );
label->setBackgroundColor(label->colorGroup().highlight());
emit clicked(_row, _column);
}
BuzzWord::BuzzWord(QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl )
{
setCaption(tr("buZzword"));
menu = menuBar();
game = new QPopupMenu;
game->insertItem(tr("&New game"), this, SLOT(newGame()), Key_N );
menu->insertItem( tr("&Game"), game );
gridVal = 4;
grid = NULL;
gameOver = false;
newGame();
}
void BuzzWord::drawGrid()
{
QStringList l;
QString path = QPEApplication::qpeDir()+"share/buzzword/";
QFile f( path + "buzzwords" );
if ( !f.open( IO_ReadOnly ) )
return;
QTextStream t( &f );
while (!t.atEnd())
{
l << t.readLine();
}
f.close();
grid = new QGrid(gridVal, this);
// grid->setFixedSize( 480, 480 );
for( int c = 0 ; c < gridVal ; c++ )
{
for( int r = 0 ; r < gridVal ; r++ )
{
uint pos = rand() % l. count();
QString word = QStringList::split(" ", l[pos]).join("\n");
BuzzItem* bi = new BuzzItem( c, r, word, grid );
connect( bi, SIGNAL(clicked(int, int)), this, SLOT(clicked(int,int)) );
map[c][r] = 0;
l.remove( l.at( pos ));
}
}
}
void BuzzWord::clicked(int row, int column)
{
if ( ! gameOver )
{
int rowTotal = 0;
int columnTotal = 0;
map[column][row] = 1;
for( int c = 0 ; c < gridVal ; c++ )
{
for( int r = 0 ; r < gridVal ; r++ )
{
if ( map[c][r] == 1 )
rowTotal++;
if ( rowTotal == 4 )
{
bingo();
}
}
rowTotal = 0;
}
for( int r = 0 ; r < gridVal ; r++ )
{
for( int c = 0 ; c < gridVal ; c++ )
{
if ( map[c][r] == 1 )
columnTotal++;
if ( columnTotal == 4 )
{
bingo();
}
}
columnTotal = 0;
}
if ( map[0][0] && map[1][1] && map[2][2] && map[3][3] )
bingo();
if ( map[0][3] && map[1][2] && map[2][1] && map[3][0] )
bingo();
}
}
void BuzzWord::bingo()
{
gameOver = true;
QMessageBox::information( this, "BUZZWORD", tr("<h1><b>BINGO !</b></h1>"));
}
void BuzzWord::newGame()
{
gameOver = false;
delete grid;
drawGrid();
setCentralWidget(grid);
}
diff --git a/noncore/games/buzzword/main.cpp b/noncore/games/buzzword/main.cpp
index 67f2c26..95b3176 100644
--- a/noncore/games/buzzword/main.cpp
+++ b/noncore/games/buzzword/main.cpp
@@ -1,24 +1,23 @@
/*
* Copyright (C) 2002 Martin Imobersteg <imm@gmx.ch>
*
* 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,Life or (at your option) any later version.
*
* This program 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 program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
#include "buzzword.h"
OPIE_EXPORT_APP( OApplicationFactory<BuzzWord> )
diff --git a/noncore/games/fifteen/fifteen.cpp b/noncore/games/fifteen/fifteen.cpp
index b4e0308..506e87a 100644
--- a/noncore/games/fifteen/fifteen.cpp
+++ b/noncore/games/fifteen/fifteen.cpp
@@ -1,228 +1,223 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "fifteen.h"
#include <qtopia/resource.h>
#include <qtopia/config.h>
#include <qvbox.h>
#include <qaction.h>
-#include <qlayout.h>
#include <qpainter.h>
-#include <qpopupmenu.h>
#include <qmessagebox.h>
#include <qtoolbar.h>
#include <qmenubar.h>
-#include <qstringlist.h>
-#include <qapplication.h>
-#include <qtoolbutton.h>
#include <stdlib.h>
#include <time.h>
FifteenMainWindow::FifteenMainWindow(QWidget *parent, const char* name, WFlags fl)
: QMainWindow( parent, name, fl )
{
// random seed
srand(time(0));
setCaption( tr("Fifteen Pieces") );
QToolBar *toolbar = new QToolBar(this);
toolbar->setHorizontalStretchable( FALSE );
QMenuBar *menubar = new QMenuBar( toolbar );
menubar->setMargin(0);
QPopupMenu *game = new QPopupMenu( this );
QWidget *spacer = new QWidget( toolbar );
spacer->setBackgroundMode( PaletteButton );
toolbar->setStretchableWidget( spacer );
setToolBarsMovable( FALSE );
QVBox *vbox = new QVBox( this );
PiecesTable *table = new PiecesTable( vbox );
setCentralWidget(vbox);
QAction *a = new QAction( tr( "Randomize" ), Resource::loadPixmap( "new" ),
QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), table, SLOT( slotRandomize() ) );
a->addTo( game );
a->addTo( toolbar );
/* This is pointless and confusing.
a = new QAction( tr( "Solve" ), Resource::loadIconSet( "repeat" ),
QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), table, SLOT( slotReset() ) );
a->addTo( game );
a->addTo( toolbar );
*/
menubar->insertItem( tr( "Game" ), game );
}
PiecesTable::PiecesTable(QWidget* parent, const char* name )
: QTableView(parent, name), _menu(0), _randomized(false)
{
// setup table view
setFrameStyle(StyledPanel | Sunken);
setBackgroundMode(NoBackground);
setMouseTracking(true);
setNumRows(4);
setNumCols(4);
// init arrays
initMap();
readConfig();
initColors();
// set font
QFont f = font();
f.setPixelSize(18);
f.setBold( TRUE );
setFont(f);
}
PiecesTable::~PiecesTable()
{
writeConfig();
}
void PiecesTable::writeConfig()
{
Config cfg("Fifteen");
cfg.setGroup("Game");
QStringList map;
for (int i = 0; i < 16; i++)
map.append( QString::number( _map[i] ) );
cfg.writeEntry("Map", map, '-');
cfg.writeEntry("Randomized", _randomized );
}
void PiecesTable::readConfig()
{
Config cfg("Fifteen");
cfg.setGroup("Game");
QStringList map = cfg.readListEntry("Map", '-');
_randomized = cfg.readBoolEntry( "Randomized", FALSE );
int i = 0;
for ( QStringList::Iterator it = map.begin(); it != map.end(); ++it ) {
_map[i] = (*it).toInt();
i++;
if ( i > 15 ) break;
}
}
void PiecesTable::paintCell(QPainter *p, int row, int col)
{
int w = cellWidth();
int h = cellHeight();
int x2 = w - 1;
int y2 = h - 1;
int number = _map[col + row * numCols()] + 1;
// draw cell background
if(number == 16)
p->setBrush(colorGroup().background());
else
p->setBrush(_colors[number-1]);
p->setPen(NoPen);
p->drawRect(0, 0, w, h);
if (number == 16) return;
// draw borders
if (height() > 40) {
p->setBrush(_colors[number-1].light(130));
p->drawPolygon(light_border);
p->setBrush(_colors[number-1].dark(130));
p->drawPolygon(dark_border);
}
// draw number
p->setPen(black);
p->drawText(0, 0, x2, y2, AlignHCenter | AlignVCenter, QString::number(number));
}
void PiecesTable::resizeEvent(QResizeEvent *e)
{
QTableView::resizeEvent(e);
setCellWidth(contentsRect().width()/ numRows());
setCellHeight(contentsRect().height() / numCols());
//
// Calculate 3d-effect borders
//
int cell_w = cellWidth();
int cell_h = cellHeight();
int x_offset = cell_w - int(cell_w * 0.9); // 10% should be enough
int y_offset = cell_h - int(cell_h * 0.9);
light_border.setPoints(6,
0, 0,
cell_w, 0,
cell_w - x_offset, y_offset,
x_offset, y_offset,
x_offset, cell_h - y_offset,
0, cell_h);
dark_border.setPoints(6,
cell_w, 0,
cell_w, cell_h,
0, cell_h,
x_offset, cell_h - y_offset,
cell_w - x_offset, cell_h - y_offset,
cell_w - x_offset, y_offset);
}
void PiecesTable::initColors()
{
_colors.resize(numRows() * numCols());
for (int r = 0; r < numRows(); r++)
for (int c = 0; c < numCols(); c++)
_colors[c + r *numCols()] = QColor(255 - 70 * c,255 - 70 * r, 150);
}
void PiecesTable::initMap()
{
_map.resize(16);
for ( int i = 0; i < 16; i++)
_map[i] = i;
_randomized = false;
}
void PiecesTable::randomizeMap()
{
initMap();
_randomized = true;
// find the free position
int pos = _map.find(15);
int move = 0;
while ( move < 333 ) {
int frow = pos / numCols();
int fcol = pos - frow * numCols();
diff --git a/noncore/games/go/gowidget.cpp b/noncore/games/go/gowidget.cpp
index cf89267..79820b1 100644
--- a/noncore/games/go/gowidget.cpp
+++ b/noncore/games/go/gowidget.cpp
@@ -1,230 +1,226 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "gowidget.h"
#include <qpe/config.h>
#include <qpe/resource.h>
#include <qpainter.h>
-#include <qpixmap.h>
#include <qpe/qpetoolbar.h>
#include <qmenubar.h>
-#include <qpopupmenu.h>
#include <qaction.h>
#include <qapplication.h> //processEvents()
#include <qlabel.h>
//#include <stdio.h>
-#include "amigo.h"
-#include "goplayutils.h"
static const enum bVal computer_color = BLACK;
static int current_handicap = 1;
static QBrush *goBrush;
//static QImage *newBlackStone;
//static QImage *blackStone;
//static QImage *whiteStone;
static QPixmap *newBlackStone;
static QPixmap *blackStone;
static QPixmap *whiteStone;
static bool smallStones = FALSE;
GoMainWidget::GoMainWidget( QWidget *parent, const char* name, WFlags fl) :
QMainWindow( parent, name, fl )
{
setToolBarsMovable( FALSE );
GoWidget *go = new GoWidget(this);
setCentralWidget(go);
toolbar = new QToolBar(this);
toolbar->setHorizontalStretchable( TRUE );
addToolBar(toolbar);
QMenuBar *mb = new QMenuBar( toolbar );
mb->setMargin(0);
QPopupMenu *file = new QPopupMenu( this );
QAction *a = new QAction( tr( "New Game" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), go, SLOT( newGame() ) );
a->addTo( file );
a = new QAction( tr( "Pass" ), Resource::loadPixmap( "pass" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), go, SLOT( pass() ) );
a->addTo( file );
a->addTo( toolbar );
a = new QAction( tr( "Resign" ), Resource::loadPixmap( "reset" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), go, SLOT( resign() ) );
a->addTo( file );
a = new QAction( tr( "Two player option" ), QString::null, 0, this, 0 );
a->setToggleAction( TRUE );
connect( a, SIGNAL( toggled(bool) ), go, SLOT( setTwoplayer(bool) ) );
a->addTo( file );
mb->insertItem( tr( "Game" ), file );
QLabel *turnLabel = new QLabel( toolbar );
turnLabel->setBackgroundMode( PaletteButton );
connect( go, SIGNAL(showTurn(const QPixmap&)),
turnLabel, SLOT(setPixmap(const QPixmap&)) );
QLabel * scoreLabel = new QLabel( toolbar );
scoreLabel->setBackgroundMode( PaletteButton );
connect( go, SIGNAL(showScore(const QString&)),
scoreLabel, SLOT(setText(const QString&)) );
toolbar->setStretchableWidget( scoreLabel );
go->readConfig();
}
void GoMainWidget::resizeEvent( QResizeEvent * )
{
//### this won't work because of the text label...
/*
if ( width() > height() )
moveToolBar( toolbar, Left );
else
moveToolBar( toolbar, Top );
*/
}
GoWidget *GoWidget::self = 0;
GoWidget::GoWidget( QWidget *parent, const char* name) :
QWidget( parent, name )
{
if ( self )
fatal( "Only one Go widget allowed" );
self = this;
twoplayer = FALSE;
d = bx = by = 1;
QPixmap pix = Resource::loadPixmap( "go/pine" );
goBrush = new QBrush( black, pix );
/*
QString fn = Resource::findPixmap("Go-black");
blackStone = new QImage( fn );
fn = Resource::findPixmap("Go-black-highlight");
newBlackStone = new QImage( fn );
fn = Resource::findPixmap("Go-white");
whiteStone = new QImage( fn );
*/
blackStone = new QPixmap(Resource::loadPixmap( "Go-black" ));
whiteStone = new QPixmap(Resource::loadPixmap( "Go-white" ));
newBlackStone = new QPixmap(Resource::loadPixmap( "Go-black-highlight" ));
init();
}
GoWidget::~GoWidget()
{
writeConfig();
}
void GoWidget::writeConfig()
{
Config cfg("Go");
cfg.setGroup("Game");
cfg.writeEntry("TwoPlayer", twoplayer);
cfg.writeEntry("CurrentPlayer", currentPlayer);
cfg.writeEntry("NPassed", nPassed);
QString b;
for (int i=0; i<19; i++)
for (int j=0; j<19; j++)
b += board[i][j] == BLACK ? 'B' : board[i][j] == WHITE ? 'W' : '.';
cfg.writeEntry("Board", b);
cfg.writeEntry("LastX", lastX);
cfg.writeEntry("LastY", lastY);
extern int blackPrisoners, whitePrisoners;
cfg.writeEntry("BlackPrisoners", blackPrisoners);
cfg.writeEntry("WhitePrisoners", whitePrisoners);
}
void GoWidget::readConfig()
{
init();
Config cfg("Go");
cfg.setGroup("Game");
twoplayer = cfg.readBoolEntry("TwoPlayer");
currentPlayer = (bVal)cfg.readNumEntry("CurrentPlayer",1);
nPassed = cfg.readNumEntry("NPassed",0);
QString b = cfg.readEntry("Board");
if ( b.length() == 19*19 )
for (int i=0; i<19; i++)
for (int j=0; j<19; j++) {
QChar ch = b[j+19*i];
if ( ch != '.' )
GoPlaceStone( ch == 'B' ? BLACK : WHITE, i, j );
}
lastX = cfg.readNumEntry("LastX");
lastY = cfg.readNumEntry("LastY");
extern int blackPrisoners, whitePrisoners;
blackPrisoners = cfg.readNumEntry("BlackPrisoners",0);
whitePrisoners = cfg.readNumEntry("WhitePrisoners",0);
reportPrisoners(blackPrisoners,whitePrisoners);
emit showTurn( currentPlayer == WHITE ? *whiteStone : *blackStone );
}
void GoWidget::resizeEvent( QResizeEvent * )
{
d = QMIN(width(),height())/19;
// int r = (d/2-1);
bx = (width() - 18*d)/2 ;
by = (height() - 18*d)/2 ;
if ( d < 10 && !smallStones ) {
blackStone->convertFromImage( blackStone->convertToImage().smoothScale(8,8) );
whiteStone->convertFromImage( whiteStone->convertToImage().smoothScale(8,8) );
newBlackStone->convertFromImage( newBlackStone->convertToImage().smoothScale(8,8) );
smallStones = TRUE;
} else if ( d >= 10 && smallStones ) {
blackStone = new QPixmap(Resource::loadPixmap( "Go-black" ));
whiteStone = new QPixmap(Resource::loadPixmap( "Go-white" ));
newBlackStone = new QPixmap(Resource::loadPixmap( "Go-black-highlight" ));
smallStones = FALSE;
}
}
void GoWidget::init()
{
lastX = lastY = newX = newY = -1;
nPassed = 0;
for ( int i = 0; i < 19; i++ )
for ( int j = 0; j < 19; j++ )
board[i][j]=-1;
gameActive = TRUE;
goRestart(current_handicap);
if ( twoplayer ) {
currentPlayer = BLACK;
} else {
doComputerMove();
diff --git a/noncore/games/go/main.cpp b/noncore/games/go/main.cpp
index f24e3c3..66f34ab 100644
--- a/noncore/games/go/main.cpp
+++ b/noncore/games/go/main.cpp
@@ -1,28 +1,27 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "gowidget.h"
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<GoMainWidget> )
diff --git a/noncore/games/kbill/MCursor.cc b/noncore/games/kbill/MCursor.cc
index a3cb340..c581693 100644
--- a/noncore/games/kbill/MCursor.cc
+++ b/noncore/games/kbill/MCursor.cc
@@ -1,69 +1,64 @@
/***************************************************************************
MCursor.cc - description
-------------------
begin : Thu Dec 30 1999
copyright : (C) 1999 by Jurrien Loonstra
email : j.h.loonstra@st.hanze.nl
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include "MCursor.h"
-#include "objects.h"
-#include <qcursor.h>
-#include <qbitmap.h>
-#include <qwidget.h>
-#include <qstring.h>
#ifdef KDEVER
#include <kapp.h>
#include <kstandarddirs.h>
#endif
#include <iostream>
#include <qpe/resource.h>
MCursor::~MCursor() {
delete cursor;
}
void MCursor::load(const char *name, int masked) {
#ifdef KDEVER
QString file, mfile;
KStandardDirs dirs;
file = dirs.findResource("data","kbill/bitmaps/" + QString::fromLocal8Bit(name) + ".xbm");
QBitmap bitmap, mask;
if (bitmap.load(file) == FALSE) {
std::cerr << "cannot open " << file << std::endl;
exit(1);
}
if (masked == SEP_MASK) {
// mfile.sprintf ("%sbitmaps/%s_mask.xbm", (const char*)dir, name);
mfile = file = dirs.findResource("data","kbill/bitmaps/" + QString::fromLocal8Bit(name) + "_mask.xbm");
if (mask.load(mfile) == FALSE) {
std::cerr << "cannot open " << file << std::endl;
exit(1);
}
}
else
mask = bitmap;
#endif
QBitmap bitmap, mask;
bitmap = Resource::loadBitmap("kbill/bitmaps/" + QString::fromLocal8Bit(name));
if (masked == SEP_MASK)
mask = bitmap = Resource::loadBitmap("kbill/bitmaps/" + QString::fromLocal8Bit(name) + "_mask.xbm");
else
mask = bitmap;
cursor = new QCursor(bitmap, mask, bitmap.width() / 2, bitmap.height() / 2);
}
diff --git a/noncore/games/kbill/Picture.cc b/noncore/games/kbill/Picture.cc
index fe0eff8..9d46257 100644
--- a/noncore/games/kbill/Picture.cc
+++ b/noncore/games/kbill/Picture.cc
@@ -1,72 +1,70 @@
/***************************************************************************
Picture.cc - description
-------------------
begin : Thu Dec 30 1999
copyright : (C) 1999 by Jurrien Loonstra
email : j.h.loonstra@st.hanze.nl
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include "Picture.h"
-#include "objects.h"
#include <iostream>
-#include <qstring.h>
#include <qpe/resource.h>
#ifdef KDEVER
#include <kapp.h>
#include <kstandarddirs.h>
#include <kdebug.h>
#endif
void Picture::load(const char *name, int index) {
//QString dir = KApplication::kde_datadir(), file;
// QString dir = locate("data",""),file;
// dir += "/kbill/";
// if (index>=0)
// file.sprintf ("%spixmaps/%s_%d.xpm", (const char *)dir, name, index);
// else
// file.sprintf("%spixmaps/%s.xpm", (const char *)dir, name);
#ifdef KDEVER
KStandardDirs dirs;
QString file;
if (index>=0) {
//kdDebug() << "Here";
QString sindex;
sindex.setNum(index);
// kdDebug() << "kbill/pixmaps/" + QString::fromLocal8Bit(name) + "_" + sindex + ".xpm";
file = dirs.findResource("data","kbill/pixmaps/" + QString::fromLocal8Bit(name) + "_" + sindex + ".xpm");
} else {
file = dirs.findResource("data","kbill/pixmaps/" + QString::fromLocal8Bit(name) + ".xpm");
}
kdDebug() << file << std::endl;
pix = new QPixmap();
if (pix->load(file) == FALSE)
std::cerr << "cannot open " << file << std::endl;
width = pix->width();
height = pix->height();
#endif
QString sindex;
pix = new QPixmap();
sindex.setNum(index);
if (index>=0)
pix->load(Resource::findPixmap("kbill/pixmaps/" + QString::fromLocal8Bit(name) +"_"+ sindex));
else
pix->load(Resource::findPixmap("kbill/pixmaps/" + QString::fromLocal8Bit(name)));
width = pix->width();
height = pix->height();
}
QPixmap* Picture::getPixmap() {
return pix;
}
diff --git a/noncore/games/kbill/UI.cpp b/noncore/games/kbill/UI.cpp
index 2afaf9b..611cebf 100644
--- a/noncore/games/kbill/UI.cpp
+++ b/noncore/games/kbill/UI.cpp
@@ -1,175 +1,172 @@
/***************************************************************************
UI.cc - description
-------------------
begin : Thu Dec 30 1999
copyright : (C) 1999 by Jurrien Loonstra
email : j.h.loonstra@st.hanze.nl
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
-#include "kbill.h"
#include "objects.h"
#include "Strings.h"
#ifdef KDEVER
#include <kapplication.h>
#endif
-#include <qpixmap.h>
#include <qmessagebox.h>
-#include <qnamespace.h>
#include "inputbox.h"
/**************************/
/* Timer control routines */
/**************************/
UI::~UI() {
paint.end();
delete pix;
}
void UI::restart_timer() {
field->startTimer();
}
void UI::kill_timer() {
field->stopTimer();
}
/*******************/
/* Window routines */
/*******************/
void UI::initialize(int *argc, char **argv) {
#ifdef KDEVER
app = new KApplication(*argc, argv, "kbill");
#endif
app = new QPEApplication(*argc, argv);
}
void UI::graph_init() {
pix = new QPixmap(Game::scrwidth, Game::scrheight);
paint.begin(pix, field);
paint.setPen(QPen(Qt::black, 3));
}
void UI::make_mainwin() {
main = new KBill();
app->showMainWidget(main,true);
main->showMaximized();
field = main->getField();
}
void UI::popup_dialog (int dialog) {
kill_timer();
switch (dialog) {
case Game::ENDGAME:
QMessageBox::message(("Endgame"), QT_TR_NOOP(endgamestr));
break;
case Game::HIGHSCORE:
// QMessageBox::message(("HighScore"), highscorestr);
break;
case Game::ENTERNAME: {
InputBox b(main, 0, ("Enter Name"), QT_TR_NOOP(enternamestr));
bool state = b.exec() == 2;
char str[20], *nl;
strcpy(str, b.getText());
if (!str[0] || state)
strcpy(str, "Anonymous");
else if ((nl = strchr(str, '\n')))
*nl = '\0';
if (strlen(str) > 20)
str[20] = 0; /* truncate string if too long */
// scores.recalc(str);
}
break;
case Game::SCORE:
QMessageBox::message(("Score"), scorestr);
break;
}
restart_timer();
}
/*********************/
/* Graphics routines */
/*********************/
void UI::set_cursor(int cursor) {
QCursor *cur;
switch (cursor) {
case Game::BUCKETC:
cur = bucket.cursor.cursor;
break;
case Game::DOWNC:
cur = downcursor.cursor;
break;
case Game::DEFAULTC:
cur = defaultcursor.cursor;
break;
default:
cur = OS.cursor[cursor].cursor;
}
field->setCursor(*cur);
}
void UI::load_cursors() {
defaultcursor.load("hand_up", MCursor::SEP_MASK);
field->setCursor(*defaultcursor.cursor);
downcursor.load("hand_down", MCursor::SEP_MASK);
}
void UI::clear() {
paint.eraseRect(0, 0, field->width(), field->height());
}
void UI::refresh() {
paint.flush();
field->setPixmap(pix);
field->repaint(FALSE);
}
void UI::draw (Picture pict, int x, int y) {
paint.drawPixmap(x, y, *pict.pix);
}
void UI::draw_centered (Picture pict) {
draw(pict, (field->width() - pict.width) / 2, (field->height() - pict.height) / 2);
}
void UI::draw_line(int x1, int y1, int x2, int y2) {
paint.drawLine(x1, y1, x2, y2);
}
void UI::draw_str(char *str, int x, int y) {
paint.drawText(x, y, str);
}
/******************/
/* Other routines */
/******************/
void UI::set_pausebutton (int action) {
main->file->setItemEnabled(main->pauseid, action);
}
int UI::MainLoop() {
return app->exec();
}
void UI::update_hsbox(char *str) {
highscorestr = str;
}
void UI::update_scorebox(int level, int score) {
scorestr.sprintf ("%s %d:\n%s: %d", QT_TR_NOOP("After Level"), level, QT_TR_NOOP("Your score"), score);
}
diff --git a/noncore/games/kbill/field.cpp b/noncore/games/kbill/field.cpp
index a1b3560..a974ab2 100644
--- a/noncore/games/kbill/field.cpp
+++ b/noncore/games/kbill/field.cpp
@@ -1,84 +1,83 @@
/***************************************************************************
field.cpp - description
-------------------
begin : Thu Dec 30 1999
copyright : (C) 1999 by Jurrien Loonstra
email : j.h.loonstra@st.hanze.nl
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
-#include <qpainter.h>
#include "objects.h"
#include "field.h"
Field::Field(QWidget *parent, const char *name ) : QWidget(parent,name) {
setFixedSize(game.scrwidth, game.scrheight);
setBackgroundColor(white);
timer = new QTimer(this);
playing = false;
connect(timer, SIGNAL(timeout()), SLOT(Timer()));
}
Field::~Field(){
delete timer;
}
void Field::setPixmap(QPixmap *pix) {
this->pix = pix;
}
// --------------------------------------------------------
void Field::mousePressEvent(QMouseEvent *e){
game.button_press(e->x(), e->y());
}
void Field::mouseReleaseEvent(QMouseEvent *e){
game.button_release(e->x(), e->y());
}
void Field::enterEvent(QEvent *) {
if (playing && !timer->isActive()) {
playing = true;
timer->start(250, FALSE);
}
}
void Field::leaveEvent(QEvent *) {
if (timer->isActive() && playing) {
playing = true;
timer->stop();
}
}
void Field::stopTimer() {
playing = false;
if (timer->isActive())
timer->stop();
}
void Field::startTimer() {
playing = true;
if (!timer->isActive())
timer->start(250, FALSE);
}
void Field::Timer(){
game.update();
}
void Field::paintEvent(QPaintEvent *) {
bitBlt(this, 0, 0, pix);
} \ No newline at end of file
diff --git a/noncore/games/kbill/inputbox.cpp b/noncore/games/kbill/inputbox.cpp
index b191ea8..5087fbb 100644
--- a/noncore/games/kbill/inputbox.cpp
+++ b/noncore/games/kbill/inputbox.cpp
@@ -1,51 +1,50 @@
/***************************************************************************
inputbox.cpp - description
-------------------
begin : Sat Jan 1 2000
copyright : (C) 2000 by Jurrien Loonstra
email : j.h.loonstra@st.hanze.nl
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include "inputbox.h"
-#include <qdialog.h>
InputBox::InputBox(QWidget *parent, const char *name, const char *caption, const char *text) : QDialog(parent, name, TRUE) {
// setCaption(caption);
//
// question = new QLabel(this);
// question->setText(text);
// question->setGeometry(10, 10, 240, 50);
//
// input = new QLineEdit(this);
// input->setGeometry(10, 60, 240, 30);
// input->setFocus();
// input->setMaxLength(19);
//
// ok = new QPushButton( "Ok", this );
// ok->setGeometry(10, 100, 100,30 );
// ok->setDefault(TRUE);
// connect( ok, SIGNAL(clicked()), SLOT(accept()) );
//
// cancel = new QPushButton( "Cancel", this );
// cancel->setGeometry(150, 100, 100,30 );
// connect( cancel, SIGNAL(clicked()), SLOT(reject()) );
}
InputBox::~InputBox(){
delete ok;
delete cancel;
delete question;
delete input;
}
QString InputBox::getText() const{
return input->text();
}
diff --git a/noncore/games/kbill/kbill.cpp b/noncore/games/kbill/kbill.cpp
index 18a6875..74d7c75 100644
--- a/noncore/games/kbill/kbill.cpp
+++ b/noncore/games/kbill/kbill.cpp
@@ -1,132 +1,128 @@
/***************************************************************************
kbill.cpp - description
-------------------
begin : Thu Dec 30 16:55:55 CET 1999
copyright : (C) 1999 by Jurrien Loonstra
email : j.h.loonstra@st.hanze.nl
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include <qmessagebox.h>
-#include <qmultilinedit.h>
#include <qmenubar.h>
#include <qtextbrowser.h>
-#include <qfont.h>
-#include <qwidget.h>
#include "kbill.h"
-#include "inputbox.h"
#include "helpdialog.h"
#include "objects.h"
#include "Strings.h"
KBill::KBill() : QMainWindow() {
setCaption(tr("kBill"));
file = new QPopupMenu();
file->insertItem(tr("New game"), this, SLOT(NewGame()));
pauseid = file->insertItem(tr("Pause game"), this, SLOT(Pause()));
//these are dissabled until I fix them
//file->insertItem(tr("Warp to level..."), this, SLOT(WarpTo()));
//file->insertItem(tr("View high scores"), this, SLOT(ViewHighScores()));
help = new QPopupMenu();
help->insertItem(tr("Story of kBill"), this, SLOT(Story()));
help->insertItem(tr("Rules"), this, SLOT(Rules()));
menu = new QMenuBar(this);
menu->insertItem(tr("&File"), file);
menu->insertSeparator();
menu->insertItem(tr("&Help"), help);
field = new Field(this);
//setView(field);
//setMainWidget(field);
//setMenu(menu);
}
KBill::~KBill() {
}
Field* KBill::getField() {
return field;
}
// -----------------------------------------------------------------------
void KBill::Quit() {
field->stopTimer();
qApp->quit();
}
void KBill::About(){
// field->stopTimer();
// AboutBox about(this);
// about.exec();
// field->startTimer();
}
void KBill::NewGame() {
field->stopTimer();
// if (KMsgBox::yesNo(this, i18n("New Game"), i18n(newgamestr), KMsgBox::QUESTION) == 1)
game.start(1);
// else
field->startTimer();
}
void KBill::Pause() {
field->stopTimer();
QMessageBox::message(tr("Pause Game"), tr(pausestr), 0);
field->startTimer();
}
void KBill::WarpTo() {
/* field->stopTimer();
InputBox b(this, 0, "Warp To Level", tr(warpstr));
bool status = b.exec() == 1;
field->startTimer();
if (status) {
bool ok;
int level = b.getText().toUInt(&ok);
if (ok) {
field->startTimer();
game.warp_to_level(level);
return;
}
}*/
}
void KBill::ViewHighScores() {
//ui.popup_dialog(Game::HIGHSCORE);
}
void KBill::Story() {
field->stopTimer();
HelpDialog *stryDialog = new HelpDialog(this,"helpdialog",1);
QString stryString = tr("<b>The Story</b><p>Yet again, the fate of the world rests in your hands! An evil computer hacker, known only by his handle 'Bill', has created the ultimate computer virus. A virus so powerful that it has the power to transmute an ordinary computer into a toaster oven. (oooh!) 'Bill' has cloned himself into a billion-jillion micro-Bills. Their sole purpose is to deliver the nefarious virus, which has been cleverly disguised as a popular operating system. As System Administrator and Exterminator, your job is to keep Bill from succeeding at his task.");
stryDialog->setCaption(tr("The story of KBill"));
stryDialog->TextBrowser1->setText(stryString);
stryDialog->resize(200,200);
stryDialog->show();
field->startTimer();
}
void KBill::Rules() {
field->stopTimer();
HelpDialog *rulesDialog = new HelpDialog(this,"helpdialog",1);
rulesDialog->setCaption(tr("The rules of KBill"));
QString rulesStr = tr("<b>The Rules</b><p>kBill has been painstakingly designed and researched in order to make it as easy to use for the whole family as it is for little Sally. Years - nay - days of beta testing and consulting with the cheapest of human interface designers have resulted in a game that is easy to use, yet nothing at all like a Macintosh.<p><UL><LI>Whack the Bills (click)</LI><LI>Restart the computer (click)</LI><LI>Pick up stolen OSes & return (drag) them to their respective computers</LI><LI>Drag the bucket to extinguish sparks</LI><LI>Scoring is based on total uptime, with bonuses for killing Bills.</LI></UL><P>As for the rest, you can probably work it out for yourself. We did, so it can't be too hard");
rulesDialog->TextBrowser1->setText(rulesStr);
rulesDialog->resize(200,200);
rulesDialog->show();
field->startTimer();
}
diff --git a/noncore/games/kcheckers/kcheckers.cpp b/noncore/games/kcheckers/kcheckers.cpp
index 2eb37e5..a27dd18 100644
--- a/noncore/games/kcheckers/kcheckers.cpp
+++ b/noncore/games/kcheckers/kcheckers.cpp
@@ -1,195 +1,194 @@
#include <qimage.h>
-#include <qframe.h>
#include <qlayout.h>
#include <qmenubar.h>
#include <qtoolbar.h>
#include <qpe/config.h>
#include <qwhatsthis.h>
#include <qtoolbutton.h>
#include <qmessagebox.h>
#include <qapplication.h>
#include "kcheckers.h"
#include "echeckers.h"
#include "rcheckers.h"
#include "pics/logo.xpm"
#include "pics/undo.xpm"
#include "pics/exit.xpm"
#include "pics/help.xpm"
#include "pics/wood1.xpm"
#include "pics/wood2.xpm"
#include "pics/wood3.xpm"
#include "pics/green1.xpm"
#include "pics/green2.xpm"
#include "pics/green3.xpm"
#include "pics/marble1.xpm"
#include "pics/marble2.xpm"
#include "pics/marble3.xpm"
#include "pics/biglogo.xpm"
#include "pics/man_black.xpm"
#include "pics/man_white.xpm"
#include "pics/king_black.xpm"
#include "pics/king_white.xpm"
#include "pics/contexthelp.xpm"
QString KCheckers::enNumeration="1 2 3 4 5 6 7 8 9 1011121314151617181920212223242526272829303132";
QString KCheckers::ruNumeration="B8D8F8H8A7C7E7G7B6D6F6H6A5C5E5G5B4D4F4H4A3C3E3G3B2D2F2H2A1C1E1G1";
const int KCheckers::t[]={6,7,8,9,11,12,13,14,17,18,19,20,22,23,
24,25,28,29,30,31,33,34,35,36,39,40,41,42,44,45,46,47};
KCheckers::KCheckers(QWidget *p, const char* n, WFlags )
:QMainWindow(p,n,WStyle_DialogBorder)
{
setCaption(tr("KCheckers") );
setIcon(QPixmap(biglogo_xpm));
setToolBarsMovable(false);
// Make a menubar
gameMenu=new QPopupMenu;
CHECK_PTR(gameMenu);
gameMenu->insertItem(QPixmap(logo_xpm),tr("&New"),this,SLOT(newGame()),CTRL+Key_N);
gameMenu->insertSeparator();
undoID=gameMenu->insertItem(QPixmap(undo_xpm),tr("&Undo Move"),this,SLOT(undoMove()),CTRL+Key_Z);
gameMenu->insertSeparator();
gameMenu->insertItem(QPixmap(exit_xpm),tr("&Quit"),qApp,SLOT(closeAllWindows()),CTRL+Key_Q);
skillMenu=new QPopupMenu;
CHECK_PTR(skillMenu);
skillMenu->insertItem(tr("&Beginner"),this,SLOT(setSkillBeginner()),CTRL+Key_1,BEGINNER);
skillMenu->insertItem(tr("&Novice"), this,SLOT(setSkillNovice()), CTRL+Key_2,NOVICE);
skillMenu->insertItem(tr("&Average"), this,SLOT(setSkillAverage()), CTRL+Key_3,AVERAGE);
skillMenu->insertItem(tr("&Good"), this,SLOT(setSkillGood()), CTRL+Key_4,GOOD);
skillMenu->insertItem(tr("&Expert"), this,SLOT(setSkillExpert()), CTRL+Key_5,EXPERT);
skillMenu->insertItem(tr("&Master"), this,SLOT(setSkillMaster()), CTRL+Key_6,MASTER);
optionsMenu=new QPopupMenu;
CHECK_PTR(optionsMenu);
numID=optionsMenu->insertItem(tr("&Show Numeration"),this,SLOT(showNumeration()));
optionsMenu->insertSeparator();
optionsMenu->insertItem(tr("&English Rules"),this,SLOT(setRulesEnglish()),0,ENGLISH);
optionsMenu->insertItem(tr("&Russian Rules"),this,SLOT(setRulesRussian()),0,RUSSIAN);
optionsMenu->insertSeparator();
optionsMenu->insertItem(tr("&Green Board"), this,SLOT(setPatternGreen()), 0,GREEN);
optionsMenu->insertItem(tr("&Marble Board"),this,SLOT(setPatternMarble()),0,MARBLE);
optionsMenu->insertItem(tr("&Wooden Board"),this,SLOT(setPatternWooden()),0,WOODEN);
QPopupMenu* helpMenu=new QPopupMenu;
CHECK_PTR(helpMenu);
helpMenu->insertItem(QPixmap(contexthelp_xpm),tr("What's This"),this,SLOT(whatsThis()),SHIFT+Key_F1);
helpMenu->insertItem(QPixmap(help_xpm),tr("&Rules of Play"),this,SLOT(help()),Key_F1);
helpMenu->insertSeparator();
helpMenu->insertItem(QPixmap(logo_xpm),tr("&About KCheckers"),this,SLOT(about()));
helpMenu->insertItem(tr("About &Qt"),this,SLOT(aboutQt()));
QToolBar* menuToolBar=new QToolBar(this);
CHECK_PTR(menuToolBar);
QMenuBar* menuBar=new QMenuBar(menuToolBar);
CHECK_PTR(menuBar);
menuBar->insertItem(tr("&Game"), gameMenu);
menuBar->insertItem(tr("&Skill"), skillMenu);
menuBar->insertItem(tr("&Options"),optionsMenu);
menuBar->insertItem(tr("&Help"), helpMenu);
// Restore a settings
readConfig();
skillMenu->setItemChecked(skill,true);
optionsMenu->setItemChecked(rules,true);
optionsMenu->setItemChecked(numID,false);
// Make a toolbar
QToolBar* emptyToolBar=new QToolBar(this);
emptyToolBar->setHorizontalStretchable(true);
QToolBar* toolBar=new QToolBar(this);
CHECK_PTR(toolBar);
QSize buttonSize(24,24);
QToolButton* gameButton=new QToolButton(QPixmap(logo_xpm),tr(" New Game ") ,"",this,SLOT(newGame()),toolBar);
CHECK_PTR(gameButton);
gameButton->setMinimumSize(buttonSize);
undoButton=new QToolButton(QPixmap(undo_xpm),tr(" Undo Move "),"",this,SLOT(undoMove()),toolBar);
CHECK_PTR(undoButton);
undoButton->setMinimumSize(buttonSize);
QToolButton* helpButton=new QToolButton(QPixmap(help_xpm),tr(" Rules of Play "),"",this,SLOT(help()),toolBar);
CHECK_PTR(helpButton);
helpButton->setMinimumSize(buttonSize);
// Make a checkers board
imageMan1=new QImage(man_black_xpm); CHECK_PTR(imageMan1);
imageMan2=new QImage(man_white_xpm); CHECK_PTR(imageMan2);
imageKing1=new QImage(king_black_xpm); CHECK_PTR(imageKing1);
imageKing2=new QImage(king_white_xpm); CHECK_PTR(imageKing2);
imageWood1=new QImage(wood1_xpm); CHECK_PTR(imageWood1);
imageWood2=new QImage(wood2_xpm); CHECK_PTR(imageWood2);
imageWood3=new QImage(wood3_xpm); CHECK_PTR(imageWood3);
imageGreen1=new QImage(green1_xpm); CHECK_PTR(imageGreen1);
imageGreen2=new QImage(green2_xpm); CHECK_PTR(imageGreen2);
imageGreen3=new QImage(green3_xpm); CHECK_PTR(imageGreen3);
imageMarble1=new QImage(marble1_xpm); CHECK_PTR(imageMarble1);
imageMarble2=new QImage(marble2_xpm); CHECK_PTR(imageMarble2);
imageMarble3=new QImage(marble3_xpm); CHECK_PTR(imageMarble3);
QWidget* centralWidget=new QWidget(this);
setCentralWidget(centralWidget);
QFrame* frame=new QFrame(centralWidget);
CHECK_PTR(frame);
frame->setFrameStyle(QFrame::Box|QFrame::Plain);
frame->setFixedSize(SIZE*8+2,SIZE*8+2);
statusLabel = new QLabel(centralWidget);
statusLabel->setAlignment(Qt::AlignHCenter);
QVBoxLayout* vlayout=new QVBoxLayout(centralWidget);
vlayout->addStretch();
vlayout->addWidget(frame);
vlayout->addStretch();
vlayout->addWidget(statusLabel);
vlayout->addStretch();
for(int i=0;i<64;i++)
{
field[i]=new Field(frame,i);
CHECK_PTR(field[i]);
}
QGridLayout* grid=new QGridLayout(frame,8,8,1,0);
CHECK_PTR(grid);
for(int i=0;i<4;i++)
{
for(int k=0;k<4;k++)
{
grid->addWidget(field[i*8+k+32],i*2, k*2 );
grid->addWidget(field[i*8+k ],i*2, k*2+1);
grid->addWidget(field[i*8+k+4 ],i*2+1,k*2 );
grid->addWidget(field[i*8+k+36],i*2+1,k*2+1);
}
}
for(int i=0;i<32;i++)
connect(field[i],SIGNAL(click(int)),this,SLOT(click(int)));
selected=false;
diff --git a/noncore/games/kcheckers/main.cpp b/noncore/games/kcheckers/main.cpp
index 6ac570a..e22dbcc 100644
--- a/noncore/games/kcheckers/main.cpp
+++ b/noncore/games/kcheckers/main.cpp
@@ -1,10 +1,8 @@
-#include <qpe/qpeapplication.h>
-#include <qfont.h>
#include "kcheckers.h"
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<KCheckers> )
diff --git a/noncore/games/kpacman/board.cpp b/noncore/games/kpacman/board.cpp
index f95f699..f82b5f9 100644
--- a/noncore/games/kpacman/board.cpp
+++ b/noncore/games/kpacman/board.cpp
@@ -1,202 +1,199 @@
-#include "portable.h"
#if defined( KDE2_PORT )
#include <kapp.h>
#include <klocale.h>
#endif
-#include <qrect.h>
-#include <qregexp.h>
#include <qmessagebox.h>
#include <qfile.h>
#include <qtextstream.h>
#include "board.h"
#include "bitmaps.h"
Board::Board(int size) : QArray<int> (size)
{
sz = size; // set size of board
map = "";
mapName = ""; // no map loaded so far
init(None); // initialize varibales
}
void Board::init(Image image, QString levelName)
{
prisonEntry = OUT;
prisonExit = OUT;
fruitHome = OUT;
fruitPosition = OUT;
pacmanHome = OUT;
pacmanPosition = OUT;
for (int m = 0; m < 8; m++) {
monsterHome[m] = OUT;
monsterPosition[m] = OUT;
}
for (int e = 0; e < 8; e++) {
energizerPosition[e] = OUT;
}
for (int e = 0; e < 8; e++) {
tunnelPosition[e] = OUT;
}
fill(0);
numPoints = 0;
numEnergizers = 0;
numMonsters = 0;
numTunnels = 0;
if (!levelName.isNull() && !levelName.isEmpty())
if (mapName == levelName)
image = File;
else {
QFile levelFile(levelName);
if (!levelFile.open(IO_ReadOnly)) {
QString msg = "The levelmap could not be constructed.\n\n"
"The file '@LEVELNAME@' does not exist,\n"
"or could not be opened for reading.";
msg.replace(QRegExp("@LEVELNAME@"), levelName);
// QMessageBox::information(0, tr("Initialization Error"), msg);
printf("%s\n", msg.data());
} else {
map.fill(' ', BoardHeight*BoardWidth);
int height = 0;
QTextStream levelStream(&levelFile);
while (!levelStream.eof() && height < BoardHeight) {
QString line = levelStream.readLine();
if (line.find(QRegExp("^ *;")) == -1) {
line.replace(QRegExp(";.*"), ""); // strip off comments
line.replace(QRegExp("\" *$"), ""); // strip off trailing "
line.replace(QRegExp("^ *\""), ""); // strip off leading "
map.replace(height*BoardWidth,
(line.length() > BoardWidth) ? BoardWidth : line.length(),
line.data());
height++;
}
}
mapName = levelName;
levelFile.close();
image = File;
}
}
switch (image) {
case Intro : // setup(demo_bits);
break;
case Demo : setup(demo_bits);
break;
case Level : setup(demo_bits);
break;
case File : setup((uchar *) map.data());
break;
default : break;
}
}
void Board::setup(const uchar *buf)
{
for ( int index = 0; buf[index] != 0 && index < BoardWidth*BoardHeight; index++ ) {
switch (buf[index]) {
case '*' : set(index, brick); break;
case '+' : set(index, out); break;
case '#' : set(index, prison); break;
case '-' : set(index, gate); break;
case 'E' : set(index, tunnel); break;
case '.' : set(index, Point); break;
case 'o' : set(index, energizer); break;
case 'I' : set(index, prisonentry); break;
case 'O' : set(index, prisonexit); break;
case 'F' : set(index, fruithome); break;
case 'P' : set(index, pacmanhome); break;
default : if (buf[index] >= '0' && buf[index] <= '7') {
set(index, monsterhome, buf[index]-(uchar)'0');
}
}
}
}
bool Board::inBounds(int pos)
{
return ( pos < 0 || pos > sz-1 ? FALSE : TRUE);
}
void Board::set(int pos, Square sq, int m)
{
if (inBounds(pos))
switch (sq) {
case out : at(pos) = OUT; break;
case Point : at(pos) |= pointBit; numPoints++; break;
case tunnel : at(pos) = sq;
for (int e = 0; e < numTunnels; e++) { // if tunnel is already on board
if (tunnelPosition[e] == pos) // don't do it again.
pos = OUT;
}
if (pos != OUT) {
tunnelPosition[numTunnels] = pos;
numTunnels++;
}
break;
case energizer : at(pos) |= energizerBit;
for (int e = 0; e < numEnergizers; e++) {
if (energizerPosition[e] == pos)
pos = OUT;
}
if (pos != OUT) {
energizerPosition[numEnergizers] = pos;
numEnergizers++;
}
break;
case fruit : at(pos) |= fruitBit; fruitPosition = pos; break;
case pacman : at(pos) |= pacmanBit; pacmanPosition = pos; break;
case monster : at(pos) |= (monsterBit << m);
monsterPosition[m] = pos; break;
case prisonentry : prisonEntry = pos; at(pos) = empty; break;
case prisonexit : prisonExit = pos; at(pos) = empty; break;
case fruithome : fruitHome = pos; at(pos) = empty; break;
case pacmanhome : pacmanHome = pos; at(pos) = empty; break;
case monsterhome : monsterHome[m] = pos; at(pos) = empty;
if (m == 0 && prisonExit == OUT)
prisonExit = pos;
if (m == 1 && prisonEntry == OUT)
prisonEntry = pos;
numMonsters++;
break;
default : at(pos) = sq;
}
}
void Board::reset(int pos, Square sq, int m)
{
bool found = FALSE;
if (inBounds(pos))
switch (sq) {
case out : at(pos) = empty; break;
case Point : at(pos) &= ~ pointBit; numPoints--; break;
case energizer : at(pos) &= ~ energizerBit;
for (int e = 0; e < numEnergizers; e++) { // delete the position of the eaten
if (found) // energizer in the position array
energizerPosition[e-1] = energizerPosition[e];
if (energizerPosition[e] == pos)
found = TRUE;
}
energizerPosition[numEnergizers--] = OUT;
break;
case fruit : at(pos) &= ~ fruitBit; fruitPosition = OUT; break;
case pacman : at(pos) &= ~ pacmanBit; pacmanPosition = OUT; break;
case monster : at(pos) &= ~ (monsterBit << m);
monsterPosition[m] = OUT; break;
default : at(pos) = at(pos) & varBits;
}
}
int Board::position(Square sq, int m)
diff --git a/noncore/games/kpacman/keys.cpp b/noncore/games/kpacman/keys.cpp
index 07ce135..5200bc2 100644
--- a/noncore/games/kpacman/keys.cpp
+++ b/noncore/games/kpacman/keys.cpp
@@ -1,205 +1,200 @@
#include "portable.h"
#if defined( KDE2_PORT )
#include <kapp.h>
#include <kconfig.h>
#include <klocale.h>
#include <kstddirs.h>
#include <kaccel.h>
#include <keys.h>
#include <keys.moc>
#elif defined( QPE_PORT )
#include <qaccel.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include "keys.h"
#endif
#include <qpushbt.h>
-#include <qlabel.h>
-#include <qframe.h>
-#include <qkeycode.h>
-#include <qpixmap.h>
-#include <qstring.h>
Keys::Keys( QWidget *parent, const char *name)
: QDialog( parent, name, TRUE )
{
//KStandardDirs *dirs = KGlobal::dirs();
QPushButton *okButton = new QPushButton(this);
okButton->setText(tr("Ok"));
okButton->setFixedSize(okButton->size());
connect( okButton, SIGNAL(clicked()),this, SLOT(ok()) );
okButton->move(20,210);
QPushButton *defaultButton = new QPushButton(this);
defaultButton->setText(tr("Defaults"));
defaultButton->setFixedSize(defaultButton->size());
connect( defaultButton, SIGNAL(clicked()),this, SLOT(defaults()) );
defaultButton->move(140,210);
QPushButton *cancelButton = new QPushButton(this);
cancelButton->setText(tr("Cancel"));
cancelButton->setFixedSize(cancelButton->size());
connect( cancelButton, SIGNAL(clicked()),this, SLOT(reject()) );
cancelButton->move(260,210);
QFrame *separator = new QFrame(this);
separator->setFrameStyle( QFrame::HLine | QFrame::Sunken );
separator->setGeometry( 20, 190, 340, 4 );
for ( int x = 0; x < 4; x++) {
QLabel *l = new QLabel(this);
l->setAlignment(AlignCenter);
labels[x] = l;
}
labels[0]->setGeometry(120, 20, 140, 20 );
labels[1]->setGeometry(120,160, 140, 20 );
labels[2]->setGeometry( 20, 92, 100, 20 );
labels[3]->setGeometry(265, 92, 100, 20 );
QString pixPath;
QPushButton *up = new QPushButton(this);
pixPath = FIND_APP_DATA( "pics/up.xpm" );
up->setPixmap( QPixmap(pixPath));
up->setFixedSize(up->pixmap()->size());
connect( up, SIGNAL(clicked()),this, SLOT(butUp()) );
up->move(180, 50);
QPushButton *down = new QPushButton(this);
pixPath = FIND_APP_DATA( "pics/down.xpm");
down->setPixmap( QPixmap(pixPath));
down->setFixedSize(down->pixmap()->size());
connect( down, SIGNAL(clicked()),this, SLOT(butDown()) );
down->move(180, 130);
QPushButton *left = new QPushButton(this);
pixPath = FIND_APP_DATA( "pics/left.xpm");
left->setPixmap( QPixmap(pixPath));
left->setFixedSize(left->pixmap()->size());
connect( left, SIGNAL(clicked()),this, SLOT(butLeft()) );
left->move(140, 90);
QPushButton *right = new QPushButton(this);
pixPath = FIND_APP_DATA( "pics/right.xpm");
right->setPixmap( QPixmap(pixPath));
right->setFixedSize(right->pixmap()->size());
connect( right, SIGNAL(clicked()),this, SLOT(butRight()) );
right->move(220, 90);
setCaption(tr("Change Direction Keys"));
setFixedSize(380, 260);
lab = 0;
init();
}
void Keys::keyPressEvent( QKeyEvent *e )
{
uint kCode = e->key() & ~(SHIFT | CTRL | ALT);
QString string = KAccel::keyToString(kCode);
if (lab != 0) {
if ( string.isNull() )
lab->setText(tr("Undefined key"));
else
lab->setText(string);
}
else if ( lab == 0 && e->key() == Key_Escape)
reject();
}
void Keys::butUp()
{
getKey(0);
}
void Keys::butDown()
{
getKey(1);
}
void Keys::butLeft()
{
getKey(2);
}
void Keys::butRight()
{
getKey(3);
}
void Keys::getKey(int i)
{
if ( lab != 0)
focusOut(lab);
focusIn(labels[i]);
}
void Keys::focusOut(QLabel *l)
{
l->setFrameStyle( QFrame::NoFrame );
l->setBackgroundColor(backgroundColor());
l->repaint();
}
void Keys::focusIn(QLabel *l)
{
lab = l;
lab->setFrameStyle( QFrame::Panel | QFrame::Sunken );
lab->setBackgroundColor(white);
lab->repaint();
}
void Keys::defaults()
{
if ( lab != 0)
focusOut(lab);
lab = 0;
labels[0]->setText("Up");
labels[1]->setText("Down");
labels[2]->setText("Left");
labels[3]->setText("Right");
}
void Keys::init()
{
APP_CONFIG_BEGIN( cfg );
QString up("Up");
up = cfg->readEntry("upKey", (const char*) up);
labels[0]->setText(up);
QString down("Down");
down = cfg->readEntry("downKey", (const char*) down);
labels[1]->setText(down);
QString left("Left");
left = cfg->readEntry("leftKey", (const char*) left);
labels[2]->setText(left);
QString right("Right");
right = cfg->readEntry("rightKey", (const char*) right);
labels[3]->setText(right);
APP_CONFIG_END( cfg );
}
void Keys::ok()
{
/*
APP_CONFIG_BEGIN( cfg );
cfg->writeEntry("upKey", (const char*) labels[0]->text() );
cfg->writeEntry("downKey", (const char*) labels[1]->text() );
cfg->writeEntry("leftKey", (const char*) labels[2]->text() );
cfg->writeEntry("rightKey",(const char*) labels[3]->text() );
APP_CONFIG_END( cfg );
*/
accept();
}
diff --git a/noncore/games/kpacman/kpacman.cpp b/noncore/games/kpacman/kpacman.cpp
index df27c76..be2e46d 100644
--- a/noncore/games/kpacman/kpacman.cpp
+++ b/noncore/games/kpacman/kpacman.cpp
@@ -1,211 +1,206 @@
#include "portable.h"
#if defined( KDE2_PORT )
#include <kpacman.h>
#include <kpacman.moc>
#include <kcolordlg.h>
#elif defined( QPE_PORT )
#include <qmenubar.h>
#include <qpe/config.h>
#include <qapplication.h>
#include "kpacman.h"
#endif
-#include <qkeycode.h>
-#include <qcolor.h>
-#include <qstring.h>
-#include <qpopmenu.h>
-#include <qmsgbox.h>
Kpacman::Kpacman(QWidget *parent, const char *name)
: KTMainWindow(parent, name)
{
schemesPopup = new QList<QPopupMenu>;
schemesPopup->setAutoDelete(TRUE);
menu();
m_view = new QWidget( this, "m_view" );
m_view->setBackgroundColor( black );
m_layout = new QGridLayout( m_view );
m_layout->setMargin( 7 );
view = new KpacmanWidget( this, QString(name)+"widget");
m_layout->addWidget( view, 0, 0 );
setCaption( tr("KPacman") );
view->referee->setFocus();
connect(view->referee, SIGNAL(setScore(int, int)),
view->score, SLOT(setScore(int, int)));
connect(view->referee, SIGNAL(setPoints(int)),
view->score, SLOT(set(int)));
connect(view->referee, SIGNAL(setLifes(int)),
view->status, SLOT(setLifes(int)));
connect(view->referee, SIGNAL(setLevel(int)),
view->status, SLOT(setLevel(int)));
connect(view->referee, SIGNAL(forcedHallOfFame(bool)),
this, SLOT(forcedHallOfFame(bool)));
connect(view->referee, SIGNAL(togglePaused()), this, SLOT(togglePaused()));
connect(view->referee, SIGNAL(toggleNew()), this, SLOT(toggleNew()));
connect(view->score, SIGNAL(toggleNew()), this, SLOT(toggleNew()));
connect(view->score, SIGNAL(forcedHallOfFame(bool)),
this, SLOT(forcedHallOfFame(bool)));
APP_CONFIG_BEGIN( cfg );
focusOutPause = !cfg->readBoolEntry("FocusOutPause", TRUE);
focusInContinue = !cfg->readBoolEntry("FocusInContinue", TRUE);
hideMouseCursor = !cfg->readBoolEntry("HideMouseCursor", TRUE);
APP_CONFIG_END( cfg );
toggleFocusOutPause();
toggleFocusInContinue();
toggleHideMouseCursor();
setCentralWidget( m_view );
}
Kpacman::~Kpacman()
{
/* APP_CONFIG_BEGIN( cfg );
cfg->writeEntry("FocusOutPause", focusOutPause);
cfg->writeEntry("FocusInContinue", focusInContinue);
cfg->writeEntry("HideMouseCursor", hideMouseCursor);
APP_CONFIG_END( cfg );
*/
delete _menuBar;
}
void Kpacman::menu()
{
gamePopup = new QPopupMenu();
CHECK_PTR( gamePopup );
newID = gamePopup->insertItem(tr("&New"), this, SLOT(newKpacman()),Key_F2);
pauseID = gamePopup->insertItem(tr("&Pause"),
this, SLOT(pauseKpacman()), Key_F3);
hofID = gamePopup->insertItem(tr("&Hall of fame"),
this, SLOT(toggleHallOfFame()), Key_F4);
gamePopup->insertSeparator();
gamePopup->insertItem(tr("&Quit"), this, SLOT(quitKpacman()), CTRL+Key_Q);
gamePopup->setCheckable(TRUE);
optionsPopup = new QPopupMenu();
CHECK_PTR(optionsPopup);
modesPopup = new QPopupMenu();
CHECK_PTR(modesPopup);
hideMouseCursorID = optionsPopup->insertItem(tr("&Hide Mousecursor"),
this, SLOT(toggleHideMouseCursor()),
CTRL+Key_H);
optionsPopup->insertSeparator();
if (lookupSchemes() > 0) {
optionsPopup->insertItem(tr("&Select graphic scheme"), modesPopup);
optionsPopup->insertSeparator();
}
focusOutPauseID = optionsPopup->insertItem(tr("&Pause in Background"),
this, SLOT(toggleFocusOutPause()));
focusInContinueID = optionsPopup->insertItem(tr("&Continue in Foreground"),
this, SLOT(toggleFocusInContinue()));
optionsPopup->insertSeparator();
optionsPopup->insertItem(tr("Change &keys..."), this, SLOT(confKeys()));
#ifndef QPE_PORT
QString aboutText = tr("@PACKAGE@ - @VERSION@\n\n"
"Joerg Thoennissen (joe@dsite.de)\n\n"
"A pacman game for the KDE Desktop\n\n"
"The program based on the source of ksnake\n"
"by Michel Filippi (mfilippi@sade.rhein-main.de).\n"
"The design was strongly influenced by the pacman\n"
"(c) 1980 MIDWAY MFG.CO.\n\n"
"I like to thank my girlfriend Elke Krueers for\n"
"the last 10 years of her friendship.\n");
aboutText.replace(QRegExp("@PACKAGE@"), PACKAGE);
aboutText.replace(QRegExp("@VERSION@"), VERSION);
QPopupMenu *helpPopup = helpMenu(aboutText, FALSE);
#endif
//_menuBar = new KMenuBar(this);
//CHECK_PTR( _menuBar );
//_menuBar->insertItem(tr("&Game"), gamePopup);
//_menuBar->insertItem(tr("&Options"), optionsPopup);
//_menuBar->insertSeparator();
#ifndef QPE_PORT
_menuBar->insertItem(tr("&Help"), helpPopup);
#endif
}
int Kpacman::lookupSchemes()
{
APP_CONFIG_BEGIN( cfg );
int ModeCount = cfg->readNumEntry("ModeCount", 0);
int Mode = cfg->readNumEntry("Mode", 0);
int SchemeCount = cfg->readNumEntry("SchemeCount", 0);
int Scheme = cfg->readNumEntry("Scheme", 0);
/*
if (SchemeCount == 0 || Scheme == -1) {
QMessageBox::warning(this, tr("Configuration Error"),
tr("There are no schemes defined,\n"
"or no scheme is selected."));
APP_CONFIG_END( cfg );
return 0;
}
*/
connect(modesPopup, SIGNAL(activated(int)), this, SLOT(schemeChecked(int)));
modeID.resize(ModeCount > 0 ? ModeCount : 0);
if (!schemesPopup->isEmpty())
schemesPopup->clear();
SAVE_CONFIG_GROUP( cfg, oldgroup );
QString ModeGroup;
QString ModeName;
for (int m = 0; m < ModeCount; m++) {
ModeGroup.sprintf("Mode %d", m);
cfg->setGroup(ModeGroup);
ModeName = cfg->readEntry("Description", ModeGroup);
QPopupMenu *p = new QPopupMenu;
p->setCheckable(TRUE);
connect(p, SIGNAL(activated(int)), this, SLOT(schemeChecked(int)));
schemesPopup->append(p);
modeID[m] = modesPopup->insertItem(ModeName, schemesPopup->at(m));
modesPopup->setItemEnabled(modeID[m], FALSE);
modesPopup->setItemChecked(modeID[m], m == Mode);
}
schemeID.resize(SchemeCount);
schemeMode.resize(SchemeCount);
QString SchemeGroup;
QString SchemeName;
int SchemeMode;
for (int i = 0; i < SchemeCount; i++) {
SchemeGroup.sprintf("Scheme %d", i);
cfg->setGroup(SchemeGroup);
SchemeName = cfg->readEntry("Description", SchemeGroup);
SchemeMode = cfg->readNumEntry("Mode", -1);
schemeMode[i] = SchemeMode;
if (SchemeMode == -1) {
schemeID[i] = modesPopup->insertItem(SchemeName);
modesPopup->setItemChecked(schemeID[i], i == Scheme);
} else {
schemeID[i] = schemesPopup->at(SchemeMode)->insertItem(SchemeName);
schemesPopup->at(SchemeMode)->
setItemChecked(schemeID[i], i == Scheme);
modesPopup->setItemEnabled(modeID[SchemeMode], TRUE);
diff --git a/noncore/games/kpacman/kpacmanwidget.cpp b/noncore/games/kpacman/kpacmanwidget.cpp
index 823d2bf..9631495 100644
--- a/noncore/games/kpacman/kpacmanwidget.cpp
+++ b/noncore/games/kpacman/kpacmanwidget.cpp
@@ -1,158 +1,153 @@
#include "portable.h"
#if defined( KDE2_PORT )
#include <kapp.h>
#include <kconfig.h>
#include <kstddirs.h>
#include <kpacmanwidget.h>
#include <kpacmanwidget.moc>
#elif defined( QPE_PORT )
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include "kpacmanwidget.h"
#endif
-#include <qmessagebox.h>
-#include "bitfont.h"
-#include "score.h"
-#include "referee.h"
-#include "status.h"
KpacmanWidget::KpacmanWidget( QWidget *parent, const char *name)
: QWidget( parent, name )
{
score = 0l;
referee = 0l;
status = 0l;
bitfont = NULL;
fontName = "";
scheme = mode = -1;
confScheme();
score = new Score(this, name, scheme, mode, bitfont);
referee = new Referee( this, name, scheme, mode, bitfont);
status = new Status(this, name, scheme, mode);
setBackgroundColor( black );
}
KpacmanWidget::~KpacmanWidget()
{
}
void KpacmanWidget::confMisc(bool defGroup)
{
APP_CONFIG_BEGIN( cfg );
//KStandardDirs *dirs = KGlobal::dirs();
QString findPath;
if (defGroup || cfg->hasKey("Font")) {
fontName = cfg->readEntry("Font");
if (fontName.left(1) != "/" && fontName.left(1) != "~")
fontName.insert(0, "fonts/");
if (fontName.right(1) == "/")
fontName.append("font.xbm");
//findPath = dirs->findResource("appdata", fontName);
findPath = FIND_APP_DATA( fontName );
if (!findPath.isEmpty())
fontName = findPath;
bitfontFirstChar = cfg->readNumEntry("FontFirstChar", 0x0e);
bitfontLastChar = cfg->readNumEntry("FontLastChar", 0x5f);
}
APP_CONFIG_END( cfg );
}
void KpacmanWidget::confScheme()
{
APP_CONFIG_BEGIN( cfg );
QString lastFontName = fontName;
SAVE_CONFIG_GROUP( cfg, oldgroup );
QString newgroup;
// if not set, read mode and scheme from the configfile
if (mode == -1 && scheme == -1) {
scheme = cfg->readNumEntry("Scheme", -1);
mode = cfg->readNumEntry("Mode", -1);
// if mode is not set in the defGroup-group, lookup the scheme group
if (scheme != -1 || mode == -1) {
newgroup.sprintf("Scheme %d", scheme);
cfg->setGroup(newgroup);
mode = cfg->readNumEntry("Mode", -1);
RESTORE_CONFIG_GROUP( cfg, oldgroup );
}
}
confMisc();
if (mode != -1) {
newgroup.sprintf("Mode %d", mode);
cfg->setGroup(newgroup);
confMisc(FALSE);
}
if (scheme != -1) {
newgroup.sprintf("Scheme %d", scheme);
cfg->setGroup(newgroup);
confMisc(FALSE);
}
if (lastFontName != fontName) {
if (bitfont != 0)
delete bitfont;
bitfont = new Bitfont(fontName, bitfontFirstChar, bitfontLastChar);
if (bitfont->width() == 0 || bitfont->height() == 0) {
QString msg = tr("The bitfont could not be contructed.\n\n"
"The file '@FONTNAME@' does not exist,\n"
"or is of an unknown format.");
msg.replace(QRegExp("@FONTNAME@"), fontName);
// QMessageBox::critical(this, tr("Initialization Error"), msg);
printf("%s\n", msg.data());
}
}
RESTORE_CONFIG_GROUP( cfg, oldgroup );
APP_CONFIG_END( cfg );
}
void KpacmanWidget::setScheme(int Scheme, int Mode)
{
mode = Mode;
scheme = Scheme;
confScheme();
score->setScheme(Scheme, Mode, bitfont);
referee->setScheme(Scheme, Mode, bitfont);
status->setScheme(Scheme, Mode);
score->repaint(FALSE);
referee->repaint(FALSE);
status->repaint(FALSE);
}
void KpacmanWidget::resizeEvent( QResizeEvent * )
{
qWarning("Resize");
referee->setGeometry(0, bitfont->height()*3, referee->width(), referee->height());
referee->setBackgroundColor(BLACK);
if(!status ) return;
status->setGeometry(0, bitfont->height()*3+referee->height(), referee->width(),
status->height());
status->setBackgroundColor(BLACK);
score->setGeometry(0, 0, referee->width(), bitfont->height()*3+referee->height()+status->height());
score->setBackgroundColor(BLACK);
}
diff --git a/noncore/games/kpacman/monster.cpp b/noncore/games/kpacman/monster.cpp
index 2f402b4..80b4655 100644
--- a/noncore/games/kpacman/monster.cpp
+++ b/noncore/games/kpacman/monster.cpp
@@ -1,194 +1,193 @@
#include "monster.h"
-#include "board.h"
Monster::Monster(Board *b, int mid)
{
board = b;
ID = mid;
setREM(0);
setHarmless(0, 0, 0);
setArrested(0, 0);
setFreedom(board->position(prisonexit));
if (mid == 0)
setPrison(board->position(prisonentry));
else
setPrison(board->position(monsterhome, mid));
actualPosition = lastPosition = OUT;
feetPosition = 0;
IQ = 0;
maxBodyPixmaps = 0;
maxEyesPixmaps = 0;
}
void Monster::setMaxPixmaps(int maxBody, int maxEyes)
{
if (feetPosition >= (maxBody/10))
feetPosition = 0;
maxBodyPixmaps = maxBody;
maxEyesPixmaps = maxEyes;
}
void Monster::setArrested(int ticks, int duration)
{
actualState = dangerous;
pauseDuration = ticks;
pause = 0;
arrestDuration = arrestLeft = duration;
arrestPause = ticks;
harmlessLeft = 0;
}
void Monster::setDangerous(int ticks, int iq)
{
actualState = dangerous;
pauseDuration = ticks;
pause = 0;
dangerousPause = ticks;
harmlessLeft = 0;
IQ = iq;
}
void Monster::setHarmless(int ticks, int hDuration, int wDuration)
{
actualState = harmless;
pauseDuration = ticks;
pause = 0;
harmlessDuration = harmlessLeft = hDuration;
warningDuration = wDuration;
}
void Monster::setREM(int ticks)
{
actualState = rem;
pauseDuration = ticks;
pause = 0;
}
void Monster::setPosition(int pos)
{
board->reset(lastPosition, monster, ID); // reset old position on the board
actualPosition = lastPosition = pos; // set position of monster
board->set(actualPosition, monster, ID);
feetPosition = 0;
}
void Monster::setPrison(int pos)
{
prisonPosition = pos;
}
void Monster::setFreedom(int pos)
{
freedomPosition = pos;
}
void Monster::setDirection(int dir)
{
if (dir == X)
lastDirection = actualDirection;
actualDirection = dir;
}
monsterState Monster::state()
{
return actualState;
}
int Monster::position()
{
return actualPosition;
}
int Monster::direction()
{
return actualDirection;
}
int Monster::id()
{
return ID;
}
bool Monster::move()
{
if (arrestLeft > 1)
arrestLeft--;
if (harmlessLeft > 0) {
harmlessLeft--;
if (harmlessLeft == 0 && actualState == harmless) {
actualState = dangerous;
pauseDuration = dangerousPause;
}
}
if (pause-- > 0)
return FALSE;
else
pause = pauseDuration;
if (actualPosition == OUT)
return FALSE;
if (actualDirection == X) {
if (++feetPosition >= (maxBodyPixmaps/10))
feetPosition = 0;
return TRUE;
}
lastPosition = actualPosition;
int d = actualDirection;
if (arrestLeft > 1) { // during the arrest, only up and down
if (!board->isWay(actualPosition, d, empty) &&
!board->isWay(actualPosition, d, tunnel))
d = board->turn(actualDirection);
}
if (arrestLeft == 1) { // going out of the prison
if (((d == W || d == E) &&
board->x(actualPosition) == board->x(freedomPosition)) ||
((d == S || d == N) &&
board->y(actualPosition) == board->y(freedomPosition)) ||
board->isWay(actualPosition, d, brick) ||
board->isWay(actualPosition, d, prison)) {
d = board->closeup(actualPosition, d, freedomPosition);
}
while (board->isWay(actualPosition, d, brick) ||
board->isWay(actualPosition, d, prison)) {
if (d == actualDirection)
d = rand() % 4;
else
d = actualDirection;
}
if (actualState == dangerous)
pauseDuration = dangerousPause;
}
if (arrestLeft == 0)
if (actualState == rem) { // on the way to prison
d = board->closeup(actualPosition, d, prisonPosition);
while (board->isWay(actualPosition, d, brick) ||
board->isWay(actualPosition, d, prison)) {
if (d != actualDirection) // if new direction is not possible,
d = actualDirection; // try current direction first.
else
d = rand() % 4;
}
} else { // dangerous or harmless movement
if (rand() % (int) ((190-IQ)/10) == 0) {
d = board->closeup(actualPosition, d, board->position(pacman));
if (actualState == harmless)
d = board->turn(d);
} else
do // try new direction, but not the opposite
d = rand() % 4; // direction, to prevent hectic movement.
while (d == board->turn(actualDirection));
while ((!board->isWay(actualPosition, d, empty) &&
diff --git a/noncore/games/kpacman/pacman.cpp b/noncore/games/kpacman/pacman.cpp
index 40f60a8..82524b4 100644
--- a/noncore/games/kpacman/pacman.cpp
+++ b/noncore/games/kpacman/pacman.cpp
@@ -1,147 +1,146 @@
#include "pacman.h"
-#include "board.h"
Pacman::Pacman(Board *b)
{
board = b;
setDemo(FALSE);
setAlive(0);
actualPosition = lastPosition = OUT;
mouthPosition = 0;
lastPix = 0;
maxPixmaps = 0;
}
void Pacman::setMaxPixmaps(int max)
{
if (actualDirection == X && lastPix >= 0) {
actualDirection = lastPix / (maxPixmaps/4);
if (max < maxPixmaps)
mouthPosition = 0;
else
mouthPosition = lastPix % (maxPixmaps/4);
maxPixmaps = max;
lastPix = pix();
actualDirection = X;
} else
maxPixmaps = max;
}
void Pacman::setAlive(int ticks)
{
actualState = alive;
pauseDuration = ticks;
pause = 0;
}
void Pacman::setPosition(int pos)
{
board->reset(lastPosition, pacman);
actualPosition = lastPosition = pos;
board->set(actualPosition, pacman);
mouthPosition = 0;
}
void Pacman::setDirection(int dir, bool forced)
{
if (forced ||
board->isWay(actualPosition, dir, empty) ||
board->isWay(actualPosition, dir, tunnel)) {
if (dir == X)
lastPix = pix();
actualDirection = dir;
nextDirection = X;
} else
nextDirection = dir;
}
void Pacman::setDemo(bool yes)
{
demo = yes;
}
pacmanState Pacman::state()
{
return actualState;
}
int Pacman::position()
{
return actualPosition;
}
int Pacman::direction()
{
return actualDirection;
}
bool Pacman::move()
{
if (pause-- > 0)
return FALSE;
else
pause = pauseDuration;
if (actualDirection == X || actualPosition == OUT)
return FALSE;
lastPosition = actualPosition;
if (demo) {
int d = actualDirection;
do // try new direction, but not the opposite
d = rand() % 4; // direction, to prevent hectic movement.
while (d == board->turn(actualDirection));
while (!board->isWay(actualPosition, d, empty) &&
!board->isWay(actualPosition, d, tunnel)) {
if (d != actualDirection) // if new actualDirection is not possible,
d = actualDirection; // try current actualDirection first.
else
d = rand() % 4;
}
actualDirection = d;
actualPosition = board->move(actualPosition, actualDirection);
} else {
if (nextDirection != X)
if (board->isWay(actualPosition, nextDirection, empty) ||
board->isWay(actualPosition, nextDirection, tunnel)) {
actualDirection = nextDirection;
nextDirection = X;
}
if (board->isWay(actualPosition, actualDirection, empty) ||
board->isWay(actualPosition, actualDirection, tunnel))
actualPosition = board->move(actualPosition, actualDirection);
}
if (actualPosition != lastPosition) {
board->reset(lastPosition, pacman);
board->set(actualPosition, pacman);
if (++mouthPosition >= (maxPixmaps/4))
mouthPosition = 0;
}
return TRUE;
}
int Pacman::pix()
{
if (actualPosition != OUT && maxPixmaps > 0)
switch (actualDirection) {
case N : return ((maxPixmaps/4)*0)+mouthPosition;
case E : return ((maxPixmaps/4)*1)+mouthPosition;
case S : return ((maxPixmaps/4)*2)+mouthPosition;
case W : return ((maxPixmaps/4)*3)+mouthPosition;
case X : return lastPix;
}
return -1;
}
diff --git a/noncore/games/kpacman/painter.cpp b/noncore/games/kpacman/painter.cpp
index d8c7460..410d3f5 100644
--- a/noncore/games/kpacman/painter.cpp
+++ b/noncore/games/kpacman/painter.cpp
@@ -1,216 +1,208 @@
#include "portable.h"
#if defined( KDE2_PORT )
#include <kapp.h>
#include <kconfig.h>
#include <kstddirs.h>
#elif defined( QPE_PORT )
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#endif
-#include <qcolor.h>
-#include <qpainter.h>
-#include <qpixmap.h>
-#include <qbitmap.h>
-#include <qrect.h>
-#include <qstring.h>
-
-#include <qmessagebox.h>
+
#include <qfileinfo.h>
#include "painter.h"
-#include "board.h"
Painter::Painter( Board *b, QWidget *parent, int Scheme, int Mode, Bitfont *font)
{
w = parent;
board = b;
pointPix = NULL;
wallPix = NULL;
prisonPix = NULL;
energizerPix = NULL;
fruitPix = NULL;
pacmanPix = NULL;
dyingPix = NULL;
eyesPix = NULL;
monsterPix = NULL;
fruitScorePix = NULL;
monsterScorePix = NULL;
lastPointPixmapName = "";
lastWallPixmapName = "";
lastPrisonPixmapName = "";
lastEnergizerPixmapName = "";
lastFruitPixmapName = "";
lastPacmanPixmapName = "";
lastDyingPixmapName = "";
lastEyesPixmapName = "";
lastMonsterPixmapName = "";
lastFruitScorePixmapName = "";
lastMonsterScorePixmapName = "";
bitfont = font;
scheme = Scheme;
mode = Mode;
level = 0;
confScheme();
}
QList<QPixmap> *Painter::loadPixmap(QWidget*, QString pixmapName,
QList<QPixmap> *pixmaps)
{
if (pixmaps == NULL) {
pixmaps = new QList<QPixmap>;
pixmaps->setAutoDelete(TRUE);
}
if (!pixmaps->isEmpty())
pixmaps->clear();
QPixmap PIXMAP(pixmapName);
if (PIXMAP.isNull() || PIXMAP.mask() == NULL) {
QString msg = "The pixmap could not be contructed.\n\n"
"The file '@PIXMAPNAME@' does not exist,\n"
"or is of an unknown format.";
msg.replace(QRegExp("@PIXMAPNAME@"), pixmapName);
// QMessageBox::critical(parent, tr("Initialization Error"), msg);
printf("%s\n", msg.data());
return 0;
}
int height = PIXMAP.height();
int width = (height == 0) ? 0 : PIXMAP.width()/(PIXMAP.width()/height);
QBitmap BITMAP;
QBitmap MASK;
BITMAP = *PIXMAP.mask();
MASK.resize(width, height);
for (int x = 0; x < PIXMAP.width()/width; x++) {
QPixmap *pixmap = new QPixmap(width, height);
pixmaps->append(pixmap);
bitBlt(pixmap, 0, 0, &PIXMAP, x*width, 0, width, height, QPixmap::CopyROP, TRUE);
bitBlt(&MASK, 0, 0, &BITMAP, x*width, 0, width, height, QPixmap::CopyROP, TRUE);
pixmap->setMask(MASK);
}
return pixmaps;
}
QList<QPixmap> *Painter::textPixmap(QStrList &str, QList<QPixmap> *pixmaps,
QColor fg, QColor bg)
{
if (pixmaps == NULL) {
pixmaps = new QList<QPixmap>;
pixmaps->setAutoDelete(TRUE);
}
if (!pixmaps->isEmpty())
pixmaps->clear();
for (uint s = 0; s < str.count(); s++) {
QPixmap *pixmap = new QPixmap(bitfont->text(str.at(s), fg, bg));
pixmaps->append(pixmap);
}
return pixmaps;
}
QList<QPixmap> *Painter::textPixmap(QString str, QList<QPixmap> *pixmaps,
QColor fg, QColor bg)
{
if (pixmaps == NULL) {
pixmaps = new QList<QPixmap>;
pixmaps->setAutoDelete(TRUE);
}
if (!pixmaps->isEmpty())
pixmaps->clear();
QPixmap *pixmap = new QPixmap(bitfont->text(str, fg, bg));
pixmaps->append(pixmap);
return pixmaps;
}
/* Return the point of the upperleft pixel of the block representing that position
* on the board.
*/
QPoint Painter::point(int pos)
{
return QPoint((board->x(pos)-1)*BlockWidth, (board->y(pos)-1)*BlockHeight);
}
QRect Painter::rect(int pos, PixMap pix, uint i)
{
if (pos == OUT)
return QRect();
QPixmap *PIXMAP = NULL;
switch (pix) {
case PacmanPix : PIXMAP = pacmanPix->
at(checkRange(i, pacmanPix->count()-1));
break;
case DyingPix : PIXMAP = dyingPix->
at(checkRange(i, dyingPix->count()-1));
break;
case MonsterPix : PIXMAP = monsterPix->
at(checkRange(i, monsterPix->count()-1));
break;
case EyesPix : PIXMAP = eyesPix->
at(checkRange(i, eyesPix->count()-1));
break;
case FruitPix : PIXMAP = fruitPix->
at(checkRange(i, fruitPix->count()-1));
break;
case PointPix : PIXMAP = pointPix->
at(checkRange(i, pointPix->count()-1));
break;
case EnergizerPix : PIXMAP = energizerPix->
at(checkRange(i, energizerPix->count()-1));
break;
case FruitScorePix : PIXMAP = fruitScorePix->
at(checkRange(i, fruitScorePix->count()-1));
break;
case MonsterScorePix : PIXMAP = monsterScorePix->
at(checkRange(i,monsterScorePix->count()-1));
break;
default : PIXMAP = wallPix->
at(checkRange(i, wallPix->count()-1));
}
if (PIXMAP == NULL)
return QRect();
QRect rect = PIXMAP->rect();
QPoint point = this->point(pos);
rect.moveCenter(QPoint(point.x()-1, point.y()-1));
return rect;
}
QRect Painter::rect(int pos, QString str, int align)
{
if (pos == OUT) // return an empty rect if the position
return QRect(); // is invalid
QPoint point = this->point(pos);
QRect rect = bitfont->rect(str);
rect.moveCenter(QPoint(point.x()-1, point.y()-1));
int dx = 0;
int dy = 0;
if (align & QLabel::AlignLeft || align & QLabel::AlignRight) {
dx = (str.length()-1) * (bitfont->width()/2);
if (align & QLabel::AlignRight)
dx *= -1;
}
if (align & QLabel::AlignTop || align & QLabel::AlignBottom) {
diff --git a/noncore/games/kpacman/referee.cpp b/noncore/games/kpacman/referee.cpp
index 1b810d8..2d0f3be 100644
--- a/noncore/games/kpacman/referee.cpp
+++ b/noncore/games/kpacman/referee.cpp
@@ -1,222 +1,213 @@
#include "portable.h"
#if defined( KDE2_PORT )
#include <kapp.h>
#include <kconfig.h>
#include <kstddirs.h>
#include <kaccel.h>
#include <referee.h>
#include <referee.moc>
#elif defined( QPE_PORT )
#include <qaccel.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include "referee.h"
#endif
-#include <qdatetm.h>
#include <stdlib.h>
#include <qtimer.h>
-#include <qevent.h>
-#include <qcolor.h>
-#include <qkeycode.h>
#include <qfileinfo.h>
-#include "board.h"
-#include "pacman.h"
-#include "monster.h"
-#include "fruit.h"
-#include "painter.h"
Referee::Referee( QWidget *parent, const char *name, int Scheme, int Mode, Bitfont *font)
: QWidget( parent, name )
{
gameState.resize(12);
gameTimer = 0;
energizerTimer = 0;
focusedPause = FALSE;
setFocusPolicy(QWidget::StrongFocus);
initKeys();
scheme = Scheme;
mode = Mode;
confScheme();
board = new Board(BoardWidth*BoardHeight);
pix = new Painter(board, this, scheme, mode, font);
setFixedSize(pix->levelPix().size());
pacman = new Pacman(board);
fruit = new Fruit(board);
monsters = new QList<Monster>;
monsters->setAutoDelete(TRUE);
monsterRect = new QList<QRect>;
monsterRect->setAutoDelete(TRUE);
energizers = new QList<Energizer>;
energizers->setAutoDelete(TRUE);
energizerRect = new QList<QRect>;
energizerRect->setAutoDelete(TRUE);
pacmanRect.setRect(0, 0, 0, 0);
fruitRect.setRect(0, 0, 0, 0);
QTime midnight( 0, 0, 0 );
srand( midnight.secsTo(QTime::currentTime()) );
lifes = 0;
points = 0;
emit setLifes(lifes);
emit setPoints(points);
intro();
}
void Referee::paintEvent( QPaintEvent *e)
{
if (gameState.testBit(HallOfFame))
return;
QRect rect = e->rect();
if (!rect.isEmpty()) {
QPixmap p = pix->levelPix();
bitBlt(this, rect.x(), rect.y(),
&p, rect.x(), rect.y(), rect.width(), rect.height());
}
if ((gameState.testBit(GameOver) || gameState.testBit(Demonstration)) &&
rect.intersects(pix->rect(board->position(fruithome), tr("GAME OVER"))))
pix->draw(board->position(fruithome), Widget, tr("GAME OVER"), RED);
for (Energizer *e = energizers->first(); e != 0; e = energizers->next()) {
if (e && e->state() == on &&
rect.intersects(pix->rect(e->position(), EnergizerPix)) &&
!(e->position() == pacman->position() && gameState.testBit(Scoring))) {
if (e->pix() != -1)
pix->draw(e->position(), Widget, EnergizerPix, e->pix());
}
}
if (!gameState.testBit(Init)) {
if (!gameState.testBit(Dying) && (fruit->pix() != -1))
if (fruit->state() != active) {
if (rect.intersects(pix->rect(fruit->position(), FruitScorePix, fruit->pix())))
pix->draw(fruit->position(), Widget, FruitScorePix, fruit->pix());
} else {
if (rect.intersects(pix->rect(fruit->position(), FruitPix, fruit->pix())))
pix->draw(fruit->position(), Widget, FruitPix, fruit->pix());
}
for (Monster *m = monsters->first(); m != 0; m = monsters->next())
if (m && m->state() == harmless &&
rect.intersects(pix->rect(m->position(), MonsterPix)) &&
!(m->position() == pacman->position() && gameState.testBit(Scoring))) {
if (m->body() != -1)
pix->draw(m->position(), Widget, MonsterPix, m->body());
if (m->eyes() != -1)
pix->draw(m->position(), Widget, EyesPix, m->eyes());
}
if (!gameState.testBit(Scoring) && !gameState.testBit(LevelDone) &&
rect.intersects(pix->rect(pacman->position(), PacmanPix)) && pacman->pix() != -1)
pix->draw(pacman->position(), Widget, PacmanPix, pacman->pix());
for (Monster *m = monsters->first(); m != 0; m = monsters->next())
if (m && m->state() != harmless &&
rect.intersects(pix->rect(m->position(), MonsterPix)) &&
!(m->position() == pacman->position() && gameState.testBit(Scoring))) {
if (m->body() != -1)
pix->draw(m->position(), Widget, MonsterPix, m->body());
if (m->eyes() != -1)
pix->draw(m->position(), Widget, EyesPix, m->eyes());
}
}
if (gameState.testBit(Scoring) &&
rect.intersects(pix->rect(pacman->position(), MonsterScorePix, monstersEaten-1)))
pix->draw(pacman->position(), Widget, MonsterScorePix, monstersEaten-1);
if (gameState.testBit(Init) && gameState.testBit(Dying) &&
timerCount < pix->maxPixmaps(DyingPix) &&
rect.intersects(pix->rect(pacman->position(), PacmanPix)))
pix->draw(pacman->position(), Widget, DyingPix, timerCount);
if (gameState.testBit(LevelDone) &&
rect.intersects(pix->rect(pacman->position(), PacmanPix)))
pix->draw(pacman->position(), Widget, PacmanPix, pacman->pix());
if (gameState.testBit(Player) &&
rect.intersects(pix->rect(board->position(monsterhome, 0), tr("PLAYER ONE"))))
pix->draw(board->position(monsterhome, 0), Widget, tr("PLAYER ONE"), CYAN);
if (gameState.testBit(Ready) &&
rect.intersects(pix->rect(board->position(fruithome), tr("READY!"))))
pix->draw(board->position(fruithome), Widget, tr("READY!"), YELLOW);
if (gameState.testBit(Paused) &&
rect.intersects(pix->rect((BoardWidth*BoardHeight)/2-BoardWidth, tr("PAUSED"))))
pix->draw((BoardWidth*BoardHeight)/2-BoardWidth, Widget, tr("PAUSED"), RED, BLACK);
}
void Referee::timerEvent( QTimerEvent *e )
{
if (gameState.testBit(HallOfFame))
return;
QRect lastRect;
int lastPix;
bool moved = FALSE;
int eated = 0;
if (e->timerId() == energizerTimer) {
for (int e = 0; e < board->energizers(); e++) {
lastRect = pix->rect(energizers->at(e)->position(), EnergizerPix);
lastPix = energizers->at(e)->pix();
if (energizers->at(e)->move()) {
moved = TRUE;
*energizerRect->at(e) = pix->rect(energizers->at(e)->position(), EnergizerPix);
if (lastPix == energizers->at(e)->pix() &&
lastRect == pix->rect(energizers->at(e)->position(), EnergizerPix))
energizerRect->at(e)->setRect(0, 0, 0, 0);
else
*energizerRect->at(e) = pix->rect(*energizerRect->at(e), lastRect);
}
}
for (int e = 0; e < board->energizers(); e++)
if (!energizerRect->at(e)->isNull())
repaint(*energizerRect->at(e), FALSE);
return;
}
timerCount++;
lastRect = pix->rect(pacman->position(), PacmanPix);
lastPix = pacman->pix();
if (moved = pacman->move()) { // pacman really moved
pacmanRect = pix->rect(pacman->position(), PacmanPix);
if (lastPix == pacman->pix() &&
lastRect == pix->rect(pacman->position(), PacmanPix))
pacmanRect.setRect(0, 0, 0, 0); // nothing to do, because the pixmap
else // and the position isn't changed.
pacmanRect = pix->rect(pacmanRect, lastRect);
} else
pacmanRect.setRect(0, 0, 0, 0);
int pos = pacman->position();
if (moved && board->isMonster(pos) && !gameState.testBit(Dying)) {
for (Monster *m = monsters->first(); m != 0; m = monsters->next())
diff --git a/noncore/games/kpacman/score.cpp b/noncore/games/kpacman/score.cpp
index e91771b..6878b81 100644
--- a/noncore/games/kpacman/score.cpp
+++ b/noncore/games/kpacman/score.cpp
@@ -1,221 +1,215 @@
#include "portable.h"
#if defined( KDE2_PORT )
#include <score.h>
#include <score.moc>
#include <kaccel.h>
#include <kapp.h>
#include <kconfig.h>
#include <kstddirs.h>
#include <kmessagebox.h>
#elif defined( QPE_PORT )
#include <qaccel.h>
#include <qpe/config.h>
#include "score.h"
#endif
#include <stdlib.h>
#include <ctype.h>
-#include <qpixmap.h>
-#include <qstring.h>
-#include <qdstream.h>
-#include <qkeycode.h>
#include <qtimer.h>
-#include <qfileinfo.h>
-#include "bitfont.h"
Score::Score(QWidget *parent, const char *name, int Scheme, int Mode, Bitfont *font) : QWidget(parent, name)
{
setFocusPolicy(QWidget::StrongFocus);
paused = FALSE;
lastScore = -1;
lastPlayer = -1;
cursorBlinkTimer = 0;
cursorBlinkMS = -1;
cursor.x = -1;
cursor.y = -1;
cursor.on = FALSE;
cursor.chr = QChar('?');
initKeys();
scheme = Scheme;
mode = Mode;
confScheme();
bitfont = font;
highscoreFile.setName(locateHighscoreFilePath().filePath());
read();
for (int p = 0; p < maxPlayer; p++) {
playerScore[p] = 0;
playerName[p] = getenv("LOGNAME");
if (playerName[p].length() < minPlayerNameLength)
playerName[p].setExpand(minPlayerNameLength-1, ' ');
for (uint i = 0; i < playerName[p].length(); i++)
if (playerName[p].at(i) < bitfont->firstChar() ||
playerName[p].at(i) > bitfont->lastChar())
playerName[p].at(i) = playerName[p].at(i).upper();
}
}
Score::~Score()
{
// write();
}
void Score::paintEvent( QPaintEvent *e)
{
if (rect(1, 0, tr(" 1UP ")).intersects(e->rect())) {
QPixmap pix;
QColor fg = BLACK;
if (cursor.on || paused || lastPlayer != 0)
fg = WHITE;
pix = bitfont->text(tr(" 1UP "), fg, BLACK);
bitBlt(this, x(1), y(0), &pix);
}
if (rect(8, 0, tr(" HIGH SCORE ")).intersects(e->rect())) {
QPixmap pix = bitfont->text(tr(" HIGH SCORE "), WHITE, BLACK);
bitBlt(this, x(8), y(0), &pix);
}
if (maxPlayer > 1 && rect(21, 0, tr(" 2UP ")).intersects(e->rect())) {
QPixmap pix;
QColor fg = BLACK;
if (cursor.on || paused || lastPlayer != 1)
fg = WHITE;
pix = bitfont->text(tr(" 2UP "), fg, BLACK);
bitBlt(this, x(21), y(0), &pix);
}
QString s;
s.sprintf("%6d0", playerScore[0]/10);
if (rect(0, 1, s).intersects(e->rect())) {
QPixmap pix = bitfont->text(s, WHITE, BLACK);
bitBlt(this, x(0), y(1), &pix);
}
s.sprintf("%8d0", HighScore/10);
if (rect(8, 1, s).intersects(e->rect())) {
QPixmap pix = bitfont->text(s, WHITE, BLACK);
bitBlt(this, x(8), y(1), &pix);
}
if (lastScore >= 0) {
if (rect(1, 4*1.25, tr(" CONGRATULATIONS ")).intersects(e->rect())) {
QPixmap pix = bitfont->text(tr(" CONGRATULATIONS "), YELLOW, BLACK);
bitBlt(this, x(1), y(4*1.25), &pix);
}
if (rect(1, 6*1.25, tr(" YOU HAVE ARCHIEVED ")).intersects(e->rect())) {
QPixmap pix = bitfont->text(tr(" YOU HAVE ARCHIEVED "), CYAN, BLACK);
bitBlt(this, x(1), y(6*1.25), &pix);
}
if (rect(1, 7*1.25, tr(" A SCORE IN THE TOP 10. ")).intersects(e->rect())) {
QPixmap pix = bitfont->text(tr(" A SCORE IN THE TOP 10. "), CYAN, BLACK);
bitBlt(this, x(1), y(7*1.25), &pix);
}
if (rect(1, 8*1.25, tr(" ")).intersects(e->rect())) {
QPixmap pix = bitfont->text(tr(" "), CYAN, BLACK);
bitBlt(this, x(1), y(8*1.25), &pix);
}
}
if (rect(1, 9.5*1.25, tr("RNK SCORE NAME DATE")).intersects(e->rect())) {
QPixmap pix = bitfont->text(tr("RNK SCORE NAME DATE"), WHITE, BLACK);
bitBlt(this, x(1), y(9.5*1.25), &pix);
}
for (int i = 0; i < 10; i++) {
s.sprintf("%2d%9d %-3.3s %-8.8s",
i+1, hallOfFame[i].points, hallOfFame[i].name.utf8().data(),
formatDate(hallOfFame[i].moment.date()).data());
if (rect(1, (11+i)*1.25, s).intersects(e->rect())) {
QPixmap pix = bitfont->text(s, (i == lastScore) ? YELLOW : WHITE, BLACK);
bitBlt(this, x(1), y((11+i)*1.25), &pix);
}
}
if (cursor.x != -1 && cursor.y != -1 && cursor.on) {
if (rect(cursor.x, (cursor.y*1.25), cursor.chr).intersects(e->rect())) {
QPixmap pix = bitfont->text(cursor.chr, BLACK, YELLOW);
bitBlt(this, x(cursor.x), y(cursor.y*1.25), &pix);
}
}
if (paused) {
QPixmap pix = bitfont->text(tr("PAUSED"), RED, BLACK);
QRect r = bitfont->rect(tr("PAUSED"));
r.moveCenter(QPoint(this->width()/2, this->height()/2));
bitBlt(this, r.x(), r.y(), &pix);
}
}
void Score::timerEvent(QTimerEvent*)
{
cursor.on = !cursor.on;
if (paused)
return;
if (cursor.x != -1 && cursor.y != -1)
repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE);
scrollRepeat = FALSE;
if (lastPlayer == 0)
repaint(rect(1, 0, tr(" 1UP ")), FALSE);
if (lastPlayer == 1)
repaint(rect(21, 0, tr(" 2UP ")), FALSE);
}
void Score::keyPressEvent(QKeyEvent *k)
{
if (lastScore < 0 || lastPlayer < 0 || lastPlayer >= maxPlayer || paused) {
k->ignore();
return;
}
int x = cursor.x;
int y = cursor.y;
uint key = k->key();
if (scrollRepeat && (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down)) {
k->ignore();
return;
}
if (key != Key_Return) {
if (key == RightKey || key == Key_Right)
if (++cursor.x > 16)
cursor.x = 14;
if (key == LeftKey || key == Key_Left)
if (--cursor.x < 14)
cursor.x = 16;
if (key == UpKey || key == Key_Up)
if (cursor.chr.unicode() < bitfont->lastChar())
cursor.chr = cursor.chr.unicode()+1;
else
cursor.chr = bitfont->firstChar();
if (key == DownKey || key == Key_Down)
if (cursor.chr.unicode() > bitfont->firstChar())
cursor.chr = cursor.chr.unicode()-1;
else
cursor.chr = bitfont->lastChar();
if (cursor.x == x && cursor.y == y &&
cursor.chr == hallOfFame[lastScore].name.at(cursor.x-14)) {
uint ascii = k->ascii();
diff --git a/noncore/games/kpacman/status.cpp b/noncore/games/kpacman/status.cpp
index 2a17c21..02ff63d 100644
--- a/noncore/games/kpacman/status.cpp
+++ b/noncore/games/kpacman/status.cpp
@@ -1,210 +1,208 @@
#include "portable.h"
#if defined( KDE2_PORT )
#include <kapp.h>
#include <klocale.h>
#include <kstddirs.h>
#include <status.h>
#include <status.moc>
#elif defined( QPE_PORT )
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include "status.h"
#endif
-#include <qpixmap.h>
#include <qbitmap.h>
-#include <qstring.h>
#include <qmsgbox.h>
#include <qfileinfo.h>
Status::Status( QWidget *parent, const char *name, int Scheme, int Mode ) :
QWidget( parent, name )
{
qWarning("Status::Status");
actualLifes = 0;
actualLevel = 0;
lifesPix = NULL;
levelPix = NULL;
scheme = Scheme;
mode = Mode;
level = 0;
confScheme();
}
QList<QPixmap> *Status::loadPixmap(QWidget *parent, QString pixmapName,
QList<QPixmap> *pixmaps)
{
if (pixmaps == NULL) {
pixmaps = new QList<QPixmap>;
pixmaps->setAutoDelete(TRUE);
}
if (!pixmaps->isEmpty())
pixmaps->clear();
QPixmap PIXMAP(pixmapName);
if (PIXMAP.isNull() || PIXMAP.mask() == NULL) {
QString msg = tr("The pixmap could not be contructed.\n\n"
"The file '@PIXMAPNAME@' does not exist,\n"
"or is of an unknown format.");
msg.replace(QRegExp("@PIXMAPNAME@"), pixmapName);
QMessageBox::information(parent, tr("Initialization Error"),
(const char *) msg);
return 0;
}
int height = PIXMAP.height();
int width = (height == 0) ? 0 : PIXMAP.width()/(PIXMAP.width()/height);
QBitmap BITMAP;
QBitmap MASK;
BITMAP = *PIXMAP.mask();
MASK.resize(width, height);
for (int x = 0; x < PIXMAP.width()/width; x++) {
QPixmap *pixmap = new QPixmap(width, height);
pixmaps->append(pixmap);
bitBlt(pixmap, 0, 0, &PIXMAP, x*width, 0, width, height, CopyROP, TRUE);
bitBlt(&MASK, 0, 0, &BITMAP, x*width, 0, width, height, CopyROP, TRUE);
pixmap->setMask(MASK);
}
return pixmaps;
}
void Status::paintEvent( QPaintEvent *)
{
for (int x = 0; x < actualLifes && !lifesPix->isEmpty(); x++)
bitBlt(this, lifesPix->at(0)->width()+(lifesPix->at(0)->width()*x),
(height()-lifesPix->at(0)->height())/2,
lifesPix->at(0), 0, 0,
lifesPix->at(0)->width(), lifesPix->at(0)->height());
for (int x = 0; x < actualLevel && !levelPix->isEmpty(); x++) {
erase((width()-levelPix->at(x)->width()*2)-(levelPix->at(x)->width()*levelPos[x]),
(height()-levelPix->at(x)->height())/2,
levelPix->at(x)->width(), levelPix->at(x)->height());
bitBlt(this, (width()-levelPix->at(x)->width()*2)-(levelPix->at(x)->width()*levelPos[x]),
(height()-levelPix->at(x)->height())/2,
levelPix->at(x), 0, 0,
levelPix->at(x)->width(), levelPix->at(x)->height());
}
}
void Status::initPixmaps()
{
if (lastLifesPixmapName != lifesPixmapName.at(level)) {
lifesPix = loadPixmap(this, lifesPixmapName.at(level), lifesPix);
lastLifesPixmapName = lifesPixmapName.at(level);
}
if (lastLevelPixmapName != levelPixmapName.at(level)) {
levelPix = loadPixmap(this, levelPixmapName.at(level), levelPix);
lastLevelPixmapName = levelPixmapName.at(level);
}
}
QString Status::decodeHexOctString(QString s)
{
QString value;
QString valids;
int pos, xpos = 0, opos = 0;
int v, len, leadin;
const char *ptr;
uchar c;
while (((xpos = s.find(QRegExp("\\\\x[0-9a-fA-F]+"), xpos)) != -1) ||
((opos = s.find(QRegExp("\\\\[0-7]+"), opos)) != -1)) {
if (xpos != -1) {
valids = "0123456789abcdef";
leadin = 2;
pos = xpos;
} else {
valids = "01234567";
leadin = 1;
pos = opos;
}
c = '\0';
len = 0;
value = s.mid(pos+leadin, 3);
ptr = (const char *) value;
while (*ptr != '\0' && (v = valids.find(*ptr++, 0, FALSE)) != -1) {
c = (c * valids.length()) + v;
len++;
}
value.fill(c, 1);
s.replace(pos, len+leadin, value);
}
return s;
}
void Status::fillArray(QArray<int> &array, QString values, int max)
{
array.resize(max);
int last = 0;
bool ok;
QString value;
for (uint i = 0; i < array.size(); i++) {
if (values.find(',') < 0 && values.length() > 0) {
value = values;
values = "";
}
if (values.find(',') >= 0) {
value = values.left(values.find(','));
values.remove(0,values.find(',')+1);
}
array[i] = value.toInt(&ok);
if (ok)
last = array[i];
else
array[i] = last;
}
}
void Status::fillStrList(QStrList &list, QString values, int max)
{
if (!list.isEmpty())
list.clear();
QString last = "";
QString value;
for (uint i = 0; i < (uint) max; i++) {
if (values.find(',') < 0 && values.length() > 0) {
value = values;
values = "";
}
if (values.find(',') >= 0) {
value = values.left(values.find(','));
values.remove(0,values.find(',')+1);
}
if (!value.isEmpty())
last = decodeHexOctString(value);
list.append(last);
}
}
void Status::fillPixmapName(QStrList &pixmapName)
{
QStrList list = pixmapName;
if (!pixmapName.isEmpty())
pixmapName.clear();
QString pixmap;
QFileInfo fileInfo;
for (uint i = 0; i < list.count(); i++) {
pixmap = list.at(i);
diff --git a/noncore/games/mindbreaker/mindbreaker.cpp b/noncore/games/mindbreaker/mindbreaker.cpp
index e1f43d0..2b924c6 100644
--- a/noncore/games/mindbreaker/mindbreaker.cpp
+++ b/noncore/games/mindbreaker/mindbreaker.cpp
@@ -1,225 +1,221 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "mindbreaker.h"
#include <qtopia/resource.h>
#include <qtopia/config.h>
#include <qtopia/qpeapplication.h>
#include <qtoolbar.h>
-#include <qpainter.h>
-#include <qpixmap.h>
#include <qtoolbutton.h>
-#include <qpushbutton.h>
#include <qmessagebox.h>
-#include <qlabel.h>
#include <qlayout.h>
#include <qtimer.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
static int pegRTTI = 3393393;
static int adjusted_panel_height;
static int adjusted_panel_width;
static int adjusted_bin_margin;
static int adjusted_peg_size;
static int adjusted_answerpeg_size;
static int adjusted_title_height;
static int adjusted_title_width;
static int adjusted_first_peg_x_diff;
static int adjusted_first_peg_y_diff;
static int adjusted_peg_spacing;
static int adjusted_answerpegx;
static int adjusted_answerpegy;
static int adjusted_answerpeg_xdiff;
static int adjusted_answerpeg_ydiff;
static int adjusted_board_height;
static int adjusted_board_width;
static void setupBoardSize(int w, int h)
{
adjusted_panel_width = w * 3/4;
adjusted_title_width = w * 3/4;
adjusted_title_height = h/10;
adjusted_panel_height = (h-adjusted_title_height)/9;
adjusted_bin_margin = w * 10/240;
adjusted_peg_size = adjusted_panel_height*3/4;
adjusted_answerpeg_size = QMIN(adjusted_panel_width*15/180,adjusted_panel_height*15/25);
// looks a bit dodgy on larger sizes
if ( adjusted_peg_size > 40 )
adjusted_peg_size = 40;
adjusted_first_peg_x_diff = w * 31/240-adjusted_peg_size/2;
adjusted_first_peg_y_diff = (adjusted_panel_height - adjusted_peg_size)/2;
adjusted_peg_spacing = w * 30/240;
// looks a bit dodgy on larger sizes (still does though, but not as much...)
if ( adjusted_answerpeg_size > 22 )
adjusted_answerpeg_size = 22;
adjusted_answerpegx = adjusted_panel_width * 159/180 - adjusted_answerpeg_size/2;
adjusted_answerpegy = adjusted_panel_height/3 - adjusted_answerpeg_size/2;
adjusted_answerpeg_xdiff = adjusted_panel_width * 10/180;
adjusted_answerpeg_ydiff = adjusted_panel_height * 9/25;
adjusted_board_height = adjusted_title_height + (adjusted_panel_height * 9);
adjusted_board_width = adjusted_panel_width + (adjusted_bin_margin * 2) + adjusted_peg_size;
// qDebug("Adjusted width %d height %d", adjusted_board_width, adjusted_board_height);
}
/* helper class, */
class Peg : public QCanvasRectangle
{
public:
Peg(QCanvas *canvas, int type, int go = -1, int pos = -1);
int rtti() const {return pegRTTI; }
void advance(int phase);
bool hit( const QPoint &) const;
/* a placed peg is one that has been set down on the board correctly and
should not be moved, only copied */
bool placed() const;
void setPlaced(bool);
int pegGo() const;
int pegPos() const;
void setPegPos(int);
int type() const;
static void buildImages();
static QImage imageForType(int t);
static int eggLevel;
protected:
void drawShape(QPainter &);
private:
static QVector<QImage> normalPegs;
static QVector<QImage> specialPegs;
bool isplaced;
int pegtype;
int peg_go;
int peg_pos;
int aniStep;
};
int Peg::eggLevel = 0;
QVector<QImage> Peg::normalPegs;
QVector<QImage> Peg::specialPegs;
void Peg::buildImages()
{
QImage pegs = Resource::loadImage("mindbreaker/pegs");
int x = 0;
int y = 0;
int i;
eggLevel = 0;
normalPegs.resize(10);
for (i = 0; i < 6; i++) {
normalPegs.insert(i, new QImage(pegs.copy(x, y, peg_size, peg_size).
smoothScale(adjusted_peg_size, adjusted_peg_size) ));
x += peg_size;
}
specialPegs.resize(5);
for (i = 0; i < 5; i++) {
specialPegs.insert(i, new QImage(pegs.copy(x,y,peg_size, peg_size).
smoothScale(adjusted_peg_size, adjusted_peg_size) ));
x += peg_size;
}
QImage image = Resource::loadImage("mindbreaker/mindbreaker");
/* copy from master image to functional images */
x = 0;
y = panel_height;
normalPegs.insert(8,
new QImage( image.copy(x, y, panel_width, panel_height).
smoothScale( adjusted_panel_width, adjusted_panel_height)
));
y += panel_height;
y += title_height;
normalPegs.insert(9,
new QImage(image.copy(x, y, title_width, title_height).
smoothScale( adjusted_title_width, adjusted_title_height)
));
y += title_height;
x = 6 * peg_size;
normalPegs.insert(6,
new QImage(image.copy(x, y, answerpeg_size, answerpeg_size).
smoothScale( adjusted_answerpeg_size, adjusted_answerpeg_size) ));
x += answerpeg_size;
normalPegs.insert(7,
new QImage(image.copy(x, y, answerpeg_size, answerpeg_size).
smoothScale( adjusted_answerpeg_size, adjusted_answerpeg_size) ));
}
QImage Peg::imageForType(int t)
{
if (eggLevel > t ) {
if( t < 5) {
return *specialPegs[t];
} else {
return *normalPegs[rand() % 6];
}
}
return *normalPegs[t];
}
Peg::Peg(QCanvas *canvas , int t, int g, int p)
: QCanvasRectangle(canvas)
{
setSize(normalPegs[t]->width(), normalPegs[t]->height() );
pegtype = t;
isplaced = FALSE;
peg_pos = p;
peg_go = g;
aniStep = rand() % 6;
setAnimated(TRUE);
}
void Peg::advance(int phase) {
if (phase == 0)
aniStep = (++aniStep) % 6;
else {
hide();
show();
}
}
void Peg::drawShape(QPainter &p )
{
if ((pegtype == 5) && eggLevel > 5) {
diff --git a/noncore/games/minesweep/main.cpp b/noncore/games/minesweep/main.cpp
index bd70f7c..e187be5 100644
--- a/noncore/games/minesweep/main.cpp
+++ b/noncore/games/minesweep/main.cpp
@@ -1,27 +1,26 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "minesweep.h"
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<MineSweep> )
diff --git a/noncore/games/minesweep/minefield.cpp b/noncore/games/minesweep/minefield.cpp
index 1790110..72c05b0 100644
--- a/noncore/games/minesweep/minefield.cpp
+++ b/noncore/games/minesweep/minefield.cpp
@@ -1,220 +1,216 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "minefield.h"
#include <qtopia/config.h>
#include <qtopia/qpeapplication.h>
-#include <qpainter.h>
-#include <qdrawutil.h>
-#include <qpixmap.h>
-#include <qimage.h>
#include <qtimer.h>
#include <stdlib.h>
static const char *pix_flag[]={
"13 13 3 1",
"# c #000000",
"x c #ff0000",
". c None",
".............",
".............",
".....#xxxxxx.",
".....#xxxxxx.",
".....#xxxxxx.",
".....#xxxxxx.",
".....#.......",
".....#.......",
".....#.......",
".....#.......",
"...#####.....",
"..#######....",
"............."};
static const char *pix_mine[]={
"13 13 3 1",
"# c #000000",
". c None",
"a c #ffffff",
"......#......",
"......#......",
"..#.#####.#..",
"...#######...",
"..##aa#####..",
"..##aa#####..",
"#############",
"..#########..",
"..#########..",
"...#######...",
"..#.#####.#..",
"......#......",
"......#......"};
static const int maxGrid = 28;
static const int minGrid = 12;
class Mine : public Qt
{
public:
enum MineState {
Hidden = 0,
Empty,
Mined,
Flagged,
#ifdef MARK_UNSURE
Unsure,
#endif
Exploded,
Wrong
};
Mine( MineField* );
void paint( QPainter * p, const QColorGroup & cg, const QRect & cr );
QSize sizeHint() const { return QSize( maxGrid, maxGrid ); }
void activate( bool sure = TRUE );
void setHint( int );
void setState( MineState );
MineState state() const { return st; }
bool isMined() const { return mined; }
void setMined( bool m ) { mined = m; }
static void paletteChange();
private:
bool mined;
int hint;
MineState st;
MineField *field;
static QPixmap* knownField;
static QPixmap* unknownField;
static QPixmap* flag_pix;
static QPixmap* mine_pix;
};
QPixmap* Mine::knownField = 0;
QPixmap* Mine::unknownField = 0;
QPixmap* Mine::flag_pix = 0;
QPixmap* Mine::mine_pix = 0;
Mine::Mine( MineField *f )
{
mined = FALSE;
st = Hidden;
hint = 0;
field = f;
}
void Mine::activate( bool sure )
{
if ( !sure ) {
switch ( st ) {
case Hidden:
setState( Flagged );
break;
case Flagged:
#ifdef MARK_UNSURE
setState( Unsure );
break;
case Unsure:
#endif
setState( Hidden );
default:
break;
}
} else if ( st == Flagged ) {
return;
} else {
if ( mined ) {
setState( Exploded );
} else {
setState( Empty );
}
}
}
void Mine::setState( MineState s )
{
st = s;
}
void Mine::setHint( int h )
{
hint = h;
}
void Mine::paletteChange()
{
delete knownField;
knownField = 0;
delete unknownField;
unknownField = 0;
delete mine_pix;
mine_pix = 0;
delete flag_pix;
flag_pix = 0;
}
void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr )
{
int x = cr.x();
int y = cr.y();
if ( !knownField || knownField->width() != cr.width() ||
knownField->height() != cr.height() ) {
delete knownField;
knownField = new QPixmap( cr.width(), cr.height() );
QPainter pp( knownField );
QBrush br( cg.button().dark(115) );
qDrawWinButton( &pp, QRect( 0, 0, cr.width(), cr.height() ), cg, TRUE, &br );
}
const int pmmarg=cr.width()/5;
if ( !unknownField || unknownField->width() != cr.width() ||
unknownField->height() != cr.height() ) {
delete unknownField;
unknownField = new QPixmap( cr.width(), cr.height() );
QPainter pp( unknownField );
QBrush br( cg.button() );
qDrawWinButton( &pp, QRect( 0, 0, cr.width(), cr.height() ), cg, FALSE, &br );
}
if ( !flag_pix || flag_pix->width() != cr.width()-pmmarg*2 ||
flag_pix->height() != cr.height()-pmmarg*2 ) {
delete flag_pix;
flag_pix = new QPixmap( cr.width()-pmmarg*2, cr.height()-pmmarg*2 );
flag_pix->convertFromImage( QImage(pix_flag).smoothScale(cr.width()-pmmarg*2, cr.height()-pmmarg*2) );
}
if ( !mine_pix || mine_pix->width() != cr.width()-pmmarg*2 ||
mine_pix->height() != cr.height()-pmmarg*2 ) {
delete mine_pix;
mine_pix = new QPixmap( cr.width()-pmmarg*2, cr.height()-pmmarg*2 );
mine_pix->convertFromImage( QImage(pix_mine).smoothScale(cr.width()-pmmarg*2, cr.height()-pmmarg*2) );
}
diff --git a/noncore/games/minesweep/minesweep.cpp b/noncore/games/minesweep/minesweep.cpp
index d707dab..4a6a92c 100644
--- a/noncore/games/minesweep/minesweep.cpp
+++ b/noncore/games/minesweep/minesweep.cpp
@@ -1,229 +1,224 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "minesweep.h"
#include "minefield.h"
#include <qtopia/qpeapplication.h>
#include <qtopia/resource.h>
#include <qtopia/config.h>
#include <qtoolbar.h>
#include <qmenubar.h>
-#include <qpopupmenu.h>
#include <qpushbutton.h>
#include <qlcdnumber.h>
-#include <qmessagebox.h>
#include <qtimer.h>
-#include <qpalette.h>
-#include <qapplication.h>
-#include <qlayout.h>
#include <qlabel.h>
#include <stdlib.h>
#include <time.h>
static const char *pix_new[]={
"20 20 3 1",
" c None",
"# c #00FF00",
". c #000000",
" ",
" ...... ",
" ..######.. ",
" .##########. ",
" .############. ",
" .##############. ",
" .##############. ",
" .################. ",
" .################. ",
" .################. ",
" .################. ",
" .################. ",
" .################. ",
" .##############. ",
" .##############. ",
" .############. ",
" .##########. ",
" ..######.. ",
" ...... ",
" "};
/* XPM */
static const char * happy_xpm[] = {
"20 20 3 1",
" c None",
". c #ffff3f ",
"# c #000000",
" ",
" ###### ",
" ##......## ",
" #..........# ",
" #............# ",
" #..............# ",
" #..............# ",
" #....##....##....# ",
" #....##....##....# ",
" #................# ",
" #................# ",
" #................# ",
" #...#........#...# ",
" #.##........##.# ",
" #...########...# ",
" #...######...# ",
" #..........# ",
" ##......## ",
" ###### ",
" "};
/* XPM */
static const char * worried_xpm[] = {
"20 20 3 1",
" c None",
". c #ffff3f",
"# c #000000",
" ",
" ###### ",
" ##......## ",
" #..........# ",
" #............# ",
" #..............# ",
" #..............# ",
" #....##....##....# ",
" #....##....##....# ",
" #................# ",
" #................# ",
" #................# ",
" #................# ",
" #....######....# ",
" #..............# ",
" #............# ",
" #..........# ",
" ##......## ",
" ###### ",
" "};
/* XPM */
static const char * dead_xpm[] = {
"20 20 3 1",
" c None",
". c #ffff3f",
"# c #000000",
" ",
" ###### ",
" ##......## ",
" #..........# ",
" #............# ",
" #..............# ",
" #..#.#...#.#...# ",
" #....#.....#.....# ",
" #...#.#...#.#....# ",
" #................# ",
" #................# ",
" #................# ",
" #......####......# ",
" #....# #....# ",
" #...#......#...# ",
" #............# ",
" #..........# ",
" ##......## ",
" ###### ",
" "};
class ResultIndicator : private QLabel
{
public:
static void showResult( QWidget *ref, bool won );
private:
ResultIndicator( QWidget *parent, const char *name, WFlags f)
:QLabel( parent, name, f ) {}
void timerEvent( QTimerEvent *);
void center();
bool twoStage;
int timerId;
};
void ResultIndicator::showResult( QWidget *ref, bool won )
{
ResultIndicator *r = new ResultIndicator( ref, 0, WStyle_Customize | WStyle_Tool | WType_TopLevel );
r->setAlignment( AlignCenter );
r->setFrameStyle( Sunken|StyledPanel );
if ( won ) {
r->setText( MineSweep::tr("You won!") );
r->center();
r->show();
r->twoStage = FALSE;
r->timerId = r->startTimer(1500);
} else {
QPalette p( red );
r->setPalette( p );
r->setText( MineSweep::tr("You exploded!") );
r->resize( ref->size() );
r->move( ref->mapToGlobal(QPoint(0,0)) );
r->show();
r->twoStage = TRUE;
r->timerId =r->startTimer(200);
}
}
void ResultIndicator::center()
{
QWidget *w = parentWidget();
QPoint pp = w->mapToGlobal( QPoint(0,0) );
QSize s = sizeHint()*3;
s.setWidth( QMIN(s.width(), w->width()) );
pp = QPoint( pp.x() + w->width()/2 - s.width()/2,
pp.y() + w->height()/ 2 - s.height()/2 );
setGeometry( QRect(pp, s) );
}
void ResultIndicator::timerEvent( QTimerEvent *te )
{
if ( te->timerId() != timerId )
return;
killTimer( timerId );
if ( twoStage ) {
center();
twoStage = FALSE;
timerId = startTimer( 1000 );
} else {
delete this;
}
}
class MineFrame : public QFrame
{
public:
MineFrame( QWidget *parent, const char *name = 0 )
:QFrame( parent, name ), field(0) {}
void setField( MineField *f ) {
diff --git a/noncore/games/oyatzee/oyatzee.cpp b/noncore/games/oyatzee/oyatzee.cpp
index 0bd22f6..86318db 100644
--- a/noncore/games/oyatzee/oyatzee.cpp
+++ b/noncore/games/oyatzee/oyatzee.cpp
@@ -1,204 +1,198 @@
#include "oyatzee.h"
#include <qmessagebox.h>
-#include <qapplication.h>
-#include <qdir.h>
-#include <qlabel.h>
#include <qpushbutton.h>
-#include <qtimer.h>
-#include <qvbox.h>
#include <qpainter.h>
#include <qlayout.h>
-#include <qpoint.h>
#include <stdlib.h>
OYatzee::OYatzee( QWidget *parent , const char *name, WFlags fl ) : QMainWindow( parent , name , fl )
{
QWidget *thing = new QWidget( this );
setCentralWidget( thing );
setCaption( tr( "OYatzee" ) );
setPlayerNumber( 4 );
setRoundsNumber( 1 );
lastPlayerFinished = false;
currentPlayer = 1;
ps.append( new Player( "Carsten" ) );
ps.append( new Player( "Julia" ) );
ps.append( new Player( "Christine" ) );
ps.append( new Player( "Stephan" ) );
QVBoxLayout *vbox = new QVBoxLayout( thing );
sb = new Scoreboard( ps, thing , "sb" );
connect( sb->pb , SIGNAL( item( int ) ), this , SLOT( slotEndRound( int ) ) );
dw = new DiceWidget( thing , "dw" );
dw->setMaximumHeight( this->height()/4 );
connect( dw->rollButton, SIGNAL( clicked() ), this , SLOT( slotRollDices() ) );
vbox->addWidget( sb );
vbox->addWidget( dw );
}
void OYatzee::slotEndRound( int item )
{
qDebug( "Der User hat Nummer %d ausgewählt" , item );
/*
* if the user clicked on Total, Bonus or Score and thus not on a
* selectable item return and do nothing
*/
if ( item == 7 || item == 8 || item == 16 ) return;
/*
* check if the user can really click on that item
*/
if ( posibilities.find( item ) == posibilities.end() ) return;
QValueListInt numbers;
Dice *d = dw->diceList.first();
for ( ; d != 0 ; d = dw->diceList.next() )
{
numbers.append( d->hasValue() );
}
int points = 0;
switch ( item )
{
case Ones:
points = getPoints( 1 , numbers );
break;
case Twos:
points = getPoints( 2 , numbers );
break;
case Threes:
points = getPoints( 3 , numbers );
break;
case Fours:
points = getPoints( 4 , numbers );
break;
case Fives:
points = getPoints( 5 , numbers );
break;
case Sixes:
points = getPoints( 6 , numbers );
break;
case ThreeOfAKind:
points = oakPoints;
break;
case FourOfAKind:
points = oakPoints;
break;
case FullHouse:
points = 25;
break;
case SStraight:
points = 30;
break;
case LStraight:
points = 40;
break;
case Yatzee:
points = 50;
break;
case Chance:
points = getPoints ( Chance , numbers );
}
sb->nextRB(currentPlayer-1)->updateMap( item , points );
nextPlayer();
qDebug( "Punkte: %d" , points );
}
void OYatzee::nextPlayer()
{
currentPlayer++;
if ( currentPlayer > numOfPlayers )
{
currentPlayer = 1;
}
ps.at(currentPlayer-1)->turn = 0;
}
int OYatzee::getPoints( const int num , QValueListInt l)
{
QValueListInt::Iterator it = l.begin();
int c = 0;
if ( num != Chance )
{
for ( ; it != l.end() ; ++it )
{
if ( *it == num )
c++;
}
return c * num;
}
else
{
for ( ; it != l.end() ; ++it )
{
c += *it;
}
return c;
}
}
OYatzee::~OYatzee()
{
}
void OYatzee::detectPosibilities()
{
posibilities.clear();
qDebug( "running detectPosibilities()" );
Dice *d = dw->diceList.first();
QValueListInt numbers;
for ( ; d != 0 ; d = dw->diceList.next() )
{
numbers.append( d->hasValue() );
}
//the 6 numbers
QValueListInt::Iterator it;
for ( int i = 1 ; i < 7 ; ++i ) // check for 1-->6
{
bool cont = false;
it = numbers.begin();
for ( ; it != numbers.end() ; ++it )
{
if ( cont )
continue;
if ( numbers.find( i ) != numbers.end() )
{
posibilities.append( i );
cont = true;
}
}
}
//3er, 4er, Yatzee
it = numbers.begin();
int count;
int temp;
int countFH = 0; //for the full-house-check
for ( int i = 1 ; i < 7 ; ++i ) // check for 1-->6 at least 3 times
{
count = 0;
diff --git a/noncore/games/parashoot/base.cpp b/noncore/games/parashoot/base.cpp
index cdf1dfa..5f3c79d 100644
--- a/noncore/games/parashoot/base.cpp
+++ b/noncore/games/parashoot/base.cpp
@@ -1,77 +1,75 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "codes.h"
#include "base.h"
-#include "man.h"
#include <qtopia/resource.h>
-#include <qregexp.h>
int damage;
Base::Base(QCanvas* canvas) :
QCanvasSprite(0, canvas),
kaboom("landmine"),
ohdear("crmble01")
{
basearray = new QCanvasPixmapArray();
QString b0 = Resource::findPixmap("parashoot/b0001");
b0.replace(QRegExp("0001"),"%1");
basearray->readPixmaps(b0, 4);
setSequence(basearray);
setFrame(0);
move(2, canvas->height()-50);
setZ(10);
show();
damage = 0;
}
void Base::damageBase()
{
damage++;
switch(damage) {
case 1: setFrame(1); ohdear.play(); break;
case 2: setFrame(2); ohdear.play(); break;
case 3: setFrame(3); kaboom.play(); break;
}
show();
}
bool Base::baseDestroyed()
{
return (damage >= 3);
}
Base::~Base()
{
}
int Base::rtti() const
{
return base_rtti;
}
void
Base::reposition(void)
{
move(2, canvas()->height()-50);
}
diff --git a/noncore/games/parashoot/cannon.cpp b/noncore/games/parashoot/cannon.cpp
index 5671351..330d850 100644
--- a/noncore/games/parashoot/cannon.cpp
+++ b/noncore/games/parashoot/cannon.cpp
@@ -1,150 +1,149 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include <qtopia/resource.h>
-#include <qregexp.h>
#include "codes.h"
#include "cannon.h"
Cannon::Cannon(QCanvas* canvas) :
QCanvasSprite(0, canvas)
{
shotsfired=0;
index = 8;
cannonx = 0;
cannony = 0;
cannonarray = new QCanvasPixmapArray();
QString c0 = Resource::findPixmap("parashoot/can0001");
c0.replace(QRegExp("0001"),"%1");
cannonarray->readPixmaps(c0,17);
setSequence(cannonarray);
setFrame(index);
reposition();
movedir = NoDir;
moveDelay = 0;
setAnimated(TRUE);
show();
}
void Cannon::advance(int stage)
{
if ( stage == 1 && moveDelay-- == 0 ) {
if (movedir == Left) {
if (index > 0) {
setFrame(index-1);
index--;
}
}
if (movedir == Right) {
if (index < 16) {
setFrame(index+1);
index++;
}
}
moveDelay = 0;
}
}
void Cannon::pointCannon(Direction dir)
{
movedir = dir;
moveDelay = 0;
advance(1);
moveDelay = 1;
}
void Cannon::setCoords()
{
switch(index) {
case 0: cannonx = barrelxpos-29; cannony = barrelypos-8; break;
case 1: cannonx = barrelxpos-27; cannony = barrelypos-8; break;
case 2: cannonx = barrelxpos-25; cannony = barrelypos-6; break;
case 3: cannonx = barrelxpos-23; cannony = barrelypos-4; break;
case 4: cannonx = barrelxpos-21; cannony = barrelypos-2; break;
case 5: cannonx = barrelxpos-19; cannony = barrelypos; break;
case 6: cannonx = barrelxpos-15; cannony = barrelypos; break;
case 7: cannonx = barrelxpos-10; cannony = barrelypos; break;
case 8: cannonx = barrelxpos; cannony = barrelypos; break;
case 9: cannonx = barrelxpos+2; cannony = barrelypos; break;
case 10: cannonx = barrelxpos+6; cannony = barrelypos; break;
case 11: cannonx = barrelxpos+8; cannony = barrelypos; break;
case 12: cannonx = barrelxpos+12; cannony = barrelypos-2; break;
case 13: cannonx = barrelxpos+18; cannony = barrelypos-4; break;
case 14: cannonx = barrelxpos+22; cannony = barrelypos-6; break;
case 15: cannonx = barrelxpos+26; cannony = barrelypos-8; break;
case 16: cannonx = barrelxpos+28; cannony = barrelypos-8; break;
}
}
double Cannon::shootAngle()
{
switch(index) {
case 0: return 30.0;
case 1: return 37.5;
case 2: return 45.0;
case 3: return 52.5;
case 4: return 60.0;
case 5: return 67.5;
case 6: return 75.0;
case 7: return 82.5;
case 8: return 90.0;
case 9: return 97.5;
case 10: return 105.0;
case 11: return 112.5;
case 12: return 120.0;
case 13: return 127.5;
case 14: return 135.0;
case 15: return 142.5;
case 16: return 150.0;
}
return 0;
}
void Cannon::shoot()
{
setCoords();
Bullet* bullet = new Bullet(canvas(), shootAngle(), cannonx, cannony);
connect(bullet, SIGNAL(score(int)), this, SIGNAL(score(int)));
shotsfired++;
}
Cannon::~Cannon()
{
}
int Cannon::rtti() const
{
return cannon_rtti;
}
void Cannon::reposition(void)
{
move(canvas()->width()/2-20, canvas()->height()-32);
// co ords for barrel of cannon when upright
barrelypos = canvas()->height()-32;
barrelxpos = canvas()->width()/2;
setFrame(index);
setCoords();
}
diff --git a/noncore/games/parashoot/helicopter.cpp b/noncore/games/parashoot/helicopter.cpp
index 036b21e..7d91cd1 100644
--- a/noncore/games/parashoot/helicopter.cpp
+++ b/noncore/games/parashoot/helicopter.cpp
@@ -1,120 +1,119 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "helicopter.h"
#include "man.h"
#include "codes.h"
#include <qtopia/resource.h>
-#include <qregexp.h>
static QList<Helicopter> all;
Helicopter::Helicopter(QCanvas* canvas) :
QCanvasSprite(0, canvas),
chikachika("aland01")
{
all.append(this);
hits = 0;
QCanvasPixmapArray* helicopterarray = new QCanvasPixmapArray();
QString h0 = Resource::findPixmap("parashoot/helicopter0001");
h0.replace(QRegExp("0001"),"%1");
helicopterarray->readPixmaps(h0,4 );
setSequence(helicopterarray);
setAnimated(true);
move(canvas->width(), 5);
setVelocity(-2, 0);
chikachika.playLoop();
show();
}
Helicopter::~Helicopter()
{
all.remove(this);
}
int fr = 0;
void Helicopter::advance(int phase)
{
QCanvasSprite::advance(phase);
if (phase == 0) {
if (frame() == 3) {
delete this;
return;
}
if (hits >= 2) {
setFrame(3);
} else {
setFrame(fr%3);
fr++;
checkCollision();
}
}
}
void Helicopter::checkCollision()
{
if (x() == 6) {
setAnimated(false); //setVelocity(0, 0);
dropman();
}
if (x() < 0)
done();
}
void Helicopter::dropman()
{
(void)new Man(canvas(), 15, 25);
(void)new Man(canvas(), 35, 25);
takeOff();
}
void Helicopter::done()
{
hits++;
}
void Helicopter::takeOff()
{
setVelocity(-1, 0);
}
int Helicopter::rtti() const
{
return helicopter_rtti;
}
void Helicopter::silenceAll()
{
for (Helicopter* h = all.first(); h; h = all.next())
h->chikachika.stop();
}
void Helicopter::deleteAll()
{
Helicopter* h;
while ((h = all.first()))
delete h;
}
diff --git a/noncore/games/parashoot/interface.cpp b/noncore/games/parashoot/interface.cpp
index 948b92c..5c9b0ef 100644
--- a/noncore/games/parashoot/interface.cpp
+++ b/noncore/games/parashoot/interface.cpp
@@ -1,222 +1,218 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "interface.h"
#include "man.h"
#include <qtopia/qpeapplication.h>
#include <qtopia/resource.h>
-#include <qlabel.h>
-#include <qmessagebox.h>
-#include <qapplication.h>
-#include <qstyle.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
ParaShoot::ParaShoot(QWidget* parent, const char* name, WFlags f) :
QMainWindow(parent,name,f),
canvas( 232, 258 ),
cannon(NULL),
base(NULL),
gamestopped( true ),
waitover( false ),
fanfare("level_up"),
score(0)
{
QPEApplication::grabKeyboard();
QPEApplication::setInputMethodHint(this, QPEApplication::AlwaysOff );
updatespeed = 80;
canvas.setAdvancePeriod(80);
pb = new QCanvasView(&canvas, this);
pb->setFocus();
setToolBarsMovable( FALSE );
QToolBar* toolbar = new QToolBar(this);
toolbar->setHorizontalStretchable( TRUE );
setCaption( tr("ParaShoot") );
new QToolButton( Resource::loadIconSet("new"), tr("New Game"), 0,
this, SLOT(newGame()), toolbar, "New Game");
levelscore = new QLabel(toolbar);
levelscore->setBackgroundMode( PaletteButton );
levelscore->setAlignment( AlignRight | AlignVCenter | ExpandTabs );
toolbar->setStretchableWidget( levelscore );
showScore(0,0);
setCentralWidget(pb);
autoDropTimer = new QTimer(this);
connect (autoDropTimer, SIGNAL(timeout()), this, SLOT(play()) );
pauseTimer = new QTimer(this);
connect(pauseTimer, SIGNAL(timeout()), this, SLOT(wait()) );
setFocusPolicy(StrongFocus);
}
void ParaShoot::resizeEvent(QResizeEvent *)
{
QSize s = centralWidget()->size();
int fw = style().defaultFrameWidth();
canvas.resize( s.width() - fw - 2, s.height() - fw - 2);
QImage bgimage = Resource::loadImage("parashoot/sky");
QPixmap bgpixmap;
bgpixmap.convertFromImage(bgimage.smoothScale(canvas.width(),
canvas.height()), QPixmap::Auto);
canvas.setBackgroundPixmap(bgpixmap);
if (base) {
base->reposition();
}
if (cannon) {
cannon->reposition();
}
}
void ParaShoot::focusOutEvent (QFocusEvent *)
{
if (!gamestopped)
canvas.setAdvancePeriod(-1);
}
void ParaShoot::focusInEvent (QFocusEvent *)
{
if (!gamestopped)
canvas.setAdvancePeriod(updatespeed);
}
void ParaShoot::showScore( int score, int level )
{
levelscore->setText(tr(" Level: %1 Score: %2 ").arg(score).arg(level) );
}
void ParaShoot::newGame()
{
clear();
if (pauseTimer->isActive())
pauseTimer->stop();
clear();
Man::setManCount(0);
score = 0;
Bullet::setShotCount(0);
Bullet::setNobullets(0);
nomen = 2;
Bullet::setLimit(nomen);
level = 0;
updatespeed = 80;
showScore(0,0);
gamestopped = false;
Helicopter::deleteAll();
waitover = true;
base = new Base(&canvas);
cannon = new Cannon(&canvas);
connect( cannon, SIGNAL(score(int)), this, SLOT(increaseScore(int)));
autoDropTimer->start(100);
}
void ParaShoot::clear()
{
autoDropTimer->stop();
// QCanvasItem* item;
QCanvasItemList l = canvas.allItems();
for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
delete *it;
}
}
void ParaShoot::gameOver()
{
QCanvasItem* item;
QCanvasItemList l = canvas.allItems();
for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
item = *it;
if ((item->rtti()==1500) || (item->rtti()==1600) || item->rtti()==1900)
item->setAnimated(false);
}
autoDropTimer->stop();
Helicopter::silenceAll();
int shots = Bullet::getShotCount();
int shotsFired = cannon->shotsFired();
if ( shotsFired == 0 )
shotsFired = 1;
QCanvasText* gameover = new QCanvasText(
tr( " GAME OVER!\n"
" Your Score: %1\n"
" Parachuters Killed: %2\n"
" Accuracy: %3% " ).arg(score).arg(shots).arg(shots * 100 / shotsFired ),
&canvas);
gameover->setColor(red);
gameover->setFont( QFont("times", 16, QFont::Bold) );
gameover->move((canvas.width() - gameover->boundingRect().width()) / 2,
(canvas.height() - gameover->boundingRect().height()) / 2);
gameover->setZ(500);
gameover->show();
gamestopped = true;
waitover = false;
pauseTimer->start(3000);
}
void ParaShoot::wait()
{
waitover = true;
pauseTimer->stop();
}
void ParaShoot::play()
{
if (Man::getManCount() < nomen ) {
new Man(&canvas);
}
if (Base::baseDestroyed()) {
gameOver();
return;
}
}
void ParaShoot::increaseScore(int x)
{
score += x;
if ( score / 150 != (score-x) / 150 )
levelUp();
showScore(level,score);
}
void ParaShoot::levelUp()
{
level++;
int stage = level % 3;
switch(stage) {
case 0:
nomen++;
Bullet::setLimit(nomen);
fanfare.play();
diff --git a/noncore/games/parashoot/main.cpp b/noncore/games/parashoot/main.cpp
index ee36d26..40f809f 100644
--- a/noncore/games/parashoot/main.cpp
+++ b/noncore/games/parashoot/main.cpp
@@ -1,27 +1,26 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "interface.h"
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<ParaShoot> )
diff --git a/noncore/games/parashoot/man.cpp b/noncore/games/parashoot/man.cpp
index 94807c2..0a151b0 100644
--- a/noncore/games/parashoot/man.cpp
+++ b/noncore/games/parashoot/man.cpp
@@ -1,191 +1,190 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "codes.h"
#include "man.h"
#include "base.h"
#include <qtopia/resource.h>
-#include <qregexp.h>
int mancount;
Man::Man(QCanvas* canvas) :
QCanvasSprite(0, canvas),
splat("lose") // No tr
{
manarray = new QCanvasPixmapArray();
QString m0 = Resource::findPixmap("parashoot/man0001");
m0.replace(QRegExp("0001"),"%1");
manarray->readPixmaps(m0, 7);
setSequence(manarray);
setAnimated(true);
mancount++;
dead = false;
start();
}
Man::Man(QCanvas* canvas, int x, int y) :
QCanvasSprite(0, canvas),
splat("bang") // No tr
{
manarray = new QCanvasPixmapArray();
QString m0 = Resource::findPixmap("parashoot/man0001");
m0.replace(QString("0001"),"%1");
manarray->readPixmaps(m0, 7);
setSequence(manarray);
move(x, y);
setFrame(5);
setZ(300);
show();
static bool first_time = TRUE;
if (first_time) {
first_time = FALSE;
QTime midnight(0, 0, 0);
srand(midnight.secsTo(QTime::currentTime()) );
}
int yfallspeed = 0;
yfallspeed = (rand() % 3) + 1;
setVelocity(0, yfallspeed);
mancount++;
dead = false;
}
int f = 0;
void Man::advance(int phase)
{
QCanvasSprite::advance(phase);
if (phase == 0) {
checkCollision();
if (dead) {
if (count < 10) {
setFrame(6);
setVelocity(0,0);
count++;
} else {
delete this;
return;
}
}
if (y() > canvas()->height()-43) {
setFrame(f%5);
f++;
move(x(), canvas()->height()-26);
setVelocity(-2, 0);
} else if (xVelocity() == -2) {
//
// There's been a resize event while this Man has
// been on the ground. Move the man back to the
// new ground location. This is not neat.
//
move(x(), canvas()->height()-26);
}
}
}
void Man::setInitialCoords()
{
static bool first_time = TRUE;
if (first_time) {
first_time = FALSE;
QTime midnight(0, 0, 0);
srand(midnight.secsTo(QTime::currentTime()) );
}
dx = rand() % (canvas()->width()-16);
dy = -43; //height of a man off the screen
}
//check if man has reached the base
void Man::checkCollision()
{
if ( (x() < 23) && (y() == canvas()->height()-26)) {
QCanvasItem* item;
QCanvasItemList l=collisions(FALSE);
for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
item = *it;
if ( (item->rtti()== 1800) && (item->collidesWith(this)) ) {
Base* base = (Base*) item;
base->damageBase();
start();
}
}
}
//
// resize events may cause Man objects to appear
// outside the screen. Get rid of them if this
// is the case.
//
if ((x() < 0) || (x() > canvas()->width())) {
delete this;
return;
}
}
void Man::start()
{
setInitialCoords();
move(dx, dy);
setFrame(5);
setZ(300);
show();
static bool first_time = TRUE;
if (first_time) {
first_time = FALSE;
QTime midnight(0, 0, 0);
srand(midnight.secsTo(QTime::currentTime()) );
}
int yfallspeed = 0;
yfallspeed = (rand() % 3) + 1;
setVelocity(0, yfallspeed);
}
void Man::done()
{
splat.play();
count = 0;
dead = true;
setFrame(6);
}
int Man::getManCount()
{
return mancount;
}
void Man::setManCount(int count)
{
mancount = count;
}
int Man::rtti() const
{
return man_rtti;
}
Man::~Man()
{
mancount--;
}
diff --git a/noncore/games/qasteroids/main.cpp b/noncore/games/qasteroids/main.cpp
index c762990..18a13eb 100644
--- a/noncore/games/qasteroids/main.cpp
+++ b/noncore/games/qasteroids/main.cpp
@@ -1,27 +1,26 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "toplevel.h"
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<KAstTopLevel> )
diff --git a/noncore/games/qasteroids/toplevel.cpp b/noncore/games/qasteroids/toplevel.cpp
index c4fea89..9053d3d 100644
--- a/noncore/games/qasteroids/toplevel.cpp
+++ b/noncore/games/qasteroids/toplevel.cpp
@@ -1,228 +1,226 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************//*
* KAsteroids - Copyright (c) Martin R. Jones 1997
*
* Part of the KDE project
*/
// --- toplevel.cpp ---
#include "toplevel.h"
#include "ledmeter.h"
#include <qpe/qpeapplication.h>
#include <qpe/resource.h>
-#include <qaccel.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qlcdnumber.h>
-#include <qpushbutton.h>
#include <sys/utsname.h>
#define SB_SCORE 1
#define SB_LEVEL 2
#define SB_SHIPS 3
struct SLevel
{
int nrocks;
double rockSpeed;
};
#define MAX_LEVELS 16
SLevel levels[MAX_LEVELS] =
{
{ 1, 0.4 },
{ 1, 0.6 },
{ 2, 0.5 },
{ 2, 0.7 },
{ 2, 0.8 },
{ 3, 0.6 },
{ 3, 0.7 },
{ 3, 0.8 },
{ 4, 0.6 },
{ 4, 0.7 },
{ 4, 0.8 },
{ 5, 0.7 },
{ 5, 0.8 },
{ 5, 0.9 },
{ 5, 1.0 }
};
const char *soundEvents[] =
{
"ShipDestroyed",
"RockDestroyed",
0
};
const char *soundDefaults[] =
{
"Explosion.wav",
"ploop.wav",
0
};
KAstTopLevel::KAstTopLevel( QWidget *parent, const char *_name, WFlags fl )
: QMainWindow( parent, _name, fl )
{
setCaption( tr("Asteroids") );
QPEApplication::grabKeyboard();
QWidget *border = new QWidget( this );
border->setBackgroundColor( black );
setCentralWidget( border );
QVBoxLayout *borderLayout = new QVBoxLayout( border );
QWidget *mainWin = new QWidget( border );
borderLayout->addWidget( mainWin, 2, AlignHCenter );
view = new KAsteroidsView( mainWin );
connect( view, SIGNAL( shipKilled() ), SLOT( slotShipKilled() ) );
connect( view, SIGNAL( rockHit(int) ), SLOT( slotRockHit(int) ) );
connect( view, SIGNAL( rocksRemoved() ), SLOT( slotRocksRemoved() ) );
connect( view, SIGNAL( updateVitals() ), SLOT( slotUpdateVitals() ) );
QVBoxLayout *vb = new QVBoxLayout( mainWin );
QHBoxLayout *hb = new QHBoxLayout;
QHBoxLayout *hbd = new QHBoxLayout;
vb->addLayout( hb );
QFont labelFont( "helvetica", 12 );
QColorGroup grp( darkGreen, black, QColor( 128, 128, 128 ),
QColor( 64, 64, 64 ), black, darkGreen, black );
QPalette pal( grp, grp, grp );
mainWin->setPalette( pal );
QLabel *label;
label = new QLabel( tr("Score"), mainWin );
label->setFont( labelFont );
label->setPalette( pal );
// label->setFixedWidth( label->sizeHint().width() );
hb->addWidget( label );
scoreLCD = new QLCDNumber( 5, mainWin );
scoreLCD->setFrameStyle( QFrame::NoFrame );
scoreLCD->setSegmentStyle( QLCDNumber::Flat );
scoreLCD->setFixedHeight( 16 );
scoreLCD->setPalette( pal );
hb->addWidget( scoreLCD );
hb->addStretch( 1 );
label = new QLabel( tr("Level"), mainWin );
label->setFont( labelFont );
label->setPalette( pal );
// label->setFixedWidth( label->sizeHint().width() );
hb->addWidget( label );
levelLCD = new QLCDNumber( 2, mainWin );
levelLCD->setFrameStyle( QFrame::NoFrame );
levelLCD->setSegmentStyle( QLCDNumber::Flat );
levelLCD->setFixedHeight( 16 );
levelLCD->setPalette( pal );
hb->addWidget( levelLCD );
hb->addStretch( 1 );
label = new QLabel( tr("Ships"), mainWin );
label->setFont( labelFont );
// label->setFixedWidth( label->sizeHint().width() );
label->setPalette( pal );
hb->addWidget( label );
shipsLCD = new QLCDNumber( 1, mainWin );
shipsLCD->setFrameStyle( QFrame::NoFrame );
shipsLCD->setSegmentStyle( QLCDNumber::Flat );
shipsLCD->setFixedHeight( 16 );
shipsLCD->setPalette( pal );
hb->addWidget( shipsLCD );
// hb->addStrut( 14 );
vb->addWidget( view, 10 );
// -- bottom layout:
vb->addLayout( hbd );
QFont smallFont( "helvetica", 12 );
hbd->addSpacing( 5 );
/*
label = new QLabel( tr( "T" ), mainWin );
label->setFont( smallFont );
label->setFixedWidth( label->sizeHint().width() );
label->setPalette( pal );
hbd->addWidget( label );
teleportsLCD = new QLCDNumber( 1, mainWin );
teleportsLCD->setFrameStyle( QFrame::NoFrame );
teleportsLCD->setSegmentStyle( QLCDNumber::Flat );
teleportsLCD->setPalette( pal );
teleportsLCD->setFixedHeight( 18 );
hbd->addWidget( teleportsLCD );
hbd->addSpacing( 10 );
*/
label = new QLabel( mainWin );
label->setPixmap( Resource::loadPixmap("qasteroids/powerups/brake.png") );
label->setFixedWidth( 16 );
label->setPalette( pal );
hbd->addWidget( label );
brakesLCD = new QLCDNumber( 1, mainWin );
brakesLCD->setFrameStyle( QFrame::NoFrame );
brakesLCD->setSegmentStyle( QLCDNumber::Flat );
brakesLCD->setPalette( pal );
brakesLCD->setFixedHeight( 16 );
hbd->addWidget( brakesLCD );
hbd->addSpacing( 5 );
label = new QLabel( mainWin );
label->setPixmap( Resource::loadPixmap("qasteroids/powerups/shield.png") );
label->setFixedWidth( 16 );
label->setPalette( pal );
hbd->addWidget( label );
shieldLCD = new QLCDNumber( 1, mainWin );
shieldLCD->setFrameStyle( QFrame::NoFrame );
shieldLCD->setSegmentStyle( QLCDNumber::Flat );
shieldLCD->setPalette( pal );
shieldLCD->setFixedHeight( 16 );
hbd->addWidget( shieldLCD );
hbd->addSpacing( 5 );
label = new QLabel( mainWin );
label->setPixmap( Resource::loadPixmap("qasteroids/powerups/shoot.png") );
label->setFixedWidth( 16 );
label->setPalette( pal );
hbd->addWidget( label );
shootLCD = new QLCDNumber( 1, mainWin );
shootLCD->setFrameStyle( QFrame::NoFrame );
shootLCD->setSegmentStyle( QLCDNumber::Flat );
shootLCD->setPalette( pal );
diff --git a/noncore/games/qasteroids/view.cpp b/noncore/games/qasteroids/view.cpp
index 448a54a..352c63b 100644
--- a/noncore/games/qasteroids/view.cpp
+++ b/noncore/games/qasteroids/view.cpp
@@ -1,223 +1,220 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************//*
* KAsteroids - Copyright (c) Martin R. Jones 1997
*
* Part of the KDE project
*/
#include "view.h"
#include <qpe/resource.h>
-#include <qapplication.h>
-#include <qkeycode.h>
-#include <qaccel.h>
#include <stdlib.h>
#include <math.h>
#define IMG_BACKGROUND "qasteroids/bg.png"
#define REFRESH_DELAY 33
#define SHIP_SPEED 0.3
#define MISSILE_SPEED 10.0
#define SHIP_STEPS 64
#define ROTATE_RATE 2
#define SHIELD_ON_COST 1
#define SHIELD_HIT_COST 30
#define BRAKE_ON_COST 4
#define MAX_ROCK_SPEED 2.5
#define MAX_POWERUP_SPEED 1.5
#define MAX_SHIP_SPEED 8
#define MAX_BRAKES 5
#define MAX_SHIELDS 5
#define MAX_FIREPOWER 5
#define TEXT_SPEED 4
#define PI_X_2 6.283185307
#ifndef M_PI
#define M_PI 3.141592654
#endif
struct
{
int id;
const char *path;
int frames;
}
kas_animations [] =
{
// { ID_ROCK_LARGE, "rock1/rock1\%1.png", 32 },
{ ID_ROCK_MEDIUM, "rock2/rock2\%1.png", 32 },
{ ID_ROCK_SMALL, "rock3/rock3\%1.png", 32 },
{ ID_SHIP, "ship/ship\%1.png", 32 },
{ ID_MISSILE, "missile/missile.png", 0 },
{ ID_BIT, "bits/bits\%1.png", 16 },
{ ID_EXHAUST, "exhaust/exhaust.png", 0 },
{ ID_ENERGY_POWERUP, "powerups/energy.png", 0 },
// { ID_TELEPORT_POWERUP, "powerups/teleport%1.png", 12 },
{ ID_BRAKE_POWERUP, "powerups/brake.png", 0 },
{ ID_SHIELD_POWERUP, "powerups/shield.png", 0 },
{ ID_SHOOT_POWERUP, "powerups/shoot.png", 0 },
{ ID_SHIELD, "shield/shield\%1.png", 6 },
{ 0, 0, 0 }
};
KAsteroidsView::KAsteroidsView( QWidget *parent, const char *name )
: QWidget( parent, name ),
field(200, 200),
view(&field,this)
{
view.setVScrollBarMode( QScrollView::AlwaysOff );
view.setHScrollBarMode( QScrollView::AlwaysOff );
rocks.setAutoDelete( TRUE );
missiles.setAutoDelete( TRUE );
bits.setAutoDelete( TRUE );
powerups.setAutoDelete( TRUE );
exhaust.setAutoDelete( TRUE );
QPixmap pm( Resource::loadPixmap(IMG_BACKGROUND) );
field.setBackgroundPixmap( pm );
textSprite = new QCanvasText( &field );
QFont font( "helvetica", 14 );
textSprite->setFont( font );
shield = 0;
shieldOn = FALSE;
refreshRate = REFRESH_DELAY;
readSprites();
shieldTimer = new QTimer( this );
connect( shieldTimer, SIGNAL(timeout()), this, SLOT(hideShield()) );
mTimerId = -1;
shipPower = MAX_POWER_LEVEL;
vitalsChanged = TRUE;
can_destroy_powerups = FALSE;
mPaused = TRUE;
}
// - - -
KAsteroidsView::~KAsteroidsView()
{
}
// - - -
void KAsteroidsView::reset()
{
rocks.clear();
missiles.clear();
bits.clear();
powerups.clear();
exhaust.clear();
shotsFired = 0;
shotsHit = 0;
rockSpeed = 1.0;
powerupSpeed = 1.0;
mFrameNum = 0;
mPaused = FALSE;
ship->hide();
shield->hide();
/*
if ( mTimerId >= 0 ) {
killTimer( mTimerId );
mTimerId = -1;
}
*/
}
// - --
void KAsteroidsView::newGame()
{
if ( shieldOn )
{
shield->hide();
shieldOn = FALSE;
}
reset();
if ( mTimerId < 0 )
mTimerId = startTimer( REFRESH_DELAY );
emit updateVitals();
}
// - - -
void KAsteroidsView::endGame()
{
}
void KAsteroidsView::pause( bool p )
{
if ( !mPaused && p ) {
if ( mTimerId >= 0 ) {
killTimer( mTimerId );
mTimerId = -1;
}
} else if ( mPaused && !p )
mTimerId = startTimer( REFRESH_DELAY );
mPaused = p;
}
// - - -
void KAsteroidsView::newShip()
{
ship->move( field.width()/2, field.height()/2, 0 );
shield->move( field.width()/2, field.height()/2, 0 );
ship->setVelocity( 0.0, 0.0 );
shipDx = 0;
shipDy = 0;
shipAngle = 0;
rotateL = FALSE;
rotateR = FALSE;
thrustShip = FALSE;
shootShip = FALSE;
brakeShip = FALSE;
teleportShip = FALSE;
shieldOn = TRUE;
shootDelay = 0;
shipPower = MAX_POWER_LEVEL;
rotateRate = ROTATE_RATE;
rotateSlow = 0;
mBrakeCount = 0;
mTeleportCount = 0;
mShootCount = 0;
ship->show();
shield->show();
mShieldCount = 1; // just in case the ship appears on a rock.
shieldTimer->start( 1000, TRUE );
}
void KAsteroidsView::setShield( bool s )
diff --git a/noncore/games/sfcave/helpwindow.cpp b/noncore/games/sfcave/helpwindow.cpp
index 544e237..8a5d034 100644
--- a/noncore/games/sfcave/helpwindow.cpp
+++ b/noncore/games/sfcave/helpwindow.cpp
@@ -1,81 +1,79 @@
/***************************************************************************
helpwindow.cpp - description
-------------------
begin : Sun Sep 8 2002
copyright : (C) 2002 by Andy Qua
email : andy.qua@blueyonder.co.uk
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
-#include <qwidget.h>
#include <qlayout.h>
-#include <qstring.h>
#include <qtextview.h>
#include <qpe/qpeapplication.h>
#include "helpwindow.h"
#define HELP_TEXT \
"<qt><h1>SFCave Help</h1><p> " \
"SFCave is a flying game for the Zaurus.<br><br> " \
"The aim is to stay alive for as long as possible and get the highest score " \
"you can.<br><br>" \
"There are three game types currently - SFCave, Gates, and Fly.<br>" \
"<b>SFCave</b> is a remake of the classic SFCave game - fly through the " \
"cavern avoiding all the blocks that just happen to be hanging in " \
"midair<br><br>" \
"<b>Gates</b> is similar to SFCave but instead you must fly through the " \
"without crashing.<br><br>" \
"<b>Fly</b> is somewhat different to SFCave and above. Instead, you have " \
"are flying in the open air above a scrolling landscape, and the aim is to " \
"hug the ground - the closer to the land you fly the more points " \
"scored.<br><br><br>" \
"Basic instruction - Press <b>Up</B> or <b>Down</b> on the circle pad to " \
"start a new game, press the middle of the pad to apply thrust (makes you " \
"go up), and release the pad to remove thrust and drop down.<br><br>" \
"Also, if playing the Fly game, you can press z to toggle the display " \
"of the scoring zones. This will display 4 red lines at varying heights " \
"above the landscape - if your ship falls into this zone, point are scored. " \
"The closer to the landscape you get the more points you get.<br><br>" \
"In addition, SFCave has replays - save and load too so you can show off to all " \
"your friends (or vice versa). Currently, this is in its infancy but will improve.<br>" \
"To use, once you have crashed, press 'r' to replay the last game.<br>" \
"To save the replay press 's'.<br>" \
"To load a saved replay press 'l' (after you've crashed at least once).<br><br>" \
"Replays are currently saved to your home directory in a file called sfcave.replay." \
"This file can be copied and given to others as long as it it put in their home directory.<br><br>" \
"Have lots of fun.<br>" \
"Andy" \
"</p></qt>"
HelpWindow::HelpWindow( QWidget *parent, const char *name, bool modal, WFlags flags )
: QDialog( parent, name, modal, flags )
{
// resize( 230, 280 );
setCaption( "Help for SFCave" );
QVBoxLayout *layout = new QVBoxLayout( this );
QString text = HELP_TEXT;;
QTextView *view = new QTextView( text, 0, this, "view" );
layout->insertSpacing( -1, 5 );
layout->insertWidget( -1, view );
layout->insertSpacing( -1, 5 );
QPEApplication::showDialog( this );
}
HelpWindow::~HelpWindow()
{
}
diff --git a/noncore/games/snake/interface.cpp b/noncore/games/snake/interface.cpp
index 2c60693..b5fb5bf 100644
--- a/noncore/games/snake/interface.cpp
+++ b/noncore/games/snake/interface.cpp
@@ -1,222 +1,218 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "interface.h"
#include <qpe/resource.h>
-#include <qpe/qpeapplication.h>
#include <qpe/qpetoolbar.h>
#include <qtoolbutton.h>
-#include <qstyle.h>
-#include <qapplication.h>
-#include <qmessagebox.h>
SnakeGame::SnakeGame(QWidget* parent, const char* name, WFlags f) :
QMainWindow(parent,name,f),
canvas(232, 258)
{
setCaption( tr("Snake") );
QPEApplication::setInputMethodHint(this, QPEApplication::AlwaysOff );
QPixmap bg = Resource::loadPixmap("snake/grass");
canvas.setBackgroundPixmap(bg);
canvas.setUpdatePeriod(100);
snake = 0;
cv = new QCanvasView(&canvas, this);
pauseTimer = new QTimer(this);
connect(pauseTimer, SIGNAL(timeout()), this, SLOT(wait()) );
setToolBarsMovable( FALSE );
QToolBar* toolbar = new QToolBar( this);
toolbar->setHorizontalStretchable( TRUE );
QPixmap newicon = Resource::loadPixmap("ksnake");
setIcon(newicon);
(void)new QToolButton(newicon, tr("New Game"), 0,
this, SLOT(newGame()), toolbar, "New Game");
scorelabel = new QLabel(toolbar);
showScore(0);
scorelabel->setBackgroundMode( PaletteButton );
scorelabel->setAlignment( AlignRight | AlignVCenter | ExpandTabs );
toolbar->setStretchableWidget( scorelabel );
setFocusPolicy(StrongFocus);
setCentralWidget(cv);
QTimer::singleShot( 16, this, SLOT(welcomescreen()) );
gamestopped = true;
waitover = true;
}
SnakeGame::~SnakeGame()
{
delete snake;
}
void SnakeGame::resizeEvent(QResizeEvent *)
{
QSize s = centralWidget()->size();
int fw = style().defaultFrameWidth();
canvas.resize( s.width() - fw - 2, s.height() - fw - 2);
}
void SnakeGame::welcomescreen()
{
QCanvasText* title = new QCanvasText(tr("SNAKE!"), &canvas);
title->setColor(yellow);
title->setFont( QFont("times", 18, QFont::Bold) );
int w = title->boundingRect().width();
title->move(canvas.width()/2 -w/2, canvas.height()/2-110);
title->show();
QCanvasPixmapArray* titlearray = new QCanvasPixmapArray(Resource::findPixmap("snake/title"));
QCanvasSprite* titlepic = new QCanvasSprite(titlearray, &canvas);
titlepic->move(canvas.width()/2 - 33, canvas.height()/2-85);
titlepic->show();
QCanvasText* instr = new QCanvasText(tr("Use the arrow keys to guide the\n"
"snake to eat the mouse. You must not\n"
"crash into the walls, edges or its tail."),
&canvas);
w = instr->boundingRect().width();
instr->move(canvas.width()/2-w/2, canvas.height()/2-20);
instr->setColor(white);
instr->show();
QCanvasText* cont = new QCanvasText(tr("Press any key to start"), &canvas);
w = cont->boundingRect().width();
cont->move(canvas.width()/2-w/2, canvas.height()-20);
cont->setColor(yellow);
cont->show();
}
void SnakeGame::newGame()
{
clear();
snake = new Snake(&canvas);
connect(snake, SIGNAL(dead()), this, SLOT(gameOver()) );
connect(snake, SIGNAL(targethit()), this, SLOT(levelUp()) );
connect(snake, SIGNAL(scorechanged()), this, SLOT(scoreInc()) );
connect(this, SIGNAL(moveFaster()), snake, SLOT(increaseSpeed()) );
last = 0;
targetamount = 1;
notargets = 1;
level = 1;
stage = 1;
showScore(0);
gamestopped = false;
waitover = true;
int y = canvas.height()-50;
(void)new Obstacle(&canvas, 32);
(void)new Obstacle(&canvas, y);
createTargets();
}
void SnakeGame::showScore(int score)
{
scorelabel->setText(tr(" Score : %1 ").arg(score) );
}
void SnakeGame::scoreInc()
{
showScore( snake->getScore() );
}
void SnakeGame::levelUp()
{
notargets--;
if (notargets == 0) {
stage++;
if (stage == 3) {
level++;
emit moveFaster();
targetamount++;
stage = 0;
}
createTargets();
}
}
void SnakeGame::createTargets()
{
for (int i = 0; i < targetamount; i++)
(void)new Target(&canvas);
notargets = targetamount;
}
void SnakeGame::clear()
{
delete snake;
snake = 0;
QCanvasItemList l = canvas.allItems();
for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
delete *it;
}
}
void SnakeGame::gameOver()
{
int score = snake->getScore();
QString scoreoutput="";
scoreoutput.setNum(score);
QCanvasText* gameover = new QCanvasText(tr("GAME OVER!\n Your Score: %1").arg( scoreoutput), &canvas);
gameover->setZ(100);
gameover->setColor(yellow);
gameover->setFont( QFont("times", 18, QFont::Bold) );
int w = gameover->boundingRect().width();
gameover->move(canvas.width()/2 -w/2, canvas.height()/2 -50);
gameover->show();
gamestopped = true;
waitover = false;
pauseTimer->start(1500);
}
void SnakeGame::wait()
{
waitover = true;
pauseTimer->stop();
QCanvasText* cont = new QCanvasText(tr("Press any key to begin a new game."),
&canvas);
cont->setZ(100);
cont->setColor(white);
int w = cont->boundingRect().width();
cont->move(canvas.width()/2 -w/2, canvas.height()/2);
cont->show();
}
void SnakeGame::keyPressEvent(QKeyEvent* event)
{
if (gamestopped) {
if (waitover)
newGame();
else
return;
}
else {
int newkey = event->key();
snake->go(newkey);
}
}
diff --git a/noncore/games/snake/main.cpp b/noncore/games/snake/main.cpp
index 77a2769..9a9b167 100644
--- a/noncore/games/snake/main.cpp
+++ b/noncore/games/snake/main.cpp
@@ -1,29 +1,28 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "interface.h"
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<SnakeGame> )
diff --git a/noncore/games/snake/snake.cpp b/noncore/games/snake/snake.cpp
index 9f19841..8a683ab 100644
--- a/noncore/games/snake/snake.cpp
+++ b/noncore/games/snake/snake.cpp
@@ -1,219 +1,217 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "snake.h"
#include "target.h"
-#include "codes.h"
#include <qpe/resource.h>
-#include <qregexp.h>
static int Piecekey[4][4] = { {6, 0, 4, 3 }, {0, 6, 2, 1 }, { 1, 3, 5, 0 }, {2, 4, 0, 5 } };
Snake::Snake(QCanvas* c)
{
canvas = c;
score = 0;
snakelist.setAutoDelete(true);
autoMoveTimer = new QTimer(this);
connect( autoMoveTimer, SIGNAL(timeout()), this, SLOT(moveSnake()) );
createSnake();
}
void Snake::createSnake()
{
snakeparts = new QCanvasPixmapArray();
QString s0 = Resource::findPixmap("snake/s0001");
s0.replace(QRegExp("0001"),"%1");
snakeparts->readPixmaps(s0, 15);
grow = 0;
last = Key_Right;
QCanvasSprite* head = new QCanvasSprite(snakeparts, canvas );
head->setFrame(7);
snakelist.insert(0, head);
head->show();
head->move(34, 16);
QCanvasSprite* body = new QCanvasSprite(snakeparts, canvas );
body->setFrame(6);
snakelist.append( body );
body->show();
body->move(18, 16);
QCanvasSprite* end = new QCanvasSprite(snakeparts, canvas );
end->setFrame(11);
snakelist.append( end );
end->show();
end->move(2, 16);
currentdir = right;
speed = 250;
autoMoveTimer->start(speed);
moveSnake();
}
void Snake::increaseSpeed()
{
if (speed > 150)
speed = speed - 5;
autoMoveTimer->start(speed);
}
void Snake::go(int newkey)
{
// check key is a direction
if (!( (newkey == Key_Up) || (newkey == Key_Left) ||
(newkey == Key_Right) || (newkey == Key_Down) ))
return;
// check move is possible
if ( ((currentdir == left) && ((newkey == Key_Right) || (newkey == Key_Left)) ) ||
((currentdir == right) && ((newkey == Key_Left) || (newkey == Key_Right)) ) ||
((currentdir == up) && ((newkey == Key_Down) || (newkey == Key_Up)) ) ||
((currentdir == down) && ((newkey == Key_Up) || (newkey == Key_Down)) ) )
return;
else {
Snake::changeHead(newkey);
Snake::moveSnake();
}
}
void Snake::move(Direction dir)
{
autoMoveTimer->start(speed);
int x = 0;
int y = 0;
newdir = dir;
switch (dir) {
case right: x = 16; break;
case left: x = -16; break;
case down: y = 16; break;
case up: y = -16; break;
}
int index = lookUpPiece(currentdir, newdir);
QCanvasSprite* sprite = new QCanvasSprite(snakeparts, canvas );
sprite->setFrame(index);
snakelist.insert(1, sprite);
sprite->move(snakelist.first()->x(), snakelist.first()->y() );
snakelist.first()->moveBy(x, y);
if (grow <= 0)
changeTail();
else
grow--;
sprite->show();
currentdir = dir;
}
void Snake::changeTail()
{
snakelist.removeLast();
double lastx = snakelist.last()->x();
double prevx = snakelist.prev()->x();
int index = 0;
if ( prevx == lastx ) { //vertical
if ( snakelist.prev()->y() > snakelist.last()->y() )
index = 13;
else
index = 14;
} else { //horizontal
if (snakelist.prev()->x() > snakelist.last()->x() )
index = 11;
else
index = 12;
}
snakelist.last()->setFrame(index);
}
void Snake::changeHead(int lastkey)
{
int index = 0;
last = lastkey;
switch (last)
{
case Key_Up: index = 10; break;
case Key_Left: index = 8; break;
case Key_Right: index = 7; break;
case Key_Down: index = 9; break;
}
if (index) {
snakelist.first()->setFrame(index);
}
}
// returns an integer corresponding to a particular type of snake piece
int Snake::lookUpPiece(Direction currentdir, Direction newdir)
{
return Piecekey[currentdir][newdir];
}
void Snake::extendSnake()
{
grow++;
}
void Snake::moveSnake()
{
switch (last)
{
case Key_Up: move(up); break;
case Key_Left: move(left); break;
case Key_Right: move(right); break;
case Key_Down: move(down); break;
}
detectCrash();
}
void Snake::detectCrash()
{
QCanvasSprite* head = snakelist.first();
QCanvasItem* item;
QCanvasItemList l=head->collisions(FALSE);
for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
item = *it;
// check if snake hit target
if ( (item->rtti()== 1500 ) && (item->collidesWith(head)) ) {
Target* target = (Target*) item;
target->done();
emit targethit();
extendSnake();
setScore(5);
return;
}
// check if snake hit obstacles
if ( (item->rtti()==1600) && (item->collidesWith(head)) ) {
emit dead();
autoMoveTimer->stop();
return;
}
}
//check if snake hit itself
for (uint i = 3; i < snakelist.count(); i++) {
if (head->collidesWith(snakelist.at(i)) ) {
emit dead();
autoMoveTimer->stop();
diff --git a/noncore/games/solitaire/canvascard.cpp b/noncore/games/solitaire/canvascard.cpp
index 7c4a5ba..c36da6c 100644
--- a/noncore/games/solitaire/canvascard.cpp
+++ b/noncore/games/solitaire/canvascard.cpp
@@ -1,221 +1,216 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
-#include "cardgame.h"
#include "canvascard.h"
#include <qpe/resource.h>
-#include <qpainter.h>
-#include <qimage.h>
-#include <qpaintdevice.h>
-#include <qbitmap.h>
#include <qgfx_qws.h> // Needed to get the device's width
#include <math.h>
#if defined( QT_QWS_CASSIOPEIA )
#define SLOW_HARDWARE
#endif
// Seems to be fast enough to me even without Transformations in the library
//#if defined( QT_NO_TRANSFORMATIONS ) && defined( QT_QWS_IPAQ )
//#define SLOW_HARDWARE
//#endif
QBitmap *Create180RotatedBitmap(QBitmap *srcBitmap)
{
#ifdef QT_NO_TRANSFORMATIONS
int w = srcBitmap->width();
int h = srcBitmap->height();
QBitmap *dstBitmap = new QBitmap( w, h );
// ### this is very poorly implemented and probably could be much faster
for (int i = 0; i < w; i++)
for (int j = 0; j < h; j++)
bitBlt( dstBitmap, i, j, srcBitmap, w - i - 1, h - j - 1, 1, 1 );
return dstBitmap;
#else
QWMatrix m;
m.rotate( 180.0 );
return new QBitmap( srcBitmap->xForm( m ) );
#endif
}
QPixmap *CreateScaledPixmap(QPixmap *srcPixmap, double scaleX, double scaleY)
{
#ifdef QT_NO_TRANSFORMATIONS
int w = srcPixmap->width();
int h = srcPixmap->height();
int newW = (int)(w * scaleX);
int newH = (int)(h * scaleY);
QPixmap *dstPixmap = new QPixmap( newW, newH );
// ### this is very poorly implemented and probably could be much faster
for (int i = 0; i < newW; i++) {
int srcX = w * i / newW;
if (newH == h) {
// Optimise for scaleing in the X-axis only
bitBlt( dstPixmap, i, 0, srcPixmap, srcX, 0, 1, h );
} else {
for (int j = 0; j < newH; j++) {
int srcY = h * j / newH;
bitBlt( dstPixmap, i, j, srcPixmap, srcX, srcY, 1, 1 );
}
}
}
return dstPixmap;
#else
QWMatrix s;
s.scale( scaleX, scaleY );
return new QPixmap( srcPixmap->xForm( s ) );
#endif
}
// Initialise static member variables to NULL
QPixmap *CanvasCard::cardsFaces = NULL;
QPixmap *CanvasCard::cardsBacks = NULL;
QBitmap *CanvasCard::cardsChars = NULL;
QBitmap *CanvasCard::cardsSuits = NULL;
QBitmap *CanvasCard::cardsCharsUpsideDown = NULL;
QBitmap *CanvasCard::cardsSuitsUpsideDown = NULL;
CanvasCard::CanvasCard( eValue v, eSuit s, bool f, QCanvas *canvas ) :
Card(v, s, f), QCanvasRectangle( 0, 0, 1, 1, canvas ), cardBack(1), scaleX(1.0), scaleY(1.0)
{
if ( !cardsFaces ) {
if ( qt_screen->deviceWidth() < 200 ) {
cardsFaces = new QPixmap( Resource::loadPixmap( "cards/card_face_small" ) );
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0001_small" ) );
cardsChars = new QBitmap( Resource::loadBitmap( "cards/card_chars_small" ) );
cardsSuits = new QBitmap( Resource::loadBitmap( "cards/card_suits_small" ) );
} else {
cardsFaces = new QPixmap( Resource::loadPixmap( "cards/card_face" ) );
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0001" ) );
cardsChars = new QBitmap( Resource::loadBitmap( "cards/card_chars" ) );
cardsSuits = new QBitmap( Resource::loadBitmap( "cards/card_suits" ) );
}
cardsCharsUpsideDown = Create180RotatedBitmap( cardsChars );
cardsSuitsUpsideDown = Create180RotatedBitmap( cardsSuits );
}
xOff = cardsFaces->width() / 2;
yOff = cardsFaces->height() / 2;
setSize( cardsFaces->width(), cardsFaces->height() );
setPen( NoPen );
flipping = FALSE;
}
void CanvasCard::setCardBack(int b)
{
if ( cardBack != b ) {
cardBack = b;
if ( cardsBacks )
delete cardsBacks;
if ( qt_screen->deviceWidth() < 200 ) {
switch (cardBack) {
case 0:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0001_small" ) ); break;
case 1:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0002_small" ) ); break;
case 2:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0003_small" ) ); break;
case 3:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0004_small" ) ); break;
case 4:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0005_small" ) ); break;
}
} else {
switch (cardBack) {
case 0:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0001" ) ); break;
case 1:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0002" ) ); break;
case 2:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0003" ) ); break;
case 3:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0004" ) ); break;
case 4:
cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0005" ) ); break;
}
}
if ( !isFacing() )
redraw();
}
}
void CanvasCard::draw(QPainter &painter)
{
int ix = (int)x(), iy = (int)y();
QPainter *p = &painter;
QPixmap *unscaledCard = NULL;
if ((scaleX <= 0.98) || (scaleY <= 0.98))
{
p = new QPainter();
unscaledCard = new QPixmap( cardsFaces->width(), cardsFaces->height() );
p->begin(unscaledCard);
ix = 0;
iy = 0;
}
if ( isFacing() ) {
/*
// Now add the joker and card backs to the list of pixmaps
QPixmap *CardsBack = new QPixmap( Resource::loadPixmap( "cards/card_joker.png" ) );
QPoint *newBackHotspot = new QPoint( 0, 0 );
pixmaps->append((const QPixmap *)CardsBack);
hotspots->append((const QPoint *)newBackHotspot);
*/
int w = cardsFaces->width(), h = cardsFaces->height();
// p->setBrush( NoBrush );
p->setBrush( QColor( 0xFF, 0xFF, 0xFF ) );
if ( isRed() == TRUE )
p->setPen( QColor( 0xFF, 0, 0 ) );
else
p->setPen( QColor( 0, 0, 0 ) );
if ( qt_screen->deviceWidth() < 200 ) {
p->drawPixmap( ix + 0, iy + 0, *cardsFaces );
p->drawPixmap( ix + 3, iy + 3, *cardsChars, 5*(getValue()-1), 0, 5, 6 );
p->drawPixmap( ix + 11, iy + 3, *cardsSuits, 5*(getSuit()-1), 0, 5, 6 );
p->drawPixmap( ix + w-3-5, iy + h-3-6, *cardsCharsUpsideDown, 5*(12-getValue()+1), 0, 5, 6 );
p->drawPixmap( ix + w-11-5, iy + h-3-6, *cardsSuitsUpsideDown, 5*(3-getSuit()+1), 0, 5, 6 );
} else {
p->drawPixmap( ix + 0, iy + 0, *cardsFaces );
p->drawPixmap( ix + 4, iy + 4, *cardsChars, 7*(getValue()-1), 0, 7, 7 );
p->drawPixmap( ix + 12, iy + 4, *cardsSuits, 7*(getSuit()-1), 0, 7, 8 );
p->drawPixmap( ix + w-4-7, iy + h-4-7, *cardsCharsUpsideDown, 7*(12-getValue()+1), 0, 7, 7 );
p->drawPixmap( ix + w-12-7, iy + h-5-7, *cardsSuitsUpsideDown, 7*(3-getSuit()+1), 0, 7, 8 );
}
} else {
diff --git a/noncore/games/solitaire/canvascardgame.cpp b/noncore/games/solitaire/canvascardgame.cpp
index 9ae2a23..ed5748e 100644
--- a/noncore/games/solitaire/canvascardgame.cpp
+++ b/noncore/games/solitaire/canvascardgame.cpp
@@ -1,223 +1,215 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
-#include "cardgame.h"
-#include "canvasshapes.h"
-#include "canvascard.h"
#include "canvascardgame.h"
-#include <qpe/resource.h>
-#include <qpe/config.h>
-#include <qmainwindow.h>
-#include <qmenubar.h>
-#include <qpainter.h>
#include <qgfx_qws.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
#include <math.h>
extern int highestZ;
class CanvasCardPile : public QCanvasRectangle
{
public:
CanvasCardPile( CanvasCardGame *ccg, QCanvas *canvas ) : QCanvasRectangle( canvas ), parent( ccg ) {
pile = new QPixmap( 0, 0 );
pileHeight = 0;
firstCard = NULL;
}
void addCard( CanvasCard *card );
void advance(int stage);
void animatedMove() { animatedMove(savedX, savedY); }
void savePos(void) { savedX = (int)x(); savedY = (int)y(); }
void animatedMove(int x2, int y2, int steps = 7 );
protected:
virtual void draw( QPainter& p );
private:
CanvasCardGame *parent;
QPixmap *pile;
QImage tempImage32;
CanvasCard *firstCard;
int pileHeight;
int destX, destY;
int savedX, savedY;
int animSteps;
};
void CanvasCardPile::addCard( CanvasCard *card )
{
int offsetDown = ( qt_screen->deviceWidth() < 200 ) ? 9 : 13;
int cardHeight = ( qt_screen->deviceWidth() < 200 ) ? 27 : 36;
int cardWidth = ( qt_screen->deviceWidth() < 200 ) ? 20 : 23;
if ( !firstCard )
firstCard = card;
int height = cardHeight + pileHeight * offsetDown;
setSize( cardWidth, height );
pile->resize( cardWidth, height );
QPainter p( pile );
p.translate( -card->x(), -card->y() + pileHeight * offsetDown );
card->draw( p );
pileHeight++;
QImage tempImage;
tempImage = *pile;
tempImage32 = tempImage.convertDepth( 32 );
tempImage32.setAlphaBuffer( TRUE );
for ( int i = 0; i < tempImage32.width(); i++ )
for ( int j = 0; j < tempImage32.height(); j++ ) {
QRgb col = tempImage32.pixel( i, j );
int a = 255-j*220/tempImage32.height();
QRgb alpha = qRgba( qRed( col ), qGreen( col ), qBlue( col ), a );
tempImage32.setPixel( i, j, alpha );
}
QRgb alpha = qRgba( 0, 0, 0, 0 );
tempImage32.setPixel( 1, 0, alpha );
tempImage32.setPixel( 0, 0, alpha );
tempImage32.setPixel( 0, 1, alpha );
tempImage32.setPixel( cardWidth - 2, 0, alpha );
tempImage32.setPixel( cardWidth - 1, 0, alpha );
tempImage32.setPixel( cardWidth - 1, 1, alpha );
height--;
tempImage32.setPixel( 1, height, alpha );
tempImage32.setPixel( 0, height - 1, alpha );
tempImage32.setPixel( 0, height, alpha );
tempImage32.setPixel( cardWidth - 2, height, alpha );
tempImage32.setPixel( cardWidth - 1, height, alpha );
tempImage32.setPixel( cardWidth - 1, height - 1, alpha );
}
void CanvasCardPile::advance(int stage)
{
if ( stage==1 ) {
if ( animSteps-- <= 0 ) {
CanvasCard *item = firstCard;
while (item) {
item->show();
item = (CanvasCard *)item->getCardPile()->cardInfront(item);
}
setVelocity(0,0);
setAnimated(FALSE);
parent->cancelMoving();
hide();
move(destX,destY); // exact
}
}
QCanvasRectangle::advance(stage);
}
void CanvasCardPile::animatedMove(int x2, int y2, int steps )
{
destX = x2;
destY = y2;
double x1 = x(), y1 = y(), dx = x2 - x1, dy = y2 - y1;
// Ensure a good speed
while ( fabs(dx/steps)+fabs(dy/steps) < 5.0 && steps > 4 )
steps--;
setAnimated(TRUE);
setVelocity(dx/steps, dy/steps);
animSteps = steps;
}
void CanvasCardPile::draw( QPainter& p )
{
int ix = (int)x(), iy = (int)y();
p.drawImage( ix, iy, tempImage32 );
}
CanvasCardGame::~CanvasCardGame() {
// the deletion stuff should be fixed now and only deletes
// items created by this CardGame. I haven't verified there are zero
// memory leaks yet
if ( alphaCardPile )
delete alphaCardPile;
}
void CanvasCardGame::gameWon() {
srand(time(NULL));
QCanvasItemList list = canvas()->allItems();
QCanvasItemList::Iterator it = list.begin();
for (; it != list.end(); ++it) {
if ( (*it)->rtti() == canvasCardId ) {
// disperse the cards everywhere
int x = 300 - rand() % 1000;
int y = 300 + rand() % 200;
((CanvasCard *)*it)->animatedMove( x, y, 50 );
}
}
}
void CanvasCardGame::contentsMousePressEvent(QMouseEvent *e) {
if ( moving )
return;
QCanvasItemList l = canvas()->collisions( e->pos() );
for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) {
if ( (*it)->rtti() == canvasCardId ) {
moving = (CanvasCard *)*it;
if ( moving->animated() )
return;
cardXOff = (int)(e->pos().x() - moving->x());
cardYOff = (int)(e->pos().y() - moving->y());
if ( !mousePressCard( moving, e->pos() ) ) {
CanvasCard *card = moving;
if ( alphaCardPile )
delete alphaCardPile;
alphaCardPile = new CanvasCardPile( this, canvas() );
alphaCardPile->move( card->x(), card->y() );
alphaCardPile->savePos();
alphaCardPile->show();
while (card) {
diff --git a/noncore/games/solitaire/canvascardwindow.cpp b/noncore/games/solitaire/canvascardwindow.cpp
index c12344a..503bc92 100644
--- a/noncore/games/solitaire/canvascardwindow.cpp
+++ b/noncore/games/solitaire/canvascardwindow.cpp
@@ -1,224 +1,219 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "canvascardwindow.h"
-#include "patiencecardgame.h"
#include "freecellcardgame.h"
#include "chicanecardgame.h"
#include "harpcardgame.h"
#include "teeclubcardgame.h"
-#include <qpe/resource.h>
-#include <qmainwindow.h>
-#include <qpopupmenu.h>
-#include <qstyle.h>
CanvasCardWindow::CanvasCardWindow(QWidget* parent, const char* name, WFlags f) :
QMainWindow(parent, name, f), canvas(230, 260), snapOn(TRUE), cardBack(4), gameType(0),
cardGame(NULL)
{
setIcon( Resource::loadPixmap( "cards" ) );
setCaption(tr("Patience"));
// Create Playing Area for Games
if ( QPixmap::defaultDepth() < 12 ) {
// canvas.setBackgroundColor(QColor(0x51, 0x74, 0x6B));
// canvas.setBackgroundColor(QColor(0x20, 0xb0, 0x50));
canvas.setBackgroundColor(QColor(0x08, 0x98, 0x2D));
} else {
QPixmap bg;
bg.convertFromImage( Resource::loadImage( "table_pattern" ), ThresholdDither );
canvas.setBackgroundPixmap(bg);
}
#if defined( QT_QWS_CASSIOPEIA )
canvas.setAdvancePeriod(70);
#else
canvas.setAdvancePeriod(30);
#endif
#ifdef _PATIENCE_USE_ACCELS_
QMenuBar* menu = menuBar();
QPopupMenu* file = new QPopupMenu;
file->insertItem(tr("Patience"), this, SLOT(initPatience()), CTRL+Key_F);
file->insertItem(tr("Freecell"), this, SLOT(initFreecell()), CTRL+Key_F);
file->insertItem(tr("Chicane"), this, SLOT(initChicane()), CTRL+Key_F);
file->insertItem(tr("Harp"), this, SLOT(initHarp()), CTRL+Key_F);
file->insertItem(tr("Teeclub"), this, SLOT(initTeeclub()), CTRL+Key_F);
menu->insertItem(tr("&Game"), file);
menu->insertSeparator();
settings = new QPopupMenu;
settings->insertItem(tr("&Change card backs"), this, SLOT(changeCardBacks()), Key_F2);
snap_id = settings->insertItem(tr("&Snap to position"), this, SLOT(snapToggle()), Key_F3);
settings->setCheckable(TRUE);
menu->insertItem(tr("&Settings"),settings);
menu->insertSeparator();
QPopupMenu* help = new QPopupMenu;
help->insertItem(tr("&About"), this, SLOT(help()), Key_F1);
help->setItemChecked(dbf_id, TRUE);
menu->insertItem(tr("&Help"),help);
#else
QMenuBar* menu = menuBar();
QPopupMenu* file = new QPopupMenu;
file->insertItem(tr("Patience"), this, SLOT(initPatience()));
file->insertItem(tr("Freecell"), this, SLOT(initFreecell()));
file->insertItem(tr("Chicane"), this, SLOT(initChicane()));
file->insertItem(tr("Harp"), this, SLOT(initHarp()));
file->insertItem(tr("Teeclub"), this, SLOT(initTeeclub()));
menu->insertItem(tr("Play"), file);
menu->insertSeparator();
settings = new QPopupMenu;
settings->setCheckable(TRUE);
settings->insertItem(tr("Change card backs"), this, SLOT(changeCardBacks()));
snap_id = settings->insertItem(tr("Snap to position"), this, SLOT(snapToggle()));
QString m;
drawId = settings->insertItem(tr("Turn one card"), this, SLOT(drawnToggle()));
menu->insertItem(tr("Settings"),settings);
settings->setCheckable(TRUE);
#endif
menu->show();
Config cfg( "Patience" );
cfg.setGroup( "GlobalSettings" );
snapOn = cfg.readBoolEntry( "SnapOn", TRUE);
settings->setItemChecked(snap_id, snapOn);
gameType = cfg.readNumEntry( "GameType", -1 );
drawThree = cfg.readBoolEntry( "DrawThree", FALSE);
if ( gameType == 0 ) {
cardGame = new PatienceCardGame( &canvas, snapOn, this );
cardGame->setNumberToDraw(drawThree ? 3 : 1);
setCaption(tr("Patience"));
setCentralWidget(cardGame);
cardGame->readConfig( cfg );
setCardBacks();
} else if ( gameType == 1 ) {
cardGame = new FreecellCardGame( &canvas, snapOn, this );
setCaption(tr("Freecell"));
setCentralWidget(cardGame);
//cardGame->newGame(); // Until we know how to handle reading freecell config
cardGame->readConfig( cfg );
setCardBacks();
} else if ( gameType == 2 ) {
cardGame = new ChicaneCardGame( &canvas, snapOn, this );
cardGame->setNumberToDraw(1);
setCaption(tr("Chicane"));
setCentralWidget(cardGame);
cardGame->readConfig( cfg );
setCardBacks();
} else if ( gameType == 3 ) {
cardGame = new HarpCardGame( &canvas, snapOn, this );
cardGame->setNumberToDraw(1);
setCaption(tr("Harp"));
setCentralWidget(cardGame);
cardGame->readConfig( cfg );
setCardBacks();
} else if ( gameType == 4 ) {
cardGame = new TeeclubCardGame( &canvas, snapOn, this );
cardGame->setNumberToDraw(1);
setCaption(tr("Teeclub"));
setCentralWidget(cardGame);
cardGame->readConfig( cfg );
setCardBacks();
} else {
// Probably there isn't a config file or it is broken
// Start a new game
initPatience();
}
updateDraw();
}
CanvasCardWindow::~CanvasCardWindow()
{
if (cardGame) {
Config cfg("Patience");
cfg.setGroup( "GlobalSettings" );
cfg.writeEntry( "GameType", gameType );
cfg.writeEntry( "SnapOn", snapOn );
cfg.writeEntry( "DrawThree", drawThree);
cfg.write();
cardGame->writeConfig( cfg );
delete cardGame;
}
}
void CanvasCardWindow::resizeEvent(QResizeEvent *)
{
QSize s = centralWidget()->size();
int fw = style().defaultFrameWidth();
canvas.resize( s.width() - fw - 2, s.height() - fw - 2);
}
void CanvasCardWindow::initPatience()
{
// Create New Game
if ( cardGame )
delete cardGame;
cardGame = new PatienceCardGame( &canvas, snapOn, this );
cardGame->setNumberToDraw(drawThree ? 3 : 1);
gameType = 0;
setCaption(tr("Patience"));
setCentralWidget(cardGame);
cardGame->newGame();
setCardBacks();
updateDraw();
}
void CanvasCardWindow::initFreecell()
{
// Create New Game
if ( cardGame ) {
delete cardGame;
}
cardGame = new FreecellCardGame( &canvas, snapOn, this );
gameType = 1;
setCaption(tr("Freecell"));
setCentralWidget(cardGame);
cardGame->newGame();
setCardBacks();
}
void CanvasCardWindow::initChicane()
{
// Create New Game
if ( cardGame ) {
delete cardGame;
}
diff --git a/noncore/games/solitaire/canvasshapes.cpp b/noncore/games/solitaire/canvasshapes.cpp
index 6ccd4a4..011958d 100644
--- a/noncore/games/solitaire/canvasshapes.cpp
+++ b/noncore/games/solitaire/canvasshapes.cpp
@@ -1,114 +1,112 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
-#include <qpainter.h>
-#include <qcanvas.h>
#include <qgfx_qws.h>
#include "canvasshapes.h"
CanvasRoundRect::CanvasRoundRect(int x, int y, QCanvas *canvas) :
QCanvasRectangle( x, y, ( qt_screen->deviceWidth() < 200 ) ? 20 : 23, ( qt_screen->deviceWidth() < 200 ) ? 27 : 36, canvas)
{
setZ(0);
show();
}
void CanvasRoundRect::redraw()
{
hide();
show();
}
void CanvasRoundRect::drawShape(QPainter &p)
{
if ( qt_screen->deviceWidth() < 200 )
p.drawRoundRect( (int)x() + 1, (int)y() + 1, 18, 25);
else
p.drawRoundRect( (int)x(), (int)y(), 23, 36);
}
CanvasCircleOrCross::CanvasCircleOrCross(int x, int y, QCanvas *canvas) :
QCanvasRectangle( x, y, 21, 21, canvas), circleShape(TRUE)
{
show();
}
void CanvasCircleOrCross::redraw()
{
hide();
show();
}
void CanvasCircleOrCross::setCircle()
{
circleShape = TRUE;
redraw();
}
void CanvasCircleOrCross::setCross()
{
circleShape = FALSE;
redraw();
}
void CanvasCircleOrCross::drawShape(QPainter &p)
{
if ( qt_screen->deviceWidth() < 200 ) {
int x1 = (int)x(), y1 = (int)y();
// Green circle
if (circleShape == TRUE) {
p.setPen( QPen( QColor(0x10, 0xE0, 0x10), 1 ) );
p.drawEllipse( x1 - 1, y1 - 1, 17, 17);
p.drawEllipse( x1 - 1, y1 - 0, 17, 15);
p.drawEllipse( x1 + 0, y1 + 0, 15, 15);
p.drawEllipse( x1 + 1, y1 + 0, 13, 15);
p.drawEllipse( x1 + 1, y1 + 1, 13, 13);
// Red cross
} else {
p.setPen( QPen( QColor(0xE0, 0x10, 0x10), 4 ) );
p.drawLine( x1, y1, x1 + 14, y1 + 14);
p.drawLine( x1 + 14, y1, x1, y1 + 14);
}
} else {
int x1 = (int)x(), y1 = (int)y();
// Green circle
if (circleShape == TRUE) {
p.setPen( QPen( QColor(0x10, 0xE0, 0x10), 1 ) );
p.drawEllipse( x1 - 1, y1 - 1, 21, 21);
p.drawEllipse( x1 - 1, y1 - 0, 21, 19);
p.drawEllipse( x1 + 0, y1 + 0, 19, 19);
p.drawEllipse( x1 + 1, y1 + 0, 17, 19);
p.drawEllipse( x1 + 1, y1 + 1, 17, 17);
// Red cross
} else {
p.setPen( QPen( QColor(0xE0, 0x10, 0x10), 5 ) );
p.drawLine( x1, y1, x1 + 20, y1 + 20);
p.drawLine( x1 + 20, y1, x1, y1 + 20);
}
}
}
diff --git a/noncore/games/solitaire/card.cpp b/noncore/games/solitaire/card.cpp
index 609e280..52e38ac 100644
--- a/noncore/games/solitaire/card.cpp
+++ b/noncore/games/solitaire/card.cpp
@@ -1,53 +1,50 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "card.h"
-#include <qpe/config.h>
-#include <qpoint.h>
-#include <qlist.h>
/*
Card( eValue v, eSuit s, bool f ) :
val(v), suit(s), faceUp(f), showing(FALSE), ix(0), iy(0), iz(0), cardPile(NULL) { }
virtual ~Card() { }
eValue getValue() { return val; }
eSuit getSuit() { return suit; }
CardPile *getCardPile() { return cardPile; }
bool isFacing() { return faceUp; }
bool isShowing() { return showing; }
bool isRed() { return ((suit == diamonds) || (suit == hearts)); }
int getX(void) { return ix; }
int getY(void) { return iy; }
int getZ(void) { return iz; }
void setCardPile(CardPile *p) { cardPile = p; }
void setFace(bool f) { faceUp = f; }
void flip(void) { flipTo(getX(), getY()); }
virtual void setPos(int x, int y, int z) { ix = x; iy = y; iz = z; }
virtual void move(int x, int y) { ix = x; iy = y; }
virtual void move(QPoint p) { ix = p.x(); iy = p.y(); }
virtual void flipTo(int x, int y, int steps = 8) { ix = x; iy = y; faceUp = !faceUp; redraw(); Q_UNUSED(steps); }
virtual void showCard(void) { showing = TRUE; }
virtual void hideCard(void) { showing = FALSE; }
virtual void redraw(void) { }
*/
diff --git a/noncore/games/solitaire/cardpile.cpp b/noncore/games/solitaire/cardpile.cpp
index aace2e2..1d572be 100644
--- a/noncore/games/solitaire/cardpile.cpp
+++ b/noncore/games/solitaire/cardpile.cpp
@@ -1,115 +1,113 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "cardpile.h"
#include "card.h"
#include <qpe/config.h>
-#include <qpoint.h>
-#include <qlist.h>
CardPile::CardPile(int x, int y) : pileX(x), pileY(y), dealing(FALSE), PileResize(FALSE) {
pileWidth = 0;
pileHeight = 0;
pileNextX = pileX;
pileNextY = pileY;
pileCenterX = x + pileWidth / 2;
pileCenterY = y + pileHeight / 2;
pileRadius = (pileWidth > pileHeight) ? pileWidth : pileHeight;
pileOffsetDown = 13;
}
int CardPile::distanceFromPile(int x, int y) {
return (pileCenterX-x)*(pileCenterX-x)+(pileCenterY-y)*(pileCenterY-y);
}
int CardPile::distanceFromNextPos(int x, int y) {
return (pileNextX-x)*(pileNextX-x)+(pileNextY-y)*(pileNextY-y);
}
Card *CardPile::cardInfront(Card *c) {
CardPile *p = c->getCardPile();
if (p) {
p->at(p->find(c));
return p->next();
} else {
return NULL;
}
}
bool CardPile::kingOnTop() {
Card *top = cardOnTop();
return top && top->getValue() == king;
}
bool CardPile::addCardToTop(Card *c) {
if (dealing || isAllowedOnTop(c)) {
append((const Card *)c);
cardAddedToTop(c);
return TRUE;
}
return FALSE;
}
bool CardPile::addCardToBottom(Card *c) {
if (dealing || isAllowedOnBottom(c)) {
prepend((const Card *)c);
cardAddedToBottom(c);
return TRUE;
}
return FALSE;
}
bool CardPile::removeCard(Card *c) {
if (dealing || isAllowedToBeMoved(c)) {
take(find(c));
cardRemoved(c);
return TRUE;
}
return FALSE;
}
void CardPile::writeConfig( Config& cfg, QString name ) {
int numberOfCards = 0;
cfg.setGroup( name );
Card *card = cardOnBottom();
while ( card ) {
QString cardStr;
cardStr.sprintf( "%i", numberOfCards );
int val = (int)card->getValue()-1 + ((int)card->getSuit()-1)*13 + (int)card->getDeckNumber()*52;
cfg.writeEntry( "Card" + cardStr, val );
cfg.writeEntry( "CardFacing" + cardStr, card->isFacing() );
card = cardInfront( card );
numberOfCards++;
}
cfg.writeEntry("NumberOfCards", numberOfCards);
}
diff --git a/noncore/games/solitaire/chicanecardgame.cpp b/noncore/games/solitaire/chicanecardgame.cpp
index 6729a94..6c607b9 100644
--- a/noncore/games/solitaire/chicanecardgame.cpp
+++ b/noncore/games/solitaire/chicanecardgame.cpp
@@ -1,177 +1,176 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**
** created on base of patiencecardgame by cam (C.A.Mader) 2002
** Rules for this game:
** use 2 decks = 104 cards
** deal 8 rows with 3 hidden cards and one open card
** append red to black and vice versa
** each card can be layed on a free place
** deal 8 cards at once
**
**********************************************************************/
-#include <qgfx_qws.h>
#include "chicanecardgame.h"
extern int highestZ;
ChicaneCardGame::ChicaneCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent, 2) // Use 2 Decks
{
highestZ = 0;
for (int i = 0; i < 8; i++) {
discardPiles[i] = new ChicaneDiscardPile( 27 + i * 26, 10, canvas() );
addCardPile(discardPiles[i]);
}
for (int i = 0; i < 8; i++) {
workingPiles[i] = new ChicaneWorkingPile( 27 + i * 26, 50, canvas() );
addCardPile(workingPiles[i]);
}
faceDownDealingPile = new ChicaneFaceDownDeck( 2, 10, canvas() );
}
void ChicaneCardGame::deal(void)
{
highestZ = 1;
int t = 0;
beginDealing();
for (int i = 0; i < 8; i++) {
for (int k = 0; k < 4; k++, t++) {
Card *card = cards[t];
workingPiles[i]->addCardToTop(card);
card->setCardPile( workingPiles[i] );
card->setPos( 0, 0, highestZ );
card->setFace(k==3);
card->move( workingPiles[i]->getCardPos( card ) );
card->showCard();
highestZ++;
}
}
for ( ; t < getNumberOfCards(); t++) {
Card *card = cards[t];
faceDownDealingPile->addCardToTop(card);
card->setCardPile( faceDownDealingPile );
QPoint p = faceDownDealingPile->getCardPos( card );
card->setPos( p.x(), p.y(), highestZ );
card->showCard();
highestZ++;
}
endDealing();
}
void ChicaneCardGame::readConfig( Config& cfg )
{
cfg.setGroup("GameState");
// Create Cards, but don't shuffle or deal them yet
createDeck();
// Move the cards to their piles (deal them to their previous places)
beginDealing();
highestZ = 1;
for (int i = 0; i < 8; i++) {
QString pile;
pile.sprintf( "ChicaneDiscardPile%i", i );
readPile( cfg, discardPiles[i], pile, highestZ );
}
for (int i = 0; i < 8; i++) {
QString pile;
pile.sprintf( "ChicaneWorkingPile%i", i );
readPile( cfg, workingPiles[i], pile, highestZ );
}
readPile( cfg, faceDownDealingPile, "ChicaneFaceDownDealingPile", highestZ );
highestZ++;
endDealing();
}
void ChicaneCardGame::writeConfig( Config& cfg )
{
cfg.setGroup("GameState");
for ( int i = 0; i < 8; i++ ) {
QString pile;
pile.sprintf( "ChicaneDiscardPile%i", i );
discardPiles[i]->writeConfig( cfg, pile );
}
for ( int i = 0; i < 8; i++ ) {
QString pile;
pile.sprintf( "ChicaneWorkingPile%i", i );
workingPiles[i]->writeConfig( cfg, pile );
}
faceDownDealingPile->writeConfig( cfg, "ChicaneFaceDownDealingPile" );
}
bool ChicaneCardGame::mousePressCard( Card *card, QPoint p )
{
Q_UNUSED(p);
CanvasCard *item = (CanvasCard *)card;
if (item->isFacing() != TRUE) {
// From facedown stack
if ((item->x() == 2) && ((int)item->y() == 10)) { // Deal a row of 8 cards
// Move 8 cards, one to each workingPile
beginDealing();
for (int i=0; i<8 && faceDownDealingPile->cardOnTop(); i++) {
CanvasCard *card = (CanvasCard *)faceDownDealingPile->cardOnTop();
card->setZ(highestZ);
highestZ++;
faceDownDealingPile->removeCard(card);
workingPiles[i]->addCardToTop(card);
card->setCardPile( workingPiles[i] );
card->setFace(FALSE);
QPoint p = workingPiles[i]->getCardPos(card);
card->flipTo( p.x(), p.y() );
}
endDealing();
}
moving = NULL;
moved = FALSE;
return TRUE;
} else if ( !card->getCardPile()->isAllowedToBeMoved(card) ) { // Don't allow unclean columns to be moved
moving = NULL;
return TRUE;
}
return FALSE;
}
void ChicaneCardGame::mousePress(QPoint p)
{
Q_UNUSED(p);
}
diff --git a/noncore/games/solitaire/freecellcardgame.cpp b/noncore/games/solitaire/freecellcardgame.cpp
index aeb32fc..d474f4e 100644
--- a/noncore/games/solitaire/freecellcardgame.cpp
+++ b/noncore/games/solitaire/freecellcardgame.cpp
@@ -1,212 +1,211 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
-#include <qgfx_qws.h>
#include "freecellcardgame.h"
extern int highestZ;
int numberOfFreeCells = 4;
FreecellCardGame::FreecellCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent)
{
numberOfFreeCells = 4;
highestZ = 0;
int spaceBetweenPiles = ( qt_screen->deviceWidth() < 200 ) ? 21 : 28;
int xOrigin = ( qt_screen->deviceWidth() < 200 ) ? 0 : 5;
int spacing = ( qt_screen->deviceWidth() < 200 ) ? 0 : 0;
for (int i = 0; i < 4; i++) {
freecellPiles[i] = new FreecellFreecellPile( xOrigin + i * spaceBetweenPiles, 10, canvas() );
addCardPile(freecellPiles[i]);
}
for (int i = 0; i < 4; i++) {
discardPiles[i] = new FreecellDiscardPile( xOrigin + spacing + 6 + (i + 4) * spaceBetweenPiles, 10, canvas() );
addCardPile(discardPiles[i]);
}
for (int i = 0; i < 8; i++) {
workingPiles[i] = new FreecellWorkingPile( xOrigin + spacing + 2 + i * spaceBetweenPiles, 50, canvas() );
addCardPile(workingPiles[i]);
}
}
void FreecellCardGame::deal(void)
{
highestZ = 1;
beginDealing();
for (int i = 0; i < 52; i++) {
Card *card = cards[i];
card->setFace( TRUE );
card->setPos( 0, 0, highestZ );
card->setCardPile( workingPiles[i%8] );
workingPiles[i%8]->addCardToTop( card );
card->move( workingPiles[i%8]->getCardPos( card ) );
card->showCard();
highestZ++;
}
endDealing();
}
// checks if smaller card with different color, that could be put on top on the
// card, is present in working or freecell pile
bool FreecellCardGame::checkNeeded(Card *card)
{
if (card->getValue() > 2){
int i;
Card *c;
for (i=0;i<4;i++){
c = freecellPiles[i]->cardOnBottom();
if (c != NULL){
if (card->isRed()!= c->isRed() && card->getValue()== c->getValue()+1){
return (false);
}
}
}
for (i=0;i<8;i++){
c=workingPiles[i]->cardOnBottom();
while (c!=NULL){
if (card->isRed() != c->isRed() && card->getValue() == c->getValue()+1) {
return (false);
}
c=workingPiles[i]->cardInfront(c);
}
}
}
return(true);
}
// added to move cards, on which no card can be moved, to discard pile
void FreecellCardGame::checkUnusable()
{
int i,j;
// printf("void FreecellCardGame::checkUnusable()\n");
Card *top_one;
for (i=0;i < 8;i++)
{
top_one = workingPiles[i]->cardOnTop();
if (top_one != NULL)
{
j = 0;
while ((j < 4))
{
if (discardPiles[j]->isAllowedOnTop(top_one)){
if (checkNeeded(top_one)){
top_one->setCardPile(discardPiles[j]);
workingPiles[i]->removeCard(top_one);
// printf("k %d f work%d to disk%d on %d\n ",top_one->getValue(),i+1,j+1,highestZ);
discardPiles[j]->addCardToTop(top_one);
top_one->setPos(discardPiles[j]->getX(),discardPiles[j]->getY(),highestZ);
highestZ++;
j = 4;
checkUnusable();
}
}
j++;
}
}
}
for (i=0;i<4;i++){
top_one = freecellPiles[i]->cardOnTop();
if (top_one != NULL)
{
j = 0;
while ((j < 4))
{
if (discardPiles[j]->isAllowedOnTop(top_one)){
if (checkNeeded(top_one)){
top_one->setCardPile(discardPiles[j]);
freecellPiles[i]->removeCard(top_one);
// printf("k %d f work%d to disk%d on %d\n ",top_one->getValue(),i+1,j+1,highestZ);
discardPiles[j]->addCardToTop(top_one);
top_one->setPos(discardPiles[j]->getX(),discardPiles[j]->getY(),highestZ);
highestZ++;
j = 4;
checkUnusable();
}
}
j++;
}
}
}
}
bool FreecellCardGame::mousePressCard( Card *c, QPoint p )
{
Q_UNUSED(p);
if ( !c->getCardPile()->isAllowedToBeMoved(c) ) {
moving = NULL;
return TRUE;
}
return FALSE;
}
void FreecellCardGame::readConfig( Config& cfg )
{
cfg.setGroup("GameState");
// Create Cards, but don't shuffle or deal them yet
createDeck();
// Move the cards to their piles (deal them to their previous places)
beginDealing();
highestZ = 1;
for (int k = 0; k < 4; k++) {
QString pile;
pile.sprintf( "FreeCellPile%i", k );
readPile( cfg, freecellPiles[k], pile, highestZ );
}
for (int k = 0; k < 4; k++) {
QString pile;
pile.sprintf( "DiscardPile%i", k );
readPile( cfg, discardPiles[k], pile, highestZ );
}
for (int k = 0; k < 8; k++) {
QString pile;
pile.sprintf( "WorkingPile%i", k );
readPile( cfg, workingPiles[k], pile, highestZ );
}
highestZ++;
endDealing();
}
void FreecellCardGame::writeConfig( Config& cfg )
{
cfg.setGroup("GameState");
for ( int i = 0; i < 4; i++ ) {
QString pile;
pile.sprintf( "FreeCellPile%i", i );
freecellPiles[i]->writeConfig( cfg, pile );
}
diff --git a/noncore/games/solitaire/harpcardgame.cpp b/noncore/games/solitaire/harpcardgame.cpp
index 0711622..d13d73b 100644
--- a/noncore/games/solitaire/harpcardgame.cpp
+++ b/noncore/games/solitaire/harpcardgame.cpp
@@ -1,179 +1,178 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**
** created on base of patiencecardgame by cam (C.A.Mader) 2002
** Rules for this game:
** use 2 decks = 104 cards
** deal 8 rows with one open card in the first place
** one hidden and one open in the second place and so on
** append red to black and vice versa
** each card can be layed on a free place
** deal 8 cards at once
**
**
**********************************************************************/
-#include <qgfx_qws.h>
#include "harpcardgame.h"
extern int highestZ;
HarpCardGame::HarpCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent, 2) // Use 2 Decks
{
highestZ = 0;
for (int i = 0; i < 8; i++) {
discardPiles[i] = new HarpDiscardPile( 27 + i * 26, 10, canvas() );
addCardPile(discardPiles[i]);
}
for (int i = 0; i < 8; i++) {
workingPiles[i] = new HarpWorkingPile( 27 + i * 26, 50, canvas() );
addCardPile(workingPiles[i]);
}
faceDownDealingPile = new HarpFaceDownDeck( 2, 10, canvas() );
}
void HarpCardGame::deal(void)
{
highestZ = 1;
int t = 0;
beginDealing();
for (int i = 0; i < 8; i++) {
for (int k = 0; k < i+1; k++, t++) {
Card *card = cards[t];
workingPiles[i]->addCardToTop(card);
card->setCardPile( workingPiles[i] );
card->setPos( 0, 0, highestZ );
card->setFace(k==i);
card->move( workingPiles[i]->getCardPos( card ) );
card->showCard();
highestZ++;
}
}
for ( ; t < getNumberOfCards(); t++) {
Card *card = cards[t];
faceDownDealingPile->addCardToTop(card);
card->setCardPile( faceDownDealingPile );
QPoint p = faceDownDealingPile->getCardPos( card );
card->setPos( p.x(), p.y(), highestZ );
card->showCard();
highestZ++;
}
endDealing();
}
void HarpCardGame::readConfig( Config& cfg )
{
cfg.setGroup("GameState");
// Create Cards, but don't shuffle or deal them yet
createDeck();
// Move the cards to their piles (deal them to their previous places)
beginDealing();
highestZ = 1;
for (int i = 0; i < 8; i++) {
QString pile;
pile.sprintf( "HarpDiscardPile%i", i );
readPile( cfg, discardPiles[i], pile, highestZ );
}
for (int i = 0; i < 8; i++) {
QString pile;
pile.sprintf( "HarpWorkingPile%i", i );
readPile( cfg, workingPiles[i], pile, highestZ );
}
readPile( cfg, faceDownDealingPile, "HarpFaceDownDealingPile", highestZ );
highestZ++;
endDealing();
}
void HarpCardGame::writeConfig( Config& cfg )
{
cfg.setGroup("GameState");
for ( int i = 0; i < 8; i++ ) {
QString pile;
pile.sprintf( "HarpDiscardPile%i", i );
discardPiles[i]->writeConfig( cfg, pile );
}
for ( int i = 0; i < 8; i++ ) {
QString pile;
pile.sprintf( "HarpWorkingPile%i", i );
workingPiles[i]->writeConfig( cfg, pile );
}
faceDownDealingPile->writeConfig( cfg, "HarpFaceDownDealingPile" );
}
bool HarpCardGame::mousePressCard( Card *card, QPoint p )
{
Q_UNUSED(p);
CanvasCard *item = (CanvasCard *)card;
if (item->isFacing() != TRUE) {
// From facedown stack
if ((item->x() == 2) && ((int)item->y() == 10)) { // Deal a row of 8 cards
// Move 8 cards, one to each workingPile
beginDealing();
for (int i=0; i<8 && faceDownDealingPile->cardOnTop(); i++) {
CanvasCard *card = (CanvasCard *)faceDownDealingPile->cardOnTop();
card->setZ(highestZ);
highestZ++;
faceDownDealingPile->removeCard(card);
workingPiles[i]->addCardToTop(card);
card->setCardPile( workingPiles[i] );
card->setFace(FALSE);
QPoint p = workingPiles[i]->getCardPos(card);
card->flipTo( p.x(), p.y() );
}
endDealing();
}
moving = NULL;
moved = FALSE;
return TRUE;
} else if ( !card->getCardPile()->isAllowedToBeMoved(card) ) { // Don't allow unclean columns to be moved
moving = NULL;
return TRUE;
}
return FALSE;
}
void HarpCardGame::mousePress(QPoint p)
{
Q_UNUSED(p);
}
diff --git a/noncore/games/solitaire/main.cpp b/noncore/games/solitaire/main.cpp
index bd3cf8b..9301171 100644
--- a/noncore/games/solitaire/main.cpp
+++ b/noncore/games/solitaire/main.cpp
@@ -1,26 +1,25 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "canvascardwindow.h"
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<CanvasCardWindow> ) \ No newline at end of file
diff --git a/noncore/games/solitaire/patiencecardgame.cpp b/noncore/games/solitaire/patiencecardgame.cpp
index 96a599c..756577a 100644
--- a/noncore/games/solitaire/patiencecardgame.cpp
+++ b/noncore/games/solitaire/patiencecardgame.cpp
@@ -1,212 +1,211 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
-#include <qgfx_qws.h>
#include "patiencecardgame.h"
int highestZ = 0;
PatienceCardGame::PatienceCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent)
{
numberOfTimesThroughDeck = 0;
highestZ = 0;
if ( qt_screen->deviceWidth() < 200 )
{
circleCross = new CanvasCircleOrCross( 7, 16, canvas() );
rectangle = new CanvasRoundRect( 30, 10, canvas() );
for (int i = 0; i < 4; i++)
{
discardPiles[i] = new PatienceDiscardPile( 78 + i * 23, 10, canvas() );
addCardPile(discardPiles[i]);
}
for (int i = 0; i < 7; i++)
{
workingPiles[i] = new PatienceWorkingPile( 5 + i * 23, 50, canvas() );
addCardPile(workingPiles[i]);
}
faceDownDealingPile = new PatienceFaceDownDeck( 5, 10, canvas() );
faceUpDealingPile = new PatienceFaceUpDeck( 30, 10, canvas() );
}
else
{
circleCross = new CanvasCircleOrCross( 7, 18, canvas() );
rectangle = new CanvasRoundRect( 35, 10, canvas() );
for (int i = 0; i < 4; i++)
{
discardPiles[i] = new PatienceDiscardPile( 110 + i * 30, 10, canvas() );
addCardPile(discardPiles[i]);
}
for (int i = 0; i < 7; i++)
{
workingPiles[i] = new PatienceWorkingPile( 10 + i * 30, 50, canvas() );
addCardPile(workingPiles[i]);
}
faceDownDealingPile = new PatienceFaceDownDeck( 5, 10, canvas() );
faceUpDealingPile = new PatienceFaceUpDeck( 35, 10, canvas() );
}
}
PatienceCardGame::~PatienceCardGame()
{
delete circleCross;
delete rectangle;
delete faceDownDealingPile;
delete faceUpDealingPile;
}
void PatienceCardGame::deal(void)
{
highestZ = 1;
int t = 0;
beginDealing();
for (int i = 0; i < 7; i++)
{
cards[t]->setFace(TRUE);
for (int k = i; k < 7; k++, t++)
{
Card *card = cards[t];
workingPiles[k]->addCardToTop(card);
card->setCardPile( workingPiles[k] );
QPoint p = workingPiles[k]->getCardPos( card );
card->setPos( p.x(), p.y(), highestZ );
card->showCard();
highestZ++;
}
}
for ( ; t < 52; t++)
{
Card *card = cards[t];
faceDownDealingPile->addCardToTop(card);
card->setCardPile( faceDownDealingPile );
QPoint p = faceDownDealingPile->getCardPos( card );
card->setPos( p.x(), p.y(), highestZ );
card->showCard();
highestZ++;
}
endDealing();
}
void PatienceCardGame::readConfig( Config& cfg )
{
cfg.setGroup("GameState");
// Do we have a config file to read in?
if ( !cfg.hasKey("numberOfTimesThroughDeck") )
{
// if not, create a new game
newGame();
return;
}
// We have a config file, lets read it in and use it
// Create Cards, but don't shuffle or deal them yet
createDeck();
// How many times through the deck have we been
numberOfTimesThroughDeck = cfg.readNumEntry("numberOfTimesThroughDeck");
// restore state to the circle/cross under the dealing pile
if ( canTurnOverDeck() )
circleCross->setCircle();
else
circleCross->setCross();
// Move the cards to their piles (deal them to their previous places)
beginDealing();
highestZ = 1;
for (int k = 0; k < 7; k++)
{
QString pile;
pile.sprintf( "WorkingPile%i", k );
readPile( cfg, workingPiles[k], pile, highestZ );
}
for (int k = 0; k < 4; k++)
{
QString pile;
pile.sprintf( "DiscardPile%i", k );
readPile( cfg, discardPiles[k], pile, highestZ );
}
readPile( cfg, faceDownDealingPile, "FaceDownDealingPile", highestZ );
readPile( cfg, faceUpDealingPile, "FaceUpDealingPile", highestZ );
highestZ++;
endDealing();
}
void PatienceCardGame::writeConfig( Config& cfg )
{
cfg.setGroup("GameState");
cfg.writeEntry("numberOfTimesThroughDeck", numberOfTimesThroughDeck);
for ( int i = 0; i < 7; i++ )
{
QString pile;
pile.sprintf( "WorkingPile%i", i );
workingPiles[i]->writeConfig( cfg, pile );
}
for ( int i = 0; i < 4; i++ )
{
QString pile;
pile.sprintf( "DiscardPile%i", i );
discardPiles[i]->writeConfig( cfg, pile );
}
faceDownDealingPile->writeConfig( cfg, "FaceDownDealingPile" );
faceUpDealingPile->writeConfig( cfg, "FaceUpDealingPile" );
}
bool PatienceCardGame::mousePressCard( Card *card, QPoint p )
{
Q_UNUSED(p);
CanvasCard *item = (CanvasCard *)card;
if (item->isFacing() != TRUE)
{
// From facedown stack
if ((item->x() == 5) && ((int)item->y() == 10))
{
item->setZ(highestZ);
highestZ++;
// Added Code
faceDownDealingPile->removeCard(item);
faceUpDealingPile->addCardToTop(item);
item->setCardPile( faceUpDealingPile );
if ( qt_screen->deviceWidth() < 200 )
item->flipTo( 30, (int)item->y() );
else
diff --git a/noncore/games/solitaire/teeclubcardgame.cpp b/noncore/games/solitaire/teeclubcardgame.cpp
index 0941e0d..b1af757 100644
--- a/noncore/games/solitaire/teeclubcardgame.cpp
+++ b/noncore/games/solitaire/teeclubcardgame.cpp
@@ -1,202 +1,201 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**
** created on base of patiencecardgame by cam (C.A.Mader) 2002
** Rules for this game:
** use 2 decks = 104 cards
** deal 9 rows with 5 open cards each
** append one card to each other card which is one step higher
** move only columns of cards which are equal in suit
** each card can be layed on a free place
** deal 1 card at once on the first pile
**
**
**********************************************************************/
-#include <qgfx_qws.h>
#include "teeclubcardgame.h"
extern int highestZ;
TeeclubCardGame::TeeclubCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent, 2) // Use 2 Decks
{
highestZ = 0;
for (int i = 0; i < 8; i++) {
discardPiles[i] = new TeeclubDiscardPile( 27 + i * 26, 10, canvas() );
addCardPile(discardPiles[i]);
}
for (int i = 0; i < 9; i++) {
workingPiles[i] = new TeeclubWorkingPile( 2 + i * 26, 50, canvas() );
addCardPile(workingPiles[i]);
}
faceDownDealingPile = new TeeclubFaceDownDeck( 2, 10, canvas() );
}
void TeeclubCardGame::deal(void)
{
highestZ = 1;
int t = 0;
beginDealing();
for (int i = 0; i < 9; i++) {
workingPiles[i]->setOffsetDown(13);
workingPiles[i]->beginPileResize();
for (int k = 0; k < 5; k++, t++) {
Card *card = cards[t];
workingPiles[i]->addCardToTop(card);
card->setCardPile( workingPiles[i] );
card->setPos( 0, 0, highestZ );
card->setFace(TRUE);
card->move( workingPiles[i]->getCardPos( card ) );
card->showCard();
highestZ++;
}
}
for ( ; t < getNumberOfCards(); t++) {
Card *card = cards[t];
faceDownDealingPile->addCardToTop(card);
card->setCardPile( faceDownDealingPile );
QPoint p = faceDownDealingPile->getCardPos( card );
card->setPos( p.x(), p.y(), highestZ );
card->showCard();
highestZ++;
}
endDealing();
}
void TeeclubCardGame::resizePiles()
{
beginDealing();
for (int i = 0; i < 9; i++) {
while ((workingPiles[i]->getCardPos(NULL).y() > 230) && (workingPiles[i]->getOffsetDown()>1)) {
// resize the pile
workingPiles[i]->setOffsetDown(workingPiles[i]->getOffsetDown()-1);
Card *card = workingPiles[i]->cardOnBottom();
int p=0;
while (card != NULL) {
card->setPos( 0, 0, p++ );
card->move( workingPiles[i]->getCardPos( card ) );
card = workingPiles[i]->cardInfront(card);
}
}
}
endDealing();
}
void TeeclubCardGame::readConfig( Config& cfg )
{
cfg.setGroup("GameState");
// Create Cards, but don't shuffle or deal them yet
createDeck();
// Move the cards to their piles (deal them to their previous places)
beginDealing();
highestZ = 1;
for (int i = 0; i < 8; i++) {
QString pile;
pile.sprintf( "TeeclubDiscardPile%i", i );
readPile( cfg, discardPiles[i], pile, highestZ );
}
for (int i = 0; i < 9; i++) {
workingPiles[i]->endPileResize();
QString pile;
pile.sprintf( "TeeclubWorkingPile%i", i );
readPile( cfg, workingPiles[i], pile, highestZ );
workingPiles[i]->beginPileResize();
}
readPile( cfg, faceDownDealingPile, "TeeclubFaceDownDealingPile", highestZ );
highestZ++;
endDealing();
resizePiles();
}
void TeeclubCardGame::writeConfig( Config& cfg )
{
cfg.setGroup("GameState");
for ( int i = 0; i < 8; i++ ) {
QString pile;
pile.sprintf( "TeeclubDiscardPile%i", i );
discardPiles[i]->writeConfig( cfg, pile );
}
for ( int i = 0; i < 9; i++ ) {
QString pile;
pile.sprintf( "TeeclubWorkingPile%i", i );
workingPiles[i]->writeConfig( cfg, pile );
}
faceDownDealingPile->writeConfig( cfg, "TeeclubFaceDownDealingPile" );
}
bool TeeclubCardGame::mousePressCard( Card *card, QPoint p )
{
Q_UNUSED(p);
CanvasCard *item = (CanvasCard *)card;
if (item->isFacing() != TRUE) {
// From facedown stack
if ((item->x() == 2) && ((int)item->y() == 10)) { // Deal 1 card
// Move 8 cards, one to each workingPile
beginDealing();
CanvasCard *card = (CanvasCard *)faceDownDealingPile->cardOnTop();
card->setZ(highestZ);
highestZ++;
faceDownDealingPile->removeCard(card);
workingPiles[0]->addCardToTop(card);
card->setCardPile( workingPiles[0] );
card->setFace(FALSE);
QPoint p = workingPiles[0]->getCardPos(card);
card->flipTo( p.x(), p.y() );
endDealing();
}
moving = NULL;
moved = FALSE;
return TRUE;
} else if ( !card->getCardPile()->isAllowedToBeMoved(card) ) { // Don't allow unclean columns to be moved
moving = NULL;
return TRUE;
}
return FALSE;
}
void TeeclubCardGame::mousePress(QPoint p)
{
Q_UNUSED(p);
}
diff --git a/noncore/games/tetrix/main.cpp b/noncore/games/tetrix/main.cpp
index fcf4b33..bf1242f 100644
--- a/noncore/games/tetrix/main.cpp
+++ b/noncore/games/tetrix/main.cpp
@@ -1,28 +1,27 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "qtetrix.h"
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<QTetrix> )
diff --git a/noncore/games/tetrix/ohighscoredlg.cpp b/noncore/games/tetrix/ohighscoredlg.cpp
index 7581f51..8d8079e 100644
--- a/noncore/games/tetrix/ohighscoredlg.cpp
+++ b/noncore/games/tetrix/ohighscoredlg.cpp
@@ -1,200 +1,199 @@
/***************************************************************************
begin : January 2003
copyright : ( C ) 2003 by Carsten Niehaus
email : cniehaus@handhelds.org
**************************************************************************/
/***************************************************************************
* *
* 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. *
* *
**************************************************************************/
#include <qdialog.h>
-#include <qpe/config.h>
#include <qlayout.h>
-#include <qpe/config.h>
#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
#include <qstring.h>
#include <qhbox.h>
#include <qvbox.h>
#include <qlabel.h>
#include <qlistview.h>
#include <qlineedit.h>
#include "ohighscoredlg.h"
OHighscore::OHighscore( int score , int playerLevel )
{
pLevel = playerLevel;
getList();
checkIfItIsANewhighscore( score );
}
OHighscore::~OHighscore()
{
std::list<t_playerData*>::iterator deleteIterator = playerData.begin();
for ( ; deleteIterator != playerData.end() ; deleteIterator++ )
{
delete ( *deleteIterator );
}
}
void OHighscore::getList()
{
Config cfg ( "tetrix" );
cfg.setGroup( QString::number( 1 ) );
lowest = cfg.readNumEntry( "Points" );
playerData.clear();
int rest = 1; //for the filling up later
for ( int i = 1 ; i < 11 ; i++ )
{
if ( cfg.hasGroup( QString::number( i ) ) )
{
cfg.setGroup( QString::number( i ) );
int temp = cfg.readNumEntry( "Points" );
t_playerData *pPlayerData = new t_playerData;
pPlayerData->sName = cfg.readEntry( "Name" );
pPlayerData->points = temp;
pPlayerData->level = cfg.readNumEntry( "Level" );
playerData.push_back( pPlayerData );
if ( (temp < lowest) ) lowest = temp;
rest++;
}
}
//now I fill up the rest of the list
if ( rest < 11 ) //only go in this loop if there are less than
//10 highscoreentries
{
lowest = 0;
for ( ; rest < 11 ; rest++ )
{
t_playerData *pPlayerData = new t_playerData;
pPlayerData->sName = tr( "empty");
pPlayerData->points = 0;
pPlayerData->level = 0;
playerData.push_back( pPlayerData );
}
}
}
void OHighscore::checkIfItIsANewhighscore( int points)
{
if ( points > lowest )
isNewhighscore = true;
else
isNewhighscore = false;
}
void OHighscore::insertData( QString name , int punkte , int playerLevel )
{
Config cfg ( "tetrix" );
int entryNumber = 1;
std::list<t_playerData*>::iterator insertIterator = playerData.begin();
while ( insertIterator != playerData.end() )
{
if ( punkte > ( *insertIterator )->points )
{
t_playerData* temp = new t_playerData;
temp->sName = name;
temp->points = punkte;
temp->level = playerLevel;
playerData.insert( insertIterator , temp );
//now we have to delete the last entry
insertIterator = playerData.end();
insertIterator--;
//X delete *insertIterator; //memleak?
playerData.erase( insertIterator );
/////////////////////////////////////////
//this block just rewrites the highscore
insertIterator = playerData.begin();
while ( insertIterator != playerData.end() )
{
cfg.setGroup( QString::number( entryNumber ) );
cfg.writeEntry( "Name" , ( *insertIterator )->sName );
cfg.writeEntry( "Points" , ( *insertIterator )->points );
cfg.writeEntry( "Level" , ( *insertIterator )->level );
entryNumber++;
insertIterator++;
}
////////////////////////////////////////
return;
}
insertIterator++;
}
}
QString OHighscore::getName()
{
QString name;
QDialog *d = new QDialog ( this, 0, true );
d->setCaption( tr( "Enter your name!" ));
QLineEdit *ed = new QLineEdit ( d );
( new QVBoxLayout ( d, 3, 3 ))->addWidget ( ed );
ed->setFocus ( );
if ( d->exec() == QDialog::Accepted ) {
name = ed->text();
}
//delete d;
return name;
}
OHighscoreDialog::OHighscoreDialog(OHighscore *highscore, QWidget *parent, const char *name, bool modal) : QDialog(parent, name, modal)
{
hs_ = highscore;
setCaption( tr( "Highscores" ) );
vbox_layout = new QVBoxLayout( this, 4 , 4 );
list = new QListView( this );
list->setSorting( -1 );
list->addColumn( tr( "#" ));
list->addColumn( tr( "Name" ));
list->addColumn( tr( "Points" ));
list->addColumn( tr( "Level" ));
createHighscoreListView();
vbox_layout->addWidget( list );
QPEApplication::showDialog( this );
}
void OHighscoreDialog::createHighscoreListView()
{
int pos = 10;
int points_ = 0;
int level_ = 0;
std::list<t_playerData*>::reverse_iterator iListe = hs_->playerData.rbegin();
for ( ; iListe != hs_->playerData.rend() ; ++iListe )
{
QListViewItem *item = new QListViewItem( list );
item->setText( 0 , QString::number( pos ) ); //number
item->setText( 1 , ( *iListe )->sName ); //name
if ( ( *iListe )->points == -1 )
points_ = 0;
else points_ = ( *iListe )->points;
if ( ( *iListe )->level == -1 )
level_ = 0;
else level_ = ( *iListe )->level;
item->setText( 2 , QString::number( points_ ) ); //points
item->setText( 3 , QString::number( level_ ) ); //level
pos--;
}
}
diff --git a/noncore/games/tetrix/qtetrix.cpp b/noncore/games/tetrix/qtetrix.cpp
index 6d29c3f..20cf1a7 100644
--- a/noncore/games/tetrix/qtetrix.cpp
+++ b/noncore/games/tetrix/qtetrix.cpp
@@ -1,177 +1,174 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "qtetrix.h"
#include <qpe/resource.h>
-#include <qpe/config.h>
-#include <qapplication.h>
#include <qlabel.h>
#include <qdatetime.h>
#include <qlayout.h>
-#include <qstring.h>
#include "ohighscoredlg.h"
void drawTetrixButton( QPainter *p, int x, int y, int w, int h,
const QColor *color )
{
QColor fc;
if ( color ) {
QPointArray a;
a.setPoints( 3, x,y+h-1, x,y, x+w-1,y );
p->setPen( color->light() );
p->drawPolyline( a );
a.setPoints( 3, x+1,y+h-1, x+w-1,y+h-1, x+w-1,y+1 );
p->setPen( color->dark() );
p->drawPolyline( a );
x++;
y++;
w -= 2;
h -= 2;
fc = *color;
}
else
fc = p->backgroundColor();
p->fillRect( x, y, w, h, fc );
}
ShowNextPiece::ShowNextPiece( QWidget *parent, const char *name )
: QFrame( parent, name )
{
setFrameStyle( QFrame::Panel | QFrame::Sunken );
xOffset = -1; // -1 until first resizeEvent.
}
void ShowNextPiece::resizeEvent( QResizeEvent *e )
{
QSize sz = e->size();
blockWidth = (sz.width() - 3)/5;
blockHeight = (sz.height() - 3)/6;
xOffset = (sz.width() - 3)/5;
yOffset = (sz.height() - 3)/6;
}
void ShowNextPiece::paintEvent( QPaintEvent * )
{
QPainter p( this );
drawFrame( &p );
p.end(); // explicit end() so any slots can paint too
emit update();
}
void ShowNextPiece::drawNextSquare(int x, int y,QColor *color)
{
if (xOffset == -1) // Before first resizeEvent?
return;
QPainter paint;
paint.begin(this);
drawTetrixButton( &paint, xOffset+x*blockWidth, yOffset+y*blockHeight,
blockWidth, blockHeight, color );
paint.end();
}
QTetrix::QTetrix( QWidget *parent, const char *name, WFlags f )
: QMainWindow( parent, name, f )
{
setIcon( Resource::loadPixmap( "tetrix_icon" ) );
setCaption( tr("Tetrix" ) );
QTime t = QTime::currentTime();
TetrixPiece::setRandomSeed( (((double)t.hour())+t.minute()+t.second())/
(24+60+60) );
QWidget *gameArea = new QWidget( this );
setCentralWidget( gameArea );
QGridLayout *gl = new QGridLayout( gameArea, 5, 3, 8 );
QLabel *l;
l = new QLabel( tr("Next"), gameArea );
gl->addWidget( l, 0, 0 );
showNext = new ShowNextPiece(gameArea);
showNext->setBackgroundColor(QColor(0,0,0));
gl->addWidget( showNext, 0, 1 );
l = new QLabel( tr("Score"), gameArea );
gl->addWidget( l, 1, 0 );
showScore = new QLabel(gameArea);
gl->addWidget( showScore, 1, 1 );
l = new QLabel( tr("Level"), gameArea );
gl->addWidget( l, 2, 0 );
showLevel = new QLabel(gameArea);
gl->addWidget( showLevel, 2, 1 );
l = new QLabel( tr("Removed"), gameArea );
gl->addWidget( l, 3, 0 );
showLines = new QLabel(gameArea);
gl->addWidget( showLines, 3, 1 );
board = new QTetrixBoard(gameArea);
board->setBackgroundColor(QColor(0,0,0));
board->setFixedWidth( 124 );
gl->addMultiCellWidget( board, 0, 4, 2, 2 );
gl->addColSpacing( 2, 100 );
gl->addColSpacing( 1, 35 );
gl->addRowSpacing( 0, 35 );
QPushButton *pb = new QPushButton( tr("Start"), gameArea );
pb->setFocusPolicy( NoFocus );
connect( pb, SIGNAL( clicked() ), board, SLOT( start() ) );
gl->addMultiCellWidget( pb, 4, 4, 0, 1 );
connect( board, SIGNAL(gameOverSignal()), SLOT(gameOver()) );
connect( board, SIGNAL(drawNextSquareSignal(int,int,QColor*)), showNext,
SLOT(drawNextSquare(int,int,QColor*)) );
connect( showNext, SIGNAL(update()), board, SLOT(updateNext()) );
connect( board, SIGNAL(updateScoreSignal(int)), showScore,
SLOT(setNum(int)) );
connect( board, SIGNAL(updateLevelSignal(int)), showLevel,
SLOT(setNum(int)));
connect( board, SIGNAL(updateRemovedSignal(int)), showLines,
SLOT(setNum(int)));
showScore->setNum( 0 );
showLevel->setNum( 0 );
showLines->setNum( 0 );
board->revealNextPiece(TRUE);
board->setFocusPolicy( StrongFocus );
}
void QTetrix::gameOver()
{
OHighscore *hs = new OHighscore( showScore->text().toInt() , showLevel->text().toInt() );
if ( hs->isNewhighscore )
hs->insertData( hs->getName(), showScore->text().toInt() , showLevel->text().toInt() );
OHighscoreDialog hscdlg( hs, this, "OHighscoreDialog", true );
hscdlg.exec();
}
void QTetrix::quit()
{
close();
}
diff --git a/noncore/games/tetrix/qtetrixb.cpp b/noncore/games/tetrix/qtetrixb.cpp
index 521f171..3c179df 100644
--- a/noncore/games/tetrix/qtetrixb.cpp
+++ b/noncore/games/tetrix/qtetrixb.cpp
@@ -1,218 +1,216 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "qtetrixb.h"
#include "qtetrix.h"
#include <qtimer.h>
-#include <qkeycode.h>
-#include <qpainter.h>
const int waitAfterLineTime = 500;
QTetrixBoard::QTetrixBoard( QWidget *p, const char *name )
: QFrame( p, name )
{
setFrameStyle( QFrame::Panel | QFrame::Sunken );
paint = 0;
timer = new QTimer(this);
connect( timer, SIGNAL(timeout()), SLOT(timeout()) );
colors[0].setRgb(200,100,100);
colors[1].setRgb(100,200,100);
colors[2].setRgb(100,100,200);
colors[3].setRgb(200,200,100);
colors[4].setRgb(200,100,200);
colors[5].setRgb(100,200,200);
colors[6].setRgb(218,170, 0);
xOffset = -1; // -1 until a resizeEvent is received.
blockWidth = 20;
yOffset = 30;
blockHeight = 20;
noGame = TRUE;
isPaused = FALSE;
waitingAfterLine = FALSE;
updateTimeoutTime(); // Sets timeoutTime
}
void QTetrixBoard::startGame(int gameType,int fillRandomLines)
{
if ( isPaused )
return; // ignore if game is paused
noGame = FALSE;
GenericTetrix::startGame( gameType, fillRandomLines );
// Note that the timer is started by updateLevel!
}
void QTetrixBoard::pause()
{
if ( noGame ) // game not active
return;
isPaused = !isPaused;
if ( isPaused ) {
timer->stop();
hideBoard();
}
else
timer->start(timeoutTime);
update();
}
void QTetrixBoard::drawSquare(int x,int y,int value)
{
if (xOffset == -1) // Before first resizeEvent?
return;
const int X = xOffset + x*blockWidth;
const int Y = yOffset + (y - 1)*blockHeight;
bool localPainter = paint == 0;
QPainter *p;
if ( localPainter )
p = new QPainter( this );
else
p = paint;
drawTetrixButton( p, X, Y, blockWidth, blockHeight,
value == 0 ? 0 : &colors[value-1] );
/*
if ( value != 0 ) {
QColor tc, bc;
tc = colors[value-1].light();
bc = colors[value-1].dark();
p->drawShadePanel( X, Y, blockWidth, blockHeight,
tc, bc, 1, colors[value-1], TRUE );
}
else
p->fillRect( X, Y, blockWidth, blockHeight, backgroundColor() );
*/
if ( localPainter )
delete p;
}
void QTetrixBoard::drawNextSquare( int x, int y, int value )
{
if ( value == 0 )
emit drawNextSquareSignal (x, y, 0 );
else
emit drawNextSquareSignal( x, y, &colors[value-1] );
}
void QTetrixBoard::updateRemoved( int noOfLines )
{
if ( noOfLines > 0 ) {
timer->stop();
timer->start( waitAfterLineTime );
waitingAfterLine = TRUE;
}
emit updateRemovedSignal( noOfLines );
}
void QTetrixBoard::updateScore( int newScore )
{
emit updateScoreSignal( newScore );
}
void QTetrixBoard::updateLevel( int newLevel )
{
timer->stop();
updateTimeoutTime();
timer->start( timeoutTime );
emit updateLevelSignal( newLevel );
}
void QTetrixBoard::pieceDropped(int)
{
if ( waitingAfterLine ) // give player a break if a line has been removed
return;
newPiece();
}
void QTetrixBoard::gameOver()
{
timer->stop();
noGame = TRUE;
emit gameOverSignal();
}
void QTetrixBoard::timeout()
{
if ( waitingAfterLine ) {
timer->stop();
waitingAfterLine = FALSE;
newPiece();
timer->start( timeoutTime );
} else {
oneLineDown();
}
}
void QTetrixBoard::drawContents( QPainter *p )
{
const char *text = "Press \"Pause\"";
QRect r = contentsRect();
paint = p; // set widget painter
if ( isPaused ) {
p->drawText( r, AlignCenter | AlignVCenter, text );
return;
}
int x1,y1,x2,y2;
x1 = (r.left() - xOffset) / blockWidth;
if (x1 < 0)
x1 = 0;
if (x1 >= boardWidth())
x1 = boardWidth() - 1;
x2 = (r.right() - xOffset) / blockWidth;
if (x2 < 0)
x2 = 0;
if (x2 >= boardWidth())
x2 = boardWidth() - 1;
y1 = (r.top() - yOffset) / blockHeight;
if (y1 < 0)
y1 = 0;
if (y1 >= boardHeight())
y1 = boardHeight() - 1;
y2 = (r.bottom() - yOffset) / blockHeight;
if (y2 < 0)
y2 = 0;
if (y2 >= boardHeight())
y2 = boardHeight() - 1;
updateBoard( x1, y1, x2, y2, TRUE );
paint = 0; // reset widget painter
return;
}
void QTetrixBoard::resizeEvent(QResizeEvent *e)
{
QSize sz = e->size();
blockWidth = (sz.width() - 2)/10;
blockHeight = (sz.height() - 2)/22;
xOffset = 1;
//yOffset = 1;
yOffset = (sz.height() - 2) - (blockHeight *22);
}
void QTetrixBoard::keyPressEvent( QKeyEvent *e )
diff --git a/noncore/games/tictac/main.cpp b/noncore/games/tictac/main.cpp
index cfff683..9aafe4c 100644
--- a/noncore/games/tictac/main.cpp
+++ b/noncore/games/tictac/main.cpp
@@ -1,13 +1,12 @@
/****************************************************************************
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of an example program for Qt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
#include "tictac.h"
OPIE_EXPORT_APP( OApplicationFactory<TicTacToe> )
diff --git a/noncore/games/tictac/tictac.cpp b/noncore/games/tictac/tictac.cpp
index 9de3b58..12ce35f 100644
--- a/noncore/games/tictac/tictac.cpp
+++ b/noncore/games/tictac/tictac.cpp
@@ -1,213 +1,209 @@
/****************************************************************************
** tictac.cpp,v 1.3.8.1 2003/08/29 06:50:40 harlekin Exp
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of an example program for Qt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "tictac.h"
#include <qpe/qpeapplication.h>
-#include <qpainter.h>
#include <qdrawutil.h>
#include <qcombobox.h>
-#include <qcheckbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <stdlib.h> // rand() function
-#include <qdatetime.h> // seed for rand()
-#include <qstringlist.h> //needed for proper internationalization
//***************************************************************************
//* TicTacButton member functions
//***************************************************************************
// --------------------------------------------------------------------------
// Creates a TicTacButton
//
TicTacButton::TicTacButton( QWidget *parent ) : QPushButton( parent )
{
t = Blank; // initial type
}
// --------------------------------------------------------------------------
// Paints TicTacButton
//
void TicTacButton::drawButtonLabel( QPainter *p )
{
QRect r = rect();
p->setPen( QPen( white,2 ) ); // set fat pen
if ( t == Circle ) {
p->drawEllipse( r.left()+4, r.top()+4, r.width()-8, r.height()-8 );
} else if ( t == Cross ) { // draw cross
p->drawLine( r.topLeft() +QPoint(4,4), r.bottomRight()-QPoint(4,4));
p->drawLine( r.bottomLeft()+QPoint(4,-4),r.topRight() -QPoint(4,-4));
}
}
//***************************************************************************
//* TicTacGameBoard member functions
//***************************************************************************
// --------------------------------------------------------------------------
// Creates a game board with N x N buttons and connects the "clicked()"
// signal of all buttons to the "buttonClicked()" slot.
//
TicTacGameBoard::TicTacGameBoard( int n, QWidget *parent, const char *name )
: QWidget( parent, name )
{
QPEApplication::showWidget( this );
st = Init; // initial state
nBoard = n;
n *= n; // make square
comp_starts = FALSE; // human starts
buttons = new TicTacButtons(n); // create real buttons
btArray = new TicTacArray(n); // create button model
QGridLayout * grid = new QGridLayout( this, 3, 3, 4 );
QPalette p( blue );
for ( int i=0; i<n; i++ ) { // create and connect buttons
TicTacButton *ttb = new TicTacButton( this );
ttb->setPalette( p );
ttb->setEnabled( FALSE );
connect( ttb, SIGNAL(clicked()), SLOT(buttonClicked()) );
grid->addWidget( ttb, i%3, i/3 );
buttons->insert( i, ttb );
btArray->at(i) = TicTacButton::Blank; // initial button type
}
QTime t = QTime::currentTime(); // set random seed
srand( t.hour()*12+t.minute()*60+t.second()*60 );
}
TicTacGameBoard::~TicTacGameBoard()
{
delete buttons;
delete btArray;
}
// --------------------------------------------------------------------------
// TicTacGameBoard::computerStarts( bool v )
//
// Computer starts if v=TRUE. The human starts by default.
//
void TicTacGameBoard::computerStarts( bool v )
{
comp_starts = v;
}
// --------------------------------------------------------------------------
// TicTacGameBoard::newGame()
//
// Clears the game board and prepares for a new game
//
void TicTacGameBoard::newGame()
{
st = HumansTurn;
for ( int i=0; i<nBoard*nBoard; i++ )
btArray->at(i) = TicTacButton::Blank;
if ( comp_starts )
computerMove();
else
updateButtons();
}
// --------------------------------------------------------------------------
// TicTacGameBoard::buttonClicked() - SLOT
//
// This slot is activated when a TicTacButton emits the signal "clicked()",
// i.e. the user has clicked on a TicTacButton.
//
void TicTacGameBoard::buttonClicked()
{
if ( st != HumansTurn ) // not ready
return;
int i = buttons->findRef( (TicTacButton*)sender() );
TicTacButton *b = buttons->at(i); // get piece that was pressed
if ( b->type() == TicTacButton::Blank ) { // empty piece?
btArray->at(i) = TicTacButton::Circle;
updateButtons();
if ( checkBoard( btArray ) == 0 ) // not a winning move?
computerMove();
int s = checkBoard( btArray );
if ( s ) { // any winners yet?
st = s == TicTacButton::Circle ? HumanWon : ComputerWon;
emit finished();
}
}
}
// --------------------------------------------------------------------------
// TicTacGameBoard::updateButtons()
//
// Updates all buttons that have changed state
//
void TicTacGameBoard::updateButtons()
{
for ( int i=0; i<nBoard*nBoard; i++ ) {
if ( buttons->at(i)->type() != btArray->at(i) )
buttons->at(i)->setType( (TicTacButton::Type)btArray->at(i) );
buttons->at(i)->setEnabled( buttons->at(i)->type() ==
TicTacButton::Blank );
}
}
// --------------------------------------------------------------------------
// TicTacGameBoard::checkBoard()
//
// Checks if one of the players won the game, works for any board size.
//
// Returns:
// - TicTacButton::Cross if the player with X buttons won
// - TicTacButton::Circle if the player with O buttons won
// - Zero (0) if there is no winner yet
//
int TicTacGameBoard::checkBoard( TicTacArray *a )
{
int t = 0;
int row, col;
bool won = FALSE;
for ( row=0; row<nBoard && !won; row++ ) { // check horizontal
t = a->at(row*nBoard);
if ( t == TicTacButton::Blank )
continue;
col = 1;
while ( col<nBoard && a->at(row*nBoard+col) == t )
col++;
if ( col == nBoard )
won = TRUE;
}
for ( col=0; col<nBoard && !won; col++ ) { // check vertical
t = a->at(col);
if ( t == TicTacButton::Blank )
continue;
row = 1;
while ( row<nBoard && a->at(row*nBoard+col) == t )
row++;
if ( row == nBoard )
won = TRUE;
}
if ( !won ) { // check diagonal top left
t = a->at(0); // to bottom right
if ( t != TicTacButton::Blank ) {
int i = 1;
while ( i<nBoard && a->at(i*nBoard+i) == t )
i++;
if ( i == nBoard )
won = TRUE;
}
diff --git a/noncore/games/wordgame/main.cpp b/noncore/games/wordgame/main.cpp
index f32acff..eb3e2f2 100644
--- a/noncore/games/wordgame/main.cpp
+++ b/noncore/games/wordgame/main.cpp
@@ -1,28 +1,27 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "wordgame.h"
-#include <qpe/qpeapplication.h>
#include <opie/oapplicationfactory.h>
OPIE_EXPORT_APP( OApplicationFactory<WordGame> )
diff --git a/noncore/games/wordgame/wordgame.cpp b/noncore/games/wordgame/wordgame.cpp
index c01551d..43a54f8 100644
--- a/noncore/games/wordgame/wordgame.cpp
+++ b/noncore/games/wordgame/wordgame.cpp
@@ -1,241 +1,232 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "wordgame.h"
-#include <qpe/applnk.h>
#include <qpe/global.h>
-#include <qpe/filemanager.h>
#include <qpe/resource.h>
#include <qpe/config.h>
#include <qapplication.h>
#include <qmessagebox.h>
#include <qcombobox.h>
-#include <qdatetime.h>
-#include <qfileinfo.h>
-#include <qfile.h>
#include <qdir.h>
-#include <qiconset.h>
-#include <qlabel.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qtextstream.h>
#include <qtimer.h>
#include <qpe/qpetoolbar.h>
#include <qtoolbutton.h>
#include <qvbox.h>
#include <qwidgetstack.h>
-#include <qpainter.h>
#include <qlayout.h>
-#include <qregexp.h>
#include <stdlib.h>
#include <unistd.h>
#include <pwd.h>
#include <sys/types.h>
enum RuleEffects {
Multiplier=15,
MultiplyAll=64,
Start=128
};
static int tile_smallw = 16;
static int tile_smallh = 16;
static int tile_bigw = 22;
static int tile_bigh = 22;
static int tile_stweak = -2;
static int tile_btweak = -1;
static const int rack_tiles=7;
const char* sampleWGR=
"wordgame_shapes\n"
"15 15\n"
"400001040100004\n"
"030000000000030\n"
"002002000200200\n"
"000300020003000\n"
"000020000020000\n"
"102001000100201\n"
"000000202000000\n"
"400200050002004\n"
"000000202000000\n"
"102001000100201\n"
"000020000020000\n"
"000300020003000\n"
"002002000200200\n"
"030000000000030\n"
"400001040100004\n"
"1 2 3 66 67 194 100 0\n"
"1 j 8\n"
"1 q 7\n"
"1 x 6\n"
"1 z 6\n"
"1 w 4\n"
"1 k 4\n"
"1 v 3\n"
"1 f 3\n"
"2 y 3\n"
"2 h 2\n"
"2 b 2\n"
"2 m 2\n"
"3 p 2\n"
"3 g 2\n"
"3 u 2\n"
"4 d 2\n"
"4 c 2\n"
"5 l 1\n"
"5 o 1\n"
"7 t 1\n"
"7 n 1\n"
"7 a 1\n"
"7 r 1\n"
"8 s 1\n"
"8 i 1\n"
"11 e 1\n"
"0\n";
WordGame::WordGame( QWidget* parent, const char* name, WFlags fl ) :
QMainWindow(parent, name, fl)
{
if ( qApp->desktop()->width() < 240 ) {
tile_smallw = 10;
tile_smallh = 10;
tile_bigw = 16;
tile_bigh = 16;
tile_stweak = 0;
tile_btweak = 0;
}
setIcon( Resource::loadPixmap( "wordgame/WordGame.png" ) );
setCaption( tr("Word Game") );
setToolBarsMovable( FALSE );
vbox = new QVBox(this);
setCentralWidget(vbox);
toolbar = new QToolBar(this);
addToolBar(toolbar, Bottom);
reset = new QToolButton(Resource::loadPixmap("back"), tr("Back"), "", this, SLOT(resetTurn()), toolbar);
done = new QToolButton(Resource::loadPixmap("done"), tr("Done"), "", this, SLOT(endTurn()), toolbar);
scoreinfo = new ScoreInfo(toolbar);
scoreinfo->setFont(QFont("Helvetica",10));
new QToolButton(Resource::loadPixmap("finish"), tr("Close"), "", this, SLOT(endGame()), toolbar);
toolbar->setStretchableWidget(scoreinfo);
cpu = 0;
board = 0;
bag = 0;
racks = 0;
aiheart = new QTimer(this);
connect(aiheart, SIGNAL(timeout()), this, SLOT(think()));
readConfig();
}
WordGame::~WordGame()
{
writeConfig();
}
void WordGame::writeConfig()
{
Config cfg("WordGame");
cfg.setGroup("Game");
cfg.writeEntry("NameList",namelist,';');
cfg.writeEntry("CurrentPlayer",gameover ? 0 : player+1);
if ( !gameover ) {
cfg.writeEntry("Rules",rules);
bag->writeConfig(cfg);
board->writeConfig(cfg);
scoreinfo->writeConfig(cfg);
}
for (int p=0; p<nplayers; p++) {
cfg.setGroup("Player"+QString::number(p+1));
if ( gameover ) cfg.clearGroup(); else rack(p)->writeConfig(cfg);
}
}
void WordGame::readConfig()
{
Config cfg("WordGame");
cfg.setGroup("Game");
int currentplayer = cfg.readNumEntry("CurrentPlayer",0);
QStringList pnames = cfg.readListEntry("NameList",';');
if ( currentplayer ) {
gameover = FALSE;
rules = cfg.readEntry("Rules");
if ( rules.find("x-wordgamerules") >= 0 ) {
// rules files moved
rules = "Sample.rules";
}
if ( loadRules(rules) ) {
startGame(pnames);
bag->readConfig(cfg);
board->readConfig(cfg);
scoreinfo->readConfig(cfg);
for (int p=0; p<nplayers; p++) {
cfg.setGroup("Player"+QString::number(p+1));
rack(p)->readConfig(cfg);
}
player=currentplayer-1;
readyRack(player);
return;
}
}
// fall-back
openGameSelector(pnames);
}
void WordGame::openGameSelector(const QStringList& initnames)
{
toolbar->hide();
gameover = FALSE;
delete board;
board = 0;
delete racks;
racks = 0;
delete cpu;
cpu = 0;
newgame = new NewGame(vbox);
//Rules rules(this);
//connect(game.editrules, SIGNAL(clicked()), &rules, SLOT(editRules()));
//connect(&rules, SIGNAL(rulesChanged()), &game, SLOT(updateRuleSets()));
struct passwd* n = getpwuid(getuid());
QString playername = n ? n->pw_name : "";
if ( playername.isEmpty() ) {
playername = "Player";
}
newgame->player0->changeItem(playername,0);
newgame->player1->setCurrentItem(1);
newgame->updateRuleSets();
newgame->show();
connect(newgame->buttonOk, SIGNAL(clicked()), this, SLOT(startGame()));
}
diff --git a/noncore/games/zlines/ballpainter.cpp b/noncore/games/zlines/ballpainter.cpp
index c2b34e1..622ec29 100644
--- a/noncore/games/zlines/ballpainter.cpp
+++ b/noncore/games/zlines/ballpainter.cpp
@@ -1,135 +1,132 @@
/***************************************************************************
ballpainter.cpp - description
-------------------
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. *
* *
***************************************************************************/
#include <qpe/resource.h>
-#include <qapplication.h>
#include "ballpainter.h"
//#include "shotcounter.h"
#include <qpainter.h>
-#include "linesboard.h"
//#include <qcolor.h>
-#include <qjpegio.h>
#define PIXSIZE 21
int colorLinesArr[NCOLORS] =
{0x0000ff, 0x00ff00, 0xff0000, 0x00ffff, 0xff00ff, 0xffff00, 0x005080};
// 0x00bbggrr
// red , green , blue , yellow , violet , cyan , brown
BallPainter::BallPainter()
: QObject()
{
createPixmap();
}
BallPainter::~BallPainter()
{
}
QPixmap* BallPainter::pixmap( enum Pixmaps pix )
{
QString name;
switch(pix) {
case Field:
name = QString::fromLatin1("zlines/field");
break;
case Balls:
name = QString::fromLatin1("zlines/balls");
break;
case Fire:
name = QString::fromLatin1("zlines/fire");
break;
}
return new QPixmap(Resource::loadPixmap(name) );
}
void BallPainter::createPixmap()
{
// warning( kapp->kde_datadir() +"/klines/data/balls.bmp");
backgroundPix = pixmap(Field);
QPixmap *balls = pixmap(Balls);
QPixmap *fire = pixmap(Fire);
if (balls->isNull() ||backgroundPix->isNull() || fire->isNull() )
fatal("Cannot open data files.\nHave you correctly installed klines?");
warning("Pixsize %i", PIXSIZE);
for(int c=0; c<NCOLORS; c++)
{
for(int t=0; t<PIXTIME + FIREBALLS + BOOMBALLS + 1 ; t++)
{
imgCash[c][t] = new QPixmap(CELLSIZE, CELLSIZE);
QPainter p(imgCash[c][t]);
p.drawPixmap(0,0,(*backgroundPix),0,0,CELLSIZE,CELLSIZE);
p.drawPixmap(1,1,(*balls),t*PIXSIZE,c*PIXSIZE,PIXSIZE,PIXSIZE);
}
for(int t=0; t < FIREPIX ; t++)
{
firePix[t] = new QPixmap(CELLSIZE, CELLSIZE);
QPainter p(firePix[t]);
p.drawPixmap(0,0,(*backgroundPix),0,0,CELLSIZE,CELLSIZE);
p.drawPixmap(1,1,(*fire),t*PIXSIZE,0,PIXSIZE,PIXSIZE);
}
}
delete balls;
delete fire;
}
QPixmap* BallPainter::GetBall(int color, int animstep, int panim)
{
// return backgroundPix;
if( (color<0) || (color>=NCOLORS) || (animstep<0) || color == NOBALL )
{
// warning("BallPainter::Background");
return backgroundPix;
}
if ( panim == ANIM_JUMP )
{
if ( ( animstep < 0 ) || ( animstep >= PIXTIME ) )
return backgroundPix;
else
return imgCash[color][animstep];
}
else if ( panim == ANIM_BURN )
{
if ( animstep < FIREBALLS )
return imgCash[color][animstep + PIXTIME + BOOMBALLS + 1];
else if ( animstep < FIREBALLS + FIREPIX )
return firePix[animstep - FIREBALLS];
}
else if ( panim == ANIM_BORN )
{
if ( animstep < BOOMBALLS )
return imgCash[color][animstep + PIXTIME];
else
return imgCash[color][NORMALBALL];
}
// rest is not imlemented yet
return imgCash[color][NORMALBALL];
}
diff --git a/noncore/games/zlines/field.cpp b/noncore/games/zlines/field.cpp
index 2a87739..0adf4ac 100644
--- a/noncore/games/zlines/field.cpp
+++ b/noncore/games/zlines/field.cpp
@@ -1,132 +1,131 @@
/***************************************************************************
field.cpp - description
-------------------
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. *
* *
***************************************************************************/
#include <stdlib.h>
-#include "cfg.h"
#include "field.h"
Field::Field(QWidget* parent, const char* name)
: QWidget( parent, name )
{
clearField();
}
Field::~Field()
{
}
void Field::clearField()
{
for(int y=0; y<NUMCELLSH; y++)
for(int x=0; x<NUMCELLSW; x++)
field[y][x].clear();
}
void Field::clearAnim()
{
for(int y=0; y<NUMCELLSH; y++)
for(int x=0; x<NUMCELLSW; x++)
field[y][x].setAnim( ANIM_NO );
}
int Field::deleteAnimatedBalls()
{
int deleted = 0;
for(int y=0; y<NUMCELLSH; y++)
for(int x=0; x<NUMCELLSW; x++)
{
if ( field[y][x].getAnim() != ANIM_NO )
{
deleted++;
field[y][x].clear();
}
}
return deleted;
}
bool Field::checkBounds(int x, int y)
{
return (x>=0) && (x<NUMCELLSW) && (y>=0) && (y<NUMCELLSH);
}
void Field::putBall(int x, int y, int color)
{
if( checkBounds(x,y) )
field[y][x].setColor(color);
}
/*
void Field::putBall(int x, int y, char color)
{
if( checkBounds(x,y) ){
field[y][x].setColor(color);
erase5Balls();
repaint(FALSE);
}
}*/
void Field::moveBall(int xa, int ya, int xb, int yb)
{
if( checkBounds(xa,ya) && checkBounds(xb,yb) &&
field[yb][xb].isFree() && ( xa != xb || ya != yb) ) {
field[yb][xb].moveBall(field[ya][xa]);
}
}
int Field::getBall(int x, int y)
{
if( checkBounds(x,y) )
return field[y][x].getColor();
else
return NOBALL;
}
int Field::getAnim(int x, int y)
{
if( checkBounds(x,y) )
return field[y][x].getAnim();
else
return NOBALL;
}
void Field::setAnim(int x, int y, int anim)
{
if( checkBounds(x,y) )
field[y][x].setAnim( anim );
}
void Field::removeBall(int x, int y )
{
if( checkBounds(x,y) ) field[y][x].clear();
}
int Field::freeSpace()
{
int s = 0;
for(int y=0; y<NUMCELLSH; y++)
for(int x=0; x<NUMCELLSW; x++)
if(field[y][x].isFree()) s++;
return s;
}
void Field::saveUndo()
{
void clearAnim();
for(int y=0; y<NUMCELLSH; y++)
for(int x=0; x<NUMCELLSW; x++)
field_undo[y][x] = field[y][x];
}
void Field::restoreUndo()
{
for(int y=0; y<NUMCELLSH; y++)
for(int x=0; x<NUMCELLSW; x++)
field[y][x] = field_undo[y][x];
}
diff --git a/noncore/games/zlines/klines.cpp b/noncore/games/zlines/klines.cpp
index 02ff0db..76c94e2 100644
--- a/noncore/games/zlines/klines.cpp
+++ b/noncore/games/zlines/klines.cpp
@@ -1,214 +1,205 @@
/***************************************************************************
klines.cpp - description
-------------------
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. *
* *
***************************************************************************/
/* changes
21.05.2000 Roman Razilov Menu game/Next
*/
//
// The implementation of the KLines widget
//
-#include <qkeycode.h>
-#include <qlabel.h>
-#include <qpushbutton.h>
-#include <qtooltip.h>
-#include <qstring.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <qapplication.h>
-#include <qmenubar.h>
-#include <qpopupmenu.h>
-#include "cfg.h"
-#include <qstatusbar.h>
#include "klines.h"
/*
Creates the KLines widget and sets saved options (if any).
*/
KLines::KLines(QWidget *par, const char* n, WFlags fl) : QMainWindow(par,n,fl)
{
time_t t;
time(&t);
srand((unsigned int)t + getpid());
setCaption(QString("ZLines"));
mwidget = new MainWidget(this);
setCentralWidget( mwidget );
lsb = mwidget->GetLsb();
lPrompt = mwidget->GetPrompt();
menu = menuBar();
game = new QPopupMenu;
edit = new QPopupMenu;
game->insertItem(tr("&New game"), this, SLOT(stopGame()), CTRL+Key_N );
game->insertSeparator();
game->insertItem(tr("Ne&xt"), this, SLOT(makeTurn()), Key_N );
game->insertSeparator();
idMenuPrompt = game->insertItem( tr("&Show next"), this, SLOT(switchPrompt()), CTRL+Key_P );
game->setCheckable(true);
game->setItemChecked(idMenuPrompt, lPrompt->getState());
game->insertSeparator();
game->insertItem(tr("&Quit"), qApp, SLOT(quit()), CTRL+Key_Q );
idMenuUndo = edit->insertItem(tr("Und&o"), this, SLOT(undo()), CTRL+Key_Z );
menu->insertItem( tr("&Game"), game );
menu->insertItem( tr("&Edit"), edit );
menu->show();
score = 0;
prev_score = 0;
mwidget->setMessage(tr("Points: 0"));
startGame();
}
/*
Saves the options and destroys the KLines widget.
*/
KLines::~KLines()
{
}
/*
Resize event of the KLines widget.
*/
void KLines::resizeEvent( QResizeEvent *e )
{
QMainWindow::resizeEvent(e);
}
void KLines::setMinSize()
{
// setMinimumSize( gr->wHint(), gr->hHint() + menu->height() + stat->height() +
// tool->height() );
}
void KLines::startGame()
{
score = 0;
prev_score = 0;
bUndo=TRUE;
lsb->clearField();
generateRandomBalls();
placeBalls();
generateRandomBalls();
edit->setItemEnabled(idMenuUndo, FALSE );
updateStat();
}
void KLines::stopGame()
{
debug("Klines::stopGame");
endGame();
}
void KLines::searchBallsLine()
{
}
void KLines::generateRandomBalls()
{
for( int i = 0 ; i < BALLSDROP ; i++ )
{
nextBalls_undo[i] = nextBalls[i];
nextBalls[i] = bUndo ?
rand() % NCOLORS:
nextBalls_redo[i];
}
lPrompt->SetBalls(nextBalls);
}
void KLines::placeBalls()
{
lsb->placeBalls(nextBalls);
debug("exit from placeBalls");
}
void KLines::undo()
{
debug("Undo");
if (!bUndo)
return;
for( int i = 0 ; i < BALLSDROP ; i++ )
{
nextBalls_redo[i] = nextBalls[i];
nextBalls[i] = nextBalls_undo[i];
}
lPrompt->SetBalls(nextBalls);
lsb->undo();
switchUndo(FALSE);
}
void KLines::makeTurn()
{
placeBalls();
generateRandomBalls();
switchUndo(TRUE);
}
void KLines::addScore(int ballsErased)
{ if(ballsErased >= 5){
score += 2*ballsErased*ballsErased - 20*ballsErased + 60 ;
if( !lPrompt->getState() ) score+= 1;
updateStat();
};
}
void KLines::updateStat()
{
mwidget->setMessage(tr(" Score: %1 ").arg(score));
}
void KLines::endGame()
{
startGame();
}
void KLines::switchPrompt()
{
lPrompt->setPrompt(!lPrompt->getState());
game->setItemChecked(idMenuPrompt, lPrompt->getState());
}
void KLines::switchUndo(bool bu)
{
bUndo = bu;
edit->setItemEnabled(idMenuUndo, bUndo );
}
void KLines::help()
{
// KApplication::getKApplication()->invokeHTMLHelp("", "");
}
diff --git a/noncore/games/zlines/linesboard.cpp b/noncore/games/zlines/linesboard.cpp
index 0965b2c..1e59aeb 100644
--- a/noncore/games/zlines/linesboard.cpp
+++ b/noncore/games/zlines/linesboard.cpp
@@ -1,214 +1,211 @@
/***************************************************************************
linesboard.cpp - description
-------------------
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. *
* *
***************************************************************************/
#include <qpainter.h>
-#include <qpixmap.h>
-#include <qcolor.h>
-#include <qkeycode.h>
#include <stdlib.h>
#include "linesboard.h"
/*
Constructs a LinesBoard widget.
*/
LinesBoard::LinesBoard( BallPainter * abPainter, QWidget* parent, const char* name )
: Field( parent, name )
{
anim = ANIM_NO;
// waypos = 0;
// waylen = 0;
// jumpingRow = -1;
// jumpingCol = -1;
painting = 0;
way = new Waypoints[NUMCELLSW*NUMCELLSH];
bPainter = abPainter;
setFocusPolicy( NoFocus );
setBackgroundColor( gray );
setMouseTracking( FALSE );
setFixedSize(wHint(), hHint());
timer = new QTimer(this);
connect( timer, SIGNAL(timeout()), SLOT(timerSlot()) );
timer->start( TIMERCLOCK, FALSE );
}
/*
Destructor: deallocates memory for contents
*/
LinesBoard::~LinesBoard()
{
// debug("stop");
timer->stop();
delete timer;
delete []way;
}
void LinesBoard::placeBalls(int pnextBalls[BALLSDROP])
{
debug("LinesBoard::placeBalls( )");
for(int i=0; i < BALLSDROP; i++){
nextBalls[i] = pnextBalls[i];
}
nextBallToPlace = 0;
placeBall();
debug("LinesBoard::placeBalls End ");
}
void LinesBoard::placeBall( )
{
int color = nextBalls[nextBallToPlace];
debug("LinesBoard::placeBall( ) color=%i, nextBallToPlace = %i", color, nextBallToPlace);
char* xx = (char*)malloc( sizeof(char)*NUMCELLSW*NUMCELLSH );
char* yy = (char*)malloc( sizeof(char)*NUMCELLSW*NUMCELLSH );
// int nb=3;
// if( freeSpace() < 3) nb = freeSpace();
int empty=0;
for(int y=0; y<NUMCELLSH; y++)
for(int x=0; x<NUMCELLSW; x++)
if( getBall(x,y) == NOBALL )
{
xx[empty] = x;
yy[empty] = y;
empty++;
};
// debug("empty = %i",empty);
if ( empty > 0)
{
int pos = rand()%empty;
putBall( xx[pos], yy[pos], color );
clearAnim();
setAnim( xx[pos], yy[pos], ANIM_BORN );
nextBallToPlace++;
AnimStart(ANIM_BORN);
free(xx);
free(yy);
}
else
{
free(xx);
free(yy);
emit endGame();
}
debug("LinesBoard::placeBall END");
}
/*id LinesBoard::doAfterBalls() {
erase5Balls();
repaint(FALSE);
}
*/
/*
Sets the size of the table
*/
int LinesBoard::width() { return CELLSIZE * NUMCELLSW; }
int LinesBoard::height() { return CELLSIZE * NUMCELLSH; }
int LinesBoard::wHint() { return width(); }
int LinesBoard::hHint() { return height(); }
void LinesBoard::paintEvent( QPaintEvent* )
{
// debug("LinesBoard::paintEvent ");
QPixmap pixmap(width(), height());
QPainter paint(&pixmap, this);
for( int y=0; y < NUMCELLSH; y++ ){
for( int x=0; x < NUMCELLSW; x++ ){
if( getBall(x,y) == NOBALL )
{
// debug("draw empty %i %i", x, y );
paint.drawPixmap(x*CELLSIZE, y*CELLSIZE, *(bPainter->GetBackgroundPix()) );
}
else
{
// debug("draw empty %i %i %c", x, y, getBall(x,y) );
paint.drawPixmap(x*CELLSIZE, y*CELLSIZE,
*(bPainter->GetBall(getBall(x,y),animstep,getAnim(x,y))));
}
}
}
bitBlt(this, 0,0, &pixmap, 0,0, width(), height(), CopyROP);
}
/*
Handles mouse press events for the LinesBoard widget.
*/
void LinesBoard::mousePressEvent( QMouseEvent* e )
{
debug("LinesBoard::mousePressEvent START");
int curRow = e->y() / CELLSIZE;
int curCol = e->x() / CELLSIZE;
//debug
debug("Mouse pressed: curRow=%i, curCol=%i", curRow, curCol);
//check range
if (!checkBounds( curCol, curRow ) )
return;
// if( running || anim != ANIM_NO ) return;
if(anim != ANIM_JUMP && anim != ANIM_NO) return;
if ( anim == ANIM_JUMP )
{
if ( getBall(curCol,curRow) == NOBALL )
{
if(existPath(jumpingCol, jumpingRow, curCol, curRow))
{
saveUndo();
AnimStart(ANIM_RUN);
}
}
else
AnimJump(curCol,curRow);
}
else
AnimJump(curCol,curRow);
debug("LinesBoard::mousePressEvent END");
}
void LinesBoard::AnimJump(int x, int y ) {
debug("LinesBoard::AnimJump( %i,%i)", x,y );
if ( getBall(x,y) != NOBALL )
if (!( anim == ANIM_JUMP && jumpingCol == x && jumpingRow == y ))
if ( AnimEnd() )
{
clearAnim();
setAnim(x,y,ANIM_JUMP);
jumpingCol = x;
jumpingRow = y;
AnimStart(ANIM_JUMP);
}
debug("LinesBoard::AnimJump END");
}
void LinesBoard::AnimStart(int panim) {
debug("LinesBoard::AnimStart( %i )", panim);
if (anim != ANIM_NO)
AnimEnd();
animstep = 0;
animdelaystart = 1;
switch(panim) {
case ANIM_NO:
break;
diff --git a/noncore/games/zlines/main.cpp b/noncore/games/zlines/main.cpp
index ff41f95..238e7d3 100644
--- a/noncore/games/zlines/main.cpp
+++ b/noncore/games/zlines/main.cpp
@@ -1,30 +1,29 @@
/***************************************************************************
main.cpp - description
-------------------
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. *
* *
***************************************************************************/
/*
* Roman Razilov 2000-05-19 debug dummmy
* Roman Razilov 2000-05-21 qimgio
*/
-#include <qglobal.h>
#include <opie/oapplicationfactory.h>
#include "klines.h"
OPIE_EXPORT_APP( OApplicationFactory<KLines> )
diff --git a/noncore/games/zlines/mwidget.cpp b/noncore/games/zlines/mwidget.cpp
index 6641fa2..211d3d3 100644
--- a/noncore/games/zlines/mwidget.cpp
+++ b/noncore/games/zlines/mwidget.cpp
@@ -1,84 +1,83 @@
/***************************************************************************
mwidget.cpp - description
-------------------
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. *
* *
***************************************************************************/
#include "mwidget.h"
#include <qlayout.h>
-#include "ballpainter.h"
#include <qhbox.h>
#include <qlabel.h>
MainWidget::MainWidget( QWidget* parent, const char* name )
: QFrame( parent, name )
{
BallPainter *bPainter = new BallPainter();
QGridLayout *Form1Layout = new QGridLayout( this );
Form1Layout->setSpacing( 4 );
Form1Layout->setMargin( 4 );
QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
Form1Layout->addItem( spacer, 0, 0 );
lsb = new LinesBoard(bPainter, this);
Form1Layout->addWidget( lsb, 0, 1 );
QSpacerItem* spacer_2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
Form1Layout->addItem( spacer_2, 0, 2 );
QHBox *bottom=new QHBox(this);
mPoints=new QLabel(bottom);
bottom->setStretchFactor(mPoints, 2);
lPrompt = new LinesPrompt(bPainter, bottom);
Form1Layout->addWidget( bottom, 1, 1 );
QSpacerItem* spacer_3 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
Form1Layout->addItem( spacer_3, 2, 1 );
connect(lsb, SIGNAL(endTurn()), parent, SLOT(makeTurn()));
connect(lsb, SIGNAL(eraseLine(int)), parent, SLOT(addScore(int)));
connect(lsb, SIGNAL(endGame()), parent, SLOT(stopGame()));
connect(lPrompt, SIGNAL(PromptPressed()), parent, SLOT(switchPrompt()));
}
void MainWidget::setMessage(const QString &message)
{
mPoints->setText(message);
}
/*
Destructor: deallocates memory for contents
*/
MainWidget::~MainWidget()
{
}
LinesBoard * MainWidget::GetLsb()
{
return lsb;
}
LinesPrompt * MainWidget::GetPrompt()
{
return lPrompt;
}
diff --git a/noncore/games/zsame/StoneWidget.cpp b/noncore/games/zsame/StoneWidget.cpp
index 49fa1a4..646fc9c 100644
--- a/noncore/games/zsame/StoneWidget.cpp
+++ b/noncore/games/zsame/StoneWidget.cpp
@@ -1,220 +1,215 @@
/*
* ksame 0.4 - simple Game
* Copyright (C) 1997,1998 Marcus Kreutzberger
*
* 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 program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
#include <stdio.h>
#include <stdlib.h>
-#include <qpainter.h>
-#include <qpixmap.h>
-#include <qbitmap.h>
-#include <qimage.h>
-#include <qcursor.h>
#include <qpe/resource.h>
#include <time.h>
#include <assert.h>
#include "StoneWidget.h"
struct StoneSlice {
QPixmap stone;
};
StoneWidget::StoneWidget( QWidget *parent, int x, int y )
: QWidget(parent,"StoneWidget"), stonefield(x,y)
{
// setBackgroundPixmap(QPixmap(locate("wallpaper", "Time-For-Lunch-2.jpg")));
// QPixmap stonemap(locate("appdata", "stones.png"));
QPixmap stonemap = Resource::loadPixmap("zsame/stones" );
assert(!stonemap.isNull());
slice=0;
maxslices=30;
maxcolors=4;
sizex=x;
sizey=y;
stone_width=stonemap.width()/(maxslices+1);
stone_height=stonemap.height()/maxcolors;
map = new StoneSlice*[maxcolors];
QBitmap mask;
for (int c = 0; c < maxcolors; c++) {
map[c] = new StoneSlice[maxslices];
for (int s = 0; s < maxslices; s++) {
map[c][s].stone.resize(stone_width, stone_height);
assert(!map[c][s].stone.isNull());
bitBlt(&map[c][s].stone, 0, 0,
&stonemap, stone_width * s,
c*stone_height,
stone_width,stone_height,CopyROP,false);
QImage im = map[c][s].stone.convertToImage();
mask = im.createHeuristicMask();
map[c][s].stone.setMask(mask);
}
}
field_height=stone_height*sizey;
field_width=stone_width*sizex;
setMouseTracking(true);
// QColor c(115,115,115);
// setBackgroundColor(c);
// emit s_sizechanged();
startTimer( 100 );
history.setAutoDelete(true);
}
StoneWidget::~StoneWidget() {
for (int c = 0; c < maxcolors; c++) {
delete [] map[c];
}
delete [] map;
setMouseTracking(false);
killTimers();
}
unsigned int
StoneWidget::board() {
return stonefield.getBoard();
}
int
StoneWidget::score() {
return stonefield.getScore();
}
int
StoneWidget::marked() {
return stonefield.getMarked();
}
QSize
StoneWidget::size() {
return QSize(sizex,sizey);
}
int
StoneWidget::colors() {
return stonefield.getColors();
}
QSize
StoneWidget::sizeHint () const {
return QSize(field_width,field_height);
}
void
StoneWidget::newGame(unsigned int board,int colors) {
stonefield.newGame(board,colors);
history.clear();
modified= false;
emit s_newgame();
emit s_colors(stonefield.getColors());
emit s_board(stonefield.getBoard());
}
void
StoneWidget::reset() {
stonefield.reset();
history.clear();
emit s_newgame();
}
void
StoneWidget::unmark() {
stonefield.unmark();
emit s_marked(0);
}
bool StoneWidget::undoPossible() const {
if (stonefield.isGameover()) return false;
return stonefield.undoPossible();
}
int
StoneWidget::undo(int count) {
if (stonefield.isGameover()) return 0;
int ret_val=stonefield.undo(count);
QPoint p=mapFromGlobal(cursor().pos());
int x=p.x();
int y=p.y();
if (x<0||y<0||x>=field_width||y>=field_height) {
emit s_score(stonefield.getMarked());
return ret_val;
}
int marked=stonefield.mark(x/stone_width,y/stone_height);
emit s_marked(marked);
slice=0;
emit s_score(stonefield.getScore());
modified= (stonefield.getScore()>0);
return ret_val;
}
bool StoneWidget::isGameover() {
return stonefield.isGameover();
}
bool StoneWidget::hasBonus() {
return stonefield.gotBonus(); // don't ask me why the names differ... ;-| [hlm]
}
bool StoneWidget::isOriginalBoard() {
return !modified;
}
void StoneWidget::readProperties(Config *) {
/* Q_ASSERT(conf);
history.clear();
if (!conf->hasKey("Board")||
!conf->hasKey("Colors")||
!conf->hasKey("Stones")) {
return;
}
newGame(conf->readNumEntry("Board"),conf->readNumEntry("Colors"));
QStrList list;
conf->readListEntry("Stones",list);
for (const char *item=list.first();item;item=list.next()) {
int x=-1,y=-1;
if (sscanf(item,"%02X%02X",&x,&y)!=2) break;
history.append(new QPoint(x,y));
stonefield.remove(x,y);
}
*/
}
diff --git a/noncore/games/zsame/ZSameWidget.cpp b/noncore/games/zsame/ZSameWidget.cpp
index 5001b55..45a877f 100644
--- a/noncore/games/zsame/ZSameWidget.cpp
+++ b/noncore/games/zsame/ZSameWidget.cpp
@@ -1,235 +1,228 @@
/* Yo Emacs, this is -*- C++ -*- */
/*
* ksame 0.4 - simple Game
* Copyright (C) 1997,1998 Marcus Kreutzberger
*
* 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 program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
#include <stdio.h>
-#include <qwidget.h>
-#include <qpushbutton.h>
-#include <qpixmap.h>
-#include <qvbox.h>
-#include <qpopupmenu.h>
#include <qtoolbar.h>
#include <qmenubar.h>
#include <qapplication.h>
#include <qaction.h>
#include <qmessagebox.h>
#include <qpe/resource.h>
#include <opie/oapplicationfactory.h>
#include <kapplication.h>
#include "ZSameWidget.h"
-#include "StoneWidget.h"
-#include "version.h"
static int default_colors=3;
#define i18n tr
OPIE_EXPORT_APP( OApplicationFactory<ZSameWidget> )
ZSameWidget::ZSameWidget( QWidget* parent, const char* name, WFlags fl )
: QMainWindow( parent, name, fl )
{
setCaption(tr("ZSame"));
setToolBarsMovable( false );
QToolBar* con = new QToolBar( this );
con->setHorizontalStretchable( true );
QMenuBar* mb = new QMenuBar( con );
QToolBar* tb = new QToolBar( this );
QPopupMenu* fileMenu = new QPopupMenu( this );
QAction* a = new QAction(tr("New Game"), Resource::loadIconSet("new") ,
QString::null, 0, this, "new_icon");
a->addTo( fileMenu );
a->addTo( tb );
connect(a, SIGNAL(activated()), this, SLOT(m_new()));
a = new QAction(tr("Restart This Board"), Resource::loadIconSet("redo"),
QString::null, 0, this, "restart_board" );
a->addTo( fileMenu );
connect( a, SIGNAL(activated()), this, SLOT(m_restart()));
restart = a;
a = new QAction( tr("Undo"), Resource::loadIconSet("undo"),
QString::null, 0, this, "undo_action" );
a->addTo( fileMenu );
a->addTo( tb );
connect( a, SIGNAL(activated()), this, SLOT(m_undo()));
a = new QAction(tr("Quit"), Resource::loadIconSet("quit_icon"),
QString::null, 0, this, "quit_action");
a->addTo( fileMenu );
a->addTo( tb );
connect(a, SIGNAL(activated()), this, SLOT(m_quit()));
mb->insertItem(tr("Game" ), fileMenu );
int foo[2];
desktop_widget(foo);
stone = new StoneWidget(this,foo[0],foo[1]);
connect( stone, SIGNAL(s_gameover()), this, SLOT(gameover()));
connect( stone, SIGNAL(s_colors(int)), this, SLOT(setColors(int)));
connect( stone, SIGNAL(s_board(int)), this, SLOT(setBoard(int)));
connect( stone, SIGNAL(s_marked(int)), this, SLOT(setMarked(int)));
connect( stone, SIGNAL(s_score(int)), this, SLOT(setScore(int)));
connect( stone, SIGNAL(s_remove(int,int)), this, SLOT(stonesRemoved(int,int)));
connect(stone, SIGNAL(s_sizechanged()), this, SLOT(sizeChanged()));
sizeChanged();
setCentralWidget(stone);
setScore(0);
}
ZSameWidget::~ZSameWidget() {
}
void ZSameWidget::readProperties(Config *conf) {
/*
Q_ASSERT(conf);
stone->readProperties(conf);
*/
}
void ZSameWidget::saveProperties(Config *conf) {
/*
Q_ASSERT(conf);
stone->saveProperties(conf);
conf->sync();
*/
}
void ZSameWidget::sizeChanged() {
// stone->setFixedSize(stone->sizeHint());
}
void ZSameWidget::newGame(unsigned int board,int colors) {
while (board>=1000000) board-=1000000;
// kdDebug() << "newgame board " << board << " colors " << colors << endl;
stone->newGame(board,colors);
setScore(0);
}
bool ZSameWidget::confirmAbort() {
return stone->isGameover() ||
stone->isOriginalBoard() ||
(QMessageBox::warning(this, i18n("Resign"), i18n("<qt>Do you want to resign?</qt>"),
QMessageBox::Yes,
QMessageBox::No|QMessageBox::Default|QMessageBox::Escape, 0) == QMessageBox::Yes );
}
void ZSameWidget::m_new() {
if (confirmAbort())
newGame(_random(),default_colors);
}
void ZSameWidget::m_restart() {
if (confirmAbort())
newGame(stone->board(),default_colors);
}
void ZSameWidget::m_load() {
// kdDebug() << "menu load not supported" << endl;
}
void ZSameWidget::m_save() {
// kdDebug() << "menu save not supported" << endl;
}
void ZSameWidget::m_undo() {
// Q_ASSERT(stone);
stone->undo();
}
void ZSameWidget::m_showhs() {
/* Q_ASSERT(stone);
stone->unmark();
KScoreDialog d(KScoreDialog::Name | KScoreDialog::Score, this);
d.addField(Board, i18n("Board"), "Board");
d.exec();
*/
}
void ZSameWidget::m_quit() {
// Q_ASSERT(stone);
stone->unmark();
qApp->quit();
// delete this;
}
void ZSameWidget::m_tglboard() {
// kdDebug() << "toggled" << endl;
}
void ZSameWidget::setColors(int colors) {
// status->changeItem(i18n("%1 Colors").arg(colors),1);
}
void ZSameWidget::setBoard(int board) {
// status->changeItem(i18n("Board: %1").arg(board, 6), 2);
}
void ZSameWidget::setMarked(int m) {
// status->changeItem(i18n("Marked: %1").arg(m, 6),3);
}
void ZSameWidget::stonesRemoved(int,int) {
// KNotifyClient::event("stones removed",
// i18n("%1 stones removed.").arg(stone->marked()));
}
void ZSameWidget::setScore(int score) {
// status->changeItem(i18n("Score: %1").arg(score, 6),4);
// undo->setEnabled(stone->undoPossible());
// restart->setEnabled(!stone->isOriginalBoard());
}
void ZSameWidget::gameover() {
// kdDebug() << "GameOver" << endl;
if (stone->hasBonus()) {
QMessageBox::information(this,i18n("Game won"),
i18n("<qt>You even removed the last stone, great job! "
"This gave you a score of %1 in total.</qt>").arg(stone->score()));
} else {
QMessageBox::information(this,i18n("Game over"),
i18n("<qt>There are no more removeable stones. "
"You got a score of %1 in total.</qt>").arg(stone->score()));
}
stone->unmark();
}
void ZSameWidget::desktop_widget(int *f)const{