基于HTML5+WebSocket+JAVA的棋牌游戏开发,从入门到放弃(五)

前言

最近有些突发的事情,在飞机上写了点代码,先把它们更新上来吧。毕竟这个文章是做这个东西的一个心路历程,可能有些东西讲得并不是很明白。大家可以自己查下资料或者在下面留言。这段时间,我主要是做了一些前端的的样式以及“准备”这个功能的开发,这个功能主要是为后续的重新开始游戏等功能的准备。

思考

对于一个前端只会写js的人,其实来搞前端样式还是有困难的。但是,我们可以“借鉴”呀。
至此之前,后端只要考虑有没有这个玩家,现在我们要考虑这个玩家的状态。很明显,我们需要一个context的上下文对象来保存这个状态。在这个过程中,开发得其实很蹩脚。有这么几种关系,棋盘、规则、房间、玩家等,这部分需要去做合理地抽象,我希望未来这个后台是可以通配各种棋牌游戏的,如果我们今天想玩麻将了,我们只要写前端代码,还有写麻将的规则即可。

实现

先放一张效果图

Paste_Image.png

是不是感觉比之前的好看多了,感觉就很高大上,如果是大学的毕业设计,一下子从C变成了A+,老师们都喜欢好看的...

我们来看下css的代码(后端猴子最讨厌了)

body {
    font-size: 12px;
    line-height: 150%;
    text-align: center;
    background: url(../images/bg.jpg) repeat scroll 0% 0% transparent;
    margin: 0;
    position: relative;
}
.game-box {
    width: 640px;
    margin: 0 auto;
    position: relative;
}
.btn-box {
    padding-left:45px;
}
.btn-box a {
    background: url(../images/btn-bg1.png) center 0 no-repeat;
    height: 75px;
    width: 205px;
    cursor: pointer;
    margin:0 30px;
    display:block;
    font: normal 22px/70px "微软雅黑";
    float:left;
    color: #480e00;
    text-decoration: none;
}

body是背景,game-box是画布,btn-box是下面的按钮。这里面的几个参数还是比较熟悉的,如果有哪些字段不知道什么意思,可以在w3c 上面查一查。这里面比较“神奇”的就是game-box里面的margin了,通过auto自适应,可以居中。但是随即我们就发现了一个问题,当我们发生monseDown的时候,获取的坐标是页面里面的坐标,我们如何转化为画布的坐标呢?
很明显我们需要获取

Paste_Image.png

这么一个位置,这个东西纠结了好久,一直不知道怎么搞,一直找不到现成的方法(前端弱鸡)。后来阅读别人的代码中获取到这么一种思路,逐层往外递增。

    function getDomXY(a) {
        for (var b = a.offsetLeft,
                     c = a.offsetTop,
                     d = a.offsetParent; null !== d;) b += d.offsetLeft,
                c += d.offsetTop,
                d = d.offsetParent;
        return {
            x: b,
            y: c
        }
    }

在前端中,offsetParent顾名思义,就是获取这个对象的父对象。
好了,添加了这些,我们其实已经把前端变得“高大上”了。这一部分都是纯粹的前端改动,后台并不需要进行任何处理。
接下来我们来考虑增加准备这么一个功能。
前端非常简单,我们只要添加一个按钮,还有对应的js代码

    <div class = "btn-box"><a onclick="sendReadyMsg()">准备好了</a></div>

    function sendReadyMsg(){
        if (isReady == false){
            webSocket.send("ready");
        }
        isReady = true;
    }

但是对于后端,我们发现我们原来的简单后端模型支持不了。于是我们需要进行改造,首先,我们需要一个上下文对象来存用户的状态。现在我们只用来保存用户的准备状态。

  public class UserContext {
        private Session session;

        public UserContext(Session session){
            this.session = session;
        }

        /**
         * 游戏状态
         */
        private @Getter @Setter int gameStatus;
        public interface GAME_STATUS {int PENDING  = 0; int READY = 1; int RUNNING = 2;}

        /**
         * 是否准备完成
         */
        public boolean isReady(){
            return gameStatus == GAME_STATUS.READY;
        }
    }

然后以前room中存用户的set<Session>变成map<Session, UserContext>.我们来整理一下整个准备动作的流程。

Paste_Image.png

简书的markdown不支持流程图真是太不方便了....
按照这个流程图,我们只要修改对应的方法即可。非常简单,就不贴代码出来了。

总结

再一次回到刚才我们提到的问题,就是用户、规则、房间等类之间的关系。这一部分是需要后面好好好好考虑的。虽然现在我也做好了一些抽象,但是可能之前没做过相关的东西,我想还是先继续添加一些功能,然后看看之前的模型是否适用。
源代码下载地址
以往没有任何做游戏的经验,如果大家有什么批评指正,欢迎大家评论指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容