使用Shell写一个随机发牌的脚本
发布时间:2020-12-15 09:08:28 所属栏目:安全 来源:网络整理
导读:前言 前几天发现了一个shell的考试题,顺便做了会。在这里记录一下。 题目 一个shell脚本 #!/bin/bashpoints=(2 3 4 5 6 7 8 9 10 "J" "Q" "K" "A") #点数spec=("红桃" "黑桃" "方块" "梅花") #花色poker=()## 将点数和花色组成一副扑克function makepoker()
前言前几天发现了一个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]=" 33[33m"$j"=>"$i" 33[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})抓牌:nn" for j in {1..13};do kv=$(seed_random) printf "%10s${j} %s 33[03m"${poker[$kv]}" 33[0mn" unset poker[$kv] #将发出的牌删除 done; printf "n" done; } echo "正在洗牌......" makepoker deal_cards 执行结果: ...... 闲的用js又写了一个#!/usr/bin/node spec=["黑桃"," 33[33m红桃 33[0m"," 33[33m方块 33[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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |