#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NULL 0
int compare(char sum1,char sum2)
{
if(sum1>=sum2)
return 1
else
return 0
}
int breakal(int sum)
{
if(sum>21)
return 0
else
return 1
}
char change(int card)
{
char ch,n,m,x
switch(card)
{
case 1: ch='A'
break
case 10:
{
n=1+int(rand()/(RAND_MAX+1.0))
if(n==1)
ch='K'
else
{
m=1+int(rand()/(RAND_MAX+1.0))
if(m==1)
ch='Q'
else
{
x=1+int(rand()/(RAND_MAX+1.0))
if(x==1)
ch='隐悔J'
}
}
break
}
} //以上switch语句用于将数字衫数转换成字符
return ch
}
void game()
{
int i,k,n
char host_ch,player_ch,host_card[15],player_card[15]
int host_sum=0,player_sum=0
srand(time(NULL))
for(i=0i<2i++)
{
int (10.0*rand()/(RAND_MAX+1.0))
player_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0))
player_ch=change(player_card[i])
if(player_card[i]>1 &&player_card[i]<10) //输出玩家抽到的牌的点数
printf("您抽到的第%d张牌是%d\n",i+1,player_card[i])
else if(player_card[i]==10)
printf("您要到的第%d张牌是%c\n",i+1,player_ch)
else
printf("您要到的第%d张牌是A\n",i+1)
if(player_ch=='A') //询问判断玩家的A的点值为1或11
{
printf(" 您有一张A,您想要A作1还是11?\n")
printf(" 1. 1\n" )
printf(" 2. 11\n")
if(scanf("%d",&n) &&n==1)
player_card[i]=1
else
player_card[i]=11
}
host_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0))
host_ch=change(host_card[i])
if(host_ch=='A') //电脑自动判断庄家的A的点值为1或11
{
k=1+int(rand()/(RAND_MAX+1.0))
if(k==1)
host_card[i]=11
else
host_card[i]=1
}
player_sum+=player_card[i] //分别对庄家和玩家的点数求和
host_sum+=host_card[i]
}
printf("您现在的总面值为%d\n",player_sum)//输出玩家的总面值
for(i=2i<5i++)
{
if(host_sum<18 &&host_sum>0)//电脑自动判断庄家是否要牌
{
host_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0))
host_ch=change(host_card[i])
if(host_ch=='A') //电脑自动判断庄家的A的点值为1或11
{
k=1+int(rand()/(RAND_MAX+1.0))
if(k==1)
host_card[i]=11
else
host_card[i]=1
}
host_sum+=host_card[i]
}
printf("您还要继续要牌吗?\n")
printf(" 1.要\n")
printf(" 2.不要\n")
scanf("%d",&k)
if(k==1)
{
{
player_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0))
player_ch=change(player_card[i])
if(player_ch=='A') //询问判断玩家的A的点值为1或11
{
printf("您有一张A,您想要A作1还是11?\n")
printf(" 1. 1\n" )
printf(" 2. 11\n")
if(scanf("%d",&n) &&n==1)
player_card[i]=1
else
player_card[i]=11
printf("您要到的第%d张牌是A\n",i+1)
}
else
printf("您要到的第%d张牌是%d\n",i+1,player_card[i])
player_sum+=player_card[i]
if(i==4)
printf("您手中已有5张牌,一决胜负的时刻到啦!\n")
if(breakal(host_sum)==0)
{
if(breakal(player_sum)==0)
{
printf("庄家爆牌了,您也爆牌了!庄家的牌面值是%d,您的牌面值是%d\n",host_sum,player_sum)
printf("\nYou lose..\n")
break
}
}
else
if(breakal(player_sum)==0)
{
printf("您爆牌了!您的牌面值是%d\n \nYou lose..\n",player_sum)
break
}
}
if(breakal(host_sum)==0)
{
printf("庄家爆牌了!庄家的牌面值是%d\n",host_sum)
printf("\nCongratulations! YOu win!\n")
break
}
}
else
{
printf("庄家的牌面值是%d,您的牌面值是%d\n",host_sum,player_sum)
if(compare(host_sum,player_sum)==1)
printf("\nYou lose..\n")
else
printf("\nCongratulations! You win!\n")
break
}
}
}
int main()
{
kaishi:
int n
printf(" 欢迎进入21点游戏!\n")
printf("************************************\n")
printf(" 1.开始游戏\n")
printf(" 2.退出游戏\n")
printf("************************************\n")
if(scanf("%d",&n)&&n==1)
game()
else if(n==2)
{
printf(" ******************************\n")
printf("游戏结束!祝您愉快!\n")
printf("\n\n")
printf(" 再见!\n")
printf(" ******************************\n")
return 0
}
goto kaishi
}
#include<iostream>#include<iomanip>
using namespace std
const int X = 21 //棋盘行数
const int Y = 21 //棋盘列数
char p[X][Y] //定义棋盘
int m=0//定义临时点,保存输入坐标
int n=0
void display() //输出棋盘
{
for(int i=0 i<X i++)
cout<<setw(3)<<setfill(' ')<<i
cout<<endl
for(int i=1 i<Y i++)
{
cout<<setw(3)<<setfill(' ')<团升<i
for(int j=1j<Xj++)
cout<<setw(3)<<setfill(' ')<<p[i][j]
cout<<endl
}
}
void black() //黑方落子
{
cout<<"请黑方运返输入落子位置:\n"
<<"请输入落子的行数:"
cin>>m
cout<<"请输入落子的列数:"
cin>>n
if(m<=0||m>=X||n>=Y||n<=0)
{
cout<<"超出棋盘范围,请重新输入正确坐旁或饥标!\n"
black()
}
else if((p[m][n]==1)||p[m][n]==2)
{
cout<<"该点已有棋子,请重新选取落子点!\n"
black()
}
else
p[m][n]=1 //黑方用1来表示
system("cls")
display()
}
void red() //红方落子
{
cout<<"请红方输入落子位置:\n"
<<"请输入落子的行数:"
cin>>m
cout<<"请输入落子的列数:"
cin>>n
if(m>=X||m<=0||n<=0||n>=Y)
{
cout<<"超出棋盘范围,请重新输入正确坐标!\n"
red()
}
else if((p[m][n]==1)||p[m][n]==2)
{
cout<<"该点已有棋子,请重新选取落子点!\n"
red()
}
else
p[m][n]=2 //红方用2来表示
system("cls")
display()
}
int evalue() //只需要判断落子点为中心的九点“米”字是否连续即可
{
int k = 0,r = 0
/*斜线判断*/
for(k=3k<X-2k++) //两条,其中的p[k][r]!='-'是排除空子的情况
{
for(r=3r<Y-2r++)
{
if(p[k][r]!='-'&&p[k-2][r-2]==p[k][r]&&p[k-1][r-1]==p[k][r]&&p[k+1][r+1]==p[k][r]&&p[k+2][r+2]==p[k][r])
return 1
else if(p[k][r]!='-'&&p[k+2][r-2]==p[k][r]&&p[k+1][r-1]==p[k][r]&&p[k-1][r+1]==p[k][r]&&p[k-2][r+2]==p[k][r])
return 1
}
}
/*横线判断*/
for(k=1k<Xk++) //p[k][r]!='-'是排除空子的情况
for(r=3r<Y-2r++)
if(p[k][r]!='-'&&p[k][r-2]==p[k][r]&&p[k][r-1]==p[k][r]&&p[k][r+1]==p[k][r]&&p[k][r+2]==p[k][r])
return 1
/*竖线判断*/
for(k=3k<X-2k++) //p[k][r]!='-'是排除空子的情况
for(r=1r<Yr++)
if(p[k][r]!='-'&&p[k-2][r]==p[k][r]&&p[k-1][r]==p[k][r]&&p[k+1][r]==p[k][r]&&p[k+2][r]==p[k][r])
return 1
return 0
}
int main()
{
memset(p,'-',441) //初始化为‘-’
cout<<"欢迎使用简易双人对战五子棋游戏\n"
<<"五子棋棋谱如下:\n"
display()
while(1)
{
red()
if(evalue())
{
cout<<"红方赢!\n"
break
}
black()
if(evalue())
{
cout<<"黑方赢!\n"
break
}
}
return 0
}
人人对战五子棋
呵呵,竟然用了40分钟,大多时间花费在了控制显示方面。思路是:计算输入年份的基碧1.1日距离1900年1.1过去了多少天禅颂。
然后计算过去这个天数是星期几,然后依次控制显示出去。
显示的时候,显示一二三四五六日,知道1.1是周几,那么再过去1天,2天...都知道了。
跑下程序你会发现,没有问题~~
#include<stdio.h>
#include<time.h>
int main(int argc,char** argv)
{
int year = 0
int leap_year_num = 0//经历过多少个闰年
int leap =0//输入年是否为闰年
long days = 0 //1900.1.1到输入年1月1日过去的天数
int curdays = 0//当前月的天数
int i = 0
int j = 0
int k = 0
int weak = 0//每月的第一日是周几
printf("pls input year(xxxx):\n")
scanf("%d",&year)
if(((year%4==0) &&(year%100 != 0))||(year%400 == 0))//判断闰年
{
leap =1
}
for(i =yeari>1900-1i--)//判读1900年至year有多少个瑞年
{
if(((i%4==0) &&(i%100 != 0))||(i%400 == 0))
{
leap_year_num++
}
}
days = 366*leap_year_num + 365*(year - 1900)
//printf("day:(%ld)\n",days)
printf("\t%d\n",year)
for(i =1i<13i++)
{ printf("\n\t%d Month\n",i)
printf("Mon Tue Wed Tur Fri Sat Sun\n")
if(i==2)
{
if(leap == 0)
{
curdays=28
}
else
{
curdays=29
}
}
else if((i==1)||(i==3)||(i==5)||(i==7)||(i==8)||(i==10)|| (i==12))
{
curdays=31
}
else
{
curdays=30
}
if(i>1)//每过一个月,要把过去的日子+到总过去天数上。
{
days +=curdays
}
weak = (days+1) % 7 //计算过去这么多天后是周几
if( weak == 1)//控制显示格式,如果是1则换行,如果是其他星期则对应位置输出空格
{
printf("\n")
}
else
{
for( j=1j<weakj++)
{
printf(" ")
}
}
for(k=1k<=curdaysk++)
{
printf("%4d",k)
j++
if(j==7)
{
j=0
printf("\n")//每7天一个换行
}
}
}
printf("\n")//月之间的换行
}
以上,搏袭举对你有帮助的话,请给分哦,谢谢!
另外,看到你另一个年月的程序的问题,也搞了~~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)