在前段时间开发了一款×××士游戏,前面已经说到过是采用PHP开发的,这此我将详细描述此算法的实现过程。

由于此游戏逻辑较简单,仅判断牛型大小、并对牛型进行比较,所以我决定采用type、num、count的结构来表示一张牌对象。如下:

<?php
/*** Created by PhpStorm.* User: LiBing* Date: 2017/9/28* Time: 10:34* 表示扑克牌的类*/class NiuNiuCard{//type : 1 : 黑桃 2:红桃 3:梅花 4:方块public $type;//num: 1-13对应牌型public $num;//count:对应的点数public $count;/*** NiuNiuCard constructor.* @param $type  牌型* @param $num   牌号* @param $count 牌点数 >10都作为10*/function __construct($type, $num, $count){$this->type = $type;$this->num = $num;$this->count = $count;}}
?>

所以我们×××中获得的对象便是五个这样的对象构成的数组,以下是算法代码:

<?php
/*** Created by PhpStorm.* User: LiBing* Date: 2017/10/13* Time: 下午3:29* 用于判断×××的算法逻辑*/
require_once ('NiuniuType.php');
require_once ('NiuNiuCard.php');
class NiuniuLogic{/*** 辅助函数,用于排序* @param $cards 卡牌的引用*/public function sortPlayerCards(&$cards){for($i = 0; $i < 5; $i++){for($j = 0; $j < 4 - $i; $j++){if($cards[$j]->num > $cards[$j + 1]->num ||($cards[$j]->num == $cards[$j+1]->num && $cards[$j]->type < $cards[$j+1]->type)){$t = $cards[$j];$cards[$j] = $cards[$j+1];$cards[$j+1] = $t;}}}}/*** @param $playerCards 玩家的手牌,这里假设的是以{玩家ID,Cards(array)}的方式传过来的数据* @param $typeSelected  允许的可选牌型的数组,用于是否开启该牌型,包含数据为*          canShunDou: 能否顺斗; canKanDou: 能否坎斗*          canTongHuaShun: 能否同花顺*          canZhaDanNiu: 能否×××牛*          canWuXiaoNiu: 能否五小牛*          canWuHuaNiu:  能否五花牛*          canSiHuaNiu:  能否四花牛*          canHuLuNiu:   能否葫芦牛*          canTongHuaNiu: 能否同花牛*          canShunZiNiu:  能否顺子牛* @return $resultArray 某一个玩家的结果数组,存放结果*          'playerID' : 对应的玩家*          'level': 牌的级别,按照同花顺 > 五小牛 > 五花牛 > 四花牛 > ×××牛 > 葫芦牛 > 同花*                                     > 顺子 > ××× > 牛9-牛5 > 牛4-牛1 > 无牛进行排列*                         注意:坎斗、顺斗以及普通牛是同一级别,都看点数*          'levelResult': 牌的级别对应的最大牌,用于同级别的判断**/public function getNiuniuResult($playerCards, $typeSelected){$resultArray = array();//array('playerID'=>'', 'level'=>0, 'levelResult'=>'');for($i = 0; $i < count($playerCards); $i++){//初始化一个基本结果,然后和所有数据判断$resultArray[$i]['playerID'] = $playerCards[$i]['playerID'];$resultArray[$i]['level'] = -1;$resultArray[$i]['levelResult'] = '';$resultArray[$i]["douPai"]=array();//保存一个临时牌组,并按从小到大排序$cards = $playerCards[$i]['cards'];$this->sortPlayerCards($cards);//获取普通牛数据$r = $this->getNiuniuCount($cards);$this->proce***esult($resultArray[$i], $r);if($typeSelected['canShunDou']){//获取顺斗的数据$r = $this->getShunDouPoint($cards);$this->proce***esult($resultArray[$i], $r);}if($typeSelected['canCanDou']){//获取豹子牛数据$r = $this->getBaoZhiNiuPoint($cards);if($r["level"]==BAOZHINIU){$this->proce***esult($resultArray[$i], $r);}}//可能出错if($typeSelected['canWuHuaNiu']){//获取五花牛$r = $this->isWuHuaNiu($cards);if($r["level"]==WUHUANIU){$this->proce***esult($resultArray[$i], $r);}}if($typeSelected['canShunZiNiu']){//获取顺子牛数据$r = $this->isShunZiNiu($cards);if($r["level"]==SHUNZINIU){$this->proce***esult($resultArray[$i], $r);}}if($typeSelected['canTongHuaNiu']){//获取同花牛$r = $this->isTonghuaNiu($cards);if($r["level"]==TONGHUANIU){$this->proce***esult($resultArray[$i], $r);}}if($typeSelected['canHuLuNiu']){//获取葫芦牛$r = $this->huluNiu($cards);if($r["level"]==HULUNIU){$this->proce***esult($resultArray[$i], $r);}}if($typeSelected['canZhaDanNiu']){//获取×××牛$r = $this->isBoomNiu($cards);if($r["level"]==ZHADANNIU){$this->proce***esult($resultArray[$i], $r);}}if($typeSelected['canWuXiaoNiu']){//获取五小牛$r = $this->isWuXiaoNiu($cards);if($r["level"]==WUXIAONIU){$this->proce***esult($resultArray[$i], $r);}}if($typeSelected['canTongHuaShun']){//获取同花顺$r = $this->isTongHuaShun($cards);if($r["level"]==TONGHUASHUN){$this->proce***esult($resultArray[$i], $r);}}}return $resultArray;}private function proce***esult(&$playerResult, $newResult){if($playerResult['level'] < $newResult['level']){$playerResult['level'] = $newResult['level'];$playerResult['levelResult'] = $newResult['maxCard'];$playerResult['douPai'] = $newResult['douPai'];}}/*** 判断×××点数* @param $playerCards 玩家的手牌,这里假设的是以玩家ID=》Cards(array)的方式传过来的数据* @return $array:[level:牌力,maxCard: 最大牌]*/public function getNiuniuCount($playerCard){$result = array();$result['douPai']=array();//总点数$cardsTotalPoint = 0;//计算总点数for($i = 0; $i < count($playerCard); $i++){$cardsTotalPoint += $playerCard[$i]->count;}//计算余数$lave = $cardsTotalPoint % 10;for($i = 0; $i < count($playerCard) - 1; $i++){for($j = $i + 1; $j < count($playerCard); $j++){if(($playerCard[$i]->count + $playerCard[$j]->count) % 10 == $lave){//此处是有牛,则取出斗的牌if($i!=0&&$j!=0){array_push($result["douPai"],$playerCard[0]);}if($i!=1&&$j!=1){array_push($result["douPai"],$playerCard[1]);}if($i!=2&&$j!=2){array_push($result["douPai"],$playerCard[2]);}if($i!=3&&$j!=3){array_push($result["douPai"],$playerCard[3]);}if($i!=4&&$j!=4){array_push($result["douPai"],$playerCard[4]);}$result['level'] = $this->_getCount($lave);$result['maxCard'] = $playerCard[4];return $result;}}}$result['level'] = WUNIU;$result['maxCard'] = $playerCard[4];return $result;}/** 辅助函数,用于处理牛1-牛9的细分结果处理* @param $lave: getNiuniuCount的余数结果*/private function _getCount($lave){switch ($lave) {case 0:return NIUNIU;case 1:return NIUNIU1;case 2:return NIUNIU2;case 3:return NIUNIU3;case 4:return NIUNIU4;case 5:return NIUNIU5;case 6:return NIUNIU6;case 7:return NIUNIU7;case 8:return NIUNIU8;case 9:return NIUNIU9;default:return -1;}}/*** 判断是否为五花牛的函数* @param $playerCard 某一个玩家的手牌* @return $array:[level: 牌力,maxCard: 最大牌]*/private function isWuHuaNiu($playerCard){$result = array('level'=>-1, 'maxCard'=>'','douPai'=>array());for($i = 0; $i < count($playerCard); $i++){if($playerCard[$i]->num <= 10){return $result;}}$result['level'] = WUHUANIU;$result['maxCard'] = $playerCard[4];$result['douPai'] = $playerCard;return $result;}/*** 判断是否为同花牛的函数* @param $playerCard 某一个玩家的手牌* @return $array:[level:牌力,maxCard: 最大牌]*/private function isTonghuaNiu($playerCard){$result = array('level'=>-1, 'maxCard'=>'','douPai'=>array());$type = $playerCard[0]->type;$isTonghua = true;for($i = 1; $i < count($playerCard); $i++){if($type != $playerCard[$i]->type){$isTonghua = false;break;}}if($isTonghua){$result['level'] = TONGHUANIU;$result['maxCard'] = $playerCard[4];$result['douPai'] = $playerCard;}return $result;}/*** 判断是否为同花顺牛的函数* @param $playerCard* @return array:[level:牌力, maxCard: 同花顺的最大牌]*/private function isTongHuaShun($playerCard){$result = array('level'=>-1, 'maxCard'=>'','douPai'=>array());$r1 = $this->isTonghuaNiu($playerCard);$r2 = $this->isShunZiNiu($playerCard);if($r1['level'] == TONGHUANIU && $r2['level'] == SHUNZINIU){$result['level'] = TONGHUASHUN;$result['maxCard'] = $playerCard[4];$result['douPai'] = $playerCard;}return $result;}/*** 判断是否为×××牛的函数* @param $playerCard 某一个玩家的手牌* @return $array:[level:牌力,maxCard: ×××牌]*/private function isBoomNiu($playerCard){$result = array('level'=>-1, 'maxCard'=>'','douPai'=>array());//假设牌已经按照从小到大排序//aaaa*if($playerCard[0]->num == $playerCard[3]->num){$result['level'] = ZHADANNIU;$result['maxCard'] = $playerCard[0];array_push($result["douPai"],$playerCard[0]);array_push($result["douPai"],$playerCard[1]);array_push($result["douPai"],$playerCard[2]);array_push($result["douPai"],$playerCard[3]);}//*aaaaelse if($playerCard[1]->num == $playerCard[4]->num){$result['level'] = ZHADANNIU;$result['maxCard'] = $playerCard[1];array_push($result["douPai"],$playerCard[1]);array_push($result["douPai"],$playerCard[2]);array_push($result["douPai"],$playerCard[3]);array_push($result["douPai"],$playerCard[4]);}else{$result['level'] = -1;$result['maxCard'] = '';$result["douPai"]=array();}return $result;}/*** 判断是否为五小牛的函数* @param $playerCard 某一个玩家的手牌* @return $array:[level:是否为五小牛, maxCard:最大的卡牌]*/private function isWuXiaoNiu($playerCard){$result = array('level'=>-1, 'maxCard'=>'','douPai'=>array());$totalCount = 0;for($i = 0; $i < count($playerCard); $i++){if($playerCard[$i]->num > 5){return $result;}else{$totalCount += $playerCard[$i]->num;}}if($totalCount <= 10 && $totalCount > 0){$result['level'] = WUXIAONIU;$result['maxCard'] = $playerCard[4];$result["douPai"]=$playerCard;}return $result;}/*** 判断是否为葫芦牌型的函数* @param $playerCard 某一个玩家的手牌* @return $array: [level:是否为葫芦牛, maxCard:葫芦的点数最大牌]*/private function huluNiu($playerCard){$result = array('level'=>-1, 'maxCard'=>0,'douPai'=>array());//aaabbif($playerCard[0]->num == $playerCard[2]->num){if($playerCard[3]->num == $playerCard[4]->num){$result['level'] = HULUNIU;$result['maxCard'] = $playerCard[0];array_push($result["douPai"],$playerCard[0]);array_push($result["douPai"],$playerCard[1]);array_push($result["douPai"],$playerCard[2]);}}//aabbbif($playerCard[2]->num == $playerCard[4]->num){if($playerCard[0]->num == $playerCard[1]->num){$result['level'] = HULUNIU;$result['maxCard'] = $playerCard[2];array_push($result["douPai"],$playerCard[2]);array_push($result["douPai"],$playerCard[3]);array_push($result["douPai"],$playerCard[4]);}}return $result;}/*** 判断是否为四花型的函数* @param $playerCard 某一个玩家的手牌* @return $array:[level:是否为四花牛, maxCard:四花的最大牌]*/private function isSiHuaNiu($playerCard){$result = array('level'=>-1, 'maxCard'=>'');$temp = true;for($i = 0; $i < count($playerCard); $i++){if($playerCard[$i]->num < 10){$temp = false;break;}}if($playerCard[0]->num == 10 && $temp){$result['level'] = SIHUANIU;$result['maxCard'] = $playerCard[4];}return $result;}/*** 判断是否为顺子牛的函数* @param $playerCard 某一个玩家的手牌* @return $array:[level:是否为顺子牛, maxCard:顺子牛的最大牌]*/private function isShunZiNiu($playerCard){$result = array('level'=>-1, 'maxCard'=>'','douPai'=>array());//abcde$temp=$playerCard[0]->num;$num=0;if($temp==1){//第一张为A//a 2 3 4 5if($playerCard[1]->num==2){$num++;for($i=2;$i<5;$i++){if($playerCard[$i]->num-$i==$temp){$num++;}else{return $result;}}}else if($playerCard[1]->num==10){$num++;for($i=2;$i<5;$i++){if($playerCard[$i]->num-$i+1==10){$num++;}else{return $result;}}}//10 J Q K A}else{for($i=1;$i<5;$i++){if($playerCard[$i]->num-$i==$temp){$num++;}else{return $result;}}}if($num==4){$result['level'] = SHUNZINIU;$result['maxCard'] = $playerCard[4];array_push($result["douPai"],$playerCard);}//        if($playerCard[0]->num + 4 == $playerCard[4]->num){
//            $result['level'] = SHUNZINIU;
//            $result['maxCard'] = $playerCard[4];
//        }return $result;}/*** 获取是否为豹子牛的函数*/private function getBaoZhiNiuPoint($playerCard){$result = array('level'=>-1, 'maxCard'=>'','douPai'=>array());//aaa**if($playerCard[0]->num == $playerCard[2]->num){//$count = $playerCard[3]->point + $playerCard[4]->point;$result['level'] = BAOZHINIU;$result['maxCard'] = $playerCard[4];array_push($result["douPai"],$playerCard[0]);array_push($result["douPai"],$playerCard[1]);array_push($result["douPai"],$playerCard[2]);}//*aaa*else if($playerCard[1]->num == $playerCard[3]->num){//$count = $playerCard[0]->point + $playerCard[4]->point;$result['level'] = BAOZHINIU;$result['maxCard'] = $playerCard[4];array_push($result["douPai"],$playerCard[1]);array_push($result["douPai"],$playerCard[2]);array_push($result["douPai"],$playerCard[3]);}//**aaaelse if($playerCard[2]->num == $playerCard[4]->num){//$count = $playerCard[0]->point + $playerCard[1]->point;$result['level'] = BAOZHINIU;$result['maxCard'] = $playerCard[1];array_push($result["douPai"],$playerCard[2]);array_push($result["douPai"],$playerCard[3]);array_push($result["douPai"],$playerCard[4]);}//else{//$count = -1;//}//$count = $count % 10;//$result['level'] = BAOZHINIU;return $result;}/*** 获取是否为坎斗的函数* @param $playerCard 某一个玩家的手牌* @return $result:[level:坎斗形成的点数, maxCard: 坎斗中的最大牌]*/private function getKanDouPoint($playerCard){$result = array('level'=>-1, 'maxCard'=>'');//aaa**if($playerCard[0]->num == $playerCard[2]->num){$count = $playerCard[3]->point + $playerCard[4]->point;$result['maxCard'] = $playerCard[4];}//*aaa*else if($playerCard[1]->num == $playerCard[3]->num){$count = $playerCard[0]->point + $playerCard[4]->point;$result['maxCard'] = $playerCard[4];}//**aaaelse if($playerCard[2]->num == $playerCard[4]->num){$count = $playerCard[0]->point + $playerCard[1]->point;$result['maxCard'] = $playerCard[1];}else{$count = -1;}$count = $count % 10;$result['level'] = $this->_getCount($count);return $result;}/*** 获取是否为顺斗的函数* @param $playerCard 某一个玩家的手牌* @return $result:[level:顺斗形成的点数, maxCard: 顺斗中的最大牌]*/private function getShunDouPoint($playerCard){$result = array('level'=>-1, 'maxCard'=>'','douPai'=>array());//枚举所有情况产生点数的数组$tempResult = array();//第一种情况abc**if( ($playerCard[0]->num+1 == $playerCard[1]->num) && ($playerCard[1]->num == $playerCard[2]->num - 1)){$r=array();array_push($r,$playerCard[0]);array_push($r,$playerCard[1]);array_push($r,$playerCard[2]);array_push($tempResult, array('level'=>($playerCard[3]->count + $playerCard[4]->count)%10, 'maxCard'=>$playerCard[4],'douPai'=>$r));}//第二种情况*abc*if (($playerCard[1]->num+1 == $playerCard[2]->num) && ($playerCard[2]->num == $playerCard[3]->num - 1)){$r=array();array_push($r,$playerCard[1]);array_push($r,$playerCard[2]);array_push($r,$playerCard[3]);array_push($tempResult, array('level'=>($playerCard[0]->count + $playerCard[4]->count)%10, 'maxCard'=>$playerCard[4],'douPai'=>$r));}//第三种情况**abcif (($playerCard[2]->num+1 == $playerCard[3]->num) && ($playerCard[3]->num == $playerCard[4]->num - 1)){$r=array();array_push($r,$playerCard[2]);array_push($r,$playerCard[3]);array_push($r,$playerCard[4]);array_push($tempResult, array('level'=>($playerCard[0]->count + $playerCard[1]->count)%10, 'maxCard'=>$playerCard[4],'douPai'=>$r));}//第四种情况abbc*if ($playerCard[0]->num+2 == $playerCard[3]->num && $playerCard[0]->num + 1 == $playerCard[1]->num){$r=array();array_push($r,$playerCard[0]);array_push($r,$playerCard[1]);array_push($r,$playerCard[3]);array_push($tempResult, array('level'=>($playerCard[4]->count + $playerCard[1]->count)%10, 'maxCard'=>$playerCard[4],'douPai'=>$r));}//第五种情况*bccd;if($playerCard[1]->num+2 == $playerCard[4]->num && $playerCard[3]->num + 1 == $playerCard[4]->num) {$r=array();array_push($r,$playerCard[1]);array_push($r,$playerCard[2]);array_push($r,$playerCard[4]);array_push($tempResult, array('level'=>($playerCard[0]->count + $playerCard[2]->count)%10, 'maxCard'=>$playerCard[3],'douPai'=>$r));}//第六种情况aabbc;if(($playerCard[0]->num+1 == $playerCard[2]->num) && ($playerCard[2]->num+1 == $playerCard[4]->num)){$r=array();array_push($r,$playerCard[0]);array_push($r,$playerCard[2]);array_push($r,$playerCard[4]);array_push($tempResult, array('level'=>($playerCard[0]->count + $playerCard[2]->count)%10, 'maxCard'=>$playerCard[3],'douPai'=>$r));}//第七种情况abbccif(($playerCard[0]->num+1 == $playerCard[2]->num) && ($playerCard[2]->num+1 == $playerCard[4]->num)){$r=array();array_push($r,$playerCard[0]);array_push($r,$playerCard[1]);array_push($r,$playerCard[3]);array_push($tempResult, array('level'=>($playerCard[1]->count + $playerCard[3]->count)%10, 'maxCard'=>$playerCard[4],'douPai'=>$r));}//第8种情况abbbcif($playerCard[0]->num+2 == $playerCard[4]->num && $playerCard[0]->num + 1 == $playerCard[1]->num){$r=array();array_push($r,$playerCard[0]);array_push($r,$playerCard[1]);array_push($r,$playerCard[4]);array_push($tempResult, array('level'=>($playerCard[1]->count * 2)%10, 'maxCard'=>$playerCard[3],'douPai'=>$r));}//有可能没有结果,直接返回if(count($tempResult) == 0){return $result;}//获取最大的可能性结果返回$level = $tempResult[0]['level'];$index = 0;for($i = 1; $i < count($tempResult); $i++){if($tempResult[$i]['level'] > $level){$index = $i;}}//echo $tempResult[$index]['level'];$result['level'] = $this->_getCount($tempResult[$index]['level'] % 10 );$result['maxCard'] = $tempResult[$index]['maxCard'];$result['douPai'] = $tempResult[$index]['douPai'];return $result;}
}
?>

基本思路便是把传进来的五张牌对象进行升序排列后,判断可能出现的情况,得到最后的牛型以及确定此牛型相关的牌(斗)。

转载于:https://blog.51cto.com/13563193/2064888

牛牛游戏牛型判断算法实现相关推荐

  1. 斗地主含赖子的牌型判断算法

    目标 打出n张牌(可能含有赖子),需要判断这n张牌能组成什么牌型(对子.顺子.飞机-). 整体思路:假设我们已经提前那种牌作为癞子. 整体思路 1.找出n张牌中的赖子,假设有m个赖子 2.计算出这剩余 ...

  2. 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II二进制详解

    2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II B 牛牛的DRB迷宫II 输入: 25 输出: 5 5 RBBBR BBBBB BBBDB BDBBB RBBBB 题解 由图求方案数,我们 ...

  3. 2021牛客寒假算法基础集训营2 D.牛牛与整除分块

    2021牛客寒假算法基础集训营2 D.牛牛与整除分块 题目链接 题目描述 整除分块,又称数论分块.是数论算法中的重要技巧,你可以在各种需要枚举因子的连续求和类问题中见到它的身影.如杜教筛,莫比乌斯反演 ...

  4. 2020牛客寒假算法基础集训营3 A.牛牛的DRB迷宫I

    2020牛客寒假算法基础集训营3 A.牛牛的DRB迷宫I 题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示 ...

  5. (构造+二进制)2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II

    2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II 思路: 一开始我是考虑全部都是B会怎么样,然后删改,结果到后面发现很难推到普遍规律(可能是因为我没看出来). 看了题解之后,觉得这题出的挺有意 ...

  6. ~ 如何用C++自制一个日麻游戏 ~(二)听牌判断算法 § 1 判断听牌(附带C#实现)

    导入 -- 什么环节只要用算法判断一次,就能知道是否听牌立直.还差什么牌就可以荣和自摸? -- 只要在缺一张手牌(如1.4.7.10.13张时)的情况下判断是否听牌.听哪些牌,就可以为上面的复杂判断提 ...

  7. 2022牛客寒假算法基础集训营

    2022牛客寒假算法基础集训营1 C-Baby's first attempt on CPU D-牛牛做数论 已知欧拉函数 ϕ ( x ) \phi(x) ϕ(x)是满足 1 ≤ y ≤ x 1\le ...

  8. 2020牛客寒假算法基础集训营4

    链接:link 来源:牛客网 A 欧几里得 题目描述 现在,如果已知 g c d ( a , b ) gcd(a,b) gcd(a,b) 共递归了 n n n次,求所有可能的 a , b a,b a, ...

  9. 2022牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)

    1.A-智乃的Hello XXXX 签到 #include<bits/stdc++.h> using namespace std; int main(){cout<<" ...

  10. java实现牛牛游戏源代码

    package com.zyy.java;import java.util.List;public class Bull {private static CreatPlayers cplayers;p ...

最新文章

  1. Spring-AOP @AspectJ进阶之命名切点
  2. LeetCode 01两数之和02两数相加
  3. 各家版本控制系统(VCS)对比:VSS、SVN、Git。代码托管平台对比:GitLab、GitHub、码云(Gitee)、SourceForge、DevCloud(华为软件开发云)
  4. poj 1947(树形dp+背包问题)
  5. 三年级优秀书籍推荐_三年级课外推荐阅读书目
  6. golang nil切片与空切片
  7. 何时不应该使用 Rails?
  8. C# 23种设计模式
  9. Git常用命令及场景
  10. windows服务器性能监控工具、方法及关键指标
  11. 使用 /proc 文件系统
  12. MOOON-agent系统设计与使用说明
  13. c++ byte指针长度_valgrind诊断C/C++内存泄漏
  14. 人工智能安全学习笔记
  15. 实用软件资源下载地址集合
  16. flask架设微信小程序服务器,苹果手机能正常访问,安卓不行(ssl的中间证书问题)
  17. Summery of the first homework
  18. 2019 Revit二次开发企业
  19. 前端安全系列:如何防止CSRF攻击?
  20. 揭秘软件开发中的达摩克利斯之剑

热门文章

  1. QCC3040 BLE bonding相关配置
  2. php升序排列,php 基础问题表单里面怎么升序和降序?
  3. 【非同局域网】vue调取本地后台服务解决方法
  4. Python爬取豆瓣top榜电影
  5. 明翰英语教学系列之句法篇V0.6(持续更新)
  6. 动态域名解析ipv6 群辉dnspod_群晖设置ipv6动态域名
  7. 小白简单式安装VM虚拟机
  8. 水果电商网站开发过程
  9. 古诗词干货整理: 春、夏、秋、冬、山、水、日、月、风、花、雨、雪(简直太全了)
  10. 【Windows Server 2019】活动目录 (Active Directory) ——创建、删除和管理对象、容器和组织单位(OU)