求C语言编程很长的程序100多行的

求C语言编程很长的程序100多行的,第1张

C语言写的21点程灶塌正序!

#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")//月之间的换行

}

以上,搏袭举对你有帮助的话,请给分哦,谢谢!

另外,看到你另一个年月的程序的问题,也搞了~~


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8225484.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存