纸牌游戏

来源:互联网 发布:mac invalid argument 编辑:程序博客网 时间:2024/04/24 20:04

要求:

编号为1-52张牌,正面向上,从第2张开始,以2(应该是牌的编号)为基数,是2的倍数的牌(应该是牌的编号)翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后……从第4张开始,以4为基数,是4的倍数的翻牌一次,直到最后一张牌;……再依次5的倍数的牌翻一次,6的,7的,直到以52为基数的翻过

输出:这时正面向上的牌有哪些?

我写的源码,仅供参考:

// strong_poker.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "iostream.h"

typedef struct{
 int info;    //纸牌编号
 int postion; //纸牌位置,从1开始计
 int state;   //纸牌状态,1表示纸牌正面向上,0表示纸牌背面向上
}card;

#define NUM 52  //定义常量,方便调试和验证。

typedef struct{
 card c[NUM];
}rcard;

//纸牌横向边框
void h_bian(void)
{
 int i;
 printf("/n/t"); 
 for(i=0;i<10;i++)
  printf("*");
}

//纸牌列向边框
void l_bian(void)
{
 int i,j;
 for(i=0;i<2;i++)
 {
  printf("/n/t");
  printf("*");
  for(j=0;j<8;j++)
   printf(" ");
  printf("*");
 }
}

//纸牌序号信息
void information(int info)
{
 printf("/n/t");
 if(info<10)
  printf("*    %d   *",info);
 else
  printf("*   %d   *",info);
}

//纸牌正面
void z_picture(int info)
{
 h_bian();
 l_bian();
 information(info);
 l_bian();
 h_bian();
 printf("/n/n");
}

//获得纸牌不同排序方式
rcard Random()
{
 rcard rc;
 int cont[NUM];      //将需要的数存放到数组中,然后通过调换数组中数的位置,达到随机排列目的。
 unsigned int seed;  //申明初始化器的种子,注意是usigned int 型的
    int index, i,t; 
 //初始化纸牌状态
 for(i=0;i<NUM;i++)
  rc.c[i].state=1;
 //对数组进行初始化
    for (i=0; i<NUM; i++)
        cont[i] = i+1;
 //提供随机种子
 printf("请输入一个正整数种子值: /n");
 scanf("%u",&seed);
 srand(seed);
 //生成随机序列
    for (i=0; i<NUM-1; i++)//交换NUM-1次
 {
  index=(rand()%(NUM-i-1))+i+1;//产生从i+1到NUM-1的一个随机数
  //交换
  t=cont[i];
  cont[i]=cont[index];
  cont[index]=t;
    }
 printf("纸牌编号按顺序排列为:/n");
 for(i=0;i<NUM;i++)
 {
  rc.c[i].info=cont[i];  //纸牌编号
  rc.c[i].postion=i+1;       //对应纸牌位置
  printf("%d ", rc.c[i].info);
 }
 return rc;
}

//操作函数
void operate(void)
{
 rcard rc;
 int i,j;
 rc=Random();//获得纸牌不同排序方式
 //翻面游戏
 for(j=2;j<=NUM;j++) //j为基数,也是开始翻面的位置
 {
  for(i=j;i<=NUM;i++)//i为纸牌位置
  {
   if(rc.c[i-1].info%j==0)
    rc.c[i-1].state=rc.c[i-1].state?0:1;
  }
 }
 //打印,用纸牌图形打印。
 printf("/n正面向上的牌有:");  
 for(i=0;i<NUM;i++)
 {
  if(rc.c[i].state)
   z_picture(rc.c[i].info);
 }
 printf("/n");
}

//界面设计,省略

//选择设计
void select(void)
{
 char c;
 while(1)
 {
  system("cls");
  operate();
  fflush(stdin);
  printf("再玩一局?按1继续,按其他键退出!/n请输入选择:");
  c=getchar();
  fflush(stdin);
  switch(c)
  {
  case '1':select();
  default:exit(0);
  }
 }
}

int main(int argc, char* argv[])
{
 select();
 return 0;
}

 

原创粉丝点击