第四章#4.7斯诺克台球

【问题描述】

斯诺克台球是一项古老而又时尚的运动,使用长方形球桌,台面四角以及两长边中心位置各有一个球袋,使用的球分为1个白球,15个红球和6个彩球共22个球。

其中母球(白球)1只,目标球21只。目标球中:红球15只各1分、黄球1只2分、绿球1只3分、咖啡球1只4分、蓝球1只5分、粉球1只6分、黑球1只7分。

djh.jpg

选手需要使用球杆撞击母球去击打目标球来完成得分,每局开始时总是先从红球开始。击球顺序为先打进红球(每次击打允许多个红球同时落袋),然后必须任意指定一个目标彩球击打,如果该彩球被打进(打进后需要再摆回),然后接着击打红球,直到红球全部落袋,然后以黄、绿、咖啡、蓝、粉红、黑的顺序逐个击球(不再摆回),最后以得分高者为胜。任何时候红球落袋都不再摆回,任何时候因犯规导致彩球落袋,彩球必须摆回。

斯诺克比赛由双方轮流击打,必须击打合规的目标球,打进则本方得到相应的分数并继续击打,未打进或犯规轮换为对方击打,未打进不得分,犯规将进行罚分处理。

犯规规则如下:

1.     当击打目标球时,如果先击打到或同时击打到一个或多个其他颜色的球,或者有其他颜色的球落袋,或者打空(未击打到任何球),则视为犯规。此时需要比较目标球的分值和与本犯规相关的其他颜色的球的分值,取其中最高的分值,如果该分值小于4,则对方加4分,否则对方加该分值。

2.     当击打红球落袋后,继续击打任意彩球时打空,即未打击到任何球,对方加4分。

相比正式的斯诺克比赛,本问题对规则进行了简化,任何时候都可以结束比赛并计算比赛结果,不考虑白球落袋的情况。

信息化时代的智能台球桌能自动记录实际比赛时的击打记录,并传送到后台,但该记录仅仅是流水记录,并且无参赛选手的任何信息,需要你编程计算每场比赛的比分,同时需要计算单杆100分及以上的情况(单杆得分是指选手一次连续击打所得分数之和)。

【输入形式】

输入第一行为正整数t (t≤100),表示有t组测试数据,每组数据代表一局比赛。

在输入中,球的颜色表示为:

               r-红色球 y-黄色球 g-绿色球 c-咖啡色球 b-蓝色球 p-粉红球 B-黑色球

接下来的每组数据包括若干行,每一行为一次击打的结果,为智能球桌记录下来的流水记录,每组数据最后一行为-1,表示每组数据的结束。

流水记录包含用空格分隔的2个部分:

首先撞到的球 落袋球及数量

第一部分“首先撞到的球”为一个字符串,可以是“rygcbpB”中1个或多个字符组合(可能有多个字符“r”),或为字符串“NULL”。为“NULL”时,第二部分必为空,表示该次击打未撞击到任何球也没有任何球落袋。当红球落袋后继续击打任意彩球时,该部分为“ygcbpB”中的任意单个字符时都认为是合规的目标球。

第二部分“落袋球及数量”为一个字符串,例如“r2gb”,代表本次击打有两个红球落袋,以及绿球和篮球落袋,红色球r后面有数字(大于0小于16),表示红球的落袋数,其他彩球后无数字。该部分可以为空,表示本次击打无球落袋。

比赛在A与B之间进行,每局比赛总是由A先开球。

【输出形式】

输出为t+1行,前t行每行输出用冒号分隔的两个整数,表示每局比赛A与B之间的比分;最后一行输出用冒号分隔的两个整数,表示t局比赛之后A与B之间获得的单杆100分及以上的次数之比(单杆得分是指选手一次连续击打所得分数之和)。

【样例输入】

3
r r1
B
r r2
c c
r r1
b g
-1
rp r1
r br2B
NULL
r r12
y y
g p
-1
rr r3
NULL
r r1
yg y
-1

【样例输出】

6:7
13:24
7:5
0:0

【样例说明】

第一局比赛:

A击打红球,打进1个红球,得1分,比分为 1:0

A继续击打任意彩球,打到黑球,未打进,不得分,比分为1:0

