10点半算法(java实现)
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实现)相关推荐
- 10大排序算法JAVA源码实现
https://www.cnblogs.com/liunianfeiyu/articles/10122177.html?tdsourcetag=s_pcqq_aiomsg
- 排序算法python实现_合并排序算法– Java,C和Python实现
排序算法python实现 Merge sort is one of the most efficient sorting algorithms. It works on the principle o ...
- 排序算法,最全的10大排序算法详解(Sort Algorithm)
文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...
- Java算法:牛客网小米笔试真题算法Java版1-40题
题号 题目 知识点 难度 通过率 XM1 小米Git 树 困难 10.22% XM2 懂二进制 中等 29.90% XM3 风口的猪-中国牛市 动态规划 较难 18.73% XM4 电话号码分身 中等 ...
- 道格拉斯·普克算法 JAVA实现
道格拉斯·普克算法 JAVA实现 作用: 假如现在有个需求,后端计算出来一条路线规划,路线是由无数个坐标点组成,但是其中大部分连起来都是直线,那直线中有用的点也就起始点和终点,中间的全部点都是可以省略 ...
- 推特雪花算法 java实现
2019独角兽企业重金招聘Python工程师标准>>> package twiter.snowflake;/*** twitter的snowflake算法 -- java实现*/ p ...
- 10 个经典的 Java 集合面试题,看你能否答得上来?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | evget.com/article/2014/ ...
- 10大机器学习算法速览,带你开启AI之旅
原文作者:Sunil Ray 译者:TalkingData 张永超 简介 从广义上讲,机器学习算法有三种类型: 监督学习 该算法是由一个目标/结果变量(也成为因变量)组成,该变量可以从一组给定的预测变 ...
- 数据结构和算法(Java)-张晨光-专题视频课程
数据结构和算法(Java)-579人已学习 课程介绍 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...
最新文章
- 群体运动度量--Measuring Crowd Collectiveness
- 结构体作为STL map的key时需要注意什么? (某公司招聘面试试题)已跪~~~~(_)~~~~
- 找新房子需要考虑的因素
- 如何让 Spring Boot 启动的更快?
- thinkphp3.2 jquery ajax巧妙使用
- nginx日志定期归档脚本
- python bottle部署_如何使用python-Bottle框架创建REST API应用程序,以及如何在apache服务器上部署restapi应用程序?...
- dede 表单必填_织梦给自定义表单增加必填功能,织梦表单必填设置
- [产品经理]产品经理的职责
- 撰写SCI论文好用的免费工具(上) - 易智编译EaseEditing
- 三角公式(三角函数)
- 计算机命令清除所有,电脑深度清理命令设置方法
- 【磨刀不误砍柴工】(SCH-1217) Could not open “XXschematic“ for edit. Would you like to open it for read?问题。
- 自己的应用跳转到应用宝评分界面
- ThinkPad E420升级之路
- ASF网站自带python脚本完成sentinel-1数据自动下载
- AppiumDesktop学习总结
- NoteExpress引用文献出现ADDIN NE.Ref.
- python 反转字符串
- 史上最全的Schnorr签名方案和BLS签名方案的全面对比
热门文章
- Linux ELF文件格式介绍
- Pycharm激活方式
- Apple ID密码忘记了,怎么办?
- 已解决(Python爬虫requests报错)requests.exceptions.ProxyError: HTTPSConnectionPool
- MATLAB车道偏离检测,车道线检测
- 单元测试框架 Mockito 注解 – @Mock, @Spy, @Captor, @InjectMocks
- 西工大数据结构实验NOJ参考代码和分析合集
- NOJ电子老鼠闯迷宫
- 定向计算机老师,核心素养背景下的信息技术教师定位走向
- debuttoolbar