使用Shell写一个随机发牌的脚本
2017-12-23 16:52
996 查看
前言
前几天发现了一个shell的考试题,顺便做了会。在这里记录一下。
题目
一个shell脚本
#!/bin/bash points=(2 3 4 5 6 7 8 9 10 "J" "Q" "K" "A") #点数 spec=("红桃" "黑桃" "方块" "梅花") #花色 poker=() ## 将点数和花色组成一副扑克 function makepoker(){ v=0; for i in ${points[@]};do for j in ${spec[@]};do v=$(($v+1)); if [[ $j == "红桃" || $j == "方块" ]];then poker[$v]="\033[33m"$j"=>"$i"\033[0m"; else poker[$v]=$j"=>"$i; fi done; done; } ## 使用递归函数,生成随机扑克索引 function seed_random(){ if [[ ${#poker[@]} != 0 ]];then if [[ ${#porker[@]} == 1 ]];then return 0 else k=$(rand 0 52); #echo $k if [[ ${poker[$k]} == "" ]] ;then # 当随机数不再数组时在生成一个随机数,直到随机数为数组的索引,且值不为空 seed_random else echo $k; return; fi fi else return 0; fi } ## 生成0-52的随机数 function rand(){ min=$1 max=$(($2-$min+1)) num=$(date +%s%N) echo $(($num%$max+$min)) } ## 随机发牌 function deal_cards(){ echo "开始随机发牌......" for i in {1..4};do printf "玩家(${i})抓牌:\n\n" for j in {1..13};do kv=$(seed_random) printf "%10s${j} %s\033[03m"${poker[$kv]}"\033[0m\n" unset poker[$kv] #将发出的牌删除 done; printf "\n" done; } echo "正在洗牌......" makepoker deal_cards
执行结果:
......
闲的用js又写了一个
#!/usr/bin/node spec=["黑桃", "\033[33m红桃\033[0m", "\033[33m方块\033[0m", "梅花"]; points=[2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K","A"]; poker=[] selected_i=[]; //组牌 function makepoker(){ poker=[]; for(var i=0;i<points.length;i++){ for(var j=0;j<spec.length;j++){ poker.push(spec[j]+":"+points[i]); } } } //生成随机数 function random(){ if(poker.length != 0){ var k =Math.round( 1+Math.random() * poker.length); if(poker.length == 1) return 0; if(poker[k] == undefined){ return random(); } return k; }else{ return; } } //发牌 function deal_card(){ makepoker(); console.log("正在洗牌......."); poker.sort((x,y)=>(1+Math.random() * 52)-(1+Math.random() * 52)); //洗牌 console.log("开始随机发牌......") for(var j=0;j<4;j++){ console.log("玩家"+(j+1)+" 抓牌:"); for(var i=0;i<13;i++){ var k=random(); console.log("\t "+(i+1)+"\t => ",poker[k]); poker.splice(k,1); //将发出的牌删除 } } } deal_card();
相关文章推荐
- 〖Android〗存在多个Android设备时,使用Shell脚本选择一个Android设备
- 分享一个监控网络,磁盘使用,平均负载和RAM使用的shell脚本
- shell脚本使用两个数组,判断一个变量是否在数组里面的例子
- CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动
- shell 脚本编写一个用户名,密码,编号的test.txt文件供数据库测试使用
- 使用shell编写一个脚本,磁盘超过80%邮件报警
- 一个shell脚本引发的对于分号的使用说明
- 一个shell脚本引发的对于分号(;)和$#的使用说明(转载)
- 使用shell编写一个检测系统参数的脚本
- shell脚本中使用自定义命令之三---通过加载一个envsetup.sh实现
- 一个使用shell脚本实现的修改文件中的字符串
- 使用shell脚本新增20个用户密码为随机5个字符
- 老男孩教育每日一题-2017-04-17:使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警
- 一个shell脚本给客户使用服务器生成一个序列号
- 使用Shell脚本生成随机单词
- shell脚本随机输出一个文件的25行
- 使用for、if语句添加用户的一个shell脚本
- shell脚本随机输出一个文件的25行
- 随机生成三个数组合成一个百位数_shell脚本
- Shell 命令行,实现一个获取任意位数的随机密码的脚本