`

ajax方法写一个在线斗地主的游戏,第一章-开发前的准备工作

    博客分类:
  • js
阅读更多

很久以前就在思考用ajax实现一个游戏功能的程序,朋友说你做一个斗地主的游戏吧,于是在他们的怂恿之下我开始着手用js来实现。

这里实现的是三人斗地主.

首先我们是用ajax方法与服务器交换数据的,所以学要一个创建ajax对象的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//AJAX
var http_request = false;
function send_request(url) {
http_request = false;
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('不能创建 XMLHttpRequest 对象!');
return false;
}
http_request.onreadystatechange = processRequest;
http_request.open('GET', url, true);
http_request.send(null);
}
//处理返回信息
var type = 0;
function send_r(url,t){
type = t;
send_request(url);
}

这里有两个函数 send_request完成创建http_request对象,send_r调用这个函数,参数type暂时不用管。在send_request中,http_request.onreadystatechange = processRequest;的作用是将服务器返回的数据交给processRequest函数处理。

processRequest函数是这样定义的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function processRequest() {
if (http_request.readyState == 1) {
//alert('正在连接');
//document.getELementById('network_status').innerHTML = '正在连接..';
}
if (http_request.readyState == 4) {
if (http_request.status == 200) {
if(type == 0){
var text = http_request.responseText.split("|");
player1_name = text[0];
player2_name = text[1];
player3_name = text[2];
flag1=text[25];
lord = text[6];
lord_p = text[7];
flag = text[8];
beishu=text[26];
self_var= text[3];//本人手中牌的序列
player1_show = text[9];
player2_show = text[10];
player3_show = text[11];
wininfo=text[28];
expectlord=text[24];
if(status != 'wait'){
do_ani1_p(text[4]);
do_ani2_p(text[5]);
do_self_p(text[3]);
do_lord_p(text[7]);
}
self_ok=text[27];
do_user_info(text[12], text[13], text[14], text[15], text[16], text[17],text[18],text[19],text[20],text[21],text[22],text[23]);
}
}
}
}

var text = http_request.responseText.split("|"); 这句是接收服务器返回的字符串,这个字符串包含很多不同的数据,每个数据之间是用|隔开的,因此我们用split将其分割成数组,当然,要使用这些数据还得记住在后台的约定:每个数据代表什么意思。如

1
2
3
player1_name = text[0];
player2_name = text[1];
player3_name = text[2];

表示玩家1(player1_name)的在本次斗地主中的名字是 text[0]。

接下来又几个很重要的地方:

1
2
3
4
do_ani1_p(text[4]);
do_ani2_p(text[5]);
do_self_p(text[3]);
do_lord_p(text[7]);

do_ani1_p,do_ani2_p处理当前玩家的另外两个玩家的牌在自己页面上的显示。do_self_p显示自己的牌,do_lord_p显示地主牌。

最后,既然是斗地主,当然还需要制定斗地主的规则,我们需要用js来实现它,上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
//规则
function pai_v(pai){
var v;
if(pai == '3' || pai == 'F3' || pai == 'T3' || pai == 'H3')
v = 3;
if(pai == '4' || pai == 'F4' || pai == 'T4' || pai == 'H4')
v = 4;
if(pai == '5' || pai == 'F5' || pai == 'T5' || pai == 'H5')
v = 5;
if(pai == '6' || pai == 'F6' || pai == 'T6' || pai == 'H6')
v = 6;
if(pai == '7' || pai == 'F7' || pai == 'T7' || pai == 'H7')
v = 7;
if(pai == '8' || pai == 'F8' || pai == 'T8' || pai == 'H8')
v = 8;
if(pai == '9' || pai == 'F9' || pai == 'T9' || pai == 'H9')
v = 9;
if(pai == '10' || pai == 'F10' || pai == 'T10' || pai == 'H10')
v = 10;
if(pai == '11' || pai == 'F11' || pai == 'T11' || pai == 'H11')
v = 11;
if(pai == '12' || pai == 'F12' || pai == 'T12' || pai == 'H12')
v = 12;
if(pai == '13' || pai == 'F13' || pai == 'T13' || pai == 'H13')
v = 13;
if(pai == '1' || pai == 'F1' || pai == 'T1' || pai == 'H1')
v = 14;
if(pai == '2' || pai == 'F2' || pai == 'T2' || pai == 'H2')
v = 15;
if(pai == 'JOKE1')
v = 16;
if(pai == 'JOKE2')
v = 17;
if(pai == 'NO')
v = 0;
return v;
}
function pai_a(pai){
//return 1;
var split_pai = pai.split(",");
var pai_num = split_pai.length - 1;
var count = new Array(1,1,1,1,1,1,1,1,1,1,1,1);
var k = 0;
for(var i = 1;i < pai_num;i ++)//
{
if(pai_v(split_pai[i]) == pai_v(split_pai[i - 1]))//如果是相同的,因为牌是按照从小到大的顺序排列的,所以如果是对子都是挨着的。
count[k] ++;
else
k ++;
}
var r = '';
for(var i = 0;i < count.length;i ++)
{
r += count[i]+",";
}
//对
if(pai_num == 2 && r == '2,1,1,1,1,1,1,1,1,1,1,1,')
return pai_c(pai_v(split_pai[0]), pai_num, 'dui'+pai_v(split_pai[0]));
//三只
if(pai_num == 3 && r == '3,1,1,1,1,1,1,1,1,1,1,1,')
return pai_c(pai_v(split_pai[0]), pai_num, 'san');
//四只
if(pai_num == 4 && r == '4,1,1,1,1,1,1,1,1,1,1,1,')
return pai_c(pai_v(split_pai[0]), pai_num, 'zha');
//四带二只
if(pai_num == 6 && (r == '4,1,1,1,1,1,1,1,1,1,1,1,' || r == '1,4,1,1,1,1,1,1,1,1,1,1,' || r == '1,1,4,1,1,1,1,1,1,1,1,1,'))
{
if(count[0] == 4)
return pai_c(pai_v(split_pai[3]), pai_num, 'sidaier');
else if(count[1] == 4)
return pai_c(pai_v(split_pai[4]), pai_num, 'sidaier');
else if(count[2] == 4)
return pai_c(pai_v(split_pai[5]), pai_num, 'sidaier');
}
//四带二对
if(pai_num == 8 && (r == '4,2,2,1,1,1,1,1,1,1,1,1,' || r == '2,4,2,1,1,1,1,1,1,1,1,1,' || r == '2,2,4,1,1,1,1,1,1,1,1,1,'))
{
if(count[0] == 4)
return pai_c(pai_v(split_pai[3]), pai_num, 'sidailiangdui');
else if(count[1] == 4)
return pai_c(pai_v(split_pai[5]), pai_num, 'sidailiangdui');
else if(count[2] == 4)
return pai_c(pai_v(split_pai[7]), pai_num, 'sidailiangdui');
}
//三带一
if(pai_num == 4 && (r == '3,1,1,1,1,1,1,1,1,1,1,1,' || r == '1,3,1,1,1,1,1,1,1,1,1,1,'))
{
if(count[0] > count[1])
return pai_c(pai_v(split_pai[2]), pai_num, 'sandaiyi');
else
return pai_c(pai_v(split_pai[3]), pai_num, 'sandaiyi');
}
//三带二
if(pai_num == 5 && (r == '3,2,1,1,1,1,1,1,1,1,1,1,' || r == '2,3,1,1,1,1,1,1,1,1,1,1,'))
{
if(count[0] > count[1])
return pai_c(pai_v(split_pai[2]), pai_num, 'sandaiyidui');
else
return pai_c(pai_v(split_pai[4]), pai_num, 'sandaiyidui');
}
//连对
if((pai_num == 6 && r == '2,2,2,1,1,1,1,1,1,1,1,1,') || (pai_num == 8 && r == '2,2,2,2,1,1,1,1,1,1,1,1,') || (pai_num == 10 && r == '2,2,2,2,2,1,1,1,1,1,1,1,') || (pai_num == 12 && r == '2,2,2,2,2,2,1,1,1,1,1,1,') || (pai_num == 14 && r == '2,2,2,2,2,2,2,1,1,1,1,1,') || (pai_num == 16 && r == '2,2,2,2,2,2,2,3,1,1,1,1,') || (pai_num == 18 && r == '2,2,2,2,2,2,2,2,2,1,1,1,') || (pai_num == 20 && r == '2,2,2,2,2,2,2,2,2,2,1,1,'))
{
var flag = 0;
for(var i = 2;i < pai_num;i += 2)
{
if(pai_v(split_pai[i]) - pai_v(split_pai[i - 1]) != 1)
{
flag = 1;
break;
}
}
if(flag == 0){
return pai_c(pai_v(split_pai[pai_num - 1]), pai_num, 'liandui');
}
}
//飞机
if((pai_num == 3+3+2 && (r == '3,3,2,1,1,1,1,1,1,1,1,1,' || r == '2,3,3,1,1,1,1,1,1,1,1,1,')) || (pai_num == 3+3+2+2 && (r == '3,3,2,2,1,1,1,1,1,1,1,1,' || r == '2,3,3,2,1,1,1,1,1,1,1,1,' || r == '2,2,3,3,1,1,1,1,1,1,1,1,')) || (pai_num == 3+3+1+1 && (r == '3,3,1,1,1,1,1,1,1,1,1,1,' || r == '1,3,3,1,1,1,1,1,1,1,1,1,' || r == '1,1,3,3,1,1,1,1,1,1,1,1,')))
{
if(count[0] == 3 && count[1] == 3 && pai_v(split_pai[3]) - pai_v(split_pai[2]) == 1)
return pai_c(pai_v(split_pai[3]), pai_num, 'feiji');//3322,3311,332
if(count[0] == 2 && count[1] == 3 && pai_v(split_pai[5]) - pai_v(split_pai[4]) == 1)
return pai_c(pai_v(split_pai[5]), pai_num, 'feiji');//2332,233
if(count[0] == 1 && count[1] == 3 && pai_v(split_pai[4]) - pai_v(split_pai[3]) == 1)
return pai_c(pai_v(split_pai[4]), pai_num, 'feiji');//1331
if(count[0] == 2 && count[1] == 2 && pai_v(split_pai[7]) - pai_v(split_pai[6]) == 1)
return pai_c(pai_v(split_pai[7]), pai_num, 'feiji');//2233
if(count[0] == 1 && count[1] == 1 && pai_v(split_pai[5]) - pai_v(split_pai[4]) == 1)
return pai_c(pai_v(split_pai[5]), pai_num, 'feiji');//1133
}
//对王
if(pai_num == 2 && ((pai_v(split_pai[0]) == 16 && pai_v(split_pai[1]) == 17) || (pai_v(split_pai[0]) == 17 && pai_v(split_pai[1]) == 16)))
return pai_c(100, pai_num, 'wangzha');
//单
if(pai_num == 1)
return pai_c(pai_v(split_pai[0]), pai_num, pai_v(split_pai[0]));
//顺子
if(pai_v(split_pai[pai_num - 1]) <= pai_v(1) && pai_num >= 5 && r == '1,1,1,1,1,1,1,1,1,1,1,1,')
{
var flag2 = 0;
for(var i = 1;i < pai_num;i ++)
{
if(pai_v(split_pai[i]) - pai_v(split_pai[i - 1]) != 1)
{
flag2 = 1;
break;
}
}
if(flag2 == 0)
return pai_c(pai_v(split_pai[pai_num - 1]), pai_num, 'shunzi');
}
return Array(0,0,0);
}
function pai_c(v,num, t){
var arr = new Array();
arr[0] = v;
arr[1] = num;
arr[2] = t;
return arr;
}
//-----------END

这是开始之前的准备工作。以后的代码中我们会反复用到刚刚介绍的片段。

这篇文章还发表在http://jcodecraeer.com/a/jquery_js_ajaxjishu/2012/0602/224.html,同步更新请关注

分享到:
评论

相关推荐

    jquery-单机版斗地主小游戏源码--HTML-代码

    本项目以"jQuery-单机版斗地主小游戏源码"为例,深入探讨如何运用这三种技术构建一个功能完整、视觉效果丰富的游戏应用。此项目特别适用于前端开发者学习和参考,尤其是对于初学者,它提供了实际的案例来理解和实践...

    斗地主源码 PHP斗地主源码 支持多人在线

    源码中可能会包含一个数据库系统,用于存储用户信息、游戏历史记录、积分排名等数据。常见的数据库选择可能是MySQL或MongoDB,通过SQL语句进行数据的读写操作。数据库设计应考虑到高并发访问和数据安全性。 5. 游戏...

    基于java的开发源码-ajax写的登录实例.zip

    基于java的开发源码-ajax写的登录实例.zip 基于java的开发源码-ajax写的登录实例.zip 基于java的开发源码-ajax写的登录实例.zip 基于java的开发源码-ajax写的登录实例.zip 基于java的开发源码-ajax写的登录实例.zip ...

    webgame网页游戏斗地主源码

    网页游戏斗地主源码是一种基于Web技术实现的在线扑克牌游戏,允许玩家在浏览器上直接进行游戏,无需下载客户端。这种源码是开发者通过HTML、CSS、JavaScript等前端技术,以及可能的后端语言(如PHP、Node.js)构建的...

    国产Ajax框架--龙博AJAX的开发包,开发手册

    另一个标签“工具”暗示了龙博AJAX可能还提供了辅助开发的工具,如调试工具、性能分析工具或者是与构建流程集成的脚本,这些都能帮助开发者更高效地工作。 至于“sigma_package_110_2_release”这个压缩包子文件的...

    AJAX--dwr开发及应用

    \第五部分ajax\第15章 AJAX--dwr开发及应用\第15章 AJAX--dwr开发及应用.ppt )

    【前端素材】小游戏-076- 斗地主.zip

    它是一个 CSS,HTML 和 JS 的集合,它使用了最新的浏览器技术,给你的 Web 开发提供了时尚的版式; AJAX,创建交互式网页应用的网页开发技术。 前端游戏设计是游戏开发中至关重要的一部分,它涉及到游戏的外观、交互...

    PHP斗地主源码

    【PHP斗地主源码】是一款基于PHP编程语言开发的在线游戏源代码,适用于构建一个可供用户在线玩的斗地主游戏平台。斗地主是一种非常流行的三人扑克牌游戏,这款源码允许开发者或者网站运营者搭建自己的网络斗地主游戏...

    Ajax经典案例开发大全

    -------- ...启动Tomcat前注意修改 ajax/WEB-INF/classes/ajax_db.properties 文件。 将其中的URL、USER和PASSWORD属性根据实际情况进行修改。 Tomcat正常启动后使用 http://localhost:8080/ajax 进行访问

    单机版斗地主小游戏源码 (2)

    在本项目中,"单机版斗地主小游戏源码 (2)" 是一个基于Web技术实现的简单网页游戏,特别适合初学者进行学习和参考。它利用HTML作为基础结构语言,jQuery作为JavaScript库来增强页面交互性,实现斗地主游戏的逻辑。接...

    疯狂ajax源代码第01-12章

    《疯狂Ajax》是李刚老师撰写的一本关于Ajax技术...以上就是《疯狂Ajax》前12章的主要内容,每一章都涵盖了Ajax开发中的关键知识点,通过学习和实践这些源代码,开发者可以深入理解Ajax技术,并能熟练应用于实际项目中。

    第16章 ajax-jquery\

    第五部分ajax\第16章 ajax-jquery

    asp开发的网页版斗地主游戏

    综上所述,这个基于ASP开发的网页版斗地主游戏利用了多种技术和文件来构建一个完整的、互动性强的在线多人游戏平台。从登录验证到游戏逻辑,再到数据管理和用户交互,每个环节都体现了ASP开发的优势和灵活性。

    斗地主开源代码(全)

    对于想学习游戏开发、Web应用或数据库管理的IT从业者来说,这是一个很好的学习和实践平台。通过研究这个项目的源代码,可以提升自己的编程能力,了解实际项目中的问题解决策略,同时也可以为自己的项目提供参考和...

    三家斗地主HTML5源码

    本源码项目旨在提供一个完整的、可运行的斗地主游戏框架,开发者可以通过此源码学习到如何用Web技术构建一款多用户在线游戏。 HTML5是超文本标记语言的第五个版本,它引入了许多新的元素和API,旨在简化开发流程并...

    ajax学习开发手册

    **Ajax(Asynchronous JavaScript and XML)技术是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。这种技术可以提升用户体验,使得网页...

    jquery.unobtrusive-ajax.rar

    总之,jQuery Unobtrusive Ajax是现代Web开发中的一个强大工具,它简化了Ajax集成,使开发者能够专注于业务逻辑,而不是繁琐的DOM操作。通过深入学习和实践,你将能够创建出高效、优雅的Web应用。

    PHP网页版本的斗地主源码

    【PHP网页斗地主源码】是一个基于PHP编程语言实现的在线斗地主游戏的源代码,它提供了在网页上进行多人对战的功能。斗地主是一款非常流行的扑克牌游戏,通常由三名玩家参与,游戏的目标是通过合理出牌以尽快出完手中...

    PHP网页斗地主源码

    【PHP网页斗地主源码】是一个基于PHP编程语言实现的在线斗地主游戏的源代码,它提供了在网页上进行多人对战的功能。斗地主是一款非常流行的扑克牌游戏,通常由三名玩家参与,游戏的目标是通过合理出牌以尽快出完手中...

Global site tag (gtag.js) - Google Analytics