summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/kcheckers/checkers.h4
-rw-r--r--noncore/games/kcheckers/echeckers.h2
-rw-r--r--noncore/games/kcheckers/field.cpp57
-rw-r--r--noncore/games/kcheckers/field.h19
-rw-r--r--noncore/games/kcheckers/kcheckers.cpp440
-rw-r--r--noncore/games/kcheckers/kcheckers.h54
-rw-r--r--noncore/games/kcheckers/kcheckers.pro3
-rw-r--r--noncore/games/kcheckers/main.cpp2
-rw-r--r--noncore/games/kcheckers/opie-kcheckers.control2
-rw-r--r--noncore/games/kcheckers/pics/biglogo.xpm55
-rw-r--r--noncore/games/kcheckers/pics/contexthelp.xpm34
-rw-r--r--noncore/games/kcheckers/pics/exit.xpm34
-rw-r--r--noncore/games/kcheckers/pics/green1.xpm62
-rw-r--r--noncore/games/kcheckers/pics/green2.xpm107
-rw-r--r--noncore/games/kcheckers/pics/green3.xpm33
-rw-r--r--noncore/games/kcheckers/pics/help.xpm74
-rw-r--r--noncore/games/kcheckers/pics/king_black.xpm2
-rw-r--r--noncore/games/kcheckers/pics/king_white.xpm2
-rw-r--r--noncore/games/kcheckers/pics/logo.xpm34
-rw-r--r--noncore/games/kcheckers/pics/man_black.xpm2
-rw-r--r--noncore/games/kcheckers/pics/man_white.xpm2
-rw-r--r--noncore/games/kcheckers/pics/marble1.xpm10
-rw-r--r--noncore/games/kcheckers/pics/marble2.xpm2
-rw-r--r--noncore/games/kcheckers/pics/marble3.xpm2
-rw-r--r--noncore/games/kcheckers/pics/undo.xpm24
-rw-r--r--noncore/games/kcheckers/pics/wood1.xpm2
-rw-r--r--noncore/games/kcheckers/pics/wood2.xpm227
-rw-r--r--noncore/games/kcheckers/pics/wood3.xpm4
-rw-r--r--noncore/games/kcheckers/rcheckers.h2
-rw-r--r--pics/kcheckers/KCheckers.xpm55
30 files changed, 980 insertions, 372 deletions
diff --git a/noncore/games/kcheckers/checkers.h b/noncore/games/kcheckers/checkers.h
index bd2be08..2592fb1 100644
--- a/noncore/games/kcheckers/checkers.h
+++ b/noncore/games/kcheckers/checkers.h
@@ -1,56 +1,56 @@
#ifndef CHECKERS_H
#define CHECKERS_H
#define NONE 0
#define MAN1 1
#define KING1 2
#define FREE 3
#define KING2 4
#define MAN2 5
#define FULL 6
#define UL -6
#define UR -5
#define DL 5
#define DR 6
class Checkers
{
public:
Checkers(int);
virtual bool go1(int,int)=0;
void go2();
bool checkMove1();
bool checkMove2();
virtual bool checkCapture1()=0;
virtual bool checkCapture2()=0;
void setLevel(int i) {levelmax=i;};
- int getBoard(int i) {return board[i];};
+
+ int board[54];
protected:
int level; // Current level
int levelmax; // Maximum level
int turn();
void turn(int &,bool capture=false);
int to;
- int board[54];
int bestboard[54];
int bestcounter;
virtual void kingMove2(int,int &)=0;
virtual bool manCapture2(int,int &)=0;
virtual bool kingCapture2(int,int,int &)=0;
virtual bool manCapture1(int,int,bool &)=0;
virtual bool kingCapture1(int,int,bool &)=0;
};
#endif
diff --git a/noncore/games/kcheckers/echeckers.h b/noncore/games/kcheckers/echeckers.h
index 5ca3ecc..c3f7075 100644
--- a/noncore/games/kcheckers/echeckers.h
+++ b/noncore/games/kcheckers/echeckers.h
@@ -1,28 +1,28 @@
#ifndef ECHECKERS_H
#define ECHECKERS_H
-#include <checkers.h>
+#include "checkers.h"
class ECheckers:public Checkers
{
public:
ECheckers(int skill):Checkers(skill){};
bool go1(int,int);
bool checkCapture1();
bool checkCapture2();
private:
void kingMove2(int,int &);
bool manCapture1(int,int,bool &);
bool kingCapture1(int,int,bool &);
bool manCapture2(int,int &);
bool kingCapture2(int,int,int &);
};
#endif
diff --git a/noncore/games/kcheckers/field.cpp b/noncore/games/kcheckers/field.cpp
index 0755008..aacfc1c 100644
--- a/noncore/games/kcheckers/field.cpp
+++ b/noncore/games/kcheckers/field.cpp
@@ -1,31 +1,82 @@
#include <qpainter.h>
#include "field.h"
-Field::Field(QWidget *parent,int i):QWidget(parent)
+
+Field::Field(QWidget* parent,int i):QWidget(parent)
{
pixmap=new QPixmap(SIZE,SIZE);
+ CHECK_PTR(pixmap);
number=i;
+
+ pattern=NULL;
+ picture=NULL;
+ frame=NULL;
}
+
void Field::paintEvent(QPaintEvent*)
{
bitBlt(this,0,0,pixmap);
}
+
void Field::mousePressEvent(QMouseEvent* mouseevent)
{
if(mouseevent->button()!=Qt::LeftButton) return;
emit click(number);
}
-void Field::draw(QImage *image)
+
+void Field::draw()
{
QPainter paint;
paint.begin(pixmap);
- paint.drawImage(0,0,*image);
+
+ if(pattern) paint.drawImage(0,0,*pattern);
+
+ if(label.length())
+ {
+ paint.setPen(white);
+ paint.setFont(QFont(font().family(),10));
+ paint.drawText(2,11,label);
+ }
+
+ if(picture) paint.drawImage(0,0,*picture);
+
+ if(frame) paint.drawImage(0,0,*frame);
+
paint.end();
update();
}
+
+void Field::setFrame(QImage* image)
+{
+ frame=image;
+ draw();
+}
+
+
+void Field::setPicture(QImage* image)
+{
+ picture=image;
+ draw();
+}
+
+
+void Field::setPattern(QImage* image)
+{
+ pattern=image;
+ draw();
+}
+
+
+void Field::setLabel(const QString & string)
+{
+ label=string;
+ draw();
+}
+
+
diff --git a/noncore/games/kcheckers/field.h b/noncore/games/kcheckers/field.h
index d929e49..297d94e 100644
--- a/noncore/games/kcheckers/field.h
+++ b/noncore/games/kcheckers/field.h
@@ -1,27 +1,44 @@
#ifndef FIELD_H
#define FIELD_H
#include <qwidget.h>
#include <qpixmap.h>
#define SIZE 28
class Field:public QWidget
{
Q_OBJECT
public:
Field(QWidget*,int);
- void draw(QImage*);
+
+ void setFrame(QImage*);
+ void setPicture(QImage*);
+ void setPattern(QImage*);
+ void setLabel(const QString &);
+
signals:
void click(int);
+
protected:
void paintEvent(QPaintEvent*);
void mousePressEvent(QMouseEvent*);
+
private:
+ void draw();
+
int number;
+
+ // pixmap = pattern + label + picture + frame;
+
+ QImage* frame;
+ QImage* picture;
+ QImage* pattern;
+ QString label;
+
QPixmap *pixmap;
};
#endif
diff --git a/noncore/games/kcheckers/kcheckers.cpp b/noncore/games/kcheckers/kcheckers.cpp
index 3df744e..c2eba0d 100644
--- a/noncore/games/kcheckers/kcheckers.cpp
+++ b/noncore/games/kcheckers/kcheckers.cpp
@@ -1,382 +1,586 @@
#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/exit.xpm"
#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():QMainWindow(0,0,WStyle_DialogBorder)
{
setCaption("KCheckers");
- setIcon(QPixmap(biglogo));
- showMaximized();
+ setIcon(QPixmap(biglogo_xpm));
+
+ setToolBarsMovable(false);
+
+ // Make a menubar
+
+ gameMenu=new QPopupMenu;
+ CHECK_PTR(gameMenu);
- QPopupMenu* gameMenu=new QPopupMenu;
- gameMenu->insertItem(QPixmap(logo),tr("New"),this,SLOT(newGame()));
+ gameMenu->insertItem(QPixmap(logo_xpm),tr("&New"),this,SLOT(newGame()),CTRL+Key_N);
gameMenu->insertSeparator();
- gameMenu->insertItem(QPixmap(exit),tr("Quit"),qApp,SLOT(quit()));
+ 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()),0,BEGINNER);
- skillMenu->insertItem(tr("Novice"), this,SLOT(setSkillNovice()), 0,NOVICE);
- skillMenu->insertItem(tr("Average"), this,SLOT(setSkillAverage()), 0,AVERAGE);
- skillMenu->insertItem(tr("Good"), this,SLOT(setSkillGood()), 0,GOOD);
- skillMenu->insertItem(tr("Expert"), this,SLOT(setSkillExpert()), 0,EXPERT);
- skillMenu->insertItem(tr("Master"), this,SLOT(setSkillMaster()), 0,MASTER);
+ 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);
- optionsMenu->insertItem(tr("English Rules"),this,SLOT(setRulesEnglish()),0,ENGLISH);
- optionsMenu->insertItem(tr("Russian Rules"),this,SLOT(setRulesRussian()),0,RUSSIAN);
+ 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("Marble Board"),this,SLOT(setPatternMarble()),0,MARBLE);
- optionsMenu->insertItem(tr("Wooden Board"),this,SLOT(setPatternWood()), 0,WOOD);
+ 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),tr("What's This"),this,SLOT(whatsThis()));
+ 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),tr("About KCheckers"),this,SLOT(about()));
+ helpMenu->insertItem(QPixmap(logo_xpm),tr("&About KCheckers"),this,SLOT(about()));
helpMenu->insertItem(tr("About &Qt"),this,SLOT(aboutQt()));
- menuBar()->insertItem(tr("Game"), gameMenu);
- menuBar()->insertItem(tr("Skill"), skillMenu);
- menuBar()->insertItem(tr("Options"),optionsMenu);
- menuBar()->insertItem(tr("Help"), helpMenu);
+ QToolBar* menuToolBar=new QToolBar(this);
+ CHECK_PTR(menuToolBar);
+ QMenuBar* menuBar=new QMenuBar(menuToolBar);
+ CHECK_PTR(menuBar);
- skill=NOVICE;
- skillMenu->setItemChecked(skill,true);
+ menuBar->insertItem(tr("&Game"), gameMenu);
+ menuBar->insertItem(tr("&Skill"), skillMenu);
+ menuBar->insertItem(tr("&Options"),optionsMenu);
+ menuBar->insertItem(tr("&Help"), helpMenu);
- rules=ENGLISH;
+ // Restore a settings
+
+ readConfig();
+
+ skillMenu->setItemChecked(skill,true);
optionsMenu->setItemChecked(rules,true);
+ optionsMenu->setItemChecked(numID,false);
- pattern=WOOD;
- optionsMenu->setItemChecked(pattern,true);
+ // 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);
- imageMan1=new QImage(man_black);
- imageMan2=new QImage(man_white);
- imageKing1=new QImage(king_black);
- imageKing2=new QImage(king_white);
+ QToolButton* helpButton=new QToolButton(QPixmap(help_xpm),tr(" Rules of Play "),"",this,SLOT(help()),toolBar);
+ CHECK_PTR(helpButton);
+ helpButton->setMinimumSize(buttonSize);
- imageWood1=new QImage(wood1);
- imageWood2=new QImage(wood2);
- imageWood3=new QImage(wood3);
- imageMarble1=new QImage(marble1);
- imageMarble2=new QImage(marble2);
- imageMarble3=new QImage(marble3);
+ // Make a checkers board
- imagePat1=imageWood1;
- imagePat2=imageWood2;
- imageFrame=imageWood3;
+ 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->addWidget(frame);
- statusLabel = new QLabel(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);
+ 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;
+
+ setPattern(pattern);
+
+ QWhatsThis::add(frame,"A checkers board");
+
userFirst=false;
game=NULL;
newGame();
}
+void KCheckers::readConfig()
+{
+ Config config("KCheckers");
+ config.setGroup("KCheckers");
+ QString entry;
+
+ entry=config.readEntry("skill","novice");
+ if(entry=="beginner") skill=BEGINNER;
+ else if(entry=="average") skill=AVERAGE;
+ else if(entry=="good") skill=GOOD;
+ else if(entry=="expert") skill=EXPERT;
+ else if(entry=="master") skill=MASTER;
+ else skill=NOVICE;
+
+ entry=config.readEntry("rules","english");
+ if(entry=="russian") rules=RUSSIAN;
+ else rules=ENGLISH;
+
+ entry=config.readEntry("theme","wooden");
+ if(entry=="green") pattern=GREEN;
+ else if(entry=="marble") pattern=MARBLE;
+ else pattern=WOODEN;
+}
+
+
+void KCheckers::closeEvent(QCloseEvent* event)
+{
+ Config config("KCheckers");
+ config.setGroup("KCheckers");
+ QString entry;
+
+ if(skill==BEGINNER) entry="beginner";
+ if(skill==NOVICE) entry="novice";
+ if(skill==AVERAGE) entry="average";
+ if(skill==GOOD) entry="good";
+ if(skill==EXPERT) entry="expert";
+ if(skill==MASTER) entry="master";
+ config.writeEntry("skill",entry);
+
+ if(rules==ENGLISH) entry="english";
+ if(rules==RUSSIAN) entry="russian";
+ config.writeEntry("rules",entry);
+
+ if(pattern==GREEN) entry="green";
+ if(pattern==MARBLE) entry="marble";
+ if(pattern==WOODEN) entry="wooden";
+ config.writeEntry("theme",entry);
+
+ event->accept();
+}
+
+
void KCheckers::setSkill(int set)
{
skillMenu->setItemChecked(skill,false);
skill=set;
skillMenu->setItemChecked(skill,true);
game->setLevel(skill);
}
void KCheckers::setRules(int set)
{
optionsMenu->setItemChecked(rules,false);
rules=set;
optionsMenu->setItemChecked(rules,true);
colorChange();
newGame();
}
void KCheckers::setPattern(int set)
{
optionsMenu->setItemChecked(pattern,false);
pattern=set;
optionsMenu->setItemChecked(pattern,true);
switch(pattern)
{
+ case GREEN:
+ imagePat1=imageGreen1;
+ imagePat2=imageGreen2;
+ imageFrame=imageGreen3;
+ break;
case MARBLE:
imagePat1=imageMarble1;
imagePat2=imageMarble2;
imageFrame=imageMarble3;
break;
- case WOOD:
+ case WOODEN:
imagePat1=imageWood1;
imagePat2=imageWood2;
imageFrame=imageWood3;
}
- drawBoard();
+ for(int i=0; i<32;i++) field[i]->setPattern(imagePat2);
+ for(int i=32;i<64;i++) field[i]->setPattern(imagePat1);
+
+ if(selected) field[from]->setFrame(imageFrame);
+}
+
- if(selected) field[from]->draw(imageFrame);
+void KCheckers::showNumeration()
+{
+ if(optionsMenu->isItemChecked(numID))
+ {
+ optionsMenu->setItemChecked(numID,false);
+ for(int i=0;i<32;i++) field[i]->setLabel("");
+ }
+ else
+ {
+ optionsMenu->setItemChecked(numID,true);
+ drawNumeration();
+ }
+}
+
+
+void KCheckers::drawNumeration()
+{
+ if(rules==ENGLISH)
+ {
+ if(userFirst)
+ for(int i=0;i<32;i++)
+ field[i]->setLabel(enNumeration.mid(i*2,2));
+ else
+ for(int i=0;i<32;i++)
+ field[i]->setLabel(enNumeration.mid(62-i*2,2));
+ }
+ else
+ {
+ if(userFirst)
+ for(int i=0;i<32;i++)
+ field[i]->setLabel(ruNumeration.mid(i*2,2));
+ else
+ for(int i=0;i<32;i++)
+ field[i]->setLabel(ruNumeration.mid(62-i*2,2));
+ }
+}
+
+
+void KCheckers::drawBoard(int i)
+{
+ switch(game->board[t[i]])
+ {
+ case MAN1:
+ field[i]->setPicture(imageMan1);
+ break;
+ case MAN2:
+ field[i]->setPicture(imageMan2);
+ break;
+ case KING1:
+ field[i]->setPicture(imageKing1);
+ break;
+ case KING2:
+ field[i]->setPicture(imageKing2);
+ break;
+ default:
+ field[i]->setPicture(NULL);
+ }
+}
+
+
+void KCheckers::help()
+{
+ QMessageBox::information(this,"Rules of Play",
+ "In the beginning of game you have\n"
+ "12 checkers (men).\n"
+ "The men move forward only.\n"
+ "The men can capture:\n"
+ "- by jumping forward only (english\n"
+ " rules);\n"
+ "- by jumping forward or backward\n"
+ " (russian rules).\n"
+ "A man which reaches the far side of\n"
+ "the board becomes a king.\n"
+ "The kings move forward or\n"
+ "backward:\n"
+ "- to one square only (english rules);\n"
+ "- to any number of squares (russian\n"
+ " rules).\n"
+ "The kings capture by jumping\n"
+ "forward or backward.\n"
+ "Whenever a player is able to make a\n"
+ "capture he must do so.",
+ QMessageBox::Ok|QMessageBox::Default);
}
void KCheckers::about()
{
- QMessageBox::about(this, "About",
- "KCheckers, a board game. Ver 0.2\n"
- "(C) 2002, A. Peredri <andi@ukr.net>\n\n"
- "http://kcheckers.tuxfamily.org\n\n"
- "Opie version by S.Prud'homme\n"
- "<prudhomme@laposte.net>\n\n"
- "http://opie.handhelds.org\n\n"
- "This program is distributed under the\n"
- "terms of the GNU General Public\n"
- "License.");
+ QMessageBox::about(this,"About KCheckers",
+ "KCheckers, a board game. Ver 0.3\n"
+ "(C) 2002, A. Peredri <andi@ukr.net>\n\n"
+ "http://kcheckers.tuxfamily.org\n\n"
+ "Contributors:\n"
+ "S. Rosen <srosen@erols.com>\n\n"
+ "Qtopia version: S.Prud'homme\n"
+ "<prudhomme@laposte.net>\n\n"
+ "This program is distributed under the\n"
+ "terms of the GNU General Public\n"
+ "License.");
}
void KCheckers::aboutQt()
{
QMessageBox::aboutQt(this);
}
void KCheckers::newGame()
{
- if(game)
- {
- delete game;
- QWhatsThis::remove(this);
- }
+ if(game) delete game;
switch(rules)
{
case ENGLISH:
game=new ECheckers(skill);
- QWhatsThis::add(this,
- "<b>Rules of English Checkers</b>"
- "<ul>"
- "<li>In the beginning of game you have<br>12 checkers (men)."
- "<li>Men move forward only."
- "<li>Men capture by jumping forward only."
- "<li>A man which reaches the far side of<br>the board becomes a king."
- "<li>Kings move forward or backward to<br>one square."
- "<li>Kings capture by jumping forward or<br>backward."
- "<li>Whenever a player is able to make<br> a capture he must do so."
- "</ul>");
+ CHECK_PTR(game);
break;
+
case RUSSIAN:
game=new RCheckers(skill);
- QWhatsThis::add(this,
- "<b>Rules of Russian Checkers</b>"
- "<ul>"
- "<li>In the beginning of game you have<br> 12 checkers (men)."
- "<li>Men move forward only."
- "<li>Men capture by jumping forward or<br>backward."
- "<li>A man which reaches the far side of<br> the board becomes a king."
- "<li>Kings move forward or backward to<br>any number of squares."
- "<li>Kings capture by jumping forward or<br>backward."
- "<li>Whenever a player is able to make<br> a capture he must do so."
- "</ul>");
+ CHECK_PTR(game);
}
- selected=false;
+ unselect();
gameOver=false;
+ gameMenu->setItemEnabled(undoID,false);
+ undoButton->setEnabled(false);
+
colorChange();
- drawBoard();
+
+ for(int i=0;i<32;i++) drawBoard(i);
+ if(optionsMenu->isItemChecked(numID)) drawNumeration();
if(!userFirst) compGo();
statusLabel->setText(tr("Go!"));
}
+// Undo the last computer and user moves
+
+void KCheckers::undoMove()
+{
+ for(int i=0;i<32;i++)
+ {
+ game->board[t[i]]=undoBoard[i];
+ drawBoard(i);
+ }
+
+ unselect();
+ gameOver=false;
+
+ gameMenu->setItemEnabled(undoID,false);
+ undoButton->setEnabled(false);
+
+ statusLabel->setText(tr("Go!"));
+}
+
+
void KCheckers::colorChange()
{
userFirst=!userFirst;
QImage* image;
image=imageMan1;
imageMan1=imageMan2;
imageMan2=image;
image=imageKing1;
imageKing1=imageKing2;
imageKing2=image;
}
-void KCheckers::drawBoard()
+void KCheckers::unselect()
{
- // Drawing of start position
- for(int i=0;i<32;i++)
- {
- field[i]->draw(imagePat2);
- if(game->getBoard(t[i])==MAN1) field[i]->draw(imageMan1);
- else if(game->getBoard(t[i])==MAN2) field[i]->draw(imageMan2);
- else if(game->getBoard(t[i])==KING1) field[i]->draw(imageKing1);
- else if(game->getBoard(t[i])==KING2) field[i]->draw(imageKing2);
- }
-
- for(int i=32;i<64;i++) field[i]->draw(imagePat1);
+ if(selected) field[from]->setFrame(NULL);
+ selected=false;
}
void KCheckers::click(int fieldNumber)
{
if(gameOver) return;
- switch(game->getBoard(t[fieldNumber]))
+ switch(game->board[t[fieldNumber]])
{
case MAN1:
case KING1:
// User selected
if(!selected)
{
from=fieldNumber;
selected=true;
- field[fieldNumber]->draw(imageFrame);
+ field[fieldNumber]->setFrame(imageFrame);
return;
}
// User reselected
else
{
- field[from]->draw(imagePat2);
- if(game->getBoard(t[from])==MAN1) field[from]->draw(imageMan1);
- else field[from]->draw(imageKing1);
+ field[from]->setFrame(NULL);
from=fieldNumber;
- field[fieldNumber]->draw(imageFrame);
+ field[fieldNumber]->setFrame(imageFrame);
return;
}
case FREE:
if(!selected) return;
if(!userGo(fieldNumber)) return;
- selected=false;
+
+ unselect();
if(!(game->checkMove2() || game->checkCapture2()))
{
gameOver=true;
statusLabel->setText(tr("Congratulation! You have won!"));
return;
}
statusLabel->setText(tr("Please wait..."));
qApp->processEvents();
compGo();
if(!(game->checkMove1() || game->checkCapture1()))
{
gameOver=true;
statusLabel->setText(tr("You have lost. Game over."));
return;
}
statusLabel->setText(tr("Go!"));
}
}
void KCheckers::compGo()
{
int save[32];
- for(int i=0;i<32;i++) save[i]=game->getBoard(t[i]);
+ for(int i=0;i<32;i++) save[i]=game->board[t[i]];
game->go2();
for(int i=0;i<32;i++)
{
- if(game->getBoard(t[i])==save[i]) continue;
- field[i]->draw(imagePat2);
- if(game->getBoard(t[i])==MAN1) field[i]->draw(imageMan1);
- else if(game->getBoard(t[i])==MAN2) field[i]->draw(imageMan2);
- else if(game->getBoard(t[i])==KING1) field[i]->draw(imageKing1);
- else if(game->getBoard(t[i])==KING2) field[i]->draw(imageKing2);
+ if(game->board[t[i]]==save[i]) continue;
+ drawBoard(i);
}
}
bool KCheckers::userGo(int to)
{
int save[32];
- for(int i=0;i<32;i++) save[i]=game->getBoard(t[i]);
+ for(int i=0;i<32;i++) save[i]=game->board[t[i]];
if(!game->go1(t[from],t[to]))
{
statusLabel->setText(tr("Incorrect course."));
return false;
}
+ for(int i=0;i<32;i++) undoBoard[i]=save[i];
+ gameMenu->setItemEnabled(undoID,true);
+ undoButton->setEnabled(true);
+
for(int i=0;i<32;i++)
{
- if(game->getBoard(t[i])==save[i]) continue;
- field[i]->draw(imagePat2);
- if(game->getBoard(t[i])==MAN1) field[i]->draw(imageMan1);
- else if(game->getBoard(t[i])==MAN2) field[i]->draw(imageMan2);
- else if(game->getBoard(t[i])==KING1) field[i]->draw(imageKing1);
- else if(game->getBoard(t[i])==KING2) field[i]->draw(imageKing2);
+ if(game->board[t[i]]==save[i]) continue;
+ drawBoard(i);
}
+
return true;
}
diff --git a/noncore/games/kcheckers/kcheckers.h b/noncore/games/kcheckers/kcheckers.h
index e86524f..ccf5bae 100644
--- a/noncore/games/kcheckers/kcheckers.h
+++ b/noncore/games/kcheckers/kcheckers.h
@@ -1,97 +1,125 @@
#ifndef KCHECKERS_H
#define KCHECKERS_H
#include <qmainwindow.h>
#include <qlabel.h>
#include "field.h"
#include "checkers.h"
-#define WOOD 1
-#define MARBLE 2
+#define WOODEN 1
+#define GREEN 2
+#define MARBLE 3
#define ENGLISH 11
#define RUSSIAN 12
#define BEGINNER 2
#define NOVICE 4
-#define AVERAGE 5
-#define GOOD 6
-#define EXPERT 7
-#define MASTER 8
+#define AVERAGE 6
+#define GOOD 7
+#define EXPERT 8
+#define MASTER 9
+
+class QToolButton;
class KCheckers:public QMainWindow
{
Q_OBJECT
public:
KCheckers();
+ protected:
+ void closeEvent(QCloseEvent*);
+
private slots:
+
+ void help();
void about();
void aboutQt();
void newGame();
- void click(int); // Processes the mouse clics on fields
+ void undoMove();
+ void click(int);
+ void showNumeration();
void setSkillBeginner() {setSkill(BEGINNER);};
void setSkillNovice() {setSkill(NOVICE);};
void setSkillAverage() {setSkill(AVERAGE);};
void setSkillGood() {setSkill(GOOD);};
void setSkillExpert() {setSkill(EXPERT);};
void setSkillMaster() {setSkill(MASTER);};
- void setPatternWood() {setPattern(WOOD);};
+ void setPatternWooden() {setPattern(WOODEN);};
+ void setPatternGreen() {setPattern(GREEN);};
void setPatternMarble() {setPattern(MARBLE);};
void setRulesEnglish() {setRules(ENGLISH);};
void setRulesRussian() {setRules(RUSSIAN);};
private:
+
void compGo();
bool userGo(int);
- void drawBoard();
+ void drawBoard(int);
+ void drawNumeration();
void colorChange();
+ void unselect();
+ void readConfig();
void setSkill(int);
void setRules(int);
void setPattern(int);
int from; // Selected by user
int skill;
int rules;
int pattern;
+
+ int numID; // Show Numeration
+ int undoID; // Undo Move
+ int undoBoard[32];
+
bool gameOver;
bool selected;
bool userFirst;
Field* field[64]; // Fields of board
QImage* imagePat1; // Patterns
QImage* imagePat2;
QImage* imageFrame; // Frame of selected field
QImage* imageWood1;
QImage* imageWood2;
QImage* imageWood3;
+ QImage* imageGreen1;
+ QImage* imageGreen2;
+ QImage* imageGreen3;
QImage* imageMarble1;
QImage* imageMarble2;
QImage* imageMarble3;
QImage* imageMan1;
QImage* imageMan2;
QImage* imageKing1;
QImage* imageKing2;
- Checkers* game;
- QPopupMenu* skillMenu;
- QPopupMenu* optionsMenu;
- QLabel* statusLabel;
+ Checkers* game;
+ QPopupMenu* gameMenu;
+ QPopupMenu* skillMenu;
+ QPopupMenu* optionsMenu;
+ QToolButton* undoButton;
+ QLabel* statusLabel;
+
+ static QString enNumeration;
+ static QString ruNumeration;
static const int t[32]; // Translate table
};
#endif
diff --git a/noncore/games/kcheckers/kcheckers.pro b/noncore/games/kcheckers/kcheckers.pro
index bdbb46e..5892d3c 100644
--- a/noncore/games/kcheckers/kcheckers.pro
+++ b/noncore/games/kcheckers/kcheckers.pro
@@ -1,32 +1,31 @@
TEMPLATE = app
CONFIG = qt warn_on release
HEADERS = checkers.h \
echeckers.h \
field.h \
kcheckers.h \
rcheckers.h
SOURCES = checkers.cpp \
echeckers.cpp \
field.cpp \
kcheckers.cpp \
main.cpp \
rcheckers.cpp
INTERFACES =
-INCLUDEPATH += . \
- $(OPIEDIR)/include
+INCLUDEPATH += $(OPIEDIR)/include
LIBS += -lqpe
DESTDIR = $(OPIEDIR)/bin
TARGET = kcheckers
TRANSLATIONS = ../../i18n/pt_BR/kcheckers.ts
TRANSLATIONS += ../../i18n/de/kcheckers.ts
TRANSLATIONS += ../../i18n/en/kcheckers.ts
TRANSLATIONS += ../../i18n/hu/kcheckers.ts
TRANSLATIONS += ../../i18n/sl/kcheckers.ts
TRANSLATIONS += ../../i18n/pl/kcheckers.ts
TRANSLATIONS += ../../i18n/ja/kcheckers.ts
TRANSLATIONS += ../../i18n/ko/kcheckers.ts
TRANSLATIONS += ../../i18n/no/kcheckers.ts
TRANSLATIONS += ../../i18n/zh_CN/kcheckers.ts
TRANSLATIONS += ../../i18n/zh_TW/kcheckers.ts
TRANSLATIONS += ../../i18n/fr/kcheckers.ts
diff --git a/noncore/games/kcheckers/main.cpp b/noncore/games/kcheckers/main.cpp
index ac86271..b8dd620 100644
--- a/noncore/games/kcheckers/main.cpp
+++ b/noncore/games/kcheckers/main.cpp
@@ -1,18 +1,18 @@
#include <qpe/qpeapplication.h>
#include <qfont.h>
#include "kcheckers.h"
int main(int argc, char *argv[])
{
QPEApplication app(argc,argv);
KCheckers kcheckers;
app.setMainWidget(&kcheckers);
- kcheckers.show();
+ kcheckers.showMaximized();
return app.exec();
}
diff --git a/noncore/games/kcheckers/opie-kcheckers.control b/noncore/games/kcheckers/opie-kcheckers.control
index 30ee336..a1b0503 100644
--- a/noncore/games/kcheckers/opie-kcheckers.control
+++ b/noncore/games/kcheckers/opie-kcheckers.control
@@ -1,10 +1,10 @@
Files: bin/kcheckers apps/Games/kcheckers.desktop pics/kcheckers
Package: opie-kcheckers
Priority: optional
Section: opie/games
Maintainer: leseb <prudhomme@laposte.net>
Architecture: arm
-Version: 0.2-$SUB_VERSION
+Version: 0.3-$SUB_VERSION
Depends: opie-base ($QPE_VERSION)
Description: The game of Checkers
A game for the Opie environment.
diff --git a/noncore/games/kcheckers/pics/biglogo.xpm b/noncore/games/kcheckers/pics/biglogo.xpm
index 6570d88..1ca8ab1 100644
--- a/noncore/games/kcheckers/pics/biglogo.xpm
+++ b/noncore/games/kcheckers/pics/biglogo.xpm
@@ -1,41 +1,40 @@
/* XPM */
-static const char *biglogo[]={
-"32 32 6 1",
+static const char *biglogo_xpm[]={
+"32 32 5 1",
". c None",
"# c #000000",
-"a c #303030",
-"d c #d7d7d7",
-"c c #eaeaea",
-"b c #ffffff",
+"c c #d7d7d7",
+"b c #eaeaea",
+"a c #ffffff",
"................................",
"................................",
"................................",
"................................",
"....########################....",
-"....#aaaaaaaaaaaaaaaaaaaaaa#....",
-"....#abbbbbbbbbb##########a#....",
-"....#abbbbbbbcbc##########a#....",
-"....#abbbbbbbbbb##########a#....",
-"....#abbbbbcbcbc##########a#....",
-"....#abbbbbbbbbb##########a#....",
-"....#abbbcbcbcbc##########a#....",
-"....#abbbbbbbbbc##########a#....",
-"....#abcbcbcbbcc##########a#....",
-"....#abbbbbbbccc##########a#....",
-"....#abcbcbccccc##########a#....",
-"....#a##########cccccccccca#....",
-"....#a##########cccccccccca#....",
-"....#a##########ccccccccdca#....",
-"....#a##########cccccccccca#....",
-"....#a##########ccccccdcdca#....",
-"....#a##########cccccccccca#....",
-"....#a##########ccccdcdcdca#....",
-"....#a##########cccccccccda#....",
-"....#a##########ccdcdcdcdca#....",
-"....#a##########cccccccdcda#....",
-"....#aaaaaaaaaaaaaaaaaaaaaa#....",
+"....########################....",
+"....##aaaaaaaaaa############....",
+"....##aaaaaaabab############....",
+"....##aaaaaaaaaa############....",
+"....##aaaaababab############....",
+"....##aaaaaaaaaa############....",
+"....##aaabababab############....",
+"....##aaaaaaaaab############....",
+"....##abababaabb############....",
+"....##aaaaaaabbb############....",
+"....##abababbbbb############....",
+"....############bbbbbbbbbb##....",
+"....############bbbbbbbbbb##....",
+"....############bbbbbbbbcb##....",
+"....############bbbbbbbbbb##....",
+"....############bbbbbbcbcb##....",
+"....############bbbbbbbbbb##....",
+"....############bbbbcbcbcb##....",
+"....############bbbbbbbbbc##....",
+"....############bbcbcbcbcb##....",
+"....############bbbbbbbcbc##....",
+"....########################....",
"....########################....",
"................................",
"................................",
"................................",
"................................"};
diff --git a/noncore/games/kcheckers/pics/contexthelp.xpm b/noncore/games/kcheckers/pics/contexthelp.xpm
index 9447207..bc455e2 100644
--- a/noncore/games/kcheckers/pics/contexthelp.xpm
+++ b/noncore/games/kcheckers/pics/contexthelp.xpm
@@ -1,20 +1,22 @@
/* XPM */
-static const char *contexthelp[]={
-"14 14 3 1",
+static const char *contexthelp_xpm[]={
+"16 16 3 1",
". c None",
"a c #000000",
"# c #ffffff",
-"##............",
-"#a#...........",
-"#aa#.....aaaa.",
-"#aaa#...aa..aa",
-"#aaaa#......aa",
-"#aaaaa#.....aa",
-"#aaaaaa#...aa.",
-"#aaaaaaa#.aa..",
-"#aaaa###..aa..",
-"#a##a#........",
-"##..#a#...aa..",
-"....#a#.......",
-".....#........",
-".............."};
+"................",
+".##.............",
+".#a#............",
+".#aa#.....aaaa..",
+".#aaa#...aa..aa.",
+".#aaaa#......aa.",
+".#aaaaa#.....aa.",
+".#aaaaaa#...aa..",
+".#aaaaaaa#.aa...",
+".#aaaa###..aa...",
+".#a##a#.........",
+".##..#a#...aa...",
+".....#a#........",
+"......#.........",
+"................",
+"................"};
diff --git a/noncore/games/kcheckers/pics/exit.xpm b/noncore/games/kcheckers/pics/exit.xpm
index 6fe404e..e4a31dc 100644
--- a/noncore/games/kcheckers/pics/exit.xpm
+++ b/noncore/games/kcheckers/pics/exit.xpm
@@ -1,21 +1,23 @@
/* XPM */
-static const char *exit[]={
-"14 14 4 1",
+static const char *exit_xpm[]={
+"16 16 4 1",
". c None",
"# c #000000",
"a c #303030",
"b c #757575",
-"..............",
-"......##......",
-"......##......",
-"...#..##..#...",
-"..a##.##.##a..",
-".b##..##..##b.",
-".a#b..##..b#a.",
-".##...##...##.",
-".##...##...##.",
-".a#b..##..b#a.",
-".b##......##b.",
-"..a##b..b##a..",
-"...a######a...",
-"....ba##ab...."};
+"................",
+".......##.......",
+".......##.......",
+"....#..##..#....",
+"...a##.##.##a...",
+"..b##..##..##b..",
+"..a#b..##..b#a..",
+"..##...##...##..",
+"..##...##...##..",
+"..a#b..##..b#a..",
+"..b##......##b..",
+"...a##b..b##a...",
+"....a######a....",
+".....ba##ab.....",
+"................",
+"................"};
diff --git a/noncore/games/kcheckers/pics/green1.xpm b/noncore/games/kcheckers/pics/green1.xpm
new file mode 100644
index 0000000..208bdfb
--- a/dev/null
+++ b/noncore/games/kcheckers/pics/green1.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static const char *green1_xpm[]={
+"32 32 27 1",
+"y c #6db06d",
+"v c #70b370",
+"s c #71b471",
+"x c #73b673",
+"w c #74b774",
+"j c #76b976",
+"l c #77ba77",
+"c c #79ba79",
+"o c #7abb7a",
+"m c #7bbe7b",
+"d c #7cbf7c",
+"i c #7ebf7e",
+"a c #7fc07f",
+"e c #80c180",
+"k c #81c281",
+"b c #82c382",
+"# c #84c584",
+". c #85c685",
+"f c #86c786",
+"g c #88c788",
+"n c #88c988",
+"r c #89ca89",
+"q c #8bca8b",
+"u c #8dcc8d",
+"p c #8ecd8e",
+"t c #90cd90",
+"h c #91ce91",
+".#a.abcacdefghabijgbf.ajdkbb.fgl",
+"abadadbamefffnadaijfffkcjoeka..l",
+"keaiaoakm#ggagpabaoaakabkmdammba",
+"mmmdmjijmebgifqadbfjdaik#mddbaak",
+"aamaajaoliab.brradgmcbambabaakba",
+"baadaaaksmae.bgttpgaoakijff.fdak",
+"g.bcabaaakabk.gnpnnkomdaobb#f.bl",
+"f.#adakabaik#b.ggggf.#ammgmk..fl",
+"f#kkkijadbambae.abfgfamaebaake#l",
+"ff#.baoaoaklekkbadffaboakijojobl",
+"ggk#bbakomdadeaak.nnadeicaocmegl",
+"gngkgggf.#aakabkiabunnabavldmaij",
+"fgabaffbdwjdaik#aadggfkaklmxjxao",
+"ffkakgfbaomcbaabaa.ffbaaemiocmak",
+"gfkbf#bakkaoakkejabaawcmdmiididl",
+"rgkk..gbebkomdadbadmlwbalmmdekay",
+"nbadbb.#abf.#ammakbaojaijjijkbba",
+"qfkjaak#kak.baijijaijcjaojaooaak",
+"ng.jomaakabkfbaoaoaaowwlmcxbamij",
+"qggawljdaik#.ffijaksbaoakajbaijo",
+"ug.bcamcbambgijijfaxakoekkaakaol",
+"ufff#baoaklegaoaorfmbajaaaaajakl",
+"gng.gkkomdadbqnuprfbabaljloadiol",
+".b#fngf.#amijanpqgg.iaijbajmab#l",
+"iik#.b.fkkxaockqu.iakaaoakmebfgl",
+"gggbaiakkawbajabgfjdaik#baabnqab",
+"fijakakabkeakbaaekmcbambakafnpad",
+"baoggdaikijbaakijwaoaklewbaeijao",
+"ijfffcbamaoakaaaobkomdadjakbaohl",
+"aobgfoaklecijjdaikf.#ammbajafrij",
+"aobakomdadkaomcbambbababakijefao",
+"llakf.#ammlllaoakleakakaklaoluul"};
diff --git a/noncore/games/kcheckers/pics/green2.xpm b/noncore/games/kcheckers/pics/green2.xpm
new file mode 100644
index 0000000..4ecfdd5
--- a/dev/null
+++ b/noncore/games/kcheckers/pics/green2.xpm
@@ -0,0 +1,107 @@
+/* XPM */
+static const char * green2_xpm[] = {
+"32 32 72 1",
+" c None",
+". c #349034",
+"+ c #348D34",
+"@ c #338433",
+"# c #306630",
+"$ c #306B30",
+"% c #317931",
+"& c #328632",
+"* c #349334",
+"= c #359635",
+"- c #369C36",
+"; c #36A436",
+"> c #369F36",
+", c #35A735",
+"' c #36A136",
+") c #36A636",
+"! c #369A36",
+"~ c #359935",
+"{ c #359B35",
+"] c #328032",
+"^ c #306E30",
+"/ c #359135",
+"( c #338A33",
+"_ c #328332",
+": c #338233",
+"< c #359435",
+"[ c #327D32",
+"} c #2F632F",
+"| c #317731",
+"1 c #327832",
+"2 c #338C33",
+"3 c #338733",
+"4 c #2E612E",
+"5 c #2C5C2C",
+"6 c #348834",
+"7 c #327B32",
+"8 c #327332",
+"9 c #35A035",
+"0 c #338F33",
+"a c #316A31",
+"b c #2F672F",
+"c c #317431",
+"d c #348B34",
+"e c #317231",
+"f c #328B32",
+"g c #327532",
+"h c #307030",
+"i c #2E642E",
+"j c #348634",
+"k c #316F31",
+"l c #337C33",
+"m c #2C5F2C",
+"n c #2B5B2B",
+"o c #254D25",
+"p c #2F692F",
+"q c #359E35",
+"r c #358C35",
+"s c #36A936",
+"t c #38A338",
+"u c #295429",
+"v c #2D602D",
+"w c #2E5F2E",
+"x c #337F33",
+"y c #337933",
+"z c #306730",
+"A c #2F652F",
+"B c #285528",
+"C c #337233",
+"D c #326E32",
+"E c #2F6A2F",
+"F c #348334",
+"G c #358A35",
+".+@#$%&*=--;>,'),'>''>!.~->{*]^/",
+"(_:__(+.~!>'>';'>>!>>-=+{{!<+[}|",
+"1$&++23]*-->'>'>>-----~.!-~.]456",
+"11+==.78/{>>>>>>9--{!~==!=0@abc>",
+"b1/==dee+=>-'-!!-9!!!=*../7bb]]'",
+"b1.=*+11+=!!!!==!>>===+7&3[c1@]~",
+"11+**+1&+.*~-~!=!!==++((+=.f6&@~",
+"_(++33d&f.=<==*0./+2+0...=(]]]6*",
+"(]11|(f@+++==+@133@32+**.*0]7&=*",
+"71g7(.=<==.+=(h10g|]]@(f+0+33.==",
+"6@3*<~--!.6@+]11gh|h4i%]3+&+++*+",
+"@1@*~->!<+]j~=+@k@][e5}kc&@l[]3~",
+"6^(=!{=~~{-!!~/]11]7cmnoi$|chk@!",
+"/+/=-=+==>>>>>*1p^k|[]c7]2+*<==>",
+"==~=->{~>>'>-=d1|@(&++*.=<->>'>{",
+"!-->>!*{{---!<f&f+.+*{~==->''';=",
+"!-9-'-*=-~-q~+@(+.*=-!!<r->)'))~",
+"-==>'{<=<~-!*&k]+/*~-{;'-;>',;)*",
+"--~<9{~~-<**fl|]3(*!!-->>''s)t;f",
+"-q=~<->>=<//3iu[fd=~===>-'',,''3",
+"><=<~>''>!!<@vv%3.2.+d**<~9>''-@",
+"<6@==>''>--!+]7w3++]]%6@@(+=!{!+",
+"f(++=>''-{=!<+]@:@@x$bbx:81_**f@",
+"====!>'>-!==.*fy%h[|zv5AAia%@@|]",
+"--{<{'''-==<.+f6]_]36i5$$$hechc*",
+"{!-!<=~{*/+(+f+((ff(g}nzc8%]|c3+",
+"-!!<+++(_7[(3+/*~.(3@lBB1]@_^[@3",
+"==+d+$Ca}e_3f.~{~=.(6:z$7@3@]&(f",
+".+&heD$:|]@@+=!~~=<+3:]7@&3+&2=+",
+"+f&:_6|:7%%f+<=!==*+&:]:]j[+==-+",
+"2__+2_[7@@@&+=<=<++37^b[@j/{->-+",
+"1cc71|||cc1^g7l77c|cE5Ec77FGGrG["};
diff --git a/noncore/games/kcheckers/pics/green3.xpm b/noncore/games/kcheckers/pics/green3.xpm
new file mode 100644
index 0000000..f9aa154
--- a/dev/null
+++ b/noncore/games/kcheckers/pics/green3.xpm
@@ -0,0 +1,33 @@
+/* XPM */
+static const char *green3_xpm[]={
+"32 32 2 1",
+"# c None",
+". c #00f100",
+"............................",
+"............................",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"..########################..",
+"............................",
+"............................"};
diff --git a/noncore/games/kcheckers/pics/help.xpm b/noncore/games/kcheckers/pics/help.xpm
new file mode 100644
index 0000000..49d24b0
--- a/dev/null
+++ b/noncore/games/kcheckers/pics/help.xpm
@@ -0,0 +1,74 @@
+/* XPM */
+static const char *help_xpm[]={
+"16 16 55 1",
+". c None",
+"e c #000000",
+"W c #010101",
+"j c #040404",
+"w c #383838",
+"# c #393939",
+"a c #3f3f3f",
+"k c #404040",
+"o c #494949",
+"x c #4a4a4a",
+"C c #4d4d4d",
+"p c #4e4e4e",
+"0 c #4f4f4f",
+"T c #6b6b6b",
+"Y c #6d6d6d",
+"E c #8c8c8c",
+"N c #999999",
+"Z c #a2a2a2",
+"U c #a8a8a8",
+"i c #b5b5b5",
+"d c #bababa",
+"R c #c0c0c0",
+"V c #c4c4c4",
+"X c #cacaca",
+"S c #cbcbcb",
+"O c #cecece",
+"M c #d1d1d1",
+"b c #d3d3d3",
+"Q c #d5d5d5",
+"c c #d9d9d9",
+"D c #dadada",
+"P c #dbdbdb",
+"f c #dddddd",
+"K c #dedede",
+"H c #e3e3e3",
+"l c #e5e5e5",
+"J c #e6e6e6",
+"L c #e7e7e7",
+"g c #e8e8e8",
+"q c #eaeaea",
+"I c #ebebeb",
+"h c #ececec",
+"G c #ededed",
+"y c #eeeeee",
+"F c #f0f0f0",
+"A c #f2f2f2",
+"B c #f3f3f3",
+"v c #f4f4f4",
+"u c #f5f5f5",
+"r c #f6f6f6",
+"m c #f7f7f7",
+"z c #f8f8f8",
+"t c #fafafa",
+"s c #fbfbfb",
+"n c #fcfcfc",
+"......###.......",
+".....abcdee.....",
+".....afghcije...",
+".....klmnnmciop.",
+".....oqrstuvpwpe",
+".....xyzzzABpCDe",
+"....#EBrrFyGeee.",
+"....kHFBBIJKj...",
+"....#JgyLHDMe...",
+".###NMOPccQRe...",
+"#nzSTTURVSRW....",
+"#icnzXYTZUUe....",
+".eeicnmSp0Ne....",
+"...eeicpwpe.....",
+".....eeppDe.....",
+".......eee......"};
diff --git a/noncore/games/kcheckers/pics/king_black.xpm b/noncore/games/kcheckers/pics/king_black.xpm
index 382ee71..c5e6703 100644
--- a/noncore/games/kcheckers/pics/king_black.xpm
+++ b/noncore/games/kcheckers/pics/king_black.xpm
@@ -1,39 +1,39 @@
/* XPM */
-static const char *king_black[]={
+static const char *king_black_xpm[]={
"28 28 8 1",
". c None",
"# c #000000",
"f c #303030",
"d c #585858",
"b c #808080",
"a c #a0a0a0",
"c c #dcdcdc",
"e c #ffffff",
"..........########..........",
"........##aaabbbbb##........",
"......##caddddddddbb##......",
".....#ccc###########bb#.....",
"....#eed##############b#....",
"...#ee#################b#...",
"..#ee###################b#..",
"..#e##########e#########b#..",
".#ce##########e##########b#.",
".#c##########ded#########b#.",
"#aa####ca####aeb####ea####b#",
"#aa####bea###cea###aeb####b#",
"#ad####dce###ecc###ecd####b#",
"#ad#####cea##ecc##aea#####b#",
"#ad#####acea#ecc#aecb#####b#",
"#ad######cee#ecc#eec######b#",
"#ad######cceeecceeca######b#",
"#bd######acccccccccb######b#",
".#b#######ccccccccc######b#.",
".#b#######cccccccca######b#.",
"..#b######aaaaaaaab#####b#..",
"..#b#######fffffffff####b#..",
"...#b##################b#...",
"....#b################b#....",
".....#bb############bb#.....",
"......##bb########bb##......",
"........##bbbbbbbb##........",
"..........########.........."};
diff --git a/noncore/games/kcheckers/pics/king_white.xpm b/noncore/games/kcheckers/pics/king_white.xpm
index 30932e8..f1e4257 100644
--- a/noncore/games/kcheckers/pics/king_white.xpm
+++ b/noncore/games/kcheckers/pics/king_white.xpm
@@ -1,39 +1,39 @@
/* XPM */
-static const char *king_white[]={
+static const char *king_white_xpm[]={
"28 28 8 1",
". c None",
"# c #000000",
"d c #303030",
"e c #585858",
"f c #808080",
"c c #a0a0a0",
"b c #dcdcdc",
"a c #ffffff",
"..........########..........",
"........##aaaaaaaa##........",
"......##aaabbbbbbbcc##......",
".....#aaabbbbbbbbbbbcc#.....",
"....#aabbbbbbbbbbbbbbbc#....",
"...#aabbbbbbbbbbbbbbbbbc#...",
"..#aabbbbbbbbbbbbbbbbbbbc#..",
"..#abbbbbbbbbadbbbbbbbbbc#..",
".#abbbbbbbbbbadbbbbbbbbbbc#.",
".#abbbbbbbbbbadbbbbbbbbbbc#.",
"#aabbbb#abbbbadbbbbba#bbbbc#",
"#abbbbb#dabbac#cbbbae#bbbbc#",
"#abbbbbaddbbafdfbbaf#ebbbbc#",
"#abbbbbbedcbaedebba##cbbbbc#",
"#abbbbbbcddaadddbafdebbbbbc#",
"#abbbbbbbdddadddacddcbbbbbc#",
"#abbbbbbbeddfdddfddebbbbbbc#",
"#abbbbbbbcdddddddddcbbbbbbc#",
".#cbbbbbbbddddddddebbbbbbc#.",
".#cbbbbbbbedddddddcbbbbbbc#.",
"..#cbbbbbbcfffffffbbbbbbc#..",
"..#cbbbbbbbbbbbbbbbbbbbbc#..",
"...#cbbbbbbbbbbbbbbbbbbc#...",
"....#cbbbbbbbbbbbbbbbbc#....",
".....#ccbbbbbbbbbbbbcc#.....",
"......##ccbbbbbbbbcc##......",
"........##cccccccc##........",
"..........########.........."};
diff --git a/noncore/games/kcheckers/pics/logo.xpm b/noncore/games/kcheckers/pics/logo.xpm
index a47d3de..e6cc0a0 100644
--- a/noncore/games/kcheckers/pics/logo.xpm
+++ b/noncore/games/kcheckers/pics/logo.xpm
@@ -1,23 +1,25 @@
/* XPM */
-static const char *logo[]={
-"14 14 6 1",
+static const char *logo_xpm[]={
+"16 16 6 1",
". c None",
"# c #000000",
"d c #dcdcdc",
"c c #e1e1e1",
"b c #efefef",
"a c #ffffff",
-"..............",
-".############.",
-".#aaaab######.",
-".#aaaaa######.",
-".#aabab######.",
-".#aaabb######.",
-".#babbb######.",
-".######bcbbc#.",
-".######bbbbd#.",
-".######bbcdd#.",
-".######bcddd#.",
-".######cdddd#.",
-".############.",
-".............."};
+"................",
+"................",
+"..############..",
+"..#aaaab######..",
+"..#aaaaa######..",
+"..#aabab######..",
+"..#aaabb######..",
+"..#babbb######..",
+"..######bcbbc#..",
+"..######bbbbd#..",
+"..######bbcdd#..",
+"..######bcddd#..",
+"..######cdddd#..",
+"..############..",
+"................",
+"................"};
diff --git a/noncore/games/kcheckers/pics/man_black.xpm b/noncore/games/kcheckers/pics/man_black.xpm
index e40a265..c07b1d6 100644
--- a/noncore/games/kcheckers/pics/man_black.xpm
+++ b/noncore/games/kcheckers/pics/man_black.xpm
@@ -1,39 +1,39 @@
/* XPM */
-static const char *man_black[]={
+static const char *man_black_xpm[]={
"28 28 8 1",
". c None",
"# c #000000",
"c c #585858",
"a c #808080",
"f c #a0a0a0",
"e c #bdbdbd",
"b c #dcdcdc",
"d c #ffffff",
"..........########..........",
"........##aaaaaaaa##........",
"......##ba########aa##......",
".....#bbc###########aa#.....",
"....#ddc##############a#....",
"...#dd#######cccc######a#...",
"..#dd######aacccccc#####a#..",
"..#d#####ddeaac##ccc####a#..",
".#bd####dde#######ccc####a#.",
".#b####dde#########cc##cc##.",
"#aa####de#####ccc##ccc#ccc##",
"#a####ade#####ccc###cc#ccc##",
"#a####ae########cc#####ccc##",
"#a####ca#########ac####ccc##",
"#a###ccc#########ed####acc##",
"#a###cc####c#####dd###aacc##",
"#a###ccc###cc###dd####eeaa##",
"#a####cc####caedde###bbdbc##",
".#a###ccc#####dd#####bdde##.",
".#a####ccccc########bddd###.",
"..#a####cccc#######bdddb##..",
"..#a######cc#####bbdddb###..",
"...#a########aebbdddbb###...",
"....#a#####caaabddbbe###....",
".....#aa#cccccfbbde####.....",
"......##a#cccccb######......",
"........############........",
"..........########.........."};
diff --git a/noncore/games/kcheckers/pics/man_white.xpm b/noncore/games/kcheckers/pics/man_white.xpm
index b0968db..59556fe 100644
--- a/noncore/games/kcheckers/pics/man_white.xpm
+++ b/noncore/games/kcheckers/pics/man_white.xpm
@@ -1,41 +1,41 @@
/* XPM */
-static const char *man_white[]={
+static const char *man_white_xpm[]={
"28 28 10 1",
". c None",
"# c #000000",
"g c #808080",
"d c #a0a0a0",
"f c #b3b3b3",
"a c #d7d7d7",
"e c #dcdcdc",
"h c #e1e1e1",
"c c #f6f6f6",
"b c #ffffff",
"..........########..........",
"........##aaaaaaaa##........",
"......##abbcbbbbbbdd##......",
".....#abbbeeeeeeebbedd#.....",
"....#abbbeafffffffebeed#....",
"...#abbeadfggdgggdfebbfd#...",
"..#abbeafggeeeeeeggfeeefd#..",
"..#abeafgabbbbbbbeegfebed#..",
".#abeafgebbeeeeebbbegfebfd#.",
".#abefgebbedddddeebbhgdbed#.",
"#abbafgebeddggggdhebegdebfd#",
"#abefgebbedgggffffebbagdbed#",
"#abefgebedggffafffeebegdbed#",
"#abefgebedggfaaaafeebegdbed#",
"#abefgebedgfaaeeafeebegdbed#",
"#acefgebedgfaeebbbeebegdbed#",
"#abeffebedgffeabbbebbegfchd#",
"#acbhfgebeddfaabbbebhfdhhfd#",
".#dbhfggebedddfeeebbhgfbhd#.",
".#debefgeebbeeeeebbhgfbbhd#.",
"..#deeefgeebbbbbbbhgfbbhd#..",
"..#debbefggehhhhhfgfhbhhd#..",
"...#deebeffggggggdfebhhd#...",
"....#deebeeehddddbbbchd#....",
".....#ddeeebbbbbbeehdd#.....",
"......##ddeeeeeeeedd##......",
"........##dddddddd##........",
"..........########.........."};
diff --git a/noncore/games/kcheckers/pics/marble1.xpm b/noncore/games/kcheckers/pics/marble1.xpm
index 124cbd2..087a024 100644
--- a/noncore/games/kcheckers/pics/marble1.xpm
+++ b/noncore/games/kcheckers/pics/marble1.xpm
@@ -1,240 +1,244 @@
/* XPM */
-static const char *marble1[]={
-"28 28 209 2",
+static const char *marble1_xpm[]={
+"32 32 209 2",
"#Y c #cbcee3",
".s c #cccfe4",
".X c #cdcfe5",
"ba c #cdd0e2",
"ad c #cdd0e5",
"a7 c #ced0e3",
"al c #ced0e5",
"ae c #ced0e6",
"aW c #ced1e3",
".J c #ced1e6",
"#c c #cfd1e4",
"aA c #cfd1e7",
"bd c #cfd2e4",
"b. c #cfd2e5",
".W c #cfd2e7",
"#I c #cfd2e8",
"a5 c #d0d2e5",
"be c #d0d2e7",
".8 c #d0d2e8",
"aM c #d0d3e4",
".4 c #d0d3e5",
"#b c #d0d3e6",
".r c #d0d3e8",
"bl c #d0d3e9",
".f c #d1d3e6",
"bm c #d1d3e9",
".E c #d1d4e6",
".A c #d1d4e7",
"at c #d1d4e8",
".t c #d1d4e9",
"#E c #d1d4ea",
"#d c #d2d4e7",
".Y c #d2d4ea",
"#a c #d2d5e7",
".5 c #d2d5e8",
"bk c #d2d5e9",
"#B c #d2d5ea",
"#p c #d3d5e8",
"## c #d3d5eb",
".3 c #d3d6e8",
"aZ c #d3d6e9",
"aG c #d3d6ea",
"#X c #d3d6eb",
".7 c #d3d6ec",
"a# c #d3d8e4",
".2 c #d4d5e9",
"#y c #d4d6e9",
"#5 c #d4d6eb",
".L c #d4d6ec",
"#e c #d4d7e9",
".Q c #d4d7ea",
"#Q c #d4d7eb",
".O c #d4d7ec",
"#D c #d4d7ed",
".R c #d5d7ea",
"#O c #d5d7eb",
"aH c #d5d7ec",
"#l c #d5d7ed",
"aV c #d5d8e9",
".d c #d5d8ea",
".e c #d5d8eb",
".q c #d5d8ed",
".K c #d5d8ee",
"aT c #d5d9e8",
"aF c #d6d8ea",
".S c #d6d8eb",
"aQ c #d6d8ed",
".N c #d6d8ee",
".l c #d6d9eb",
".i c #d6d9ec",
"#N c #d6d9ed",
"#s c #d6d9ee",
".0 c #d6d9ef",
"aa c #d6dae7",
"az c #d7d9eb",
"#q c #d7d9ec",
"#F c #d7d9ef",
".a c #d7daec",
".c c #d7daed",
"#R c #d7daee",
".6 c #d7daef",
".w c #d7daf0",
"aw c #d7dbe8",
"#v c #d8daed",
"bn c #d8daee",
"a6 c #d8daef",
"#j c #d8daf0",
"ah c #d8dbeb",
".B c #d8dbed",
".b c #d8dbee",
"#k c #d8dbf0",
".y c #d8dbf1",
"aj c #d8dce9",
"ay c #d8dcea",
"#9 c #d8dcec",
"#S c #d9dbee",
"bo c #d9dbef",
"#n c #d9dbf1",
"#4 c #d9dceb",
"#g c #d9dcee",
".# c #d9dcef",
"an c #d9dcf0",
".v c #d9dcf1",
"#6 c #d9dcf2",
"#3 c #d9deeb",
".F c #dadcef",
"a1 c #dadcf0",
"as c #dadcf2",
"#x c #daddef",
".g c #daddf0",
"a2 c #daddf1",
"ac c #daddf2",
"#u c #daddf3",
"ap c #dadeeb",
"aE c #dadeec",
"aP c #dadfec",
"ag c #dbddef",
".o c #dbddf0",
"bj c #dbddf1",
"af c #dbddf3",
"#V c #dbdef0",
"#w c #dbdef1",
"a0 c #dbdef2",
"#. c #dbdef3",
".u c #dbdef4",
"aU c #dbdfee",
"au c #dcdef1",
"a9 c #dcdef2",
"#r c #dcdef3",
"#m c #dcdef4",
"#8 c #dcdff1",
".C c #dcdff2",
"#L c #dcdff3",
".V c #dcdff4",
".M c #dcdff5",
"#Z c #dddff2",
".9 c #dddff5",
"b# c #dddff6",
"#o c #dde0f2",
".h c #dde0f3",
"#P c #dde0f4",
"#t c #dde0f5",
"#H c #dde0f6",
"#T c #dee0f3",
"ao c #dee1f1",
"#f c #dee1f4",
"bc c #dee1f6",
".z c #dee1f7",
"ai c #dee2ef",
"#U c #dfe1f3",
"#W c #dfe1f5",
"a3 c #dfe1f7",
"av c #dfe2f3",
".P c #dfe2f5",
"#7 c #dfe2f7",
".x c #dfe2f8",
"aC c #dfe3f0",
"aL c #dfe3f1",
"bg c #e0e2f5",
"bh c #e0e2f8",
"#1 c #e0e3f4",
"#0 c #e0e3f5",
".j c #e0e3f6",
"#M c #e0e3f7",
"#J c #e0e3f8",
"bf c #e0e3f9",
"aK c #e0e5f2",
"a8 c #e1e3f9",
"aI c #e1e4f5",
".m c #e1e4f6",
".H c #e1e4f7",
"bb c #e1e4fa",
"aB c #e2e5f5",
"aS c #e2e5f6",
".D c #e2e5f7",
"#h c #e2e5f8",
".1 c #e2e5f9",
"#C c #e2e5fa",
"a4 c #e2e5fb",
"Qt c #e3e5f9",
".p c #e3e6f9",
"aY c #e3e6fa",
"bi c #e3e6fc",
"aX c #e4e6f9",
"#K c #e4e6fa",
"ab c #e4e7f9",
"#i c #e4e7fa",
".U c #e4e7fb",
"aO c #e4e8f5",
"aR c #e5e7fb",
"#z c #e5e8fa",
"aN c #e5e8fb",
"#A c #e5e8fc",
".Z c #e5e8fe",
"aD c #e5e9f6",
"ak c #e5e9f7",
".I c #e6e9fa",
"#G c #e6e9fc",
".G c #e6e9fd",
"aJ c #e6eaf8",
".k c #e7eafc",
".T c #e7eafd",
"am c #e7eafe",
"ar c #e7ebf8",
"aq c #e7ebf9",
"ax c #e7ecf9",
".n c #eaedfe",
"#2 c #edf2fc",
"a. c #f0f4fd",
"Qt.#.a.b.c.b.d.b.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.r.t.u.v.w.x.y.t.z",
".j.c.e.b.c.i.i.b.l.A.B.C.b.j.D.E.F.G.H.I.q.J.J.K.L.y.M.M.M.N.O.z",
".P.i.Q.B.i.R.c.B.l.S.g.C.b.g.H.C.h.T.U.V.W.t.W.r.X.Y.z.Z.z.L.0.u",
".1.c.2.3.4.5.b.a.l.a.a.o.g.#.d.l.b.p.H.O.X.6.7.8.t.K.9#.##.O.6.O",
".p.b#a#b#c#d.#.c.d#e.A.c#f.C#g.H#h#i.h#j.t.v#k.y.s#l#m#n.O.K.q.8",
"#o.l#p.3.d.a.a#q.c.b.R.R.C.d.Q.h#i.C#h#r#s.v.w.0.K#t.x#u.0.0.Y.t",
".p.h.S.3#v#w.a.i#x.g#y#d.S#w#z.p.j#g.I#A.K.r#B.W#u#C#D#D#E.v.t#F",
".j.h.3#c#e#y.b.B#a.E.a.a#wQt.j.c#w#g.j#G.K.s.t.J.M#H#I.r.W#l#B.u",
"#f#f#e#b.c.E.4.E.l.a#e#xQt#f#q#b.b.c.##A#J.w.9.z#K.w#u.w#u.0#u#H",
"#L#M#N#O#P#Q#N#R.5.5.Q#w.h.e.c.i.B#S#w#T#U.a#V#W.h.s#l#D.M#m.z.0",
"#n#u.O#X#k#Y#B#s.L#t#h#h.l.##Z.F.#.C#0#1#2#3#4.D.e#5.O#6.u.6#E.s",
"#u#k.K#D#l#X#s#B###7.p.H#S.h.P#w.#.F#8#9a.a#aaab.dac.x#H#u.Nadae",
".v.y#s#B.r#D.N.qaf#L.##g.e.c#w.g.b.bagahaiajak.m.H#7.u.0.q.y#B.L",
"#F#m.Nal.J.r#B.Vaman#y.b.b.d.S.i.i#g#8aoapaqar#V.h#..w.Y.r.q.q.t",
"#F.M#s.sad.tas.V.vat.d.gau.B.i.l.e.b.havawaxayaz.3.6.7ad#Yae#X.L",
".L.u.N#YaA.v#u.y.Oat.5.3.3.3.Q.i.F#T.HaBaCaDaEaF#eaG.8ad.s.s#B#k",
".W#u#l#YaH#C#s#s.yan#x.l.d#v.#.h.H#h.jaIaJaKaLaM#v.W.W#B.W.J.O.y",
".W#j.w.Y#s#H#X.O.w.6.l.Q.d.b.jaN#i.jagaIaOaPaLaM.S.r.t.L#B.Y.0as",
".Y.O.u.u.7.J.L#B#BaQ#S#f.p.p#GaR.j.h#faSayaTaUaV.4aQ.K##.O.O.was",
"aW.A.C.c.i.Q.i.Q.c#b.laX#f.b#V.Pau.e.DaY.aaZ.g#L#Q.v.uas#k.ca0a1",
"#T#V.h#a.d.C#p#a.g.B.P.j.#.c.h.h.b#g.pa2#B.qa3a4##.N#k#k#s.b.#.i",
".P.#.F.E.R#pa5.c#i.P.j#w.g.#.h.R.E#8#o.6.0#kas.u.w#j#k#ka6.b.l#y",
".j#V.ga7.4#wau#v.g.l#w.h.#.a#S.f.3#f.iat.7.O.ya8#Haf#n#nac#g.B.3",
".ga9#h#v.b.H.j.E.d.#.P#fb.a5#q.S.haN.c#s.w.r#Bb#.u.w.O#l.6.g#w.R",
".#.P.H#Z.b.Q.F#p.d.H#T.h#aba.d#w.P#f#S.J.t.O.K.ubbas.0.ubc.o.c.l",
"Qt.H.H#f.o#g.c.c.g#Z.S.e.dbd#a.#.h#v.c#X.0.q#X.6#H#k.v#u#s#S.g#V",
"Qt.C.o.g.b.C.e.F.C.B#cbd.l#a#a.c.#.Q.l#5.6.6.K#6.u.y.M.ybe.5.a#g",
-".C.i#w#w.dau.e.c.b.Q#c#daZ.5.c.e.e#g.i#X#j.w.0af#Hbf#m.q#X#a#e.i"};
+".C.i#w#w.dau.e.c.b.Q#c#daZ.5.c.e.e#g.i#X#j.w.0af#Hbf#m.q#X#a#e.i",
+"#w.#bg.j#v.F.i.d.d#y.f#O.5.3#P.3#ya0#q#s#u#k.O.qbhbi#.#Q#k.b.bbj",
+"#f.C#w#w.F#e.B.b.lbk#Y.W##.6bbbl.O.w.L.A.l#q#y.B.H.h.#.B.##t.Mac",
+".H.F.C#w.3.e.i.i.eaZad.W.0.y#t#m.z#k#l.c.d.E.b#i#8.a.d.##P.z.v.O",
+"#V.i.h#f#e.i.e.e.e#Qbm.t.y#k.r.yaf#F#nbn.d.i.h#h#e#v.o#wbo.q#l#l"};
diff --git a/noncore/games/kcheckers/pics/marble2.xpm b/noncore/games/kcheckers/pics/marble2.xpm
index f31ee0b..6348bb9 100644
--- a/noncore/games/kcheckers/pics/marble2.xpm
+++ b/noncore/games/kcheckers/pics/marble2.xpm
@@ -1,595 +1,595 @@
/* XPM */
-static const char *marble2[]={
+static const char *marble2_xpm[]={
"32 32 560 2",
"dC c #6079b1",
"et c #6079b4",
"fU c #607ab1",
"fT c #607ab2",
"f5 c #607bb1",
"eu c #6179b4",
"f2 c #617ab0",
"dR c #617ab1",
"df c #617ab2",
"cY c #617ab3",
"dT c #617ab4",
"ef c #617bb3",
"cS c #617bb4",
"f6 c #617caf",
"cU c #617cb0",
"de c #627ab4",
"eb c #627ab5",
"gj c #627ab8",
"fo c #627bb1",
"dg c #627bb2",
"dl c #627bb3",
"dW c #627bb4",
"dQ c #627caf",
"cT c #627cb3",
"f4 c #627cb5",
"dD c #637ab5",
"fB c #637bb4",
"gi c #637bb5",
"en c #637cb1",
"ea c #637cb3",
"dX c #637cb4",
"cX c #637cb5",
"dS c #637cb6",
"dc c #637cb7",
"dE c #647bb4",
"cC c #647cb6",
"fR c #647db3",
"dB c #647db4",
"eS c #647db5",
"fC c #647db6",
"dU c #647db7",
"d9 c #647eb0",
"fc c #647eb4",
"ee c #647eb6",
"ec c #6480b3",
"dd c #657db9",
"f1 c #657eb4",
"eR c #657eb5",
"d8 c #657eb6",
"fQ c #657eb7",
"fS c #657eb8",
"eT c #657fb2",
"cz c #657fb5",
"cR c #657fb9",
"#Y c #667fb6",
"cD c #667fb7",
"ey c #6680b4",
"d7 c #6681b7",
"fA c #677fb9",
"e9 c #6780b4",
"eI c #6780b6",
"aI c #6780b7",
"dM c #6780b8",
"dV c #6781b9",
"ed c #6782b7",
"bK c #687eb7",
"ba c #6881b6",
".C c #6881b7",
"cB c #6881b8",
"em c #6881b9",
"fP c #6881bc",
"a4 c #6882b5",
"aQ c #6884b6",
"aP c #6884b8",
"gO c #6981b7",
"bt c #6981b9",
"fh c #6981bb",
"dN c #6982b6",
"cq c #6982b7",
".D c #6982b8",
"ch c #6982b9",
"fd c #6982ba",
"cF c #6982bb",
"dP c #6983b3",
"dA c #6983b4",
"cr c #6983b5",
"at c #6983b6",
"af c #6983b7",
"cy c #6983b8",
"fu c #6983b9",
"d1 c #6983bc",
"aO c #6984b9",
"bJ c #6a7fb9",
"cL c #6a82b8",
"gP c #6a82b9",
"cZ c #6a82bc",
"bb c #6a83b5",
"b# c #6a83b8",
".W c #6a83b9",
"cE c #6a83ba",
"ag c #6a83bb",
"aw c #6a83bc",
"db c #6a83bd",
".K c #6a84b6",
"bF c #6a84b8",
"dL c #6a84b9",
"dI c #6a84ba",
"eY c #6a84bb",
"gA c #6a85b4",
"dH c #6a85b5",
"da c #6a85b6",
"f# c #6a86bb",
"dh c #6b81b7",
"bs c #6b81bb",
"gh c #6b84b7",
"#B c #6b84b8",
"#Z c #6b84b9",
".# c #6b84ba",
"aj c #6b84bb",
"aF c #6b84bc",
"bo c #6b85b7",
"ax c #6b85b8",
"ao c #6b85b9",
"#j c #6b85ba",
"d2 c #6b87b8",
"bu c #6c83b6",
"dy c #6c83ba",
"eU c #6c85b8",
"a0 c #6c85ba",
".c c #6c85bb",
"f8 c #6c85bc",
"#V c #6c85bd",
"cP c #6c85be",
"ai c #6c86b7",
"cp c #6c86b8",
".5 c #6c86b9",
"ac c #6c86ba",
"ev c #6c86bc",
"d0 c #6c86c0",
"bP c #6c87bd",
"br c #6d84b9",
"gG c #6d85b8",
"fi c #6d85c0",
"bR c #6d86ba",
"ap c #6d86bb",
"#i c #6d86bc",
"co c #6d86bd",
"aE c #6d86be",
"cb c #6d87b7",
"gs c #6d87b8",
".E c #6d87ba",
"ew c #6d87bb",
"d6 c #6d88bf",
"gF c #6e86ba",
"gL c #6e87bb",
"bj c #6e87bc",
".a c #6e87bd",
"e4 c #6e87be",
"aK c #6e87bf",
"#F c #6e87c1",
".t c #6e88ba",
"dK c #6e88bb",
"dm c #6e88bc",
"e5 c #6e88be",
"do c #6e89b8",
"aN c #6e89be",
"dp c #6f86b8",
"#E c #6f87c0",
"a6 c #6f88bd",
".b c #6f88be",
"cx c #6f88bf",
"eo c #6f89b9",
".g c #6f89ba",
"a1 c #6f89bb",
"#G c #6f89bc",
"cg c #6f89bd",
"eN c #6f8ab9",
"bO c #6f8bc2",
"cn c #7087bd",
"gH c #7088b9",
"ci c #7089bd",
"#X c #7089be",
"#k c #7089bf",
"eL c #708aba",
"au c #708abb",
".H c #708abc",
".e c #708abd",
"as c #708abe",
"b5 c #708abf",
"fb c #708bba",
"b4 c #708bbb",
"b. c #718abd",
"bC c #718abe",
"#l c #718abf",
".y c #718ac0",
"aH c #718ac2",
"f7 c #718ac3",
"a7 c #718bbb",
"#C c #718bbc",
".f c #718bbd",
".h c #718bbe",
"#f c #718cbc",
"fE c #7289ba",
"fK c #728bc0",
".X c #728bc1",
"aG c #728bc3",
"cu c #728cbd",
"c. c #728cbe",
"#0 c #728cbf",
"dY c #728cc0",
"an c #728cc1",
"dO c #728db9",
"ct c #728dbc",
"aL c #728dbd",
"gI c #728eb9",
"#e c #728ec0",
"f. c #7290c4",
"gk c #7389bd",
"bI c #7389be",
"gz c #7389bf",
"gQ c #738abb",
"fF c #738bbe",
"cO c #738bc2",
"dz c #738cbf",
"ab c #738cc0",
"cw c #738cc2",
"eg c #738cc3",
".T c #738dbd",
".G c #738dbe",
"el c #738dbf",
"bn c #738dc0",
"aC c #738dc1",
"bD c #738ebc",
".L c #738ebd",
"aM c #738ec3",
"gJ c #738fbb",
"fl c #738fbd",
".S c #738fc1",
"gy c #748bbe",
"fM c #748cbf",
"bU c #748dc1",
".z c #748dc3",
"a9 c #748ebf",
"cv c #748ec0",
".6 c #748ec1",
"aD c #748ec3",
".M c #748fbd",
".8 c #748fbe",
"fp c #748fbf",
"d5 c #7490c3",
"d# c #758bc3",
"eZ c #758dbe",
"#p c #758ec4",
"aZ c #758fbf",
".k c #758fc0",
".F c #758fc1",
".4 c #758fc2",
"bV c #758fc4",
"#5 c #7590c0",
"aS c #768dbe",
"fL c #768ec5",
"Qt c #768fc5",
"ez c #7690c0",
"fj c #7690c1",
"cf c #7690c2",
"aY c #7690c3",
"fV c #7690c5",
"#D c #7691be",
"#q c #7691c0",
"bE c #7691c1",
"cm c #778ec2",
"bQ c #7790c1",
"gM c #7790c4",
".d c #7790c6",
"fJ c #7791c0",
"#6 c #7791c1",
"#1 c #7791c2",
".s c #7791c3",
".i c #7791c4",
"bZ c #7791c5",
"a# c #7792be",
"#S c #7792bf",
"bk c #7792c2",
"fk c #7793c2",
"aU c #7793c3",
"di c #788ec0",
"f0 c #7891c7",
"cA c #7892c3",
".J c #7892c4",
"#W c #7892c5",
"#U c #7892c6",
"#H c #7893bf",
"ak c #7893c0",
"cc c #7893c1",
"#o c #7893c2",
"ex c #7893c3",
"dZ c #7894c4",
"bL c #798fc2",
"dG c #7991c4",
"#8 c #7992c6",
".A c #7992c8",
"gB c #7993c0",
"#y c #7993c3",
"ae c #7993c4",
"#O c #7993c5",
"eh c #7993c6",
"#N c #7994c2",
"#m c #7994c3",
"#T c #7994c4",
"gt c #7994c5",
"eW c #7995c3",
"aT c #7995c7",
"b9 c #7a90c7",
".U c #7a92c1",
"dq c #7a93c1",
"eE c #7a93c6",
"cN c #7a93c7",
"a5 c #7a93c9",
"f3 c #7a93cb",
"fm c #7a94c0",
"dJ c #7a94c3",
"bl c #7a94c4",
"dt c #7a94c5",
".r c #7a94c6",
"#7 c #7a94c7",
"bW c #7a94c9",
"#t c #7a95c0",
"eA c #7a95c3",
"#n c #7a95c4",
"d3 c #7a95c5",
"cG c #7a95c7",
"bq c #7b92c2",
"fa c #7b93ca",
"bp c #7b94bf",
".B c #7b94ca",
".j c #7b95c6",
".I c #7b95c7",
".7 c #7b95c8",
"fG c #7b95ca",
"ei c #7b96c4",
"fz c #7b96c5",
".1 c #7b96c6",
"eX c #7b96c7",
".u c #7b97c9",
"dF c #7c93c9",
"dx c #7c95c0",
"cQ c #7c96c6",
".l c #7c96c7",
"#R c #7c96c8",
"eH c #7c96c9",
"bX c #7c97c4",
"#r c #7c97c6",
".2 c #7c97c7",
"dj c #7d94c0",
"#A c #7d94c1",
".R c #7d94c5",
"ds c #7d95c7",
".v c #7d97c7",
"c6 c #7d97c8",
".Y c #7d97c9",
"c1 c #7d98c4",
"b3 c #7d98c5",
"#J c #7d98c6",
".0 c #7d98c8",
"d4 c #7d99c7",
"e8 c #7e95c4",
"eD c #7e96c6",
"fs c #7e97c4",
"cM c #7e97cb",
"fv c #7e98c6",
"aB c #7e98c8",
".Z c #7e98c9",
"#Q c #7e98ca",
"aA c #7e98cb",
"a. c #7e99c5",
"az c #7e99c6",
".9 c #7e99c7",
"by c #7f96c1",
"gR c #7f96c5",
"c5 c #7f96c8",
"bx c #7f97c4",
"#g c #7f97c6",
".Q c #7f97c8",
"aa c #7f99c9",
"dn c #7f99ca",
"aJ c #7f99cb",
"a3 c #7f99cc",
"eO c #7f9ac5",
"fI c #7f9ac6",
"c# c #7f9ac8",
"b0 c #7f9ac9",
"gl c #8097c6",
"gE c #8098cc",
"a2 c #809acb",
".p c #809bc7",
"ad c #809bc9",
"gu c #809bca",
"e1 c #809bcb",
"fr c #8199c3",
"gx c #8199ca",
"bm c #819bcb",
"gK c #819bcc",
"cI c #819cc4",
".O c #819cc7",
"aq c #819cc8",
".3 c #819ccb",
"e0 c #819ccc",
"eB c #8298c0",
"eM c #8298c6",
"b8 c #8298cb",
"fD c #8299c8",
"cl c #8299ca",
"c0 c #829ccc",
"eG c #829cce",
"aX c #829dc9",
"a8 c #829dcb",
"gg c #829dcd",
"f9 c #8399c6",
"c8 c #839ac9",
"c2 c #839acc",
"cK c #839cd2",
"ft c #839dcc",
"#K c #839dcd",
"du c #839dce",
".o c #839ecc",
"#M c #839ecd",
"ca c #839ece",
"es c #849aca",
".w c #849ccb",
"bY c #849ece",
"#P c #849ecf",
"av c #849fcb",
"#I c #849fcd",
"eK c #849fce",
"cV c #84a0c9",
"ay c #84a0ca",
"fO c #859cc3",
".m c #859fd0",
".N c #85a0cc",
"b2 c #85a0cd",
"eV c #85a0ce",
"eQ c #85a1c9",
"ej c #85a1cc",
"#w c #869dc7",
"gr c #869dc9",
"fn c #869fca",
"dr c #869fcd",
"#s c #86a1cd",
"cj c #86a1ce",
".n c #86a1d0",
"bc c #879ece",
"e7 c #879fca",
"ck c #879fcd",
"gw c #879fce",
"gN c #87a0d3",
"gf c #87a1d1",
"c7 c #87a1d2",
"b1 c #87a2cc",
"#9 c #87a2ce",
"cs c #87a2d0",
"eP c #87a2d1",
"ge c #889eca",
".q c #88a3ce",
"#. c #88a3cf",
"eJ c #88a3d0",
"bS c #88a3d3",
"e2 c #88a4c8",
"al c #88a4cb",
"#u c #89a0ca",
"dv c #89a2d0",
"cH c #89a4cc",
"ar c #89a4d0",
"#L c #89a4d2",
"#b c #8aa1ce",
"aR c #8aa3d4",
"aV c #8aa4d1",
"ce c #8aa4d5",
"bT c #8aa5d2",
"#4 c #8aa6c8",
"ek c #8aa6d0",
"fY c #8ba0cc",
"#a c #8ba1cf",
".P c #8ba2d3",
".x c #8ba3cf",
"aW c #8ba4cf",
"b6 c #8ba6d1",
"bB c #8ba6d2",
"cd c #8ba6d3",
"am c #8ba7cb",
"gd c #8ca1cd",
"#h c #8ca3cf",
"gD c #8ca7ce",
"#2 c #8ca7d3",
"gv c #8ca7d6",
"gc c #8da4cd",
"cJ c #8da9d2",
"fZ c #8ea3d2",
"e# c #8ea8d3",
"## c #8ea9d4",
"bi c #8ea9d5",
"gb c #8fa5cd",
"fN c #8fa6d3",
"cW c #8fa9d6",
"bN c #90a6c9",
"#v c #90a7d1",
"#d c #90a7d4",
"be c #90a8d2",
"#z c #90a8d7",
"dw c #90a9d1",
"e3 c #90abd9",
"e. c #91add5",
"b7 c #92aad2",
"fH c #92acd7",
"ah c #92addc",
"fX c #93a9d1",
"bH c #93aad8",
"gS c #93abd4",
"fg c #93abd5",
"bf c #94abd2",
".V c #94acd8",
"gm c #94add4",
"c9 c #94aecf",
"gC c #94aed9",
"ep c #94afdd",
"c3 c #95add6",
"bd c #96adda",
"fe c #96aed2",
"e6 c #97aed7",
"#c c #97aedb",
"gq c #97afd9",
"d. c #97b0d5",
"fy c #97b2de",
"fw c #98b1d9",
"eF c #98b4d9",
"ga c #99b1d1",
"c4 c #99b1da",
"bA c #9aafd3",
"bz c #9ab0d7",
"#3 c #9ab6dc",
"g. c #9bb1db",
"#x c #9bb2dc",
"fq c #9cb3db",
"gT c #9cb4d8",
"gn c #9cb5d8",
"dk c #9cb5dd",
"bh c #9db2d4",
"bw c #9db3da",
"bv c #9db3de",
"gp c #9db5dd",
"bg c #9eb3d7",
"go c #9eb6dd",
"eq c #a0b6da",
"fx c #a0b8dc",
"ff c #a0b8de",
"er c #a1b6df",
"fW c #a1b8db",
"bG c #a1bae2",
"eC c #a2b9e4",
"bM c #a3b9e3",
"g# c #a4bcdf",
"Qt.#.a.b.a.#.cQt.d.e.f.g.e.h.h.i.j.k.l.m.n.o.p.q.r.s.t.r.u.v.w.x",
".y.z.A.B.y.#.C.#.D.E.F.G.H.s.f.I.J.K.K.t.L.M.N.O.P.Q.Q.R.S.T.U.V",
".W.b.X.X.a.W.W.#.c.h.Y.Z.0.1.2.3.4.5.6.7.8.9#.###a#b#c#d#e#f#g#h",
"#i.c#i#i#j.##k#l#k.E.F.l#m#n#m#o.z.c#pQt#q#r#s#t#u#v#w#x#e#y#z#A",
".b#B#C.G#D#E#F.E#G.4.4.e#H#I#J#K#L#M.o#N.F#O.Y.t#P#Q.l#R#S#T#U#V",
".r#W#G.f.v#X#Y#Z.e.6#0.h#1#2#3#4#5.T.T#6.h.e#7#8#9a.a##9aa.Kabac",
"adaeafag.rahaiaj.E.6#W#0.Jakalamanaoap#Z.C.D.D#ka#aqararasatau#6",
"av#6.cawaxayazaj.haA.r#WaB#OaCaDaEaFajaGaH#V#VaI.HaJ.s.faKapaL.o",
"aMaNaOaPaQ.taRaSaTaUaVaWaXaYasaZ.#a0a1a2a3.h.5a4a5#p.b.caKa6a7a8",
"a9b.b#ajbabbbcbdbebfbgbhbiabbjbkacaxblbmaY#G#0bn.b.##i.Wafaxbo#P",
"bpbqbrbsbtbubvbwbxbybzbAbBbCas#T.s.1#mbD.h.6a3.e.D.y.b.abE.HbFa6",
"bGbHbIbJbKbLbMbNbObPb.bQ#SbRas.k#CbS#LbT.r.s.ibU.ybVbW.dbXbYbZaH",
"b0bX.Nb1b2b3#nai#i#i#i.X.d.c#i#ib4b5#0b6b7#hb8b9c.a9#rc#ca.ZaB#6",
"aucbcccdcecfcg.b.a.a.a.a.y.X.b.Daichcicjckclcmcn.yaEco.Wcp.Ka1.Y",
".Ccqcrb4csctcucv.a#i#i.W.acw.c.Wa4aKcx#ncwcy.WczcAcgcBcCcDcDcEcB",
"cFag#XcGcHcIcJ#.cKQt.cb#cLcMcNcOaccPagcQcRcScTcUcVcW.Y.yawcXcXcY",
"cZ.#c0c1c2c3c4c5c6c7.gauc8c9d.d#dadbdc.bdddedfdgdhdidjdkaEdldldf",
"codmdndodpdqdrdsdtc7.jdudvdwdxdydzagcDdAdBdldCcYdDdEdFdGdldfdldl",
".taYaYaxdHdIb5a9.l#1.Ga9bXdJdKcEdLdMdNdOdPdQdRdSdTdUdVdWdXdldCdC",
"cQcAdY.zdZd0d1d2a7#1d3aad4d5d6d7dCd8d9e.e#a7eaebecedeeefeadRcEeg",
"aAeh.4.icAc..5.yeib2ejek.jelao.WemeneoepeqeresbrcoeteubFdHaueh.a",
"bn.E.6a3#1.Jeh#kevew.h.Y#Texc.apageyezeAeBeCeDeEcv#Za7eFeGb.ba#Y",
"#GdKeHaYcu#OaxeIch.aci.reJeKaB.f#VeyeLbDeMckeNbEeOePeLeQeh.ceReS",
"cveEeH.H#1.feT.DeU.g#oa8eVeWeX.JeYbF#1#oeZbQe0e1e2e3e4e5#ichemcD",
"e6e7e8.0.Je9.Daj.a.4.Jdtf.f#evfa#G.4dK.h#0.6dmew.abmfbfcdXfdcDdM",
"fefffga#cheSfhfi#i#0.sfjfkflfmfn#o#1aCev#Yfofofo#YaLfpdfdlememem",
"fqfrfsftaCa0fuaw#i.h.rdn.Yfvfwfxfyfz.DfAdXdfdXdXfB.K#WfCdleSdMag",
"fDfEfFfGfHfIfJ.kfK.f.fcffLfMfNfOeOezchfPfQfCcXdWeufRbVfScXfTfUea",
"fVewc..lfWfXfYfZb2eAfp.faua9.j#1.zf0.aeI.W.#f1f2dCdBf3d8f4fTf5f6",
"f7agf8a0f9g.g#gagbgcgdge.ldt.ldt.b.c#i.dgfbYfz#fdHdPgg#ygheRgigj",
".#bFax.Kgkglgmgngogpgqgrfjcudn.j.y.#.C.WcAcpgsgtgu#m#mgvgwgxgygz",
"gAgBgCgDgEgFgGgHgIgJadfz.kc6gK#1gLcy.DcEcEfdajgMgNb.gOgPgQgRgSgT"};
diff --git a/noncore/games/kcheckers/pics/marble3.xpm b/noncore/games/kcheckers/pics/marble3.xpm
index 36c9b17..3b70b4f 100644
--- a/noncore/games/kcheckers/pics/marble3.xpm
+++ b/noncore/games/kcheckers/pics/marble3.xpm
@@ -1,33 +1,33 @@
/* XPM */
-static const char *marble3[]={
+static const char *marble3_xpm[]={
"28 28 2 1",
"# c None",
". c #0000ff",
"............................",
"............................",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"............................",
"............................"};
diff --git a/noncore/games/kcheckers/pics/undo.xpm b/noncore/games/kcheckers/pics/undo.xpm
new file mode 100644
index 0000000..313e1d0
--- a/dev/null
+++ b/noncore/games/kcheckers/pics/undo.xpm
@@ -0,0 +1,24 @@
+/* XPM */
+static const char *undo_xpm[]={
+"16 16 5 1",
+". c None",
+"# c #000000",
+"c c #a0a0a0",
+"b c #dcdcdc",
+"a c #ffffff",
+"................",
+"................",
+".......#........",
+"......##........",
+".....#a#........",
+"....#aa########.",
+"...#aabaaaaaab#.",
+"..#aabbbbbbbbc#.",
+"...#abbccccccc#.",
+"....#ac########.",
+".....#a#........",
+"......##........",
+".......#........",
+"................",
+"................",
+"................"};
diff --git a/noncore/games/kcheckers/pics/wood1.xpm b/noncore/games/kcheckers/pics/wood1.xpm
index 866f8d9..eb2d71d 100644
--- a/noncore/games/kcheckers/pics/wood1.xpm
+++ b/noncore/games/kcheckers/pics/wood1.xpm
@@ -1,117 +1,117 @@
/* XPM */
-static const char *wood1[]={
+static const char *wood1_xpm[]={
"32 32 82 2",
"#c c #9c825c",
".H c #9c8664",
"#p c #a48a64",
"#f c #a48a6c",
".I c #a48e64",
".G c #a48e6c",
".X c #a4926c",
"#g c #ac8a6c",
".u c #ac8e6c",
"#o c #ac8e74",
".b c #ac926c",
".c c #ac9274",
".d c #ac966c",
"Qt c #ac9674",
".j c #ac9a74",
"#b c #ac9a7c",
".w c #ac9e74",
".V c #b49274",
".A c #b49674",
".W c #b4967c",
".S c #b49a6c",
".s c #b49a74",
".t c #b49a7c",
".U c #b49e74",
".i c #b49e7c",
".2 c #b49e84",
".f c #b4a27c",
".q c #b4a284",
".k c #b4a67c",
"#n c #b4a684",
".P c #bc9a74",
"#d c #bc9a7c",
".R c #bc9e74",
".# c #bc9e7c",
".1 c #bc9e84",
".g c #bca27c",
".v c #bca284",
".F c #bca67c",
".a c #bca684",
"#. c #bcaa7c",
".h c #bcaa84",
".p c #bcaa8c",
"#a c #bcae84",
".n c #bcae8c",
".8 c #bcb28c",
"#j c #c49e84",
".K c #c4a27c",
".O c #c4a284",
".N c #c4a67c",
".D c #c4a684",
"#e c #c4a68c",
"#i c #c4aa7c",
".e c #c4aa84",
".z c #c4aa8c",
".T c #c4ae84",
".r c #c4ae8c",
".l c #c4b28c",
".o c #c4b294",
".C c #c4b68c",
".7 c #c4b694",
"#l c #c4ba94",
".L c #ccaa8c",
".Q c #ccae84",
".E c #ccae8c",
".Z c #ccae94",
".6 c #ccb284",
".B c #ccb28c",
".J c #ccb294",
".M c #ccb68c",
".x c #ccb694",
".0 c #ccb69c",
".m c #ccba94",
"#m c #ccba9c",
".5 c #ccbe94",
".9 c #ccc29c",
".Y c #d4b694",
".y c #d4ba94",
"#h c #d4ba9c",
"#k c #d4be94",
".4 c #d4be9c",
".3 c #d4c29c",
"## c #dcc69c",
"Qt.#.a.#Qt.b.c.d.a.e.a.f.g.h.i.b.j.f.h.h.a.k.l.m.a.a.n.o.p.i.q.r",
".#.i.s.t.g.g.t.uQt.sQt.d.t.e.e.v.h.f.w.a.x.y.r.f.f.i.a.r.z.g.a.o",
".g.v.g.A.A.g.z.B.r.B.r.e.e.l.B.r.l.B.o.C.l.l.n.e.a.v.a.e.a.i.s.g",
".i.g.D.i.s.v.B.y.a.E.B.r.a.v.#.s.s.a.B.F.G.H.I.i.v.g.g.g.a.g.i.f",
".#.i.s.g.z.B.z.#.G.A.i.#.#.g.g.i.l.B.l.r.e.F.v.F.f.i.i.e.r.B.J.x",
".D.D.i.A.s.#.g.i.K.v.D.v.K.a.L.J.e.e.e.r.M.J.e.g.E.e.e.e.e.e.a.N",
".r.r.D.A.GQt.a.E.E.D.D.#.#.#.g.O.e.l.x.x.B.l.B.x.B.B.E.e.g.#.s.s",
".e.D.v.g.e.E.e.g.t.P.t.#.#.K.v.D.D.v.sQt.A.t.i.g.g.N.e.N.D.e.Q.B",
".b.b.A.v.r.B.z.g.g.R.s.S.b.b.b.b.d.b.c.s.a.T.E.z.UQt.u.G.G.V.s.P",
".D.a.g.a.e.z.e.g.r.e.D.a.F.a.e.e.e.e.a.e.r.E.l.e.a.e.r.B.B.Q.O.#",
".v.#.s.s.#.g.a.D.G.G.u.b.W.g.r.E.o.l.r.e.e.a.F.v.XQt.s.#.z.E.E.E",
".D.g.v.#.a.D.r.E.Y.J.J.Z.J.J.0.Y.Y.x.Y.B.r.e.e.e.m.B.h.g.i.i.#.#",
".J.M.J.r.e.a.g.g.t.1.i.1.g.1.#.2.a.e.r.T.e.a.z.r.T.z.r.B.B.B.E.e",
".B.J.B.B.D.#.W.s.c.A.t.i.g.v.v.g.s.U.f.v.g.a.e.r.3.4.5.x.l.v.j.b",
".e.z.B.r.D.a.e.r.B.M.B.B.r.D.g.#.r.r.E.B.J.x.x.y.m.m.l.l.B.x.Y.x",
"Qt.A.s.s.s.U.a.E.a.N.e.e.Q.T.6.B.x.y.x.m.y.y.y.y.m.x.l.M.x.M.x.x",
".f.h.7.7.l.8.M.9.M#..g.F.F.g.g.K.t.g.z.r.a.iQt.c.F.F.a.s.b.b.s.g",
".l.l.M.m.m.4.4.4##.y.B.a.#.P.D.B.r.r.e.a.a.v.e.r.t.g.e.e.e.h.e#a",
".i.g.v.F.v.F.g.fQtQtQtQt.c.c.V.t.a.g#b.u.H#c.H.H.a.g#bQtQt.s.g.a",
".z.E.B.E.K.i#d.g#e.a.O.z.E.z.#.c.s.#.a.a.e.z.a.iQt.A.i.a.a.i.G.H",
".#.#.#.s.V.u#f#g.t.t.t.i.1.1.1.i.c.j.v.a.r.B.e.v.r.g.A.i.a.z.E.J",
".E.a#d.g.z.r.K.s#f#d.L.z.g.i.a.r.B.r.e.i.g.z.p.g.c.c.t.E#h.J.z.a",
".D.a.g.D.r.E.z.a.A.e.B.D.s.b.X.b.f.i.c.GQt.a.r.a.vQt.c.t.i.i.#.v",
".b.i.e.a.U.A.f#i#j.R.d.b.s.e.T.T.a#e.g.t.#.e.gQt#e.i.2.z.z.v.t.i",
".r.gQt.i.z.B.r.a.g.i.s.j.i.g.o.4.r.r.r.r.a.q.v.a.e.a.F.h.n.h.n.C",
".J.r.a.g.v.i.s.c.f.tQt.u#f.G.t.e.e.i.b#f.H.H.GQt.a.T.l.x#k.5.m#l",
".GQt.i.v.f.v.e.r.D.a.g.i.s.t.e#m.z.t.G.G.j.v.e.l.i.g.i.i#n.l.l.h",
".i.D.z.r.D.a.z.B#h.x.l.z.a.f.a.r.x.r.f.v.e.z.h#e.T.r.T.F.r.m.x.h",
".GQt.s.f.v.e.r.x.r.z.e.r.B.Z.r.B.r.a.e.r.r.z.a.a.g.p.T.h.r.Y.eQt",
".r.D.a.v.v.iQt.u.G.H.H.c.g.a.a.v.g.f.a.z.l.B.x#h.m.x.r.D.T.B.J.e",
".a.e.z.x.y.4.x.r.B.z.a.z.r.r.e.a.r.z.a.a.a.v.a.T.l.e.iQtQt.s.#.#",
".a.a.r.x.y.x.D.i#o#p.GQt.i.v.D.r.r.z.h.z.r.r.r.J.r.r.B.x.B.#.A.b"};
diff --git a/noncore/games/kcheckers/pics/wood2.xpm b/noncore/games/kcheckers/pics/wood2.xpm
index c2ff364..b786bfb 100644
--- a/noncore/games/kcheckers/pics/wood2.xpm
+++ b/noncore/games/kcheckers/pics/wood2.xpm
@@ -1,114 +1,115 @@
/* XPM */
-static const char *wood2[]={
-"32 32 79 2",
-"#k c #484c4d",
-"#l c #484d47",
-"#m c #494a46",
-"#d c #4c4841",
-"#j c #4c4c48",
-".1 c #4e554d",
-".9 c #4f483f",
-"#e c #4f4c44",
-".0 c #4f4f48",
-".Z c #4f524d",
-".2 c #4f564e",
-".X c #515450",
-".W c #51564e",
-".V c #52574f",
-"#. c #544e45",
-".U c #545047",
-".Y c #54524a",
-".8 c #575046",
-".T c #575248",
-".7 c #57554c",
-".t c #57564d",
-".B c #575751",
-".u c #58574f",
-".a c #585950",
-".A c #585d52",
-".v c #5c584f",
-".G c #5d564a",
-".# c #5d5a54",
-".Q c #5e5649",
-".z c #5e5a4f",
-".y c #5e5d51",
-"Qt c #5e5e55",
-".C c #5e5e57",
-".E c #5f5a4f",
-".x c #5f5e51",
-".w c #5f5f54",
-".b c #5f6056",
-".3 c #615749",
-".H c #615d4e",
-".F c #615d54",
-".n c #615f52",
-".c c #615f56",
-".S c #625a4d",
-".o c #645f57",
-".s c #646056",
-".D c #646256",
-".d c #646258",
-".R c #655e4f",
-".m c #655f50",
-".e c #65675d",
-".q c #666657",
-".4 c #675d4e",
-".l c #675f54",
-".p c #676156",
-".k c #676456",
-".r c #67645a",
-".P c #696054",
-".j c #696456",
-".5 c #69665c",
-"#i c #696759",
-".I c #6a6657",
-".f c #6a675e",
-"#h c #6c6a5d",
-".L c #6d6152",
-".O c #6f6758",
-".i c #6f6759",
-".h c #6f695d",
-".g c #6f6c5e",
-"#f c #6f6f62",
-".N c #706250",
-".M c #706757",
-".J c #746c5c",
-"## c #766756",
-".K c #776f5f",
-"#a c #796c57",
-".6 c #7d6f5c",
-"#g c #7d7462",
-"#b c #85745e",
-"#c c #8d7d67",
-"QtQtQt.#.a.a.a.#Qt.b.c.c.d.d.d.e.f.f.g.h.i.i.i.j.k.l.m.n.o.o.p.p",
-".b.b.b.b.c.c.c.c.d.d.d.d.d.d.c.d.q.r.s.s.s.s.s.k.s.s.n.d.d.r.r.r",
-".t.u.v.v.#.#.#.#.#.w.x.y.y.z.y.z.z.v.u.a.a.A.y.y.y.yQt.c.c.bQtQt",
-".o.o.cQt.#.c.c.c.o.q.d.d.s.s.y.z.z.v.u.B.a.a.aQtQtQt.CQt.y.A.a.A",
-".o.o.o.o.o.z.z.x.x.s.s.s.s.D.n.x.x.E.a.a.a.u.u.t.t.u.u.u.v.v.z.a",
-".F.F.n.s.s.p.p.s.s.G.z.E.E.E.H.m.l.j.j.I.h.g.g.g.h.h.i.h.J.J.J.K",
-".j.j.p.p.p.h.h.h.h.h.h.h.h.g.h.h.h.i.L.L.M.M.M.L.L.L.L.L.N.L.L.L",
-".i.i.I.I.j.i.i.h.h.i.i.i.h.h.i.O.O.I.P.L.L.P.P.I.M.M.M.M.M.M.M.M",
-".E.E.Q.Q.Q.E.E.H.R.H.H.H.R.R.S.H.H.H.H.H.H.H.S.H.H.H.R.R.H.H.H.H",
-".H.H.R.R.m.R.m.p.j.I.I.I.O.O.I.k.l.m.m.m.l.l.l.R.H.E.E.z.x.x.F.n",
-".O.I.j.P.l.R.R.R.R.m.m.R.R.H.x.F.F.F.j.j.j.j.j.i.i.i.i.f.r.c.z.z",
-".t.t.t.t.t.T.T.U.U.t.t.t.V.W.W.V.V.B.B.B.B.B.B.X.X.X.X.Y.U.U.U.U",
-".c.c.w.y.u.a.u.u.t.Y.Y.Y.Z.0.Z.Z.Z.Z.1.1.1.1.1.2.2.2.2.t.u.v.z.x",
-".Q.Q.3.H.R.S.S.R.m.P.P.P.l.p.l.l.l.p.s.s.s.s.s.q.q.q.q.o.o.o.c.c",
-".4.4.4.4.4.L.L.M.M.J.J.J.J.J.O.M.M.h.O.O.O.O.O.I.I.I.I.5.5.r.o.o",
-".M.M.J.K.K.K.K.6.6.6.6.6.K.J.K.K.K.K.K.K.J.J.h.M.O.j.P.F.F.F.F.F",
-".G.G.7.T.8.9.9.9.9.9.9.9.9.9.9.9.9.9#..8.T.7.7.E.F.F.F.r.r.r.r.r",
-".Q.G.G.8.8.G.8.8.8.Q.Q.3.3.Q.R.l.p.j.5.f.f.f.f.f.5.5.5.o.o.o.o.o",
-".L.L.N#########a.6.6.6.6#a#a.L.4.4.4.3.Q.Q.8.8.H.S.S.3.s.o.o.o.o",
-"#####a.6#a#a#a#a#a#b.6#b#c#b#b.6#a.N.m.m.R.H.x.x.v.7.T#..U.U.U.U",
-"#a.6#b#b#b#b#b#b#b#b#b#b#b#a.N.4.4.S.R.H.E.E.v.z.v.a.B.z.z.v.v.v",
-".4.4.N.N.N###a#a.6.N.N.N.4.3.3.3.3.4.3.Q.Q.T.T.8#.#d.9.9.9#e#e#e",
-".j.L.O.M#a#a#a#a#a#b#b.6.6#b.6.6#a##.M.L.L.L.l.l.p.5.5.f.f#f#f#f",
-".8.8.8.Q.3.4.4.N#a.6#a#a.N.N###a.6#b#b#b#g#g#g.M.P.H.E.E.v.t.T.T",
-".M.M.M############.N.N.N.N.N.N.N.N.N.N.L.4.4.S.Q.Q.Q.Q.F.x.x.x.x",
-".4.4.4.4.4.N.N.N##.N.N.N.N.N.N.L.L.L.4.4.4.4.l.l.p.p.p.r.d.o.n.n",
-".j.j.j.O.M#########a##.M.L.L.O.5.O.j.P.l.R.H.E.F.x.v.v.z.v.t.T.T",
-".f.f.5.p.l.R.4.4.4.3.3.Q.Q.Q.S.S.E.E.S.3.E.E.x.n.o.r.r#f#f.g.g.f",
-".C.C.d.5.f.5.5.h.g.K.K.g.g.h#h#h#h#i.p.s.n.x.#.a.a.B.B.7.T.T.7.7",
-".T.T.T.U.U#e#e.9.9#j#k#k#l#m.0.0.0.0.Z.Y.Y.W.W.B.B.B.B.y.z.z.z.z",
-".P.P.l.l.R.R.R.R.S.c.c.o.c.c.x.n.c.s.r.5.r.r.p.p.p.p.p.r.r.r.r.r",
-"###a#a.6.6#g#g.6.6.g.g#h.5.r.r.q.r.d.s.c.w.w.x.w.w.w.w.x.F.F.F.F"};
+static const char * wood2_xpm[] = {
+"32 32 80 1",
+" c None",
+". c #4B4B3F",
+"+ c #49453D",
+"@ c #434438",
+"# c #4C4E40",
+"$ c #4F4C40",
+"% c #535043",
+"& c #555849",
+"* c #5C584B",
+"= c #645F4B",
+"- c #645B49",
+"; c #645844",
+"> c #5B5340",
+", c #585340",
+"' c #584C3D",
+") c #554C38",
+"! c #4F4C3B",
+"~ c #534C41",
+"{ c #584F40",
+"] c #565641",
+"^ c #585345",
+"/ c #534E40",
+"( c #414035",
+"_ c #434137",
+": c #484337",
+"< c #4C4C3D",
+"[ c #4C4B3A",
+"} c #4B493A",
+"| c #4B4537",
+"1 c #43493B",
+"2 c #41413A",
+"3 c #4B4B41",
+"4 c #535040",
+"5 c #4C4537",
+"6 c #4F493D",
+"7 c #494031",
+"8 c #4F4936",
+"9 c #5C5641",
+"0 c #6C5F48",
+"a c #71644C",
+"b c #614F3B",
+"c c #665841",
+"d c #665038",
+"e c #645843",
+"f c #5B4E3D",
+"g c #4B4030",
+"h c #554B37",
+"i c #504535",
+"j c #413B2F",
+"k c #3D382E",
+"l c #3B4137",
+"m c #3A4036",
+"n c #3A3D38",
+"o c #3D3B31",
+"p c #373B35",
+"q c #37372F",
+"r c #363F35",
+"s c #374036",
+"t c #4F4130",
+"u c #584936",
+"v c #5B5648",
+"w c #7B6448",
+"x c #413F33",
+"y c #41382D",
+"z c #372F25",
+"A c #3D362B",
+"B c #6F5840",
+"C c #745F41",
+"D c #896C4B",
+"E c #967B58",
+"F c #332F27",
+"G c #37332A",
+"H c #646450",
+"I c #7B6C50",
+"J c #5F5C49",
+"K c #5B5844",
+"L c #33332F",
+"M c #2F3335",
+"N c #2F352E",
+"O c #30312D",
+"...+@@@+.#$$%%%&**=-;;;>,')!~~{{",
+"####$$$$%%%%%%$%]^/////,//!%%^^^",
+"(_::+++++<[}}|}||:_@@1}}}}.$$#..",
+"~~$.+$$$~]%%//}||:_2@@@...3.}1@1",
+"~~~~~||[[////4![[5@@@__((___::|@",
+"66!//{{//7|5558)'>>9-===--;-000a",
+">>{{{--------=---;bbcccbbbbbdbbb",
+";;99>;;--;;;--;ee9fbbff9cccccccc",
+"55ggg558h888hhi8888888i888hh8888",
+"88hh)h){>999ee9,')))'''h855|[[6!",
+"e9>f'hhhh))hh8[666>>>>>;;;;*^$||",
+"(((((jjkk(((lmmll222222nnnnokkkk",
+"$$<}_@__(ooopqpppprrrrrssss(_:|[",
+"ggt8hiih)fff'{'''{/////]]]]~~~$$",
+"uuuuubbcc00000ecc-eeeee9999vv^~~",
+"cc0aaaawwwwwa0aaaaaa00-ce>f66666",
+"77xjyzzzzzzzzzzzzzAyjxx5666^^^^^",
+"g77yy7yyyggttgh'{>v*****vvv~~~~~",
+"bbdBBBBCwwwwCCbuuutggyy8iit/~~~~",
+"BBCwCCCCCDwDEDDwCd))h8[[:xjAkkkk",
+"CwDDDDDDDDDDDCduuih855:|:@2||:::",
+"uudddBCCwddduttttutggjjyAFzzzGGG",
+">becCCCCCDDwwDwwCBcbbb''{vv**HHH",
+"yyygtuudCwCCddBCwDDDIIIcf855:(jj",
+"cccBBBBBBddddddddddbuuigggg6[[[[",
+"uuuuudddBddddddbbbuuuu''{{{^%~!!",
+">>>ecBBBBCBcbbeve>f'h856[::|:(jj",
+"**v{'huuuttgggii55it55[!~^^HH==*",
+"33%v*vv-=aa==-JJJK{/![+@@22xjjxx",
+"jjjkkGGzzLMMNOqqqqpoomm2222}||||",
+"ff''hhhhi$$~$$[!$/^v^^{{{{{^^^^^",
+"BCCwwIIww==Jv^^]^%/$<<[<<<<[6666"};
diff --git a/noncore/games/kcheckers/pics/wood3.xpm b/noncore/games/kcheckers/pics/wood3.xpm
index 5f4f7e2..6c919fa 100644
--- a/noncore/games/kcheckers/pics/wood3.xpm
+++ b/noncore/games/kcheckers/pics/wood3.xpm
@@ -1,33 +1,33 @@
/* XPM */
-static const char *wood3[]={
+static const char *wood3_xpm[]={
"28 28 2 1",
"# c None",
-". c #ff8c00",
+". c #ff9900",
"............................",
"............................",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"..########################..",
"............................",
"............................"};
diff --git a/noncore/games/kcheckers/rcheckers.h b/noncore/games/kcheckers/rcheckers.h
index d44bfd1..01913a5 100644
--- a/noncore/games/kcheckers/rcheckers.h
+++ b/noncore/games/kcheckers/rcheckers.h
@@ -1,28 +1,28 @@
#ifndef RCHECKERS_H
#define RCHECKERS_H
-#include <checkers.h>
+#include "checkers.h"
class RCheckers:public Checkers
{
public:
RCheckers(int skill):Checkers(skill){};
bool go1(int,int);
bool checkCapture1();
bool checkCapture2();
private:
void kingMove2(int,int &);
bool manCapture1(int,int,bool &);
bool kingCapture1(int,int,bool &);
bool manCapture2(int,int &);
bool kingCapture2(int,int,int &);
};
#endif
diff --git a/pics/kcheckers/KCheckers.xpm b/pics/kcheckers/KCheckers.xpm
index 6570d88..1ca8ab1 100644
--- a/pics/kcheckers/KCheckers.xpm
+++ b/pics/kcheckers/KCheckers.xpm
@@ -1,41 +1,40 @@
/* XPM */
-static const char *biglogo[]={
-"32 32 6 1",
+static const char *biglogo_xpm[]={
+"32 32 5 1",
". c None",
"# c #000000",
-"a c #303030",
-"d c #d7d7d7",
-"c c #eaeaea",
-"b c #ffffff",
+"c c #d7d7d7",
+"b c #eaeaea",
+"a c #ffffff",
"................................",
"................................",
"................................",
"................................",
"....########################....",
-"....#aaaaaaaaaaaaaaaaaaaaaa#....",
-"....#abbbbbbbbbb##########a#....",
-"....#abbbbbbbcbc##########a#....",
-"....#abbbbbbbbbb##########a#....",
-"....#abbbbbcbcbc##########a#....",
-"....#abbbbbbbbbb##########a#....",
-"....#abbbcbcbcbc##########a#....",
-"....#abbbbbbbbbc##########a#....",
-"....#abcbcbcbbcc##########a#....",
-"....#abbbbbbbccc##########a#....",
-"....#abcbcbccccc##########a#....",
-"....#a##########cccccccccca#....",
-"....#a##########cccccccccca#....",
-"....#a##########ccccccccdca#....",
-"....#a##########cccccccccca#....",
-"....#a##########ccccccdcdca#....",
-"....#a##########cccccccccca#....",
-"....#a##########ccccdcdcdca#....",
-"....#a##########cccccccccda#....",
-"....#a##########ccdcdcdcdca#....",
-"....#a##########cccccccdcda#....",
-"....#aaaaaaaaaaaaaaaaaaaaaa#....",
+"....########################....",
+"....##aaaaaaaaaa############....",
+"....##aaaaaaabab############....",
+"....##aaaaaaaaaa############....",
+"....##aaaaababab############....",
+"....##aaaaaaaaaa############....",
+"....##aaabababab############....",
+"....##aaaaaaaaab############....",
+"....##abababaabb############....",
+"....##aaaaaaabbb############....",
+"....##abababbbbb############....",
+"....############bbbbbbbbbb##....",
+"....############bbbbbbbbbb##....",
+"....############bbbbbbbbcb##....",
+"....############bbbbbbbbbb##....",
+"....############bbbbbbcbcb##....",
+"....############bbbbbbbbbb##....",
+"....############bbbbcbcbcb##....",
+"....############bbbbbbbbbc##....",
+"....############bbcbcbcbcb##....",
+"....############bbbbbbbcbc##....",
+"....########################....",
"....########################....",
"................................",
"................................",
"................................",
"................................"};