01-06-2007, 09:29 AM
01-06-2007, 09:32 AM
البته اینم بگم که من درس ساختمان داده رو پاس کردم ، برا نسل جوون میخوام ....
از ما که گذشت ....
از ما که گذشت ....
01-06-2007, 10:52 AM
توی همین بخش C++ می تونین چند نسخه ی اون رو پیدا کنین.
03-06-2007, 01:05 PM
اینم solitare:
کد:
//SOLITAIRE CONSOLE APPLICATION WIN32
//Written by soheil setayeshi
//forum.codecorona.com
#include<iostream>
#include<stdlib.h>
#include<conio.h>
#include<stack>
#include<vector>
#include<time.h>
using namespace std;
//*********************
enum colors{black,red};
//*********************
class card{
public:
char kind;
colors color;
int num;
int state;
};
//*********************
class solitaire{
public:
solitaire();
void display();
void game();
private:
int pick_up(stack<card>*,vector<card>&,int);
int set_up(stack<card>*,stack<card>*,vector<card>&,int);
stack<card>* sknown1 (int);
stack<card>* sknown2 (int);
int isempty(stack<card>);
void bor();
void setdown();
void settop();
void setsbase();
void t1_to_t2();
void win();
stack<card> s_down[7];
stack<card> s_top[2];
stack<card> s_base[4];
vector<card> cards;
};
//*********************
solitaire::solitaire()
{
card khesht[13],del[13],pic[13],khaj[13];
int i;
for (i=0;i<13;i++)
{
khaj[i].color=black;
khaj[i].num=i+1;
khaj[i].kind=5;
khaj[i].state=0;
pic[i].color=black;
pic[i].num=i+1;
pic[i].kind=6;
pic[i].state=0;
del[i].color=red;
del[i].num=i+1;
del[i].kind=3;
del[i].state=0;
khesht[i].color=red;
khesht[i].num=i+1;
khesht[i].kind=4;
khesht[i].state=0;
}
for (i=0;i<13;i++)
{
cards.push_back(khaj[i]);
cards.push_back(del[i]);
cards.push_back(pic[i]);
cards.push_back(khesht[i]);
}
bor();
setdown();
settop();
setsbase();
}
//*********************
void solitaire::win()
{
int i;
for (i=0;i<4;i++)
if(s_base[i].top().num != 13)
return;
cout<<endl;
for(i=0;i<905;i++,cout<<' ');
cout<<char(3)<<char(4)<<char(5)<<char(6)<<" CONGRATULATION YOU WIN "
<<char(6)<<char(5)<<char(4)<<char(3);
getch();
exit(0);
}
//*********************
int solitaire::isempty(stack<card> s)//Check empty stack
{
return !s.size();
}
//*********************
void solitaire::t1_to_t2()//Move in help stack
{
if (!s_top[0].size())
{
while (s_top[1].size())
{
s_top[0].push(s_top[1].top());
s_top[1].pop();
}
}
else{
s_top[1].push(s_top[0].top());
s_top[0].pop();
}
}
//*********************
void solitaire::setsbase()//ARRANGE IN BASE STACKS
{
card c1,c2,c3,c4;//ASCII code: khaj:5 pic:6 del:3 khesht:4
c1.num=0;
c1.kind=5;
c2.num=0;
c2.kind=6;
c3.num=0;
c3.kind=3;
c4.num=0;
c4.kind=4;
s_base[0].push(c1);
s_base[1].push(c2);
s_base[2].push(c3);
s_base[3].push(c4);
}
//*********************
void solitaire::setdown()//ARRANGE IN DOWN STACKS
{
int i;
vector<card>::iterator p=cards.begin();
s_down[0].push(cards[0]);
s_down[0].top().state=1;
cards.erase(cards.begin());
for (i=0;i<2;i++)
{
s_down[1].push(cards[0]);
cards.erase(cards.begin());
}
s_down[1].top().state=1;
for (i=0;i<3;i++)
{
s_down[2].push(cards[0]);
cards.erase(cards.begin());
}
s_down[2].top().state=1;
for (i=0;i<4;i++)
{
s_down[3].push(cards[0]);
cards.erase(cards.begin());
}
s_down[3].top().state=1;
for (i=0;i<5;i++)
{
s_down[4].push(cards[0]);
cards.erase(cards.begin());
}
s_down[4].top().state=1;
for (i=0;i<6;i++)
{
s_down[5].push(cards[0]);
cards.erase(cards.begin());
}
s_down[5].top().state=1;
for (i=0;i<7;i++)
{
s_down[6].push(cards[0]);
cards.erase(cards.begin());
}
s_down[6].top().state=1;
}
//*********************
void solitaire::settop()//ARRANGE IN TOP STACKS
{
while (cards.size())
{
cards[0].state=1;
s_top[0].push(cards[0]);
cards.erase(cards.begin());
}
}
//*********************
void solitaire::bor()// BORING CARDS
{
int i,place;
vector<card> v;
vector<card>::iterator p;
srand(time(0));
while (cards.size())
{
place=rand()%(cards.size());
v.push_back(cards[place]);
p=cards.begin();
for(i=0;i!=place;i++,p++);
cards.erase(p);
}
while(v.size())
{
cards.push_back(v[0]);
v.erase(v.begin());
}
}
//*********************
stack<card>* solitaire::sknown1(int num)//KHNOW STACK FOR PICk UP CARDS
{
switch(num)
{
case 1:return &s_down[0];
case 2:return &s_down[1];
case 3:return &s_down[2];
case 4:return &s_down[3];
case 5:return &s_down[4];
case 6:return &s_down[5];
case 7:return &s_down[6];
case 8:return &s_top[1];
default:return NULL;
}
}
//*********************
stack<card>* solitaire::sknown2(int num)//KHNOW STACK FOR SETUP CARDS
{
switch(num)
{
case 1:return &s_down[0];
case 2:return &s_down[1];
case 3:return &s_down[2];
case 4:return &s_down[3];
case 5:return &s_down[4];
case 6:return &s_down[5];
case 7:return &s_down[6];
case 9:return &s_base[0];
case 10:return &s_base[1];
case 11:return &s_base[2];
case 12:return &s_base[3];
default:return NULL;
}
}
//*********************
void solitaire::display()//DISPLAY CARDS
{
int i,j,k,n;
char ch=5,b='?';
stack<card> sc[7];
vector<card> v[7];
system("cls");
cout<<endl;
for (i=0;i<7;i++)
sc[i]=s_down[i];
for (i=0;i<7;i++)
for (j=0;sc[i].size();j++)
{
v[i].push_back(sc[i].top());
sc[i].pop();
}
for (i=0,n=10;i<7;i++,n+=10)
{
cout<<i+1<<") ";
if(!v[i].size()) cout<<"EMPTY";
for (j=v[i].size()-1;j>=0;j--)
{
if (v[i][j].state==1)
cout<<"["<<v[i][j].kind<<v[i][j].num<<"]"<<" ";
else if(j==0)
{
cout<<"["<<v[i][j].kind<<v[i][j].num<<"]"<<" ";
v[i][j].state=1;
}
else
cout<<"["<<b<<"]"<<" ";
}
cout<<"\n";
for (k=0;k<55;k++)
cout<<' ';
switch(i)
{
case 0:if(s_top[0].size())
cout<<" HELP CARDS:[?]";
else cout<<" HELP CARDS: EMPTY";
break;
case 1:if(s_top[1].size())
cout<<" 8) HELP CARDS:"<<"["<<s_top[1].top().kind<<s_top[1].top().num<<"]";
else cout<<" 8) HELP CARDS: EMPTY";
break;
case 3:if(s_base[0].size()>1)
cout<<" 9) BASE CARDS:"<<"["<<s_base[0].top().kind<<s_base[0].top().num<<"]";
else cout<<" 9) BASE CARDS: "<<ch;
break;
case 4:if(s_base[1].size()>1)
cout<<"10) BASE CARDS:"<<"["<<s_base[1].top().kind<<s_base[1].top().num<<"]";
else cout<<"10) BASE CARDS: "<<char(ch+1);
break;
case 5:if(s_base[2].size()>1)
cout<<"11) BASE CARDS:"<<"["<<s_base[2].top().kind<<s_base[2].top().num<<"]";
else cout<<"11) BASE CARDS: "<<char(ch-2);
break;
case 6:if(s_base[3].size()>1)
cout<<"12) BASE CARDS:"<<"["<<s_base[3].top().kind<<s_base[3].top().num<<"]";
else cout<<"12) BASE CARDS: "<<char(ch-1);
break;
}
if (!v[i].size())
{
cout<<"EMPTY";
}
cout<<"\n\n";
}
}
//*********************
//*********************
int solitaire::pick_up(stack<card> *s1,vector<card> &v,int n)//FOR CHECK PICUPING CARDS
{
int i,j;
if (!isempty(*s1))
{
if (s1==&s_top[1])
{
if (n!=1)
{
cout<<'\a';
return 0;
}
v.push_back(s_top[1].top());
s_top[1].pop();
return 1;
}
for (i=0;i<n;i++)
{
v.push_back(s1->top());
s1->pop();
}
for (i=0;i<n-1;i++)
if (v[i].num!=((v[i+1].num)-1) ||( v[i].color==v[i+1].color) || v[i].state==0 || v[i+1].state==0)
{
for (j=n-1;j>=0;j--)
s1->push(v[j]);
v.resize(0);
return 0;
}
return 1;
}//end !empty
else//isempty
{
v.resize(0);
cout<<"stack is empty\n";
return 0;
}
}
//*********************
//*********************
int solitaire::set_up(stack<card> *s2,stack<card> *s1,vector<card> &v,int n)//FOR CHECK DROPING CARDS
{
int i;
if (!isempty(*s2))//!empty
{
if (s2==&s_base[0] || s2==&s_base[1] || s2==&s_base[2] || s2==&s_base[3])
{
if (n!=1)
{
cout<<'\a';
for (i=n-1;i>=0;i--)
s1->push(v[i]);
v.resize(0);
return 0;
}
if (v[0].num==(s2->top().num)+1 && v[0].kind==(s2->top().kind))
{
s2->push(v[0]);
v.resize(0);
return 1;
}
else
{
for (i=n-1;i>=0;i--)
s1->push(v[i]);
v.resize(0);
return 0;
}
}
card temp;
temp=s2->top();
if (v[n-1].color==temp.color || (v[n-1].num)+1!=temp.num)
{
for (i=n-1;i>=0;i--)
s1->push(v[i]);
v.resize(0);
return 0;
}
for (i=n-1;i>=0;i--)
s2->push(v[i]);
v.resize(0);
return 1;
}
else if(v[n-1].num==13)//is empty and is knight
{
for (i=n-1;i>=0;i--)
s2->push(v[i]);
v.resize(0);
return 1;
}
else
{
for (i=n-1;i>=0;i--)
s1->push(v[i]);
v.resize(0);
return 0;//is empty
}
}
//*********************
void solitaire::game()//STARTING THE GAME
{
stack<card> *s1,*s2;
s1=new stack<card>;
s2=new stack<card>;
vector<card> v;
char ch;
int num1,num2,n;
while(1)
{
win();
v.resize(0);
while(1)
{
while(1)
{
display();
cout<<"Do you want to see one of the cards in HELP stack(Y/N):";
cin>>ch;
if (ch=='y'||ch=='Y')
{
t1_to_t2();
display();
}
else if(ch=='n'||ch=='N')
{
display();
break;
}
else
cout<<'\a';
}
while(1)
{
cout<<"Select your first place:";
cin>>num1;
if(num1<1||num1>8)
{
cout<<"\aWe dont have this place\n";
system("pause");
display();
continue;
}
else{
s1=sknown1(num1);
break;
}
}
if (num1!=8)
{
cout<<"Enter number of cards to pick up:";
cin>>n;
if (s1!=&s_top[1])
{
if (n<0 || n > s1->size())
{
cout<<"\a";
break;
}
}
}
else
n=1;
if (!pick_up(s1,v,n))
{
cout<<"\a";
continue;
}
else{//*
while(1)
{
cout<<"Select your second place:";
cin>>num2;
if(num2<1||(num2>7 && num2<9)||num2>12)
{
cout<<"\aWe dont have this place\n";
system("pause");
display();
continue;
}
else{
s2=sknown2(num2);
break;
}
}
if (set_up(s2,s1,v,n))
break;
else
cout<<"\a";
}//*
}
}}
//*********************
int main()
{
solitaire a;
a.game();
getch();
return 0;
}
//*********************04-06-2007, 01:24 PM
کد:
//This header file includes class Card definition and its function prototypes
#ifndef CARD_H
#define CARD_H
typedef enum {none,heart,diamond,club,spade} suits;
typedef enum {no_color,red,black} colors;
class Card
{
public:
Card(suits =none,int =0,bool =false,colors =no_color); //Constructor
void setFace(bool);
void setValue(int);
void setSuit(suits);
void setColor(colors);
colors getColor(void) const;
bool getFace(void) const;
suits getSuit(void) const;
int getValue(void) const;
private:
bool face;
int value;
suits suit;
colors color;
};
#endif
//****************************************************************
#include "Card.h"
Card::Card(suits s,int v,bool f,colors c)
:
suit(s),value(v),face(f),color(c)
{
}
void Card::setFace(bool f)
{
face=f;
}
bool Card::getFace(void) const
{
return face;
}
void Card::setValue(int v)
{
value=v;
}
void Card::setSuit(suits s)
{
suit=s;
}
suits Card::getSuit(void) const
{
return suit;
}
int Card::getValue(void) const
{
return value;
}
colors Card::getColor(void) const
{
return color;
}
void Card::setColor(colors c)
{
color=c;
}
//**************************************************************
//Header file of class Solitaire which is the principle part of the game
#ifndef SOLITAIRE_H
#define SOLITAIRE_H
#include <stack>
#include "Card.h"
using namespace std;
class Solitaire
{
public:
Solitaire(void); //Constructor
void shuffle(void);
void play(void);
private:
//Data members:
Card deck[53];
stack<Card> stacks[14];
//Utility functions:
void setStacks(void);
bool check(int,int,int,stack<Card> &);
void display(void);
void move(void);
void printCard(Card &);
bool win(void);
void printStack(stack<Card> &);
};
#endif
//********************************************************************
#include "Solitaire.h"
#include <stack>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
Solitaire::Solitaire(void)
{
//Making cards:
int i;
for(i=1;i<=13;i++)
{
deck[i].setSuit(heart);
deck[i].setValue(i);
deck[i].setColor(red);
}
for(int j=1;i<=26;i++,j++)
{
deck[i].setSuit(diamond);
deck[i].setValue(j);
deck[i].setColor(red);
}
for(int j=1;i<=39;i++,j++)
{
deck[i].setSuit(spade);
deck[i].setValue(j);
deck[i].setColor(black);
}
for(int j=1;i<=52;i++,j++)
{
deck[i].setSuit(club);
deck[i].setValue(j);
deck[i].setColor(black);
}
}
void Solitaire::shuffle(void) //Shuffle the cards
{
srand(time(0));
for(int j=1;j<=52;j++)
swap(deck[j],deck[1+rand()%52]);
}
void Solitaire::setStacks(void) //put cards in the proper stacks
{
int z=1,j=1,i=1;
for(;i<=7;i++,z+=i)
for(;j<=z;j++)
stacks[i].push(deck[j]);
for(;j<=52;j++)
stacks[12].push(deck[j]);
for(i=1;i<=7;i++)
stacks[i].top().setFace(true);
}
void Solitaire::display(void)
{
system("cls");
cout<<"\tSOLITAIRE GAME V. 1.01 --- Author: Mahdi Yeilaghi Ashrafi";
cout<<endl<<"_____________________________________________________________________________"<<endl;
cout<<endl<<endl<<endl;
cout<<setw(2)<<"12 : STOCK 1: ";
printStack(stacks[12]);
cout<<endl<<endl;
cout<<setw(2)<<"13 : STOCK 2: ";
printStack(stacks[13]);
cout<<endl<<endl;
int i=1;
for(;i<=7;i++)
{
cout<<endl<<endl<<setw(2)<<i<<" : ";
printStack(stacks[i]);
}
cout<<endl<<endl<<endl<<endl<<"Output Pile:\n\n";
for(;i<=11;i++)
{
cout<<setw(2)<<i<<" : ";
if(!stacks[i].empty())
{
printCard(stacks[i].top());
cout<<endl<<endl;
}
else
cout<<"EMPTY"<<endl<<endl;
}
cout<<endl<<"_____________________________________________________________________________"<<endl;
}
void Solitaire::move(void)
{
if(stacks[12].empty() && stacks[13].empty())
cout<<"No more cards in STOCKS!"<<endl<<endl;
else
{
char reply;
do
{
cout<<endl<<"Do you want to see a card in STOCK 1?(Y or N or E to exit game)>";
cin>>reply;
cin.clear();
}
while(reply!='n' && reply!='N' && reply!='y' && reply!='Y' &&
reply!='e' && reply!='E');
if(reply=='e' || reply=='E')
exit(1);
else if(reply=='y' || reply =='Y')
{
if(stacks[12].empty())
{
while(!stacks[13].empty())
{
stacks[12].push(stacks[13].top());
stacks[12].top().setFace(false);
stacks[13].pop();
}
stacks[13].push(stacks[12].top());
stacks[13].top().setFace(true);
stacks[12].pop();
}
else
{
stacks[13].push(stacks[12].top());
stacks[13].top().setFace(true);
stacks[12].pop();
}
return;
}
}
int first,num,second;
cout<<endl<<"Select the first place:";
cin>>first;
cin.clear();
cout<<endl<<"How many cards do you want to pick up?";
cin>>num;
cin.clear();
cout<<endl<<"Select the second place:";
cin>>second;
cin.clear();
stack<Card> temp;
if(check(first,num,second,temp))
{
for(int i=1;i<=num;i++)
{
stacks[second].push(temp.top());
temp.pop();
}
if(!stacks[first].empty())
stacks[first].top().setFace(true);
}
}
void Solitaire::play(void)
{
setStacks();
while(!win())
{
display();
move();
}
system("cls");
cout<<setw(1250)<<"CONGRADULATION , YOU WIN!!";
return;
}
bool Solitaire::win(void)
{
for(int i=8;i<=11;i++)
if(stacks[i].size()!=13)
return false;
return true;
}
void Solitaire::printCard(Card &card)
{
static const char *const numbers[14]={"0","Ace","2","3","4","5","6","7","8","9",
"10","Jack","Queen","King"};
if(!card.getFace())
cout<<"? ";
else
cout<<'['<<static_cast<char>(card.getSuit()+2)<<numbers[card.getValue()]<<']';
}
bool Solitaire::check(int first, int num, int second, stack<Card> &temp)
{
if(second==12||stacks[first].empty()||first<=0||second<=0||num<=0
|| first==second || num>stacks[first].size() || ((second>=8 && second<= 11) && num !=1)
|| ((first>=8 && first<=11) && num!=1))
{
cout<<endl<<"\aIllegal Move!";
return false;
}
if(second>=1 && second<=7)
{
if(stacks[second].empty())
{
if(num==1)
{
if(stacks[first].top().getValue()==13)
{
temp.push(stacks[first].top());
stacks[first].pop();
return true;
}
else
{
cout<<endl<<"\aIllegal Move!";
return false;
}
}
else if(num>1)
{
stack<Card> temp2=stacks[first];
for(int i=1;i<num;i++)
temp2.pop();
if(temp2.top().getValue()==13)
{
for(int i=1;i<=num;i++)
{
temp.push(stacks[first].top());
stacks[first].pop();
}
return true;
}
else
{
cout<<endl<<"\aIllegal Move!";
return false;
}
}
}
else
{
for(int i=1;i<=num;i++)
{
temp.push(stacks[first].top());
stacks[first].pop();
}
if(temp.top().getValue()==(stacks[second].top().getValue()-1) && temp.top().getColor()!=stacks[second].top().getColor())
return true;
else
{
for(int i=1;i<=num;i++)
{
stacks[first].push(temp.top());
temp.pop();
}
cout<<endl<<"\aIllegal Move!";
return false;
}
}
}
else if(second>=8 && second<=11)
{
if(!stacks[second].empty()&&(stacks[first].top().getValue()==(stacks[second].top().getValue()+1))&&
stacks[first].top().getSuit()==(stacks[second].top().getSuit()))
{
temp.push(stacks[first].top());
stacks[first].pop();
return true;
}
else if(stacks[second].empty() && stacks[first].top().getValue()==1)
{
temp.push(stacks[first].top());
stacks[first].pop();
return true;
}
}
else
{
cout<<endl<<"\aIllegal Move!";
return false;
}
}
void Solitaire::printStack(stack<Card> &st)
{
if(st.empty())
cout<<"EMPTY";
else
{
stack<Card> temp2,temp1=st;
while(!temp1.empty())
{
temp2.push(temp1.top());
temp1.pop();
}
while(!temp2.empty())
{
printCard(temp2.top());
temp2.pop();
}
}
}
//**********************************************************
#include "Solitaire.h"
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main(void)
{
ofstream out("NOTE.txt");
out<<endl<<endl;
out<<" Name: Solitaire Game V. 1.0.1"<<endl<<endl;
out<<" Copyright: COPYRIGHTED (C) , Please use this program with the author's name. "<<endl<<endl;
out<<" Author: Mahdi Yeilaghi Ashrafi"<<endl<<endl;
out<<" Website: http://www.codecorona.com/"<<endl<<endl;
out<<" E-mail: mahdi.y@codecorona.com"<<endl<<endl;
out<<" Azad University of Mashhad"<<endl<<endl;
out<<" Date: 24/01/07 23:44"<<endl<<endl;
out<<" Description:"<<endl;
out<<" This program contains 6 files: 2 header files, 3 source code files and 1 text file."<<endl;
out<<" This program simulates the solitaire game in console mode."<<endl<<endl;
out<<" Compiled by Microsoft Visual Studio 2005 , Microsoft Visual C++ 8"<<endl;
out<<" For the best result, please compile by this compiler and run the game in full screen mode.";
out.close();
system("call NOTE.txt");
Solitaire game;
game.shuffle();
game.play();
cout<<"\a\a\a\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
system("pause");
return EXIT_SUCCESS;
}