提示:文章将尽量保持精简,同时烦请诸位在代码编写中保持耐心。
前言
这篇文章是在我翻找了其他的有关 PHP 实现发牌效果的文章,发现很多都不怎么精炼,并且文章年份较为久远,还有就是没有达到斗地主式发牌的效果,综合之后写下此文。如有进一步的建议和指正,表示欢迎。
一、斗地主式发牌解释(可跳过)
对于斗地主式发牌,大部分玩过牌小伙伴应该明白,但还是有没玩过的小伙伴,所以在这里解释一下。斗地主式发牌:指一副54张牌的扑克,包括大小王在内,分别分发个三个玩家,其中一名玩家为地主,另外两名玩家为农民。发牌时先抽出三张地主牌,额外分发给地主玩家,因此地主玩家拥有20张牌,其余两名玩家拥有17张牌。过程中发牌与地主名称保持随机分发。
二、开发环境
1.该项目支持的开发环境:
- Apache 2.2~2.4
- PHP 5.3~7.1
三、实现步骤
1.HTML代码实现
为了更好的观看,在此将 css样式 与 html 代码错开编写,其中主要是对数组函数的运用,和对数组遍历和访问
html代码 如下:
<body>
<script>
function cha(){
var i = document.getElementById("test");
i.style.visibility="visible";
}
</script>
<?php
// 建立一个牌池用来对数组保存
$num = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
$icon = ['♥' => 'red', '♦' => 'red', '♠' => 'black', '♣' => 'black'];
// 生成扑克牌组
$poker = [];
foreach ($icon as $k => $v) {
foreach ($num as $vv) {
$poker[] = "<font style=\"color:$v;\">$vv $k</font>";
}
}
$poker[]="<font style=\"color:red;\">大王</font>";
$poker[]="<font style=\"color:black;\">小王</font>";
// 打乱牌组顺序
shuffle($poker);
//建立数组指针,用来随机代替‘大地主’
$landowner = array(0=>'农民A',1=>'农民B',2=>'农民C');
$lk = rand(0,2);
echo '<div id=header>';
echo '本轮地主: '.$landowner[$lk].'<br><br>';
$landowner[$lk]='大地主';
echo '</div>';
?>
//农民A样式
<?php
echo '<div id=box2>';
echo '<img src="handsome1.jpg" width="55px" height="55px" />';
echo $landowner[0].':  ';
for ($i = 0; $i < 17; ++$i) {
if($i==8){
echo '<br><br>';
}
echo current($poker);
next($poker);
}
echo '</div>';
//---------------------------------------------------
//农民B样式
echo '<div class="row">';
echo '<div class="column" align="center">';
echo '<p align="center">';
echo '<img src="handsome2.jpg" width="55px" height="55px" />';
echo $landowner[1].':  '.'</p>';
for ($i = 0; $i < 17; ++$i) {
if($i==8){ //当输出到第8张牌时换行,防止重叠
echo '<br><br>';
}
echo current($poker);
next($poker);
}
echo '</div>';
//---------------------------------------------------
//建立按钮组件,实现对地主牌的翻看
echo '<div class="column" align="center">';
echo '地主牌: ';
echo '<div id="test">';
for ($i = 0; $i < 3; ++$i) {
echo current($poker);
next($poker);
}
echo '<br><br>';
echo '</div>';
echo '<button onClick="cha()">翻看地主牌</button>';
echo '</div>';
//---------------------------------------------------
//农民C样式
echo '<div class="column">';
echo '<p align="center">';
echo '<img src="handsome3.jpg" width="55px" height="55px" />';
echo $landowner[2].':  '.'</p>';
for ($i = 0; $i < 17; ++$i) {
if($i==8){
echo '<br><br>';
}
echo current($poker);
next($poker);
}
echo '</div>';
echo '</div>';
?>
</body>
2.CSS代码实现
CSS 样式代码如下:
<head>
<meta charset="utf-8">
<title>斗地主</title>
<style>
body{
background: url("poker.png") no-repeat;
background-size: 100%;
}
div{margin:15px 0}
font{border:1px solid #ccc;padding:6px 3px;margin-right:10px;
background-color: white;
}
#test{visibility: hidden;
}
.column {
float: left;
width: 33.33%;
}
.row:after {
content: "";
display: table;
clear: both;
}
@media screen and (max-width: 600px) {
.column {
width: 100%;
}
}
#header{
text-align: center;
padding: 20px;
height: 300px;
}
#box2{
text-align: center;
position:fixed;bottom: 0;
width: 100%;
height: 20%;
}
</style>
</head>
3.完成效果
会随机改变“地主”位置,点击“翻看地主牌”可以实现翻看,能够实现随机发牌。
4.项目使用背景
这里使用的背景图与三个玩家的头像,可自己提供,要注意修改图片名称。
四.文章末尾
感谢观看,欢迎建议!!!