“五子棋”是大家都非常熟悉的一種益智類游戲,相關的游戲軟件也非常多,在此我向大家隆重推出一款新的純“網絡版”的五子棋,它利用ASP做為開發環境,因此在Internet上對戰的時候無需下載客戶端軟件,只要你有一個浏覽器就可以了。你也可以在局域網上進行這個游戲。
對於ASP,我不想做過多的說明,在以前的文章中,我已經說過很多。
游戲的過程是這樣的,我們首先登錄,然後可以選擇戰場,有“金星”、“木星”、“水星”、“火星”、“土星”等五個戰場,如果你自認為是一個高手,可以選擇金星,否則可以依次選擇其它幾個星球做為戰場。如果這個星球上沒有擂主,你就應該以擂主的身份進入,然後別人就可以和你進行對戰了。當然,如果所有的星球上都已經開始了戰爭,那麼你就只能等一會兒了。
如果你是以擂主身份進入的,你可以等待別人來和你對戰,如果你是以攻擂手的身份登錄,你可以很快的和擂主展開戰斗。開始戰斗後,由擂主執黑先行,然後由攻擂手出招,如此這般。當最後決出勝負的時候,會有相應的提示。
該站點有幾個主要的文件是:
Index.ASP 登錄文件:
Index0.ASP中間文件:
Match.ASP 比賽文件:
Back0.jpg white0.jpg black0.jpg 中間用到的圖形文件,分別指的棋盤,白子和黑子,如下圖:
在程序的初始化的時候,將棋盤上分成若干的表格,將背景圖片放入其中,形成一個棋盤,然後在放上一個棋子後,再將圖片換上相應的白子或黑子就可以了。
先看看登錄文件:
<%@ Language=VBScript %>
<Html>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<title>星球大戰之“五子連珠”大賽!</title>
</HEAD>
<BODY>
<p align=center><font size=6>星球大戰</font></P>
<table border=1 width=80% align=center>
<tr><td>星球</td><td>擂主</td><td>大戰</td><td>攻擂</td></tr>
<tr>
<td>金星</td>
<td>
<%
if application("first1")="" then
%>
<form action=index0.ASP?flag=First1 method=post>
<INPUT id=text1 name=txtFirst1 size=10><INPUT id=submit1 name=submit1
type=submit value=進入>
</form>
<%
else
response.write application("first1")
end if
%>
</td>
<td>大戰</td>
<td>
<%
if application("second1")="" then
%>
<form action=index0.ASP?flag=second1 method=post>
<INPUT id=text1 name=txtSecond1 size=10><INPUT id=submit1
name=submit1 type=submit value=進入>
</form>
<%
else
response.write application("Second1")
end if
%>
</td>
</tr>
<tr>
<td>木星</td>
<td>
<%
if application("first2")="" then
%>
<form action=index0.ASP?flag=First2 method=post>
<INPUT id=text1 name=txtFirst2 size=10><INPUT id=submit1 name=submit1
type=submit value=進入>
</form>
<%
else
response.write application("first2")
end if
%>
</td>
<td>大戰</td>
<td>
<%
if application("second2")="" then
%>
<form action=index0.ASP?flag=second2 method=post>
<INPUT id=text1 name=txtSecond2 size=10><INPUT id=submit1
name=submit1 type=submit value=進入>
</form>
<%
else
response.write application("Second2")
end if
%>
</td>
</tr>
<tr>
<td>金星</td>
<td>
<%
if application("first3")="" then
%>
<form action=index0.ASP?flag=First3 method=post>
<INPUT id=text1 name=txtFirst3 size=10><INPUT id=submit1 name=submit1
type=submit value=進入>
</form>
<%
else
response.write application("first3")
end if
%>
</td>
<td>大戰</td>
<td>
<%
if application("second3")="" then
%>
<form action=index0.ASP?flag=second3 method=post>
<INPUT id=text1 name=txtSecond3 size=10><INPUT id=submit1
name=submit1 type=submit value=進入>
</form>
<%
else
response.write application("Second3")
end if
%>
</td>
</tr>
<tr>
<td>金星</td>
<td>
<%
if application("first4")="" then
%>
<form action=index0.ASP?flag=First4 method=post>
<INPUT id=text1 name=txtFirst4 size=10><INPUT id=submit1 name=submit1
type=submit value=進入>
</form>
<%
else
response.write application("first4")
end if
%>
</td>
<td>大戰</td>
<td>
<%
if application("second4")="" then
%>
<form action=index0.ASP?flag=second4 method=post>
<INPUT id=text1 name=txtSecond4 size=10><INPUT id=submit1
name=submit1 type=submit value=進入>
</form>
<%
else
response.write application("Second4")
end if
%>
</td>
</tr>
<tr>
<td>金星</td>
<td>
<%
if application("first5")="" then
%>
<form action=index0.ASP?flag=First5 method=post>
<INPUT id=text1 name=txtFirst5 size=10><INPUT id=submit1 name=submit1
type=submit value=進入>
</form>
<%
else
response.write application("first5")
end if
%>
</td>
<td>大戰</td>
<td>
<%
if application("second5")="" then
%>
<form action=index0.ASP?flag=second5 method=post>
<INPUT id=text1 name=txtSecond5 size=10><INPUT id=submit1
name=submit1 type=submit value=進入>
</form>
<%
else
response.write application("Second5")
end if
%>
</td>
</tr>
</table>
</BODY>
</Html>
這個文件不用做過多的說明,就是一個大的表格,大家可以從那裡進入,如果某個位置已經被使用,則它會變成該大 俠的名字,不允許重復登錄。在登錄後進入
index0.asp,這是一個中間交換文件,在裡面進行一些變量的處理及賦值,然後再進入match.asp,進行正式的比賽。我們來看一下index0.ASP的內容:
<%@ Language=VBScript %>
<%
if Request.Form("txt" & request.querystring("flag"))<>"" then
'response.write "in!" & ""
session("nice")=Request.Form("txt" & request.querystring("flag"))
'response.write session("nice") & ""
'response.write application(request.querystring("flag"))
if application(request.querystring("flag"))="" then
application(request.querystring("flag"))=session("nice")
session("class")=right(request.querystring("flag"),1)
if left(request.querystring("flag"),1)="f" then
application(session("nice"))=false
elseif left(request.querystring("flag"),1)="s" then
application(session("nice"))=false
application(application("first" & session("class")))=true
end if
Response.Redirect "match.ASP"
end if
end if
%>
<Html>
</Html>
該程序中,用session(“nice”)來記錄您登錄的大名,以後的處理中,很多都要用到它,用它來區分很多的用戶。如果您是從擂主的位置進入,則您的權利是
first,否則是second,用session("class")來記錄位於哪個戰場場,“金”“木”
“水”“火”“土”分別表示為1、2、3、4、5,因為有多個戰場可能同時開戰,如果不能正確地區分開,則可能導致一片混亂。application(session("nice"))是一個邏輯型變量,用真假來表示您是否可以出棋,如果是假,您要等待一個,如果是真,您就可以下棋了。只有一個戰場上的兩個人都進入了以後,擂主方可以下棋,而且只有當擂主出子以後,攻擂手才可以下棋。准備好以後,下面就進入賽場,請看文件match.ASP
<Html>
<head>
<meta http-equiv="Content-Type" content="text/Html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<META http-equiv=refresh content=3>
<title>連珠大賽...</title>
</head>
<%
Response.Write "擂主:" & application("first" & session("class"))
& " 攻擂:" & application("second" & session
("class"))
if Request.QueryString("pos")<>"" then
application("pos" & session("class") & Request.QueryString("pos"))
=true
end if
%>
<body>
<%
'Response.Write application("aaa")
if application("first" & session("class"))=session("nice") then
color="black"
if Request.QueryString("pos")<>"" then
if session("last")="" then session("last")="abc"
if session("last")<> Request.QueryString("pos") then
application(application("first" & session("class")))=false
if application("second" & session("class"))<>"" then application
(application("second" & session("class")))=true
session("last")=Request.QueryString("pos")
END IF
end if
else
if application("second" & session("class"))=session("nice") then
color="white"
if Request.QueryString("pos")<>"" then
'if session("last")="" then session("last")="abc"
if session("last")<> Request.QueryString("pos") then
application(application("first" & session("class")))=true
application(application("second" & session("class")))=false
session("last")=Request.QueryString("pos")
END IF
end if
else
if application("second" & session("class"))="" then
application("second" & session("class"))=session("nice")
color="white"
if Request.QueryString("pos")<>"" then
if session("last")="" then session("last")="abc"
if session("last")<> Request.QueryString("pos") then
application(application("first" & session("class")))=true
application(application("second" & session("class")))=false
session("last")=Request.QueryString("pos")
END IF
end if
else
color=""
end if
end if
end if
Response.Write "<table width=400 height=400 border=0 cellspacing=0
cellpadding=0>"
for i=1 to 16
Response.Write "<tr>"
for j=1 to 16
if application("pos" & session("class") & cstr(i) & "_" & cstr(j))=""
then
application("color" & session("class") & "_" & Request.QueryString
("pos"))=color
Response.Write "<td width=25 height=25>"
'response.write application(application("first" & session("class")))
if application(session("nice"))=true then
response.write "<a href=match.ASP?pos=" & cstr(i) & "_" & cstr(j)
& "><img border=0 src=back0.jpg width=25 height=25></a>"
else
response.write "<img border=0 src=back0.jpg width=25 height=25>"
end if
response.write "</td>"
else
Response.Write "<td width=25 height=25><img border=0 src=" &
application("color" & session("class") & "_" & cstr(i) & "_" & cstr
(j)) & "0.jpg width=25 height=25></td>" & chr(13)
end if
next
Response.Write "</tr>"
next
Response.Write "</table>"
'判斷輸贏
if application("first" & session("class"))=session("nice") then
m="black"
h="white"
else
h="black"
m="white"
end if
'橫向判斷"-"
for i=1 to 15
win=false
loss=false
five_me=0
five_he=0
for j=1 to 15
if application("color" & session("class") & "_" & cstr(i) & "_" & cstr
(j))=m then
five_me=five_me+1
five_he=0
elseif application("color" & session("class") & "_" & cstr(i) & "_" &
cstr(j))=h then
five_me=0
five_he=five_he+1
else
five_me=0
five_he=0
end if
if five_me=5 then
win=true
loss=false
exit for
elseif five_he=5 then
win=false
loss=true
exit for
end if
next
if win or loss then exit for
next
if win then
response.write "你贏了!"
application(application("first" & session("class")))=false
application(application("second" & session("class")))=false
end if
if loss then
response.write "對不起,你輸了!"
application(application("first" & session("class")))=false
application(application("second" & session("class")))=false
end if
'列向判斷"|"
for j=1 to 15
win=false
loss=false
five_me=0
five_he=0
for i=1 to 15
if application("color" & session("class") & "_" & cstr(i) & "_" & cstr
(j))=m then
five_me=five_me+1
five_he=0
elseif application("color" & session("class") & "_" & cstr(i) & "_" &
cstr(j))=h then
five_me=0
five_he=five_he+1
else
five_me=0
five_he=0
end if
if five_me=5 then
win=true
loss=false
exit for
elseif five_he=5 then
win=false
loss=true
exit for
end if
next
if win or loss then exit for
next
if win then
response.write "你贏了!"
application(application("first" & session("class")))=false
application(application("second" & session("class")))=false
end if
if loss then
response.write "對不起,你輸了!"
application(application("first" & session("class")))=false
application(application("second" & session("class")))=false
end if
'斜向判斷"/"
for i=1 to 11
win=false
loss=false
five_me=0
five_he=0
for j=i+4 to 1 step -1
if application("color" & session("class") & "_" & cstr(j) & "_" & cstr
(i+5-j))=m then
five_me=five_me+1
five_he=0
elseif application("color" & session("class") & "_" & cstr(j) & "_" &
cstr(i+5-j))=h then
five_me=0
five_he=five_he+1
else
five_me=0
five_he=0
end if
if five_me=5 then
win=true
loss=false
exit for
elseif five_he=5 then
win=false
loss=true
exit for
end if
next
if win or loss then exit for
next
if win then
response.write "你贏了!"
application(application("first" & session("class")))=false
application(application("second" & session("class")))=false
end if
if loss then
response.write "對不起,你輸了!"
application(application("first" & session("class")))=false
application(application("second" & session("class")))=false
end if
'斜向判斷"\"
for i=1 to 11
win=false
loss=false
five_me=0
five_he=0
for j=12-i to 15
if application("color" & session("class") & "_" & cstr(13-i-j) & "_"
& cstr(j))=m then
five_me=five_me+1
five_he=0
elseif application("color" & session("class") & "_" & cstr(13-i-j)
& "_" & cstr(j))=h then
five_me=0
five_he=five_he+1
else
five_me=0
five_he=0
end if
if five_me=5 then
win=true
loss=false
exit for
elseif five_he=5 then
win=false
loss=true
exit for
end if
next
if win or loss then exit for
next
if win then
response.write "你贏了!"
application(application("first" & session("class")))=false
application(application("second" & session("class")))=false
end if
if loss then
response.write "對不起,你輸了!"
application(application("first" & session("class")))=false
application(application("second" & session("class")))=false
end if
%>
</body>
</Html>
如果某點沒有棋子,則加上一個超連接,根據擂主與攻擂手的區別放上一個不同顏色的棋子。最後的一段是用來判斷輸與贏,分為橫,列和兩個斜線方向。具體內容看一下就可以明白。
最後要說的一點就是global.asa ,這是站點上的一個核心文件,為了在退出棋局後,將位置留給別人,需要在sesison_onend中加入代碼進行處理,如下:
<script language=vbscript runat = server>
sub application_onstart
session.timeout=1
end sub
sub session_onstart
if application("num")="" then
application("num")=0
end if
application("num")=application("num")+1
end sub
</script>
<script language=vbscript runat = server>
sub session_onend
if application("num")="" then
application("num")=0
end if
application("num")=application("num")-1
if application("first1")=session("nice") then
application("first1")=""
elseif application("second1")=session("nice") then
application("second1")=""
elseif application("first2")=session("nice") then
application("first2")=""
elseif application("second2")=session("nice") then
application("second2")=""
elseif application("first3")=session("nice") then
application("first3")=""
elseif application("second3")=session("nice") then
application("second3")=""
elseif application("first4")=session("nice") then
application("first4")=""
elseif application("second4")=session("nice") then
application("second4")=""
elseif application("first5")=session("nice") then
application("first5")=""
elseif application("second5")=session("nice") then
application("second5")=""
end if
for i=1 to 15
for j=1 to 15
application("color" & session("class") & "_" & cstr(i) & "_" & cstr
(J))=""
application("pos" & session("class") & cstr(i) & "_" & cstr(j))=""
next
next
application(session("nice"))=""
end sub
</script>
以上就是幾個主要的文件,大家可以一試。什麼,想做圍棋?把棋盤改一下就可以了。