• 沒有找到結果。

页 gamedesk.jsp 的源码如下:

//当前玩家出局,设置其座位为第几位出局者

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>

游戏(牌桌)页 gamedesk.jsp 是游戏程序的核心页,是 JSP+JavaBean 技术的典型一页,

逻辑功能较复杂,然而,JSP 网页及 JavaBean 分工明确,程序层次清晰。客户端 JavaScript 脚

本及 html 标记源码、服务端 JSP 代码、JavaBean 功能类,三者的分工与融合技术,是学习的

重点。参看游戏界面(见图 6-4),沿着游戏过程逻辑,阅读网页程序。

相關文件