模拟游戏过程的一个程序
2010-06-25 20:46
225 查看
两位玩家手中各有相同的七张牌,牌面大小1-7。游戏时每人出一张牌,谁大谁把对方的牌拿来,赢的一方把比较的两张牌置于牌堆底部。如果牌大小相同就比下一张直到分出大小,赢得一方把比较的所有牌拿来置于牌堆底部。如果都一样则游戏结束。写一个程序模拟比赛过程。
#include<stdio.h>
#include<conio.h>
//初始化AB数组
void initialize(int a[],int b[])
{
int i;
printf("a[7]=");
for(i=0;i<7;++i)
scanf("%d",&a[i]);
printf("b[7]=");
for(i=0;i<7;++i)
scanf("%d",&b[i]);
for(i=7;i<14;++i)
b[i]=a[i]=0;
}
//每步游戏后输出两人手中的牌
void consequence_print(int a[],int b[],FILE *fp)
{
int i;
for(i=0;i<14;++i)
fprintf(fp,"%d",a[i]);
fprintf(fp," ");
for(i=0;i<14;++i)
fprintf(fp,"%d",b[i]);
fprintf(fp,"/n");
}
//判断游戏是否结束
void judge(int a[],int b[],FILE *fp)
{
if(0==a[0]||0==b[0])
{
consequence_print(a,b,fp);
fprintf(fp,"game is over!");
fclose(fp);
exit(1);
}
}
//游戏过程
void process(int a[],int b[],FILE *fp)
{
int i,k,n,fab,c[14];
for(i=0,k=0;i<9&&a[i]!=0&&b[i]!=0;++i)
{
if(a[i]!=b[i])
{
c[k]=a[i];
n=++k;
c[k]=b[i];
if(a[i]>b[i])
fab=1;
else
fab=-1;
break;
}
else
{
c[k]=a[i];
++k;
c[k]=b[i];
++k;
if(0==a[i+1]||0==b[i+1])
{
fprintf(fp,"game is over!");
fclose(fp);
exit(1);
}
}
}
++i;
for(k=0;k<14-i;++k)
{
a[k]=a[k+i];
b[k]=b[k+i];
}
for(k=14-i;k<14;++k)
a[k]=b[k]=0;
if(fab==1)
{
for(i=0;a[i]!=0;++i);
for(k=0;k<=n;++i,++k)
a[i]=c[k];
}
else
{
for(i=0;b[i]!=0;++i);
for(k=0;k<=n;++i,++k)
b[i]=c[k];
}
}
void main()
{
FILE *fp;
int a[14],b[14];
char *filename="D://游戏结果.txt";
if((fp=fopen(filename,"wt"))==NULL)
{
exit(0);
}
initialize(a,b);
consequence_print(a,b,fp);
while(1)
{
judge(a,b,fp);
process(a,b,fp);
consequence_print(a,b,fp);
}
}
#include<stdio.h>
#include<conio.h>
//初始化AB数组
void initialize(int a[],int b[])
{
int i;
printf("a[7]=");
for(i=0;i<7;++i)
scanf("%d",&a[i]);
printf("b[7]=");
for(i=0;i<7;++i)
scanf("%d",&b[i]);
for(i=7;i<14;++i)
b[i]=a[i]=0;
}
//每步游戏后输出两人手中的牌
void consequence_print(int a[],int b[],FILE *fp)
{
int i;
for(i=0;i<14;++i)
fprintf(fp,"%d",a[i]);
fprintf(fp," ");
for(i=0;i<14;++i)
fprintf(fp,"%d",b[i]);
fprintf(fp,"/n");
}
//判断游戏是否结束
void judge(int a[],int b[],FILE *fp)
{
if(0==a[0]||0==b[0])
{
consequence_print(a,b,fp);
fprintf(fp,"game is over!");
fclose(fp);
exit(1);
}
}
//游戏过程
void process(int a[],int b[],FILE *fp)
{
int i,k,n,fab,c[14];
for(i=0,k=0;i<9&&a[i]!=0&&b[i]!=0;++i)
{
if(a[i]!=b[i])
{
c[k]=a[i];
n=++k;
c[k]=b[i];
if(a[i]>b[i])
fab=1;
else
fab=-1;
break;
}
else
{
c[k]=a[i];
++k;
c[k]=b[i];
++k;
if(0==a[i+1]||0==b[i+1])
{
fprintf(fp,"game is over!");
fclose(fp);
exit(1);
}
}
}
++i;
for(k=0;k<14-i;++k)
{
a[k]=a[k+i];
b[k]=b[k+i];
}
for(k=14-i;k<14;++k)
a[k]=b[k]=0;
if(fab==1)
{
for(i=0;a[i]!=0;++i);
for(k=0;k<=n;++i,++k)
a[i]=c[k];
}
else
{
for(i=0;b[i]!=0;++i);
for(k=0;k<=n;++i,++k)
b[i]=c[k];
}
}
void main()
{
FILE *fp;
int a[14],b[14];
char *filename="D://游戏结果.txt";
if((fp=fopen(filename,"wt"))==NULL)
{
exit(0);
}
initialize(a,b);
consequence_print(a,b,fp);
while(1)
{
judge(a,b,fp);
process(a,b,fp);
consequence_print(a,b,fp);
}
}
相关文章推荐
- 一个模拟金山毒霸等软件查毒过程的小程序
- 一个模拟金山毒霸等软件查毒过程的小程序
- 一个简单的demo模拟登录过程页面跳转逻辑和双击退出应用
- 通过分析一个C程序的汇编指令执行过程,理解计算机的工作。
- 考虑下列生成二进制的过程,编译器被用来生成单个单元的目标代码,链接器被用来将多个目标单元合并成一个程序二进制,链接器如何改变指令和数据到内存地址的绑定?需要什么信息从编译器传递给链接器,以协助完成链接
- 编写一个小小游戏程序,猜拳
- 完成一个能模拟简略猜扑克牌大小地 Win32 控制台游戏
- 一个microsoft的.exe程序文件的启动过程
- 通过一个模拟程序让你明白WCF大致的执行流程
- mfc 井字游戏程序分析,描述整个程序处理过程。
- 一个求累加和程序的求解过程
- 程序模拟tomcat服务器执行过程
- 第一个lucene程序,把一个信息写入到索引库中、根据关键词把对象从索引库中提取出来、lucene读写过程分析
- SDK学习笔记2-一个Win32窗口程序实现过程
- java程序模拟浏览器访问Web服务器的处理过程
- 一个microsoft的.exe程序的启动过程
- 设计一个多线程程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况(提示:利用多线程)
- 设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程
- 一个microsoft的.exe程序文件的启动过程
- 很久以前写的一个java模拟扑克牌洗牌发牌的小程序,学的知识少写的比较麻烦,不过也放上来吧