From 1003de6f3b0c508960e0e717333a64603fffb133 Mon Sep 17 00:00:00 2001 From: leseb Date: Thu, 14 Mar 2002 10:31:39 +0000 Subject: Initial commit --- (limited to 'noncore/games') diff --git a/noncore/games/kcheckers/.cvsignore b/noncore/games/kcheckers/.cvsignore new file mode 100644 index 0000000..2c33e73 --- a/dev/null +++ b/noncore/games/kcheckers/.cvsignore @@ -0,0 +1,3 @@ +moc_* +*.moc +Makefile* diff --git a/noncore/games/kcheckers/checkers.cpp b/noncore/games/kcheckers/checkers.cpp new file mode 100644 index 0000000..1e4dd1f --- a/dev/null +++ b/noncore/games/kcheckers/checkers.cpp @@ -0,0 +1,337 @@ +// +// KCheckers Engine + +// +// Board = 54 Fields: +// +// | 06 07 08 09| MAN2 +// |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 | MAN1 + +#include +#include + +#include "checkers.h" + + +Checkers::Checkers(int skill) +{ + for(int i=0;i<54;i++) board[i]=NONE; + board[6] =MAN2; board[7] =MAN2; board[8] =MAN2; board[9] =MAN2; + board[11]=MAN2; board[12]=MAN2; board[13]=MAN2; board[14]=MAN2; + board[17]=MAN2; board[18]=MAN2; board[19]=MAN2; board[20]=MAN2; + board[22]=FREE; board[23]=FREE; board[24]=FREE; board[25]=FREE; + board[28]=FREE; board[29]=FREE; board[30]=FREE; board[31]=FREE; + board[33]=MAN1; board[34]=MAN1; board[35]=MAN1; board[36]=MAN1; + board[39]=MAN1; board[40]=MAN1; board[41]=MAN1; board[42]=MAN1; + board[44]=MAN1; board[45]=MAN1; board[46]=MAN1; board[47]=MAN1; + + levelmax=skill; + + srand(time(0)); // Seed the random number generator +} + + +/////////////////////////////////////////////////// +// +// User Functions +// +/////////////////////////////////////////////////// + + +bool Checkers::checkMove1() +{ + for(int i=6;i<48;i++) + { + switch(board[i]) + { + case MAN1: + if(board[i-6]==FREE) return true; + if(board[i-5]==FREE) return true; + break; + case KING1: + if(board[i-6]==FREE) return true; + if(board[i-5]==FREE) return true; + if(board[i+5]==FREE) return true; + if(board[i+6]==FREE) return true; + } + } + return false; +} + + +//////////////////////////////////////////////////// +// +// Computer Functions +// +//////////////////////////////////////////////////// + + +void Checkers::go2() +{ + level=0; + for(int i=6;i<48;i++) bestboard[i]=board[i]; + turn(); + for(int i=6;i<48;i++) board[i]=bestboard[i]; + ; +} + + +void Checkers::turn(int &resMax,bool capture) +{ + if(levelresMax) + { + resMax=res; + if(level==1) + { + for(int i=6;i<48;i++) bestboard[i]=board[i]; + bestcounter=1; + } + } + else if(res==resMax && level==1) + { + bestcounter++; + if((rand()%bestcounter)==0) + { + for(int i=6;i<48;i++) bestboard[i]=board[i]; + } + } + + if(capture) + { + if(f12) board[12]=NONE; + if(f13) board[13]=NONE; + if(f14) board[14]=NONE; + if(f17) board[17]=NONE; + if(f18) board[18]=NONE; + if(f19) board[19]=NONE; + if(f23) board[23]=NONE; + if(f24) board[24]=NONE; + if(f25) board[25]=NONE; + if(f28) board[28]=NONE; + if(f29) board[29]=NONE; + if(f30) board[30]=NONE; + if(f34) board[34]=NONE; + if(f35) board[35]=NONE; + if(f36) board[36]=NONE; + if(f39) board[39]=NONE; + if(f40) board[40]=NONE; + if(f41) board[41]=NONE; + } + } + else if(resMax<0) resMax=0; +} + + +bool Checkers::checkMove2() +{ + for(int i=6;i<48;i++) + { + switch(board[i]) + { + case MAN2: + if(board[i+5]==FREE) return true; + if(board[i+6]==FREE) return true; + break; + case KING2: + if(board[i-6]==FREE) return true; + if(board[i-5]==FREE) return true; + if(board[i+5]==FREE) return true; + if(board[i+6]==FREE) return true; + } + } + return false; +} + + +int Checkers::turn() +{ + int resMax=(level-levelmax)*10; + level++; + if(checkCapture2()) + { + for(int i=6;i<48;i++) + { + switch(board[i]) + { + case MAN2: + manCapture2(i,resMax); + break; + case KING2: + kingCapture2(i,UL,resMax); + kingCapture2(i,UR,resMax); + kingCapture2(i,DL,resMax); + kingCapture2(i,DR,resMax); + } + } + } + else if(checkMove2()) + { + for(int i=6;i<48;i++) + { + switch(board[i]) + { + case MAN2: + if(board[i+5]==FREE) + { + board[i]=FREE; + if(i>38) board[i+5]=KING2; + else board[i+5]=MAN2; + turn(resMax); + board[i+5]=FREE; + board[i]=MAN2; + } + if(board[i+6]==FREE) + { + board[i]=FREE; + if(i>38) board[i+6]=KING2; + else board[i+6]=MAN2; + turn(resMax); + board[i+6]=FREE; + board[i]=MAN2; + } + break; + case KING2: + kingMove2(i,resMax); + break; + } + } + } + else ; + + level--; + return resMax; +} + + diff --git a/noncore/games/kcheckers/checkers.h b/noncore/games/kcheckers/checkers.h new file mode 100644 index 0000000..bd2be08 --- a/dev/null +++ b/noncore/games/kcheckers/checkers.h @@ -0,0 +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];}; + + 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.cpp b/noncore/games/kcheckers/echeckers.cpp new file mode 100644 index 0000000..1146059 --- a/dev/null +++ b/noncore/games/kcheckers/echeckers.cpp @@ -0,0 +1,349 @@ +// +// English Checkers + + +#include "echeckers.h" + + +/////////////////////////////////////////////////// +// +// User Functions +// +/////////////////////////////////////////////////// + + +bool ECheckers::go1(int from,int field) +{ + to=field; + + if(checkCapture1()) + { + bool capture=false; + switch(board[from]) + { + case MAN1: + if(manCapture1(from,UL,capture)) return true; + if(manCapture1(from,UR,capture)) return true; + return false; + case KING1: + if(kingCapture1(from,UL,capture)) return true; + if(kingCapture1(from,UR,capture)) return true; + if(kingCapture1(from,DL,capture)) return true; + if(kingCapture1(from,DR,capture)) return true; + return false; + } + } + else + { + switch(board[from]) + { + case MAN1: + if((to==(from-6))||(to==(from-5))) + { + board[from]=FREE; + if(to<10) board[to]=KING1; + else board[to]=MAN1; + return true; + } + return false; + case KING1: + if((to==(from-6))||(to==(from-5))|| + (to==(from+5))||(to==(from+6)) ) + { + board[from]=FREE; + board[to]=KING1; + return true; + } + return false; + } + } + return false; +} + + +bool ECheckers::checkCapture1() +{ + for(int i=6;i<48;i++) + { + switch(board[i]) + { + case MAN1: + if(board[i-6]==MAN2 || board[i-6]==KING2) + if(board[i-12]==FREE) return true; + if(board[i-5]==MAN2 || board[i-5]==KING2) + if(board[i-10]==FREE) return true; + break; + case KING1: + if(board[i-6]==MAN2 || board[i-6]==KING2) + if(board[i-12]==FREE) return true; + if(board[i-5]==MAN2 || board[i-5]==KING2) + if(board[i-10]==FREE) return true; + if(board[i+5]==MAN2 || board[i+5]==KING2) + if(board[i+10]==FREE) return true; + if(board[i+6]==MAN2 || board[i+6]==KING2) + if(board[i+12]==FREE) return true; + } + } + return false; +} + + +// Return TRUE if a course of the user true +// Return FALSE if a course of the user incorrect + +bool ECheckers::manCapture1(int from,int direction,bool &capture) +{ + int i=from+direction; + if(board[i]==MAN2 || board[i]==KING2) + { + int k=i+direction; + if(board[k]==FREE) + { + bool next=false; + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + + if(k<10) + { + board[k]=KING1; + if(kingCapture1(k,direction+11,next)) {board[i]=FREE;return true;} + } + else + { + board[k]=MAN1; + if(manCapture1(k,UL,next)) {board[i]=FREE;return true;} + if(manCapture1(k,UR,next)) {board[i]=FREE;return true;} + } + + if((!next) && k==to) {board[i]=FREE;return true;} + + board[k]=FREE; + board[i]=save; + board[from]=MAN1; + capture=true; + } + } + return false; +} + + +bool ECheckers::kingCapture1(int from,int direction,bool &capture) +{ + int i=from+direction; + if(board[i]==MAN2 || board[i]==KING2) + { + int k=i+direction; + if(board[k]==FREE) + { + bool next=false; + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + board[k]=KING1; + + if(direction==UL || direction==DR) + { + if(kingCapture1(k,UR,next)) {board[i]=FREE;return true;} + if(kingCapture1(k,DL,next)) {board[i]=FREE;return true;} + } + else + { + if(kingCapture1(k,UL,next)) {board[i]=FREE;return true;} + if(kingCapture1(k,DR,next)) {board[i]=FREE;return true;} + } + if(kingCapture1(k,direction,next)) {board[i]=FREE;return true;} + + if((!next) && k==to) {board[i]=FREE;return true;} + + board[k]=FREE; + board[i]=save; + board[from]=KING1; + capture=true; + } + } + return false; +} + + +//////////////////////////////////////////////////// +// +// Computer Functions +// +//////////////////////////////////////////////////// + + +void ECheckers::kingMove2(int from,int &resMax) +{ + board[from]=FREE; + + int i=from-6; + if(board[i]==FREE) + { + board[i]=KING2; + turn(resMax); + board[i]=FREE; + } + + i=from-5; + if(board[i]==FREE) + { + board[i]=KING2; + turn(resMax); + board[i]=FREE; + } + + i=from+5; + if(board[i]==FREE) + { + board[i]=KING2; + turn(resMax); + board[i]=FREE; + } + + i=from+6; + if(board[i]==FREE) + { + board[i]=KING2; + turn(resMax); + board[i]=FREE; + } + + board[from]=KING2; +} + + +bool ECheckers::checkCapture2() +{ + for(int i=6;i<48;i++) + { + switch(board[i]) + { + case MAN2: + if(board[i+5]==MAN1 || board[i+5]==KING1) + if(board[i+10]==FREE) return true; + if(board[i+6]==MAN1 || board[i+6]==KING1) + if(board[i+12]==FREE) return true; + break; + case KING2: + if(board[i-6]==MAN1 || board[i-6]==KING1) + if(board[i-12]==FREE) return true; + if(board[i-5]==MAN1 || board[i-5]==KING1) + if(board[i-10]==FREE) return true; + if(board[i+5]==MAN1 || board[i+5]==KING1) + if(board[i+10]==FREE) return true; + if(board[i+6]==MAN1 || board[i+6]==KING1) + if(board[i+12]==FREE) return true; + } + } + return false; +} + + +// Return TRUE if it is possible to capture +// Return FALSE if it is impossible to capture + +bool ECheckers::manCapture2(int from,int &resMax) +{ + bool capture=false; + + int i=from+5; + if(board[i]==MAN1 || board[i]==KING1) + { + int k=from+10; + if(board[k]==FREE) + { + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + resMax--; + if(from>32) + { + board[k]=KING2; + if(!kingCapture2(k,UL,resMax)) turn(resMax,true); + } + else + { + board[k]=MAN2; + if(!manCapture2(k,resMax)) turn(resMax,true); + } + resMax++; + board[k]=FREE; + board[i]=save; + board[from]=MAN2; + capture=true; + } + } + + i=from+6; + if(board[i]==MAN1 || board[i]==KING1) + { + int k=from+12; + if(board[k]==FREE) + { + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + resMax--; + if(from>32) + { + board[k]=KING2; + if(!kingCapture2(k,UR,resMax)) turn(resMax,true); + } + else + { + board[k]=MAN2; + if(!manCapture2(k,resMax)) turn(resMax,true); + } + resMax++; + board[k]=FREE; + board[i]=save; + board[from]=MAN2; + capture=true; + } + } + + if(capture) return true; + return false; +} + + +bool ECheckers::kingCapture2(int from,int direction,int &resMax) +{ + int i=from+direction; + if(board[i]==MAN1 || board[i]==KING1) + { + int k=i+direction; + if(board[k]==FREE) + { + bool capture=false; + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + resMax--; + + board[k]=KING2; + if(direction==UL || direction==DR) + { + if(kingCapture2(k,UR,resMax)) capture=true; + if(kingCapture2(k,DL,resMax)) capture=true; + } + else + { + if(kingCapture2(k,UL,resMax)) capture=true; + if(kingCapture2(k,DR,resMax)) capture=true; + } + if(kingCapture2(k,direction,resMax)) capture=true; + + if(!capture) turn(resMax,true); + board[k]=FREE; + + resMax++; + board[i]=save; + board[from]=KING2; + return true; + } + } + return false; +} + diff --git a/noncore/games/kcheckers/echeckers.h b/noncore/games/kcheckers/echeckers.h new file mode 100644 index 0000000..5ca3ecc --- a/dev/null +++ b/noncore/games/kcheckers/echeckers.h @@ -0,0 +1,28 @@ + +#ifndef ECHECKERS_H +#define ECHECKERS_H + +#include + + +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 new file mode 100644 index 0000000..0755008 --- a/dev/null +++ b/noncore/games/kcheckers/field.cpp @@ -0,0 +1,31 @@ + +#include + +#include "field.h" + +Field::Field(QWidget *parent,int i):QWidget(parent) +{ + pixmap=new QPixmap(SIZE,SIZE); + number=i; +} + +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) +{ + QPainter paint; + paint.begin(pixmap); + paint.drawImage(0,0,*image); + paint.end(); + update(); +} + diff --git a/noncore/games/kcheckers/field.h b/noncore/games/kcheckers/field.h new file mode 100644 index 0000000..d929e49 --- a/dev/null +++ b/noncore/games/kcheckers/field.h @@ -0,0 +1,27 @@ + +#ifndef FIELD_H +#define FIELD_H + +#include +#include + +#define SIZE 28 + +class Field:public QWidget +{ + Q_OBJECT + public: + Field(QWidget*,int); + void draw(QImage*); + signals: + void click(int); + protected: + void paintEvent(QPaintEvent*); + void mousePressEvent(QMouseEvent*); + private: + int number; + QPixmap *pixmap; + +}; + +#endif diff --git a/noncore/games/kcheckers/kcheckers.cpp b/noncore/games/kcheckers/kcheckers.cpp new file mode 100644 index 0000000..3df744e --- a/dev/null +++ b/noncore/games/kcheckers/kcheckers.cpp @@ -0,0 +1,382 @@ + +#include +#include +#include +#include +#include +#include +#include + +#include "kcheckers.h" +#include "echeckers.h" +#include "rcheckers.h" + +#include "pics/exit.xpm" +#include "pics/logo.xpm" +#include "pics/wood1.xpm" +#include "pics/wood2.xpm" +#include "pics/wood3.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" + + +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(); + + QPopupMenu* gameMenu=new QPopupMenu; + gameMenu->insertItem(QPixmap(logo),tr("New"),this,SLOT(newGame())); + gameMenu->insertSeparator(); + gameMenu->insertItem(QPixmap(exit),tr("Quit"),qApp,SLOT(quit())); + + skillMenu=new QPopupMenu; + + 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); + + optionsMenu=new QPopupMenu; + + 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); + + QPopupMenu* helpMenu=new QPopupMenu; + + helpMenu->insertItem(QPixmap(contexthelp),tr("What's This"),this,SLOT(whatsThis())); + helpMenu->insertSeparator(); + helpMenu->insertItem(QPixmap(logo),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); + + skill=NOVICE; + skillMenu->setItemChecked(skill,true); + + rules=ENGLISH; + optionsMenu->setItemChecked(rules,true); + + pattern=WOOD; + optionsMenu->setItemChecked(pattern,true); + + imageMan1=new QImage(man_black); + imageMan2=new QImage(man_white); + imageKing1=new QImage(king_black); + imageKing2=new QImage(king_white); + + imageWood1=new QImage(wood1); + imageWood2=new QImage(wood2); + imageWood3=new QImage(wood3); + imageMarble1=new QImage(marble1); + imageMarble2=new QImage(marble2); + imageMarble3=new QImage(marble3); + + imagePat1=imageWood1; + imagePat2=imageWood2; + imageFrame=imageWood3; + + QWidget* centralWidget=new QWidget(this); + setCentralWidget(centralWidget); + + QFrame* frame=new QFrame(centralWidget); + frame->setFrameStyle(QFrame::Box|QFrame::Plain); + frame->setFixedSize(SIZE*8+2,SIZE*8+2); + + QVBoxLayout* vlayout=new QVBoxLayout(centralWidget); + vlayout->addWidget(frame); + + statusLabel = new QLabel(centralWidget); + vlayout->addWidget(statusLabel); + + for(int i=0;i<64;i++) field[i]=new Field(frame,i); + + QGridLayout* grid=new QGridLayout(frame,8,8,1,0); + + 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))); + + userFirst=false; + + game=NULL; + newGame(); +} + + +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 MARBLE: + imagePat1=imageMarble1; + imagePat2=imageMarble2; + imageFrame=imageMarble3; + break; + case WOOD: + imagePat1=imageWood1; + imagePat2=imageWood2; + imageFrame=imageWood3; + } + + drawBoard(); + + if(selected) field[from]->draw(imageFrame); +} + + +void KCheckers::about() +{ + QMessageBox::about(this, "About", + "KCheckers, a board game. Ver 0.2\n" + "(C) 2002, A. Peredri \n\n" + "http://kcheckers.tuxfamily.org\n\n" + "Opie version by S.Prud'homme\n" + "\n\n" + "http://opie.handhelds.org\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); + } + + switch(rules) + { + case ENGLISH: + game=new ECheckers(skill); + QWhatsThis::add(this, + "Rules of English Checkers" + "
    " + "
  • In the beginning of game you have
    12 checkers (men)." + "
  • Men move forward only." + "
  • Men capture by jumping forward only." + "
  • A man which reaches the far side of
    the board becomes a king." + "
  • Kings move forward or backward to
    one square." + "
  • Kings capture by jumping forward or
    backward." + "
  • Whenever a player is able to make
    a capture he must do so." + "
