//当前玩家出局,设置其座位为第几位出局者
this.sitestate[siteno]= 5-playercount;//sitestate[i]>0:出局 this.playercount -=1;//出牌人数减 1
this.check_GameIsOver();//有人出局,检查游戏是否结束
if (currentplay==siteno)
{ //如果正好是轮到的此玩家出牌,但已出局,所以顺延到下一家 while(this.sitestate[currentplay]>0)
{
currentplay = (4+currentplay+playorder)%4;//轮到下家出牌 }
playouttime = new java.util.Date();//下一玩家出牌计时开始时间 }
} }
方法 playonecard(int cardnum),实现游戏规则:
① 数字牌,玩家打出会增加中央总分 +1+2+3+5+6+7+8+9
② 魔法牌
0-跳过此玩家 10-反转出牌顺序 11-指定对家出牌 4-让中央总分减 10 5-让总分减 2 0 12-总分立刻变为 99
方法 kickout_theGame(座号),实现“某座位玩家出局”的功能,sitestate[座号]>0 表 示此位玩家已出局,其值表示是第几位出局,作为游戏得分的计算依据。
方法 check_GameIsStart(),检查游戏是否达到开始条件,玩家足 4 人就开始发牌(每 玩家随机产生 10 张牌),游戏轮流出牌开始。
方法 check_GameIsOver(),每当有人出局,检查游戏是否达到结束条件,未出局玩家 少于等于 1 人时,游戏结束,计算各玩家得分,保存到数据库,设置各玩家退出游 戏(siter[i].desk = null),等待重新加入。
(2)设计并实现游戏(牌桌)页 gamedesk.jsp。游戏(牌桌)页的功能是:定位目标游 戏(牌桌)对象,把游戏(牌桌)的状态信息显示在网页上(见图 6-4),并管理着各玩家的 轮流出牌。当前出牌玩家单击某张牌,进行出牌操作时,转去执行出牌页程序。游戏(牌桌)
页 gamedesk.jsp 的源码如下:
gamedesk.jsp:
<%@ page language="java" import="mygame.*" pageEncoding="GBK"%>
<%@ include file="loginCheck.jsp" %>
<jsp:useBean id="theplayer" class="mygame.GamePlayer" scope="session" />
<jsp:useBean id="gamehome" class="mygame.GameHome" scope="application" />
<html>
<head>
<title>游戏(桌)界面</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="refresh" content="5" />
</head>
<%
int roomno = Integer.parseInt(request.getParameter("room"));//房号 int deskno = Integer.parseInt(request.getParameter("desk"));//桌号 GameDesk desk = gamehome.rooms.get(roomno).getDesks()[deskno];
if (request.getParameter("observe")==null) { //非观战,是参战
<body bgColor="#000000" text="ffffff" topmargin=0>
<table align="center">
<tr height=70>
<td><img src="images/logo.jpg"></td>
<td colspan=2><img src="images/logo.gif">
<input type=button name="bn1" value=返回 onclick="location=
<'gamehome.jsp'"></td>
</tr>
<tr height=110>
<td width="135"></td>
<td width="135" align="center" <%=desk.sitestate[0]>0?"style=
'filter:gray'":""%>>
<%if (desk.siter[0]==null){//第一座位 %>
<img src="images/chair.jpg" width="70" height="70">
<%} else { %>
<%=siteno==0?"<font color=yellow><H>我</H></font>":"" %>
<img src="pic/<%=desk.siter[0].FacePic%>.gif" width="70"
height="50" border=0><br>
<font size=2 color=white>0:<%=desk.siter[0].UserName%> [<%=desk.
siter[0].UserID%>]</font>
<br><%=desk.currentplay==0?"<img src='images/flag.gif'>":""%>
<%} %>
</td>
<td width="135"></td>
</tr>
<tr height=140>
<td Width="135" align="center" <%=desk.sitestate[3]>0?"style=
'filter:gray'":""%>>
<%if (desk.siter[3]==null){//第四座位 %>
<img src="images/chair.jpg" width="70" height="70">
<%} else { %>
<%=siteno==3?"<font color=yellow><H>我</H></font>":"" %>
<img src="pic/<%=desk.siter[3].FacePic%>.gif" width="70"height=
"50" border=0>
<%=desk.currentplay==3?"<img src='images/flag.gif'>":"" %><br>
<font size=2 color=white>3:<%=desk.siter[3].UserName%> [<%=desk.
siter[3].UserID%>]</font>
<%} %>
</td>
<td width="135" align="center" background="images/<%=desk.playorder
==1?"o1":"o2"%>.gif">
<font size=8 color=yellow><%=desk.deskscore%></font></td>
<td width="135" align="center" <%=desk.sitestate[1]>0?"style= 'filter:
gray'":""%>>
<%if (desk.siter[1]==null){//第二座位 %>
<img src="images/chair.jpg" width="70" height="70" >
<%} else { %>
<%=desk.currentplay==1?"<img src='images/flag.gif'>":"" %>
<img src="pic/<%=desk.siter[1].FacePic%>.gif" width="70" height
="50" border=0>
<%=siteno==1?"<font color=yellow><H>我</H></font>":"" %><br>
<font size=2 color=white>1:<%=desk.siter[1].UserName%> [<%=desk.
siter[1].UserID%>]</font>
<%} %>
</td>
</tr>
<tr height=110>
<td width="135"><FONT face="宋体"></FONT></td>
<td width="135" align="center" <%=desk.sitestate[2]>0?"style=
'filter:gray'":""%>>
<%if (desk.siter[2]==null){//第三座位 %>
<img src="images/chair.jpg" width="70" height="70">
<%} else { %>
<%=desk.currentplay==2?"<img src='images/flag.gif'>":"" %><br>
<%=siteno==2?"<font color=yellow><H>我</H></font>":"" %>
<img src="pic/<%=desk.siter[2].FacePic%>.gif" width="70" height
="50" border=0><br>
<font size=2 color=white>2:<%=desk.siter[2].UserName%> [<%=desk.
siter[2].UserID%>]</font>
<%} %>
</td>
<td width="135"><br><br></td>
</tr>
</table>
<center>
<table border=0 align="center">
<tr>
<%
if (desk.isplaying && siteno>=0)//玩家坐在本桌的第 siteno 位 {
for(int j=0;j<10;j++) {// 逐张显示玩家的牌
if (desk.sitestate[siteno]>0)
out.print("<td width=50 onclick=\"alert('你已出局,不能出牌!')\">");
if (desk.currentplay==siteno && theplayer.cards[j]!=100) //轮到本玩家出牌,增加可出牌的链接
out.print("<td width=50 onclick=\"playout('"+j+"')\">");
else
out.print("<td width=50 onclick=\"alert('还没轮到你出牌!!')\">");
out.print("<img src='images/"+theplayer.cards[j]+".gif'></td>");
}
else if (siteno>=0 && desk.sitestate[siteno]>0) out.print("<td>你已经出局了!</td>");
else
out.print("<td>轮到第"+desk.currentplay+"位出牌了!</td>");
} %>
</tr></table>
<% if (siteno>=0){//玩家坐在本桌的第 siteno 位%>
<input type=button name=bn2 value="强退" onclick="location='exitgame.jsp'">
<%} %>
</center>
</body>
<script type="text/javascript">
var Isout=0;//每次只能出一张牌 function playout(cardno)
{
if (Isout==0)
location="playoutcard.jsp?cardno="+cardno;
Isout =1;
}
</script>
</HTML>