很久以前就在思考用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,同步更新请关注
相关推荐
基于java的开发源码-ajax写的登录实例.zip 基于java的开发源码-ajax写的登录实例.zip 基于java的开发源码-ajax写的登录实例.zip 基于java的开发源码-ajax写的登录实例.zip 基于java的开发源码-ajax写的登录实例.zip ...
\第五部分ajax\第15章 AJAX--dwr开发及应用\第15章 AJAX--dwr开发及应用.ppt )
-------- ...启动Tomcat前注意修改 ajax/WEB-INF/classes/ajax_db.properties 文件。 将其中的URL、USER和PASSWORD属性根据实际情况进行修改。 Tomcat正常启动后使用 http://localhost:8080/ajax 进行访问
ajax 开发指难-ajax开发指难-ajax开发指难-ajax开发指难-
第五部分ajax\第16章 ajax-jquery
游戏分享-游戏分享网站-游戏分享网站源码-游戏分享网站java代码-游戏分享网站设计与实现-基于springboot的游戏分享网站-基于Web的游戏分享网站设计与实现-游戏分享项目-游戏分享项目代码游戏分享系统-游戏分享系统...
电子书,让大家轻轻松松掌握ajax的开发
第八章 AJAX基础 第八章 AJAX基础 第八章 AJAX基础 第八章 AJAX基础
Laravel开发-ajax-response Laravel Ajax响应
1 每个字母的位置由一个32位十六进制数字表示,前16位为横坐标,后16位为纵坐标,坐标空间65536*65536 2 application中维持一个所有字母的位置列表,通过“letters”这个key引用。 3 参数格式为pos:被移动的字母...
AJAX开发简略,简略介绍AJAX开发简略
并应用上述知识开发了8个基于AJAX的Web应用系统,如基于AJAX的文件和图像处理、AJAX祝福墙、AJAX留言簿、AJAX聊天室、AJAX RSS阅读器、AJAX相册、基于AJAX的电子邮件处理等。最后以两个大型的AJAX Web应用系统(基于...
游戏美术外包-游戏美术外包系统-游戏美术外包系统源码-游戏美术外包管理系统-游戏美术外包管理系统java代码-游戏美术外包系统设计与实现-基于ssm的游戏美术外包系统-基于Web的游戏美术外包系统设计与实现-游戏美术...
AJAX培训 - 第一讲:AJAX基础
AJAX 激情编程 第一章
了解AJAX,Ajax的工作原理,AJAX包含的技术 AJAX:(Asynchronous JavaScript and XML)并不是一项新技术,其实是多种技术的综合,包括Javascript、XHTML和CSS、DOM、XML和XMLHttpRequest. 服务器端语言:服务器需要...
游戏美术外包-游戏美术外包系统-游戏美术外包系统源码-游戏美术外包管理系统-游戏美术外包管理系统java代码-游戏美术外包系统设计与实现-基于ssm的游戏美术外包系统-基于Web的游戏美术外包系统设计与实现-游戏美术...