"); + break; + case RUSSIAN: + game=new RCheckers(skill); + QWhatsThis::add(this, + "Rules of Russian Checkers" + "
    " + "
  • In the beginning of game you have
    12 checkers (men)." + "
  • Men move forward only." + "
  • Men capture by jumping forward or
    backward." + "
  • A man which reaches the far side of
    the board becomes a king." + "
  • Kings move forward or backward to
    any number of squares." + "
  • Kings capture by jumping forward or
    backward." + "
  • Whenever a player is able to make
    a capture he must do so." + "
"); + } + + selected=false; + gameOver=false; + + colorChange(); + drawBoard(); + + if(!userFirst) compGo(); + + 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() +{ + // 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); +} + + +void KCheckers::click(int fieldNumber) +{ + if(gameOver) return; + switch(game->getBoard(t[fieldNumber])) + { + case MAN1: + case KING1: + // User selected + if(!selected) + { + from=fieldNumber; + selected=true; + field[fieldNumber]->draw(imageFrame); + return; + } + // User reselected + else + { + field[from]->draw(imagePat2); + if(game->getBoard(t[from])==MAN1) field[from]->draw(imageMan1); + else field[from]->draw(imageKing1); + from=fieldNumber; + field[fieldNumber]->draw(imageFrame); + return; + } + case FREE: + if(!selected) return; + + if(!userGo(fieldNumber)) return; + selected=false; + + 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]); + + 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); + } +} + + +bool KCheckers::userGo(int to) +{ + int save[32]; + for(int i=0;i<32;i++) save[i]=game->getBoard(t[i]); + + if(!game->go1(t[from],t[to])) + { + statusLabel->setText(tr("Incorrect course.")); + return false; + } + + 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); + } + return true; +} + + diff --git a/noncore/games/kcheckers/kcheckers.h b/noncore/games/kcheckers/kcheckers.h new file mode 100644 index 0000000..e86524f --- a/dev/null +++ b/noncore/games/kcheckers/kcheckers.h @@ -0,0 +1,97 @@ + +#ifndef KCHECKERS_H +#define KCHECKERS_H + +#include +#include + +#include "field.h" +#include "checkers.h" + +#define WOOD 1 +#define MARBLE 2 + +#define ENGLISH 11 +#define RUSSIAN 12 + +#define BEGINNER 2 +#define NOVICE 4 +#define AVERAGE 5 +#define GOOD 6 +#define EXPERT 7 +#define MASTER 8 + + +class KCheckers:public QMainWindow +{ + Q_OBJECT + public: + KCheckers(); + + private slots: + void about(); + void aboutQt(); + void newGame(); + void click(int); // Processes the mouse clics on fields + + 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 setPatternMarble() {setPattern(MARBLE);}; + + void setRulesEnglish() {setRules(ENGLISH);}; + void setRulesRussian() {setRules(RUSSIAN);}; + + private: + void compGo(); + bool userGo(int); + + void drawBoard(); + void colorChange(); + + void setSkill(int); + void setRules(int); + void setPattern(int); + + int from; // Selected by user + int skill; + int rules; + int pattern; + 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* imageMarble1; + QImage* imageMarble2; + QImage* imageMarble3; + + QImage* imageMan1; + QImage* imageMan2; + QImage* imageKing1; + QImage* imageKing2; + + Checkers* game; + QPopupMenu* skillMenu; + QPopupMenu* optionsMenu; + QLabel* statusLabel; + + static const int t[32]; // Translate table + +}; + +#endif + diff --git a/noncore/games/kcheckers/kcheckers.pro b/noncore/games/kcheckers/kcheckers.pro new file mode 100644 index 0000000..6ed8c1c --- a/dev/null +++ b/noncore/games/kcheckers/kcheckers.pro @@ -0,0 +1,19 @@ +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 +LIBS += -lqpe +DESTDIR = $(OPIEDIR)/bin +TARGET = kcheckers diff --git a/noncore/games/kcheckers/main.cpp b/noncore/games/kcheckers/main.cpp new file mode 100644 index 0000000..ac86271 --- a/dev/null +++ b/noncore/games/kcheckers/main.cpp @@ -0,0 +1,18 @@ + +#include +#include + +#include "kcheckers.h" + + +int main(int argc, char *argv[]) +{ + QPEApplication app(argc,argv); + + KCheckers kcheckers; + app.setMainWidget(&kcheckers); + kcheckers.show(); + + return app.exec(); +} + diff --git a/noncore/games/kcheckers/pics/biglogo.xpm b/noncore/games/kcheckers/pics/biglogo.xpm new file mode 100644 index 0000000..6570d88 --- a/dev/null +++ b/noncore/games/kcheckers/pics/biglogo.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *biglogo[]={ +"32 32 6 1", +". c None", +"# c #000000", +"a c #303030", +"d c #d7d7d7", +"c c #eaeaea", +"b 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#....", +"....########################....", +"................................", +"................................", +"................................", +"................................"}; diff --git a/noncore/games/kcheckers/pics/contexthelp.xpm b/noncore/games/kcheckers/pics/contexthelp.xpm new file mode 100644 index 0000000..9447207 --- a/dev/null +++ b/noncore/games/kcheckers/pics/contexthelp.xpm @@ -0,0 +1,20 @@ +/* XPM */ +static const char *contexthelp[]={ +"14 14 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#.......", +".....#........", +".............."}; diff --git a/noncore/games/kcheckers/pics/exit.xpm b/noncore/games/kcheckers/pics/exit.xpm new file mode 100644 index 0000000..6fe404e --- a/dev/null +++ b/noncore/games/kcheckers/pics/exit.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static const char *exit[]={ +"14 14 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...."}; diff --git a/noncore/games/kcheckers/pics/king_black.xpm b/noncore/games/kcheckers/pics/king_black.xpm new file mode 100644 index 0000000..382ee71 --- a/dev/null +++ b/noncore/games/kcheckers/pics/king_black.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static const char *king_black[]={ +"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 new file mode 100644 index 0000000..30932e8 --- a/dev/null +++ b/noncore/games/kcheckers/pics/king_white.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static const char *king_white[]={ +"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 new file mode 100644 index 0000000..a47d3de --- a/dev/null +++ b/noncore/games/kcheckers/pics/logo.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static const char *logo[]={ +"14 14 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#.", +".############.", +".............."}; diff --git a/noncore/games/kcheckers/pics/man_black.xpm b/noncore/games/kcheckers/pics/man_black.xpm new file mode 100644 index 0000000..e40a265 --- a/dev/null +++ b/noncore/games/kcheckers/pics/man_black.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static const char *man_black[]={ +"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 new file mode 100644 index 0000000..b0968db --- a/dev/null +++ b/noncore/games/kcheckers/pics/man_white.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *man_white[]={ +"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 new file mode 100644 index 0000000..124cbd2 --- a/dev/null +++ b/noncore/games/kcheckers/pics/marble1.xpm @@ -0,0 +1,240 @@ +/* XPM */ +static const char *marble1[]={ +"28 28 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"}; diff --git a/noncore/games/kcheckers/pics/marble2.xpm b/noncore/games/kcheckers/pics/marble2.xpm new file mode 100644 index 0000000..f31ee0b --- a/dev/null +++ b/noncore/games/kcheckers/pics/marble2.xpm @@ -0,0 +1,595 @@ +/* XPM */ +static const char *marble2[]={ +"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 new file mode 100644 index 0000000..36c9b17 --- a/dev/null +++ b/noncore/games/kcheckers/pics/marble3.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static const char *marble3[]={ +"28 28 2 1", +"# c None", +". c #0000ff", +"............................", +"............................", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"............................", +"............................"}; diff --git a/noncore/games/kcheckers/pics/wood1.xpm b/noncore/games/kcheckers/pics/wood1.xpm new file mode 100644 index 0000000..866f8d9 --- a/dev/null +++ b/noncore/games/kcheckers/pics/wood1.xpm @@ -0,0 +1,117 @@ +/* XPM */ +static const char *wood1[]={ +"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 new file mode 100644 index 0000000..c2ff364 --- a/dev/null +++ b/noncore/games/kcheckers/pics/wood2.xpm @@ -0,0 +1,114 @@ +/* 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"}; diff --git a/noncore/games/kcheckers/pics/wood3.xpm b/noncore/games/kcheckers/pics/wood3.xpm new file mode 100644 index 0000000..5f4f7e2 --- a/dev/null +++ b/noncore/games/kcheckers/pics/wood3.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static const char *wood3[]={ +"28 28 2 1", +"# c None", +". c #ff8c00", +"............................", +"............................", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"..########################..", +"............................", +"............................"}; diff --git a/noncore/games/kcheckers/rcheckers.cpp b/noncore/games/kcheckers/rcheckers.cpp new file mode 100644 index 0000000..a1c7afa --- a/dev/null +++ b/noncore/games/kcheckers/rcheckers.cpp @@ -0,0 +1,476 @@ +// +// Russian Checkers + + +#include "rcheckers.h" + + +/////////////////////////////////////////////////// +// +// User Functions +// +/////////////////////////////////////////////////// + + +bool RCheckers::go1(int from,int field) +{ + to=field; + + if(checkCapture1()) + { + bool capture=false; + switch(board[from]) + { + case MAN1: + if(manCapture1(from,UL,capture)) return true; + if(manCapture1(from,UR,capture)) return true; + if(manCapture1(from,DL,capture)) return true; + if(manCapture1(from,DR,capture)) return true; + return false; + case KING1: + if(kingCapture1(from,UL,capture)) return true; + if(kingCapture1(from,UR,capture)) return true; + if(kingCapture1(from,DL,capture)) return true; + if(kingCapture1(from,DR,capture)) return true; + return false; + } + } + else + { + switch(board[from]) + { + case MAN1: + if((to==(from-6))||(to==(from-5))) + { + board[from]=FREE; + if(to<10) board[to]=KING1; + else board[to]=MAN1; + return true; + } + return false; + case KING1: + for(int i=from-6;;i-=6) + { + if(i==to) + { + board[from]=FREE; + board[to]=KING1; + return true; + } + else if(board[i]==FREE) continue; + else break; + } + for(int i=from-5;;i-=5) + { + if(i==to) + { + board[from]=FREE; + board[to]=KING1; + return true; + } + else if(board[i]==FREE) continue; + else break; + } + for(int i=from+5;;i+=5) + { + if(i==to) + { + board[from]=FREE; + board[to]=KING1; + return true; + } + else if(board[i]==FREE) continue; + else break; + } + for(int i=from+6;;i+=6) + { + if(i==to) + { + board[from]=FREE; + board[to]=KING1; + return true; + } + else if(board[i]==FREE) continue; + else break; + } + return false; + } + } + return false; +} + + +bool RCheckers::checkCapture1() +{ + for(int i=6;i<48;i++) + { + switch(board[i]) + { + case MAN1: + if(board[i-6]==MAN2 || board[i-6]==KING2) + if(board[i-12]==FREE) return true; + if(board[i-5]==MAN2 || board[i-5]==KING2) + if(board[i-10]==FREE) return true; + if(board[i+5]==MAN2 || board[i+5]==KING2) + if(board[i+10]==FREE) return true; + if(board[i+6]==MAN2 || board[i+6]==KING2) + if(board[i+12]==FREE) return true; + break; + case KING1: + int k; + for(k=i-6;board[k]==FREE;k-=6); + if(board[k]==MAN2 || board[k]==KING2) + if(board[k-6]==FREE) return true; + + for(k=i-5;board[k]==FREE;k-=5); + if(board[k]==MAN2 || board[k]==KING2) + if(board[k-5]==FREE) return true; + + for(k=i+5;board[k]==FREE;k+=5); + if(board[k]==MAN2 || board[k]==KING2) + if(board[k+5]==FREE) return true; + + for(k=i+6;board[k]==FREE;k+=6); + if(board[k]==MAN2 || board[k]==KING2) + if(board[k+6]==FREE) return true; + } + } + return false; +} + + +// Return TRUE if a course of the user true +// Return FALSE if a course of the user incorrect + +bool RCheckers::manCapture1(int from,int direction,bool &capture) +{ + int i=from+direction; + if(board[i]==MAN2 || board[i]==KING2) + { + int k=i+direction; + if(board[k]==FREE) + { + bool next=false; + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + + if(k<10) + { + board[k]=KING1; + if(kingCapture1(k,direction+11,next)) {board[i]=FREE;return true;} + } + else + { + board[k]=MAN1; + if(direction==UL || direction==DR) + { + if(manCapture1(k,UR,next)) {board[i]=FREE;return true;} + if(manCapture1(k,DL,next)) {board[i]=FREE;return true;} + } + else + { + if(manCapture1(k,UL,next)) {board[i]=FREE;return true;} + if(manCapture1(k,DR,next)) {board[i]=FREE;return true;} + } + if(manCapture1(k,direction,next)) {board[i]=FREE;return true;} + } + + if((!next) && k==to) {board[i]=FREE;return true;} + + board[k]=FREE; + board[i]=save; + board[from]=MAN1; + capture=true; + } + } + return false; +} + + +bool RCheckers::kingCapture1(int from,int direction,bool &capture) +{ + int i; + for(i=from+direction;board[i]==FREE;i+=direction); + + if(board[i]==MAN2 || board[i]==KING2) + { + int k=i+direction; + if(board[k]==FREE) + { + bool next=false; + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + + for(;board[k]==FREE;k+=direction) + { + board[k]=KING1; + if(direction==UL || direction==DR) + { + if(kingCapture1(k,UR,next)) {board[i]=FREE;return true;} + if(kingCapture1(k,DL,next)) {board[i]=FREE;return true;} + } + else + { + if(kingCapture1(k,UL,next)) {board[i]=FREE;return true;} + if(kingCapture1(k,DR,next)) {board[i]=FREE;return true;} + } + board[k]=FREE; + } + + board[k-=direction]=KING1; + if(kingCapture1(k,direction,next)) {board[i]=FREE;return true;} + board[k]=FREE; + + if(!next) + for(;k!=i;k-=direction) + if(k==to) {board[i]=FREE;board[k]=KING1;return true;} + + board[i]=save; + board[from]=KING1; + capture=true; + } + } + return false; +} + + +//////////////////////////////////////////////////// +// +// Computer Functions +// +//////////////////////////////////////////////////// + + +void RCheckers::kingMove2(int from,int &resMax) +{ + board[from]=FREE; + for(int i=from-6;board[i]==FREE;i-=6) + { + board[i]=KING2; + turn(resMax); + board[i]=FREE; + } + for(int i=from-5;board[i]==FREE;i-=5) + { + board[i]=KING2; + turn(resMax); + board[i]=FREE; + } + for(int i=from+5;board[i]==FREE;i+=5) + { + board[i]=KING2; + turn(resMax); + board[i]=FREE; + } + for(int i=from+6;board[i]==FREE;i+=6) + { + board[i]=KING2; + turn(resMax); + board[i]=FREE; + } + board[from]=KING2; +} + + +bool RCheckers::checkCapture2() +{ + for(int i=6;i<48;i++) + { + switch(board[i]) + { + case MAN2: + if(board[i-6]==MAN1 || board[i-6]==KING1) + if(board[i-12]==FREE) return true; + if(board[i-5]==MAN1 || board[i-5]==KING1) + if(board[i-10]==FREE) return true; + if(board[i+5]==MAN1 || board[i+5]==KING1) + if(board[i+10]==FREE) return true; + if(board[i+6]==MAN1 || board[i+6]==KING1) + if(board[i+12]==FREE) return true; + break; + case KING2: + int k; + for(k=i-6;board[k]==FREE;k-=6); + if(board[k]==MAN1 || board[k]==KING1) + if(board[k-6]==FREE) return true; + + for(k=i-5;board[k]==FREE;k-=5); + if(board[k]==MAN1 || board[k]==KING1) + if(board[k-5]==FREE) return true; + + for(k=i+5;board[k]==FREE;k+=5); + if(board[k]==MAN1 || board[k]==KING1) + if(board[k+5]==FREE) return true; + + for(k=i+6;board[k]==FREE;k+=6); + if(board[k]==MAN1 || board[k]==KING1) + if(board[k+6]==FREE) return true; + } + } + return false; +} + + +// Return TRUE if it is possible to capture +// Return FALSE if it is impossible to capture + +bool RCheckers::manCapture2(int from,int &resMax) +{ + bool capture=false; + + int i=from-6; + if(board[i]==MAN1 || board[i]==KING1) + { + int k=from-12; + if(board[k]==FREE) + { + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + board[k]=MAN2; + resMax--; + if(!manCapture2(k,resMax)) turn(resMax,true); + resMax++; + board[k]=FREE; + board[i]=save; + board[from]=MAN2; + capture=true; + } + } + + i=from-5; + if(board[i]==MAN1 || board[i]==KING1) + { + int k=from-10; + if(board[k]==FREE) + { + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + board[k]=MAN2; + resMax--; + if(!manCapture2(k,resMax)) turn(resMax,true); + resMax++; + board[k]=FREE; + board[i]=save; + board[from]=MAN2; + capture=true; + } + } + + i=from+5; + if(board[i]==MAN1 || board[i]==KING1) + { + int k=from+10; + if(board[k]==FREE) + { + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + resMax--; + if(from>32) + { + board[k]=KING2; + if(!kingCapture2(k,UL,resMax)) turn(resMax,true); + } + else + { + board[k]=MAN2; + if(!manCapture2(k,resMax)) turn(resMax,true); + } + resMax++; + board[k]=FREE; + board[i]=save; + board[from]=MAN2; + capture=true; + } + } + + i=from+6; + if(board[i]==MAN1 || board[i]==KING1) + { + int k=from+12; + if(board[k]==FREE) + { + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + resMax--; + if(from>32) + { + board[k]=KING2; + if(!kingCapture2(k,UR,resMax)) turn(resMax,true); + } + else + { + board[k]=MAN2; + if(!manCapture2(k,resMax)) turn(resMax,true); + } + resMax++; + board[k]=FREE; + board[i]=save; + board[from]=MAN2; + capture=true; + } + } + + if(capture) return true; + return false; +} + + +bool RCheckers::kingCapture2(int from,int direction,int &resMax) +{ + int i; + for(i=from+direction;board[i]==FREE;i+=direction); + + if(board[i]==MAN1 || board[i]==KING1) + { + int k=i+direction; + if(board[k]==FREE) + { + bool capture=false; + int save=board[i]; + board[from]=FREE; + board[i]=NONE; + resMax--; + + for(;board[k]==FREE;k+=direction) + { + board[k]=KING2; + if(direction==UL || direction==DR) + { + if(kingCapture2(k,UR,resMax)) capture=true; + if(kingCapture2(k,DL,resMax)) capture=true; + } + else + { + if(kingCapture2(k,UL,resMax)) capture=true; + if(kingCapture2(k,DR,resMax)) capture=true; + } + board[k]=FREE; + } + + board[k-=direction]=KING2; + if(kingCapture2(k,direction,resMax)) capture=true; + board[k]=FREE; + + if(!capture) + for(;k!=i;k-=direction) + { + board[k]=KING2; + turn(resMax,true); + board[k]=FREE; + } + + resMax++; + board[i]=save; + board[from]=KING2; + return true; + } + } + return false; +} + diff --git a/noncore/games/kcheckers/rcheckers.h b/noncore/games/kcheckers/rcheckers.h new file mode 100644 index 0000000..d44bfd1 --- a/dev/null +++ b/noncore/games/kcheckers/rcheckers.h @@ -0,0 +1,28 @@ + +#ifndef RCHECKERS_H +#define RCHECKERS_H + +#include + + +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 -- cgit v0.9.0.2