diff --git a/Tunnels and Potholes.cpp b/Tunnels and Potholes.cpp new file mode 100644 index 0000000..a8c7070 --- /dev/null +++ b/Tunnels and Potholes.cpp @@ -0,0 +1,915 @@ +/* +GROUP MEMBERS:- + +AMAN TAHILIANI (18103213) +ESHITA KALSI (18103217) +SHUBHAM AGRAWAL (18103231) +*/ + +#include +using namespace std; +static int num=1; +class node +{ + public: + int data; + node *next; + node *jump; + node() + { + data=num++; + next=NULL; + jump=NULL; + } +}*head=NULL, *curr=NULL; +node* moving(node *ptr, int n) +{ + if(n<=100-ptr->data) + { + while(n) + { + ptr=ptr->next; + n--; + } + } + if(ptr->jump!=NULL) + ptr=ptr->jump; + return ptr; +} +void dicedisp(int n) +{ + switch(n) + { + case 1: cout<<"\n\n _ _ _ _"; + cout<<"\n | |"; + cout<<"\n | O |"; + cout<<"\n |_ _ _ _|\n"; + break; + case 2: cout<<"\n\n _ _ _ _"; + cout<<"\n | O |"; + cout<<"\n | |"; + cout<<"\n |_ _ _O_|\n"; + break; + case 3: cout<<"\n\n _ _ _ _"; + cout<<"\n | O |"; + cout<<"\n | O |"; + cout<<"\n |_ _ _O_|\n"; + break; + case 4: cout<<"\n\n _ _ _ _"; + cout<<"\n | O O |"; + cout<<"\n | |"; + cout<<"\n |_O_ _O_|\n"; + break; + case 5: cout<<"\n\n _ _ _ _"; + cout<<"\n | O O |"; + cout<<"\n | O |"; + cout<<"\n |_O_ _O_|\n"; + break; + case 6: cout<<"\n\n _ _ _ _"; + cout<<"\n | O O |"; + cout<<"\n | O O |"; + cout<<"\n |_O_ _O_|\n"; + break; + } +} +void makegrid(int x, int y, int n, char n1, char n2) +{ + int xrow, yrow, xcol, ycol; + if(x>0&&x<=10) + { + xrow=38; + xcol=(((x%10)-1)*9)+4; + if(xcol==-5) + xcol=86; + } + else if(x>10&&x<=20) + { + xrow=34; + xcol=91-((((x%10)-1)*9)+4); + if(xcol==96) + xcol=4; + } + else if(x>20&&x<=30) + { + xrow=30; + xcol=(((x%10)-1)*9)+4; + if(xcol==-5) + xcol=86; + } + else if(x>30&&x<=40) + { + xrow=26; + xcol=91-((((x%10)-1)*9)+4); + if(xcol==96) + xcol=4; + } + else if(x>40&&x<=50) + { + xrow=22; + xcol=(((x%10)-1)*9)+4; + if(xcol==-5) + xcol=86; + } + else if(x>50&&x<=60) + { + xrow=18; + xcol=91-((((x%10)-1)*9)+4); + if(xcol==96) + xcol=4; + } + else if(x>60&&x<=70) + { + xrow=14; + xcol=(((x%10)-1)*9)+4; + if(xcol==-5) + xcol=86; + } + else if(x>70&&x<=80) + { + xrow=10; + xcol=91-((((x%10)-1)*9)+4); + if(xcol==96) + xcol=4; + } + else if(x>80&&x<=90) + { + xrow=6; + xcol=(((x%10)-1)*9)+4; + if(xcol==-5) + xcol=86; + } + else if(x>90&&x<=100) + { + xrow=2; + xcol=91-((((x%10)-1)*9)+4); + if(xcol==96) + xcol=4; + } + if(y>0&&y<=10) + { + yrow=39; + ycol=(((y%10)-1)*9)+4; + if(ycol==-5) + ycol=86; + } + else if(y>10&&y<=20) + { + yrow=35; + ycol=91-((((y%10)-1)*9)+4); + if(ycol==96) + ycol=4; + } + else if(y>20&&y<=30) + { + yrow=31; + ycol=(((y%10)-1)*9)+4; + if(ycol==-5) + ycol=86; + } + else if(y>30&&y<=40) + { + yrow=27; + ycol=91-((((y%10)-1)*9)+4); + if(ycol==96) + ycol=4; + } + else if(y>40&&y<=50) + { + yrow=23; + ycol=(((y%10)-1)*9)+4; + if(ycol==-5) + ycol=86; + } + else if(y>50&&y<=60) + { + yrow=19; + ycol=91-((((y%10)-1)*9)+4); + if(ycol==96) + ycol=4; + } + else if(y>60&&y<=70) + { + yrow=15; + ycol=(((y%10)-1)*9)+4; + if(ycol==-5) + ycol=86; + } + else if(y>70&&y<=80) + { + yrow=11; + ycol=91-((((y%10)-1)*9)+4); + if(ycol==96) + ycol=4; + } + else if(y>80&&y<=90) + { + yrow=7; + ycol=(((y%10)-1)*9)+4; + if(ycol==-5) + ycol=86; + } + else if(y>90&&y<=100) + { + yrow=3; + ycol=91-((((y%10)-1)*9)+4); + if(ycol==96) + ycol=4; + } + string grid[41]; + string newpage="\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; + cout<<"\n\n"; + for(int i=0;i<41;i++) + if(i%4!=0) + grid[i]="| | | | | | | | | | |"; + else + grid[i]="-------------------------------------------------------------------------------------------"; + + grid[1]="| 100 | 99(02) | 98 | 97 | 96 | 95 | 94 | 93 | 92 | 91 |"; + grid[5]="| 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |"; + grid[9]="| 80 | 79 | 78 | 77 | 76(58) | 75 | 74(92) | 73 | 72 | 71 |"; + grid[13]="| 61 | 62(81) | 63 | 64 | 65(45) | 66 | 67 | 68 | 69 | 70 |"; + grid[17]="| 60 | 59 | 58 | 57 | 56 | 55 | 54(31) | 53 | 52 | 51 |"; + grid[21]="| 41 | 42(63) | 43(18) | 44 | 45 | 46 | 47 | 48 | 49 | 50(69) |"; + grid[25]="| 40(03) | 39 | 38 | 37 | 36 | 35 | 34 | 33(49) | 32 | 31 |"; + grid[29]="| 21 | 22 | 23 | 24 | 25 | 26 | 27(05) | 28 | 29 | 30 |"; + grid[33]="| 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13(46) | 12 | 11 |"; + grid[37]="| 01 | 02 | 03 | 04(25) | 05 | 06 | 07 | 08 | 09 | 10 |"; + grid[xrow][xcol]=n1; + grid[yrow][ycol]=n2; + cout<next=newnode; + curr=newnode; + } + } +} +void jumping(int a, int b) +{ + node *temp1=head, *temp2=head;; + while(a!=1) + { + temp1=temp1->next; + a--; + } + while(b!=1) + { + temp2=temp2->next; + b--; + } + temp1->jump=temp2; +} +void display() +{ + node *temp=head; + while(temp!=NULL) + { + cout<data<<" "; + temp=temp->next; + } +} +int rolldice() +{ + srand(time(0)); + return ((rand()%6)+1); +} +void setsnakesandladders() +{ + jumping(4,25); + jumping(13,46); + jumping(33,49); + jumping(50,69); + jumping(42,63); + jumping(62,81); + jumping(74,92); + jumping(40,3); + jumping(27,5); + jumping(43,18); + jumping(54,31); + jumping(65,45); + jumping(76,58); + jumping(99,2); +} +void tunnelsandpotholes() +{ + create(); + setsnakesandladders(); + node *player1, *player2; + player1=player2=head; + char roll='r'; + char n1, n2; + cout<<"\n\nEnter Player 1 name letter: "; + cin>>n1; + cout<<"Enter Player 2 name letter: "; + cin>>n2; + while(player1!=curr || player2!=curr) + { + if(player1->data==100||player2->data==100) + break; + makegrid(player1->data,player2->data,0, n1, n2); + while(roll=='r') + { + cout<<"\nTo roll dice press R: "; + cin>>roll; + if(roll!='r') + return; + int n=rolldice(); + player1=moving(player1,n); + makegrid(player1->data,player2->data,n, n1, n2); + if(player1->data==100||player2->data==100) + break; + cout<<"\nTo roll dice press R: "; + cin>>roll; + if(roll!='r') + return; + n=rolldice(); + player2=moving(player2,n); + makegrid(player1->data,player2->data,n, n1, n2); + if(player1->data==100||player2->data==100) + break; + } + } + if(player1->data==100) + cout<<"\n\n "<data==100) + cout<<"\n\n "< v; + +class InnerLinkedList +{ + public: + int idata; + InnerLinkedList *inext; + InnerLinkedList() + { + idata=num2++; + inext=NULL; + } +}*ihead=NULL, *icurr=NULL,*ia=NULL,*ib=NULL,*ic=NULL,*id=NULL; + +void oCreate() +{ + for(int i=1;i<=52;i++) + { + OuterLinkedList *newnode=new OuterLinkedList(); + if(ohead==NULL) + ohead=ocurr=newnode; + else + { + ocurr->onext=newnode; + ocurr=ocurr->onext; + } + switch(i) + { + case 1: v.push_back(ocurr); + break; + case 14:v.push_back(ocurr); + break; + case 27:v.push_back(ocurr); + break; + case 40:v.push_back(ocurr); + break; + case 51:v.push_back(ocurr); + break; + case 12:v.push_back(ocurr); + break; + case 25:v.push_back(ocurr); + break; + case 38:v.push_back(ocurr); + break; + } + } + ocurr->onext=ohead; +} + +void iCreate() +{ + for(int i=0;i<6;i++) + { + InnerLinkedList *newnode=new InnerLinkedList(); + if(ihead==NULL) + { + ihead=icurr=newnode; + } + else + { + icurr->inext=newnode; + icurr=icurr->inext; + } + + } +} + +void placeplayerouter(OuterLinkedList *p, char x) +{ + int row, col; + if(p==NULL) + { + switch (x) + { + case 'A': row =6; + col=14; + break; + case 'B': row=6; + col=73; + break; + case 'C': row=31; + col=73; + break; + case 'D': row=31; + col=14; + break; + } + } + else + { + if(p->data>=1&&p->data<=5) + { + row=15; + col=8+(p->data-1)*5; + } + if(p->data>5&&p->data<12) + { + col=35; + row=11-(p->data-6)*2; + } + if(p->data>=13&&p->data<19) + { + col=54; + row=1+(p->data-13)*2; + } + if(p->data>=19&&p->data<25) + { + row=15; + col=62+(p->data-19)*5; + } + if(p->data>25&&p->data<=31) + { + row=23; + col=87-(p->data-26)*5; + } + if(p->data>31&&p->data<=37) + { + col=54; + row=26+(p->data-32)*2; + } + if(p->data>38&&p->data<=44) + { + col=35; + row=36-(p->data-39)*2; + } + if(p->data>44&&p->data<51) + { + row=23; + col=28-(p->data-45)*5; + } + if(p->data==52) + { + row=15; + col=3; + } + if(p->data==51) + { + row=19; + col=3; + } + if(p->data==12) + { + row=1; + col=44; + } + if(p->data==25) + { + row=19; + col=87; + } + if(p->data==38) + { + row=36; + col=44; + } + } + grid[row][col]=x; +} + +void placeplayerinner(InnerLinkedList *p, char x) +{ + int row, col; + if(p!=NULL) + { + if(p->idata==6) + { + row=19; + col=44; + } + else + { + switch(x) + { + case 'A': row=19; + col=8+(p->idata-1)*5; + break; + case 'B': row=3+(p->idata-1)*2; + col=44; + break; + case 'C': row=19; + col=82-(p->idata-1)*5; + break; + case 'D': row=34-(p->idata-1)*2; + col=44; + break; + } + } + } + grid[row][col]=x; +} + +void makegrid() +{ + string newpage="\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\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"; + cout<<"\n\n"; + grid[0]=grid[13]=grid[25]=grid[38]="|----------------------------------------------------------------------------------------|"; + + for(int i=1;i<38;i++) + { + if(i%2!=0&&(i<=12||i>25)) + grid[i]="| | | | | |"; + else if(i%2==0&&(i<=12)) + grid[i]="| |_ _ _ _ _|________|_ _ _ _ _| |"; + else if(i==14||i==15||i==16||i==18||i==19||i==20||i==24||i==22||i==23) + grid[i]="| | | | | | | | | | | | | |"; + else if(i==17||i==21) + grid[i]="|-----------------------------| |-----------------------------|"; + if(i%2==0&&(i>25)) + grid[i]="| | | | | |"; + else if(i%2!=0&&(i>25)) + grid[i]="| |_ _ _ _ _|________|_ _ _ _ _| |"; + } + grid[12]=grid[37]="| | | | | |"; + cout<0)&&(a!=NULL)) + { + if(a!=v.at(7)) + { + a=a->onext; + i--; + } + else + { + a=NULL; + ia=ihead; + i--; + } + } + while(i>0) + { + ia=ia->inext; + i--; + } + if(a==b) + b=NULL; + if(a==c) + c=NULL; + if(a==d) + d=NULL; + } + else if((a==NULL)&&(ia!=NULL)) + { + if(ia->idata+i<=6) + while(i>=0) + { + ia=ia->inext; + i--; + } + } + break; + case 2: + if((b==NULL)&&(ib==NULL)&&(i!=6)) + { + break; + } + else if((b==NULL)&&(ib==NULL)&&(i==6)) + b=v.at(2); + else if(b!=NULL) + { + while((i>0)&&(b!=NULL)) + { + if(b!=v.at(1)) + { + b=b->onext; + i--; + } + else + { + b=NULL; + ib=ihead; + i--; + } + } + while(i>0) + { + ib=ib->inext; + i--; + } + if(b==a) + a=NULL; + if(b==c) + c=NULL; + if(b==d) + d=NULL; + } + else if((b==NULL)&&(ib!=NULL)) + { + if(ib->idata+i<=6) + while(i>=0) + { + ib=ib->inext; + i--; + } + } + break; + case 3: + if((c==NULL)&&(ic==NULL)&&(i!=6)) + { + break; + } + else if((c==NULL)&&(ic==NULL)&&(i==6)) + c=v.at(4); + else if(c!=NULL) + { + while((i>0)&&(c!=NULL)) + { + if(c!=v.at(3)) + { + c=c->onext; + i--; + } + else + { + c=NULL; + ic=ihead; + i--; + } + } + while(i>0) + { + ic=ic->inext; + i--; + } + if(c==a) + a=NULL; + if(c==b) + b=NULL; + if(c==d) + d=NULL; + } + else if((c==NULL)&&(ic!=NULL)) + { + if(ic->idata+i<=6) + while(i>0) + { + ic=ic->inext; + i--; + } + } + break; + case 4: + if((d==NULL)&&(id==NULL)&&(i!=6)) + { + break; + } + else if((d==NULL)&&(id==NULL)&&(i==6)) + d=v.at(6); + else if(d!=NULL) + { + while((i>0)&&(d!=NULL)) + { + if(d!=v.at(5)) + { + d=d->onext; + i--; + } + else + { + d=NULL; + id=ihead; + i--; + } + } + while(i>0) + { + id=id->inext; + i--; + } + if(d==a) + a=NULL; + if(d==c) + c=NULL; + if(d==b) + b=NULL; + } + else if((d==NULL)&&(id!=NULL)) + { + if(id->idata+i<=6) + while(i>0) + { + id=id->inext; + i--; + } + } + break; + } + makegrid(); + if(n==1) + cout<<"Player A turn\n"; + else if(n==2) + cout<<"Player B turn\n"; + else if(n==3) + cout<<"Player C turn\n"; + else if(n==4) + cout<<"Player D turn\n"; + dicedisp(z); + if(ia==icurr) + { + cout<<"\nA wins!!!!"; + exit(0); + } + else if(ib==icurr) + { + cout<<"\nB wins!!!!"; + exit(0); + } + else if(ic==icurr) + { + cout<<"\nC wins!!!!"; + exit(0); + } + else if(id==icurr) + { + cout<<"\nD wins!!!!"; + exit(0); + } + if(z==6) + { + char roll='r'; + cout<<"\nPress any key to continue/Press (N/n) to exit: "; + cin>>roll; + if(roll!='n') + { + int x=rolldice(); + dicedisp(x); + moveplayer(x,n); + } + else + exit(0); + } + +} + +int playerturn(int n) +{ + n=(n%4)+1; + return n; +} + +void createlist() +{ + oCreate(); + iCreate(); +} + +void play() +{ + int n=4; + char roll='r'; + makegrid(); + while((icurr!=ia)&&(icurr!=ib)&&(icurr!=ic)&&(icurr!=id)) + { + cout<<"\nPress any key to continue/Press (N/n) to exit: "; + cin>>roll; + if(roll!='n') + { + n=playerturn(n); + int x=rolldice(); + moveplayer(x,n); + } + else if(roll=='n') + exit(0); + } +} + +void ludo() +{ + createlist(); + play(); +} + + + + +int main() +{ + int x=1; + char ans='y'; + while(ans=='y') + { + cout<<" GAME ARCADE\n"; + cout<<"\n\n\n\nOptions:\n"; + cout<<"1. Tunnels And Potholes\n"; + cout<<"2. Ludo\n"; + cout<<"3. Exit!!\n\n"; + cin>>x; + switch(x) + { + case 1: tunnelsandpotholes(); + break; + case 2: ludo(); + break; + case 3: exit(0); + default:cout<<"Wrong Option\n"; + } + cout<<"Do you want to play AGAIN!!!!!(y/n)\n"; + cin>>ans; + } + return 0; +}