使用Shell写一个随机发牌的脚本

前言

前几天发现了一个shell的考试题,顺便做了会。在这里记录一下。

题目

使用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

执行结果:

使用Shell写一个随机发牌的脚本

......

闲的用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();

使用Shell写一个随机发牌的脚本

转载于:https://blog.51cto.com/jlnetc/2053875

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值