10点半是一个典型的扑克牌游戏!10点半的规则如下:

一副扑克牌,大于或等于10的记作0.5 其他的按照其点数记。洗牌后,各玩家依次取一张牌。然后,各玩家根据自己的牌点数的大小决定是否继续要牌,最后由玩家的点数大小来决定胜负,点数大的赢。如果点数总和超过10.5,则被炸掉,记为0.

这里定义牌的数据结构如下:

class Card2

{

int Suit;

String Number;

float Num;

}

Card2[] OneCard=new Card2[52];

这里Suit代表花色,Number代表牌数,Num代表点数,OneCard保存每张牌的花色 数字和点数。

初始化52张扑克牌:

static void ShowCard(){int i,j;String s="";for(i=0,j=0;i<52;i++,j++){if(j%13==0){System.out.print("\n");}switch(OneCard[i].Suit){case 1:s="黑桃";break;case 2:s="红桃";break;case 3:s="梅花";break;case 4:s="方块";break;default:;}System.out.printf(" "+s+OneCard[i].Number);}System.out.print("\n");}

洗牌算法:通过初始化随机种子j,并在循环体中与i随机交换,将牌的顺序打乱,达到洗牌的效果。

static void Shuffle(){int i,j,temp;int suit;Card2 tempcard=new Card2();suit=0;for(i=0;i<52;i++){if(i%13==0){suit++;}Card2 t=new Card2();t.Suit=suit;temp=i%13;switch(temp){case 0:t.Number="A";break;case 9:t.Number="10";break;case 10:t.Number="J";break;case 11:t.Number="Q";break;case 12:t.Number="K";break;default:t.Number=String.valueOf(temp+1);}if(temp>=10){t.Num=(float) 0.5;}else{t.Num=(float)(temp+1);}OneCard[i]=t;}System.out.print("一付新牌的初始拍排列如下:\n");ShowCard();Random r=new Random();for(i=0;i<52;i++){j=r.nextInt(52);tempcard=OneCard[j];OneCard[j]=OneCard[i];OneCard[i]=tempcard;}System.out.print("洗完牌后排列如下:\n");ShowCard();}

10点半算法:

  1 static void tenhalf(){2      int i,count=0;3      int iUser=0,iCom=0;4      int flag=1,flagc=1;5      String jixu,s="";6      Card2[] User=new Card2[20],Com=new Card2[20];7      float TotalU=0,TotalC=0;8      Scanner input=new Scanner(System.in);9      while(flag==1&&count<52){10         User[iUser++]=OneCard[count++]; 11         TotalU+=User[iUser-1].Num;12         if(count>=52){13             flag=0;14         }15         else{16             if(TotalC<10.5&&TotalC<TotalU){17                 Com[iCom++]=OneCard[count++];18                 TotalC+=Com[iCom-1].Num;19             }20         }21         System.out.printf("\n用户的总点数:%f\t", TotalU);22         System.out.print("用户的牌为:");23         for(i=0;i<iUser;i++){24             switch(User[i].Suit){25             case 1:26                 s="黑桃";27                 break;28             case 2:29                 s="红桃";30                 break;31             case 3:32                 s="梅花";33                 break;34             case 4:35                 s="方块";36                 break;37                 default:38                     ;39             }40             System.out.print(" "+s+User[i].Number);41         }42         System.out.print("\n");43         System.out.printf("计算机的总点数为:%f\t",TotalC);44         System.out.print("计算机的牌为:");45         for(i=0;i<iCom;i++){46             switch(Com[i].Suit){47             case 1:48                 s="黑桃";49                 break;50             case 2:51                 s="红桃";52                 break;53             case 3:54                 s="梅花";55                 break;56             case 4:57                 s="方块";58                 break;59                 default:60                     ;61             }62             System.out.print(" "+s+Com[i].Number);63         }64         System.out.print("\n");65         if(TotalU<10.5){66             do{67                 System.out.print("还要牌吗(y/n)?");68                 jixu=input.next();69             }while(!jixu.equalsIgnoreCase("y")&&!jixu.equalsIgnoreCase("n"));70             if(jixu.equalsIgnoreCase("y")){71                 flag=1;72             }else{73                 flag=0;74             }75             if(count==52){76                 System.out.print("牌已经发完了!\n");77                 break;78             }79         }else break;80      }81      while(flagc==1&&count<52){82          if(TotalU>10.5){83              break;84          }85          else{86              if(TotalC<10.5&&TotalC<TotalU){87                  Com[iCom++]=OneCard[count++];88                  TotalC+=Com[iCom-1].Num;89              }90              else{91                  break;92              }93          }94      }95      System.out.printf("\n用户的总点数:%f\t", TotalU);96      System.out.print("用户的牌为:");97      for(i=0;i<iUser;i++){98          switch(User[i].Suit){99          case 1:
100              s="黑桃";
101              break;
102          case 2:
103              s="红桃";
104              break;
105          case 3:
106              s="梅花";
107              break;
108          case 4:
109              s="方块";
110              break;
111              default:
112                  ;
113          }
114          System.out.print(" "+s+User[i].Number);
115      }
116      System.out.print("\n");
117      System.out.printf("\n计算机的总点数:%f\t", TotalC);
118      System.out.print("计算机的牌为:");
119      for(i=0;i<iCom;i++){
120          switch(Com[i].Suit){
121          case 1:
122              s="黑桃";
123              break;
124          case 2:
125              s="红桃";
126              break;
127          case 3:
128              s="梅花";
129              break;
130          case 4:
131              s="方块";
132              break;
133              default:
134                  ;
135          }
136          System.out.print(" "+s+Com[i].Number);
137      }
138      System.out.print("\n");
139      if(TotalU==TotalC){
140         System.out.print("\n用户和计算机打成了平手!\n");
141      }
142      else{
143          if(TotalU>10.5&&TotalC>10.5){
144         System.out.print("\n用户和计算机打成了平手!\n");
145          }
146          else if(TotalU>10.5){
147              System.out.print("\n抱歉,计算机赢了,再接再厉!\n");
148          }
149          else if(TotalC>10.5){
150              System.out.print("\n恭喜,用户赢了!\n");
151          }
152          else if(TotalU>TotalC){
153              System.out.print("\n恭喜,用户赢了!\n");
154          }
155          else if(TotalU<TotalC){
156              System.out.print("\n抱歉,计算机赢了,再接再厉!\n");
157          }
158      }
159  }

