#include<bits/stdc++.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
#include<stdio.h>
using namespace std;
int now1=1,w1=2,s1=5,a1=4,d1=3,b1=6;//蓝队
int now2=1,w2=5,s2=2,a2=3,d2=4,b2=6;//红队
int px1=1,py1=1,px2=6,py2=6,key1=3,key2=3;
int gameover=0;
void Slowsay(string a){
int l=a.size();
for(int i=0;i<l;i++){
cout<<a[i];
Sleep(2);
}
printf("\n");
}
void Color(int a){
if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|BACKGROUND_INTENSITY|BACKGROUND_RED);
if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|BACKGROUND_INTENSITY|BACKGROUND_BLUE);
}
void writemap(){
system("cls");
for(int i=1;i<=6;i++){
for(int j=1;j<=6;j++){
if(i+py1==7&&j==px1)cout<<"*--"<<w1<<"--";
else if(i+py2==7&&j==px2)cout<<"*--"<<w2<<"--";
else if(i+py1==8&&j==px1)cout<<"*--"<<s1<<"--";
else if(i+py2==8&&j==px2)cout<<"*--"<<s2<<"--";
else cout<<"*-----";
}
cout<<"*"<<endl;
for(int j=1;j<=6;j++){
if(i+py1==7&&j==px1)cout<<"| | ";
else if(i+py2==7&&j==px2)cout<<"| | ";
else cout<<"| ";
}
cout<<"|"<<endl;
int flag=false;
if(py1+i==7&&py2+i==7&&(px1-px2==1||px2-px1==1)){
flag=min(px1,px2);
}
for(int j=1;j<=6;j++){
if(flag==false){
if(i+py1==7&&j==px1){
cout<<a1<<"- ";
Color(6),cout<<now1;
Color(8),cout<<" -";
}
else if(i+py1==7&&j==px1+1)cout<<d1<<" ";
else if(i+py2==7&&j==px2){
cout<<a2<<"- ";
Color(4),cout<<now2;
Color(8),cout<<" -";
}
else if(i+py2==7&&j==px2+1)cout<<d2<<" ";
else cout<<"| ";
}else{
if(j==flag){
j++;
cout<<a1<<"- ";
Color(6),cout<<now1;
Color(8),cout<<" -";
Color(5),cout<<"+";
Color(8),cout<<"- ";
Color(4),cout<<now2;
Color(8),cout<<" -"<<d2;
}else if(j==flag+2){
cout<<" ";
}else{
cout<<"| ";
}
}
}
if(i+py1==7&&px1==6){
cout<<d1<<endl;
}else if(i+py2==7&&px2==6){
cout<<d2<<endl;
}else{
cout<<"|"<<endl;
}
for(int j=1;j<=6;j++){
if(i+py1==7&&j==px1)cout<<"| | ";
else if(i+py2==7&&j==px2)cout<<"| | ";
else cout<<"| ";
}
cout<<"|"<<endl;
}
for(int i=1;i<=6;i++){
if(i==px1&&py1==1){cout<<"*--"<<s1<<"--";}
else if(i==px2&&py2==1){cout<<"*--"<<s2<<"--";}
else cout<<"*-----";
}
cout<<"*"<<endl;
return ;
}
void movement(){
char way;
int isin=0;
while(isin<=0){
Slowsay("please player1 cin how to move:1,6,0,w,s,a or d");
cin>>way;
//key
if(way=='1'||way=='6'||way=='0'){
if(way=='1'&&key1>0){
Slowsay("OK, you can move one more time this round");
Sleep(1000);
key1--;
isin--;
}else if(way=='6'&&key1>0){
Slowsay("OK, your number is six");
key1--;
now1=6,w1=2,s1=5,a1=4,d1=3,b1=1;
}else if(way=='0'&&key1>0){
Slowsay("OK, your position is changed");
key1--;
px1=1,py1=1;
Sleep(1000);
}else{
Slowsay("Sorry, you don't have enough key");
Sleep(1000);
}
}
//fight
else if((way=='w'&&px1==px2&&py1==py2-1&&now1>now2)||(way=='s'&&px1==px2&&py1==py2+1&&now1>now2)||(way=='a'&&py1==py2&&px1==px2+1&&now1>now2)||(way=='d'&&py1==py2&&px1==px2-1&&now1>now2)){
gameover=1;
isin++;
}else if((way=='w'&&px1==px2&&py1==py2-1&&now1<=now2)||(way=='s'&&px1==px2&&py1==py2+1&&now1<=now2)||(way=='a'&&py1==py2&&px1==px2+1&&now1<=now2)||(way=='d'&&py1==py2&&px1==px2-1&&now1<=now2)){
Slowsay("you'ren't able to fight with player2, please cin again!");
Sleep(1000);
}
//move
else if(way=='w'&&py1<6){
w1=now1;
now1=s1;
s1=b1;
b1=7-now1;
py1++;
isin++;
}else if(way=='s'&&py1>1){
s1=now1;
now1=w1;
w1=b1;
b1=7-now1;
py1--;
isin++;
}else if(way=='a'&&px1>1){
a1=now1;
now1=d1;
d1=b1;
b1=7-now1;
px1--;
isin++;
}else if(way=='d'&&px1<6){
d1=now1;
now1=a1;
a1=b1;
b1=7-now1;
px1++;
isin++;
}else{
Slowsay("please cin correctly");
Sleep(1000);
}
writemap();
}
if(gameover)return;
isin=0;
while(isin<=0){
Slowsay("please player2 cin how to move:1,6,0,w,s,a or d");
cin>>way;
//key
if(way=='1'||way=='6'||way=='0'){
if(way=='1'&&key2>0){
Slowsay("OK, you can move one more time this round");
Sleep(1000);
key2--;
isin--;
}else if(way=='6'&&key2>0){
Slowsay("OK, your number is six");
key2--;
now2=6,w2=5,s2=2,a2=3,d2=4,b2=1;
Sleep(1000);
}else if(way=='0'&&key2>0){
Slowsay("OK, your position is changed");
key2--;
px2=6,py2=6;
Sleep(1000);
}else{
Slowsay("Sorry, you don't have enough key");
Sleep(1000);
}
}
//fight
else if((way=='w'&&px1==px2&&py1==py2+1&&now1<now2)||(way=='s'&&px1==px2&&py1==py2-1&&now1<now2)||(way=='a'&&py1==py2&&px1==px2-1&&now1<now2)||(way=='d'&&py1==py2&&px1==px2+1&&now1<now2)){
gameover=2;
isin++;
}else if((way=='w'&&px1==px2&&py1==py2+1&&now1>=now2)||(way=='s'&&px1==px2&&py1==py2-1&&now1>=now2)||(way=='a'&&py1==py2&&px1==px2-1&&now1>=now2)||(way=='d'&&py1==py2&&px1==px2+1&&now1>=now2)){
Slowsay ("you'ren't able to fight with player1, please cin again!");
Sleep(1000);
}
//move
else if(way=='w'&&py2<6){
w2=now2;
now2=s2;
s2=b2;
b2=7-now2;
py2++;
isin++;
}else if(way=='s'&&py2>1){
s2=now2;
now2=w2;
w2=b2;
b2=7-now2;
py2--;
isin++;
}else if(way=='a'&&px2>1){
a2=now2;
now2=d2;
d2=b2;
b2=7-now2;
px2--;
isin++;
}else if(way=='d'&&px2<6){
d2=now2;
now2=a2;
a2=b2;
b2=7-now2;
px2++;
isin++;
}else{
Slowsay("please cin correctly");
Sleep(1000);
}
writemap();
}
if(gameover)return ;
}
void endgame(int winpn){
system("cls");
Color(3),Slowsay("gameover!");
Color(8),cout<<"player1's score is ";
Color(6),cout<<now1<<endl;
Sleep(500);
Color(8),cout<<"player2's score is ";
Color(4),cout<<now2<<endl;
Sleep(500);
Color(7),cout<<"and player"<<winpn<<" hits player"<<3-winpn<<endl;
Sleep(500);
Color(5),cout<<"so, player"<<winpn<<" win!";
Color(8);
return ;
}
void startboard(){
Color(2),Slowsay("游戏名:骰子竞技场3.0");
Color(8),Slowsay("相比于2.0美化棋盘,加入0键");
Color(5),Slowsay("制作:2024级0310");
Color(4),Slowsay("不要将代码放入自己的博客");
Color(6),Slowsay("按下任意键游戏规则");
Color(8);
char choose='t';
while(choose=='t')choose=_getch();
return ;
}
void gamerule(){
system("cls");
Color(2),Slowsay("游戏名称:骰子竞技场3.0");
Color(3),Slowsay("基础规则");
Color(7),cout<<"1 ";
Color(8),Slowsay("每人初始有一个点数为1的骰子,上下左右的四个数值是骰子的四个面");
Color(7),cout<<"2 ";
Color(8),Slowsay("双方玩家轮流移动1格或者在你的骰子点数比对方大的时候攻击对方获得胜利");
Color(3),Slowsay("道具规则");
Color(8),Slowsay("每人有3次使用道具的机会,但是每回合可以重复使用");
Color(7),cout<<"1 键 ";
Color(8),Slowsay("本回合多行动1次");
Color(7),cout<<"6 键 ";
Color(8),Slowsay("你的点数变成6");
Color(7),cout<<"0 键 ";
Color(8),Slowsay("回到出生点");
Color(6),Slowsay("最后,本游戏需要双人游玩");
Color(8),Slowsay("按下任意键开始");
char t='t';
while(t=='t')t=_getch();
return ;
}
int main(){
startboard();
gamerule();
while(gameover==0){
writemap();
movement();
}
endgame(gameover);
return 0;
}