轮换为B击打红球,打进两个红球,得2分,比分为1:2

B继续击打任意彩球,打到咖啡球,打进咖啡球,咖啡球摆回,得4分,比分为1:6

B继续击打红球,打进一个红球,得1分,比分为1:7

B继续击打任意彩球,打到蓝球,打进绿球,犯规,取分值最大者蓝球,绿球摆回,对方加5分,比分为6:7

-1比赛结束

第二局比赛:

A击打红球,首先打到红球和粉球,犯规,打进1个红球和咖啡球,犯规,咖啡球摆回,取分值最大的粉球,对方加6分,比分为0:6

B击打红球,首先打到红球,打进蓝球、2个红球和黑球,犯规,蓝球和黑球摆回,取分值最大的黑球,对方加7分,比分为7:6

A击打红球,未打到任何球,犯规,对方加4分,比分为7:10

B击打红球,打到红球,打进12个红球,加12分,比分为7:22

B击打任意彩球,打到黄球,打进黄球,黄球摆回,得2分,比分为7:24

B击打黄球,打到绿球,打进粉球,犯规,粉球摆回,对方加6分,比分为13:24

-1比赛结束

第三局比赛:

A击打红球,打到2个红球,打进3个红球,加3分,比分为3:0

A击打任意彩球,打空,未打到任何球,对方加4分,比分为3:4

B击打红球,打到1个红球,打进1个红球,加1分,比分为3:5

B击打任意彩球,打到黄球和绿球,打进黄球,犯规,黄球摆回,取分值最高的绿球,绿球分值小于4,对方加4分,比分为7:5 

-1比赛结束

3局比赛中无人单杆得分过100,最后一行输出0:0

【评分标准】