View Code

用户和计算机来对战,程序根据用户的选择进行发牌,而对于计算机,程序会根据用户的点数来决定是否继续发牌,最后根据双方的点数大小判断谁赢得了胜利。

主函数如下:

首先调用Shuffle()方法洗牌,再调用方法tenhalf()开始游戏。最后游戏结束时根据用户的选择是否继续游戏。

public static void main(String[] args){String go;Scanner s=new Scanner(System.in);do{System.out.print("10点半游戏开始!\n");Shuffle();tenhalf();System.out.print("\n游戏结束,还要在玩不?(y/n)");go=s.next();}while(go.equalsIgnoreCase("y"));
}

10点半算法(java实现)相关推荐

  1. 10大排序算法JAVA源码实现

    https://www.cnblogs.com/liunianfeiyu/articles/10122177.html?tdsourcetag=s_pcqq_aiomsg

  2. 排序算法python实现_合并排序算法– Java,C和Python实现

    排序算法python实现 Merge sort is one of the most efficient sorting algorithms. It works on the principle o ...

  3. 排序算法,最全的10大排序算法详解(Sort Algorithm)

    文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...

  4. Java算法:牛客网小米笔试真题算法Java版1-40题

    题号 题目 知识点 难度 通过率 XM1 小米Git 树 困难 10.22% XM2 懂二进制 中等 29.90% XM3 风口的猪-中国牛市 动态规划 较难 18.73% XM4 电话号码分身 中等 ...

  5. 道格拉斯·普克算法 JAVA实现

    道格拉斯·普克算法 JAVA实现 作用: 假如现在有个需求,后端计算出来一条路线规划,路线是由无数个坐标点组成,但是其中大部分连起来都是直线,那直线中有用的点也就起始点和终点,中间的全部点都是可以省略 ...

  6. 推特雪花算法 java实现

    2019独角兽企业重金招聘Python工程师标准>>> package twiter.snowflake;/*** twitter的snowflake算法 -- java实现*/ p ...

  7. 10 个经典的 Java 集合面试题,看你能否答得上来?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | evget.com/article/2014/ ...

  8. 10大机器学习算法速览,带你开启AI之旅

    原文作者:Sunil Ray 译者:TalkingData 张永超 简介 从广义上讲,机器学习算法有三种类型: 监督学习 该算法是由一个目标/结果变量(也成为因变量)组成,该变量可以从一组给定的预测变 ...

  9. 数据结构和算法(Java)-张晨光-专题视频课程

    数据结构和算法(Java)-579人已学习 课程介绍         如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...

最新文章

  1. 群体运动度量--Measuring Crowd Collectiveness
  2. 结构体作为STL map的key时需要注意什么? (某公司招聘面试试题)已跪~~~~(_)~~~~
  3. 找新房子需要考虑的因素
  4. 如何让 Spring Boot 启动的更快?
  5. thinkphp3.2 jquery ajax巧妙使用
  6. nginx日志定期归档脚本
  7. python bottle部署_如何使用python-Bottle框架创建REST API应用程序,以及如何在apache服务器上部署restapi应用程序?...
  8. dede 表单必填_织梦给自定义表单增加必填功能,织梦表单必填设置
  9. [产品经理]产品经理的职责
  10. 撰写SCI论文好用的免费工具(上) - 易智编译EaseEditing
  11. 三角公式(三角函数)
  12. 计算机命令清除所有,电脑深度清理命令设置方法
  13. 【磨刀不误砍柴工】(SCH-1217) Could not open “XXschematic“ for edit. Would you like to open it for read?问题。
  14. 自己的应用跳转到应用宝评分界面
  15. ThinkPad E420升级之路
  16. ASF网站自带python脚本完成sentinel-1数据自动下载
  17. AppiumDesktop学习总结
  18. NoteExpress引用文献出现ADDIN NE.Ref.
  19. python 反转字符串
  20. 史上最全的Schnorr签名方案和BLS签名方案的全面对比

热门文章

  1. Linux ELF文件格式介绍
  2. Pycharm激活方式
  3. Apple ID密码忘记了,怎么办?
  4. 已解决(Python爬虫requests报错)requests.exceptions.ProxyError: HTTPSConnectionPool
  5. MATLAB车道偏离检测,车道线检测
  6. 单元测试框架 Mockito 注解 – @Mock, @Spy, @Captor, @InjectMocks
  7. 西工大数据结构实验NOJ参考代码和分析合集
  8. NOJ电子老鼠闯迷宫
  9. 定向计算机老师,核心素养背景下的信息技术教师定位走向
  10. debuttoolbar