#include<iostream>
#include<map>
using namespace std;
struct people
{
	int n;
	int a[102];
	int sum;
	int dangan[102];
	int sss;
};
map<char,int>aa;
map<char,int>bb;
map<char,int>dd;
char cc[7]={'r','y','g','c','b','p','B'};
int main()
{
	aa['r']=1;aa['y']=2;aa['g']=3;aa['c']=4;aa['b']=5;aa['p']=6;aa['B']=7;
	int t;
	cin>>t;
	getchar();
	people A,B;
	A.n=t;B.n=t;
	string x,y,X;
	int m=0,k=0,p=0,hong=15,huang=1,lve=1,cafe=1,lan=1,fen=1,hei=1;
	
	for(p=0;p<t;p++)
	{
		hong=15;huang=1;lve=1;cafe=1;lan=1;fen=1;hei=1;
		m=0;//m表示第几个人 
		A.a[p]=0;A.sum=0;A.dangan[p]=0;A.sss=0;
		B.a[p]=0;B.sum=0;B.dangan[p]=0;B.sss=0;
		x="";y="";
		k=0;//k表示第几轮 
		while(getline(cin,X)&&X!="-1")
		{
			x="";y="";
			if(X.find(" ")!=string::npos)
			{
				x=x+X.substr(0,X.find(" "));
				y=y+X.substr(X.find(" ")+1);
			}
			else
			{
				x=x+X;
				y="";
			}
			
			dd.clear();
			dd['r']=0;dd['y']=0;dd['g']=0;dd['c']=0;dd['b']=0;dd['p']=0;dd['B']=0;
			for(int i=0;i<(int)x.length();i++)
			{
				dd[x[i]]++;
			}
			int l=0;
			for(int i=0;i<7;i++)
			{
				if(dd[cc[i]]!=0) l++;
			}
			
			bb.clear();
			bb['r']=0;bb['y']=0;bb['g']=0;bb['c']=0;bb['b']=0;bb['p']=0;bb['B']=0;
			for(int i=0;i<(int)y.length();i++)
		   	{
		   		if(y[i]>'9'&&y[i]!='r') {bb[y[i]]++;}
		   		else if(y[i]=='r'&&(y[i+2]>'9'||i+2==(int)y.length())&&(y[i+1]>='1'&&y[i+1]<='9')) 
		   		{bb[y[i]]=bb[y[i]]+(y[i+1]-'0');i++;}
		   		else if(y[i]=='r'&&(y[i+2]>='0'&&y[i+2]<='9')&&(y[i+1]>='1'&&y[i+1]<='9'))
		   		{bb[y[i]]=bb[y[i]]+(y[i+1]-'0')*10+(y[i+2]-'0');i=i+2;}
			}
			int q=0;
			for(int i=0;i<7;i++)
			{
				if(bb[cc[i]]!=0) q++;
			}
			
			if(x=="NULL")//x为空 
			{
				k=0;
				if(m%2==0) {B.a[p]=B.a[p]+4;m++;}
				else {A.a[p]=A.a[p]+4;m++;}
			}
			else
			{
				if(hong>0&&k%2==0&&l==1&&x[0]=='r'&&q==1&&y[0]=='r')//第一轮不犯规
				{
					k=1;
					if(m%2==0)
					{
						A.a[p]+=bb['r'];A.sum+=bb['r']; 
					}
					else 
					{
					    B.a[p]+=bb['r'];B.sum+=bb['r'];
					} 
				}
				else if(hong>=0&&k%2!=0&&(int)x.length()==1&&x[0]!='r'&&q==1&&y[0]==x[0])//第二轮不犯规 
				{
					k=0;
					if(m%2==0)
					{
						A.a[p]+=aa[y[0]];
						A.sum+=aa[y[0]];
					}
					else
					{
						B.a[p]+=aa[y[0]];
						B.sum+=aa[y[0]];
					}
				}
				else if(k%2==0&&x[0]=='r'&&hong>0&&l==1&&(int)y.length()==0)//y为空 
				{
					if(m%2==0)
					{
						if(A.sum>=100) A.dangan[p]++;
						A.sum=0;
					}
					else
					{
						if(B.sum>=100) B.dangan[p]++;
						B.sum=0;
					}
					m++;k=0;
				}
				else if(k%2!=0&&x[0]!='r'&&hong>=0&&l==1&&q==0)//y为空 
				{
					if(m%2==0)
					{
						if(A.sum>=100) A.dangan[p]++;
						A.sum=0;
					}
					else
					{
						if(B.sum>=100) B.dangan[p]++;
						B.sum=0;
					}
					m++;k=0;
				}
				else if(k%2==0&&hong<=0)
				{
                 	if(huang==1)
					{
						if((int)x.length()==1&&(int)y.length()==1&&x[0]=='y'&&y[0]=='y')
						{
							if(m%2==0)
							{
								A.a[p]+=aa[y[0]];
								A.sum+=aa[y[0]];
							}
							else
							{
								B.a[p]+=aa[y[0]];
								B.sum+=aa[y[0]];
							}
							huang=0;
						}
						else if((int)x.length()==1&&(int)y.length()==0&&x[0]=='y')
						{
							if(m%2==0)
							{
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
							m++;
						}
						else
						{
							k=0;
						    if(m%2==0)
							{
								//if(bb['r']>7) B.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) B.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) B.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) B.a[p]+=5;
								else B.a[p]+=4;
								m++;
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								//if(bb['r']>7) A.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) A.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) A.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) A.a[p]+=5;
								else A.a[p]+=4;
								m++;
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
						} 
					} 
					
					else if(huang==0&&lve==1)
					{
						if(x.length()==1&&y.length()==1&&x[0]=='g'&&y[0]=='g')
						{
							if(m%2==0)
							{
								A.a[p]+=aa[y[0]];
								A.sum+=aa[y[0]];
							}
							else
							{
								B.a[p]+=aa[y[0]];
								B.sum+=aa[y[0]];
							}
							lve=0;
						}
						else if(x.length()==1&&y.length()==0&&x[0]=='g')
						{
							if(m%2==0)
							{
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
							m++;
						}
						else
						{
						    if(m%2==0)
							{
								//if(bb['r']>7) B.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) B.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) B.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) B.a[p]+=5;
								else B.a[p]+=4;
								m++;
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								//if(bb['r']>7) A.a[p]+=bb['r'];
							    if(bb['B']==1||dd['B']==1) A.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) A.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) A.a[p]+=5;
								else A.a[p]+=4;
								m++;
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
						} 
					} 
					
					else if(huang==0&&lve==0&&cafe==1)
					{
						if(x.length()==1&&y.length()==1&&x[0]=='c'&&y[0]=='c')
						{
							if(m%2==0)
							{
								A.a[p]+=aa[y[0]];
								A.sum+=aa[y[0]];
							}
							else
							{
								B.a[p]+=aa[y[0]];
								B.sum+=aa[y[0]];
							}
							cafe=0;
						}
						else if(x.length()==1&&y.length()==0&&x[0]=='c')
						{
							if(m%2==0)
							{
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
							m++;
						}
						else
						{
						    if(m%2==0)
							{
								//if(bb['r']>7) B.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) B.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) B.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) B.a[p]+=5;
								else B.a[p]+=4;
								m++;
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								//if(bb['r']>7) A.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) A.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) A.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) A.a[p]+=5;
								else A.a[p]+=4;
								m++;
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
						} 
					} 	
					
					else if(lan==1&&cafe==0&&huang==0&&lve==0)
					{
						if(x.length()==1&&y.length()==1&&x[0]=='b'&&y[0]=='b')
						{
							if(m%2==0)
							{
								A.a[p]+=aa[y[0]];
								A.sum+=aa[y[0]];
							}
							else
							{
								B.a[p]+=aa[y[0]];
								B.sum+=aa[y[0]];
							}
							lan=0;
						}
						else if(x.length()==1&&y.length()==0&&x[0]=='b')
						{
							if(m%2==0)
							{
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
							m++;
						}
						else
						{
							k=0;
						    if(m%2==0)
							{
								//if(bb['r']>7) B.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) B.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) B.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) B.a[p]+=5;
								else B.a[p]+=4;
								m++;
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								//if(bb['r']>7) A.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) A.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) A.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) A.a[p]+=5;
								else A.a[p]+=4;
								m++;
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
						} 
					} 
					
					else if(fen==1&&lan==0&&cafe==0&&huang==0&&lve==0)
					{
						if(x.length()==1&&y.length()==1&&x[0]=='p'&&y[0]=='p')
						{
							if(m%2==0)
							{
								A.a[p]+=aa[y[0]];
								A.sum+=aa[y[0]];
							}
							else
							{
								B.a[p]+=aa[y[0]];
								B.sum+=aa[y[0]];
							}
							fen=0;
						}
						else if(x.length()==1&&y.length()==0&&x[0]=='p')
						{
							if(m%2==0)
							{
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
							m++;
						}
						else
						{
						    if(m%2==0)
							{
								//if(bb['r']>7) B.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) B.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) B.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) B.a[p]+=5;
								else B.a[p]+=4;
								m++;
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								//if(bb['r']>7) A.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) A.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) A.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) A.a[p]+=5;
								else A.a[p]+=4;
								m++;
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
						} 
					} 
					
					else if(hei==1&&fen==0&&lan==0&&cafe==0&&huang==0&&lve==0)
					{
						if(x.length()==1&&y.length()==1&&x[0]=='B'&&y[0]=='B')
						{
							if(m%2==0)
							{
								A.a[p]+=aa[y[0]];
								A.sum+=aa[y[0]];
							}
							else
							{
								B.a[p]+=aa[y[0]];
								B.sum+=aa[y[0]];
							}
							hei=0;
						}
						else if(x.length()==1&&y.length()==0&&x[0]=='B')
						{
							if(m%2==0)
							{
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
							m++;
						}
						else
						{
						    if(m%2==0)
							{
								//if(bb['r']>7) B.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) B.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) B.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) B.a[p]+=5;
								else B.a[p]+=4;
								m++;
								if(A.sum>=100) A.dangan[p]++;
								A.sum=0;
							}
							else
							{
								//if(bb['r']>7) A.a[p]+=bb['r'];
								if(bb['B']==1||dd['B']==1) A.a[p]+=7;
								else if(bb['p']==1||dd['p']==1) A.a[p]+=6;
								else if(bb['b']==1||dd['b']==1) A.a[p]+=5;
								else A.a[p]+=4;
								m++;
								if(B.sum>=100) B.dangan[p]++;
								B.sum=0;
							}
						} 
					} 
				}
				else//犯规 
				{
					k=0;
				    if(m%2==0)
					{
						//if(bb['r']>7) B.a[p]+=bb['r'];
						if(bb['B']==1||dd['B']==1) B.a[p]+=7;
						else if(bb['p']==1||dd['p']==1) B.a[p]+=6;
						else if(bb['b']==1||dd['b']==1) B.a[p]+=5;
						else B.a[p]+=4;
						m++;
						if(A.sum>=100) A.dangan[p]++;
						A.sum=0;
					}
					else
					{
						//if(bb['r']>7) A.a[p]+=bb['r'];
						if(bb['B']==1||dd['B']==1) A.a[p]+=7;
						else if(bb['p']==1||dd['p']==1) A.a[p]+=6;
						else if(bb['b']==1||dd['b']==1) A.a[p]+=5;
						else A.a[p]+=4;
						m++;
						if(B.sum>=100) B.dangan[p]++;
						B.sum=0;
					}
				}
			}
			hong=hong-bb['r'];
        }
        cout<<A.a[p]<<":"<<B.a[p]<<endl;
		if(A.sum>=100) A.dangan[p]++;
		if(B.sum>=100) B.dangan[p]++;
    }
    for(int i=0;i<t;i++)
	{
		if(A.dangan[i]!=0) A.sss++;
		if(B.dangan[i]!=0) B.sss++;
	}
	cout<<A.sss<<":"<<B.sss;
	return 0; 
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
/****************************************************************** *软件名称: 三维斯诺克 * *开发者 : 赵亮 * *版本号 : 1.0 * *版权信息: 无。(有商业利益,不要忘了我^_^) * *日期 : 2002年11月29日 * * * * * * *********************************************************************/ ////////////////////////////////////////////////////////////////////// 1. 运行环境: 此软件可运行在windows98,windows2000,windows nt下,需要用户先安装 DirectX8.0或8.0以上的版本,CPU的主频需要在500Hz以上,最好配有3d图形 加速卡。为了使用户在使用的时候得心应手,最好配备有3d鼠标(通过中键的 滚动可以方便地调整观察者与物体的距离)。 ////////////////////////////////////////////////////////////////////// 2. 开发环境: 软件的开发平台为Microsoft Visual C++ 6.0,并且安装了DirectX8 SDK, 整个开发过程中用的是Windows API和DirectX API,没有使用MFC。 ////////////////////////////////////////////////////////////////////// 3. 功能说明: 此软件为一个桌面的游戏,可以在窗口模式和全屏模式(推荐使用)下运行。 游戏的内容为传统的斯诺克台球,游戏的场景为三维的。 (1)在应用第一人称视角瞄准时,鼠标的前后左右移动分别代表了玩家的抬 头和扭头,玩家击球的方向为视线的方向。 (2)在击球的时候,鼠标的前后移动代表了球杆的前后移动,当球杆接触到 球的时候球被击出,击球的力度与鼠标前进的速度成正比。 (3)在游戏的过程中玩家可以通过右键将视角切换为俯视。 (4)在游戏的过程中玩家可以通过对话框选择是否预先画出球的运动路径。 (5)玩家可以改变窗口大小(在没有开局时,用鼠标拖动)。 (6)玩家可以来回切换与窗口和全屏模式之间(Alt+Enter)。 /////////////////////////////////////////////////////////////////////// 4. 操作说明(操作简单,几乎全部使用鼠标): (1) 游戏选项-->;;;;;;;开局:开始游戏。 (2) 游戏开始后,鼠标拖动可以移动白球的位置,选择好位 置后,单击左键确定。 (3) 此时移动鼠标可以改变视角,视角影响击球的方向。 (4) 滚动滚轮可以拉近视距,再单击左键确定击球的方向。 (5) 前后移动鼠标,可看见球杆跟着鼠标一起前后移动,当 球杆接触到球,球即被击出。 (6) 击球的力度与鼠标向前移动的速度成正比。 (7) 在移动白球和改变视角的时候可以单击右键切换投影的 方式。 (8) 在改变视角时可以滚动中键改变视点离白球得距离。 (9) 在玩家姓名的对话框中,选中";;;;;;;使用画线器";;;;;;;可在未击球 的时候看到球的运动路线。 (10) Alt+Enter:全屏和窗口模式的转换。 (11) Esc:退出游戏。 ///////////////////////////////////////////////////////////////////////// 6. 版权说明: 此游戏从设计到写代码均由我一个人完成。除Windows API和DirectX API外,未 使用第三方控件。 //////////////////////////////////////////////////////////////////////// 7. 与同类软件比较: 在以前电视游戏机、现在的一些网络游戏中(如:联众、可乐吧)可以看到类似 的游戏。但是我的游戏与这些游戏有着本质的区别: (1)它们是二维的,我是三维的。 (2)光照、纹理、滚动、视距的改变,在视觉效果上有很大突破。 (3)它们都只能通过俯视观察场景,我可以从真实的击球者位置观察场景。 (4)它们都通过不同的画线方式来瞄准,而我是通过击球者的视线来瞄准。 (5)它们的台球与球台的尺寸比例与真实差距很大(原因:屏幕象素有限) 而在我的游戏中一次不需要让玩家看到整个场景,因而台球与球台的 尺寸比例是真实的,而且在瞄准时方向的选择更加细腻。 (6)我通过鼠标的前后移动来击球,既有强烈的真实感,又可以细腻地把 握出杆的力度。 (7)当玩家为一个初学者时,我的“画运动路径”可以帮助玩家100%精确 的瞄准,逐步培养他的球感。 综上所述:我的这个游戏的最大的优点是强烈的真实感,我是一个台球爱 好者,在设计时我从各个方面、最大程度的考虑了游戏的真实性。无论从感官还 是玩法上都与以前的游戏有着天差地别。我可以毫不夸张地说,玩家这个游戏玩 得好,他玩真实的台球的球感也一定好。
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
### 回答1: Winmail 4.7是一款非常受欢迎的电子邮件客户端软件,主要用于收发电子邮件和管理邮件。它是为Windows操作系统开发的,并且具有许多强大的功能。 首先,Winmail 4.7具有直观的用户界面,使用户能够轻松地浏览和查看邮件。它支持各种邮件格式,如纯文本、HTML和富文本格式,使用户能够以最适合他们的方式阅读邮件。 其次,Winmail 4.7提供了强大的搜索功能,使用户能够快速找到特定的邮件。用户可以按照发件人、主题、日期等多个条件进行搜索,并且可以保存和管理搜索结果。 另外,Winmail 4.7还支持多账户管理,用户可以同时管理多个电子邮件账户。这让用户能够通过一个应用程序来管理不同的邮件账户,大大提高了工作效率。 除此之外,Winmail 4.7还提供了安全和隐私保护的功能。它支持SSL和TLS加密协议,确保电子邮件的安全传输和保护用户的隐私信息。 总之,Winmail 4.7是一款功能强大、易于使用和安全可靠的电子邮件客户端软件,为用户提供了快速和方便的电子邮件管理体验。无论是在个人使用还是在商业环境中,用户都可以依靠它来处理和管理邮件。 ### 回答2: Winmail 4.7是一款邮件客户端软件,适用于Windows操作系统。它具有一系列功能,可以用于发送、接收和管理电子邮件。Winmail 4.7界面简洁易用,提供了多种邮件管理工具和选项,方便用户进行邮件的组织和筛选。 Winmail 4.7支持多种邮件协议,包括POP3、IMAP和SMTP,可以与各种邮件服务器进行通信,实现邮件的收发功能。用户可以设置多个邮件账户和邮件别名,方便管理个人和工作邮件。 除了基本的邮件收发功能,Winmail 4.7还提供了一些特色功能。其中包括邮件过滤器,可以根据设定的规则自动将邮件分类和处理;自动回复功能,可以自动回复预设的邮件内容,减轻用户的工作负担;邮件搜索功能,可以快速找到需要的邮件;以及邮件加密和数字签名功能,保护邮件的安全性和私密性。 Winmail 4.7还支持附件的发送和接收,用户可以轻松地发送和保存各种文件类型,如文档、图片、音频和视频文件。同时,Winmail 4.7还能够预览常见的附件格式,如文本文件和图像文件,方便用户查看内容。 总之,Winmail 4.7是一款多功能的邮件客户端软件,提供了丰富的邮件管理工具和选项,方便用户进行邮件的收发、组织和筛选。它的简洁易用的界面和特色功能使得用户能够高效地处理和管理电子邮件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值