制作一款網(wǎng)頁(yè)游戲要怎么做
制作一款網(wǎng)頁(yè)游戲要怎么做
很多人想投身游戲行業(yè),成為真正的游戲制作人。但是他們對(duì)游戲的制作過(guò)程,和各個(gè)職位的職能都是比較陌生的。對(duì)網(wǎng)頁(yè)游戲開(kāi)發(fā)也不夠了解,但今天小編就告訴你們游戲到底是怎么制作出來(lái)的。
網(wǎng)頁(yè)游戲開(kāi)發(fā)的程序構(gòu)成分為三大部分
1、數(shù)據(jù)流程
數(shù)據(jù)流程其中,數(shù)據(jù)流程包括了功能。也只有在功能中才能體現(xiàn)數(shù)據(jù)流程。
比如最簡(jiǎn)單的賣(mài)買(mǎi)產(chǎn)品。要實(shí)現(xiàn)這個(gè)功能,那么需要有產(chǎn)品基礎(chǔ)表、產(chǎn)品詳細(xì)表、商店表、背包表。如果擴(kuò)展性更強(qiáng),相應(yīng)的雙表是少不不了的。
表的問(wèn)題都簡(jiǎn)單了,關(guān)鍵是這個(gè)物品有什么用,這樣物品的來(lái)源,一大堆數(shù)據(jù),物品的走向,又是一大堆數(shù)據(jù)。最后,這些數(shù)據(jù)得繞成一個(gè)圈。繞圈是一件困難的事情,特別是功能和道具多了起來(lái)的時(shí)候。難度是2的n次方。
2、美術(shù)
UI:簡(jiǎn)潔漂亮的界面總會(huì)有好處。
小圖標(biāo):道具,地圖,裝備,一類(lèi)至少10個(gè)吧?大體上百把個(gè)是需要的。
3、程序分5個(gè)部分
數(shù)據(jù)庫(kù):一大堆基礎(chǔ)數(shù)據(jù)表和詳細(xì)數(shù)據(jù)表?;A(chǔ)數(shù)據(jù)表:比如等級(jí)1到等級(jí)100的用戶(hù)的屬性初始值。詳細(xì)數(shù)據(jù)表:每個(gè)用戶(hù)的具體屬性。
功能頁(yè)面、功能函數(shù)。主要就是數(shù)據(jù)存取,判斷,數(shù)據(jù)走向。
制作網(wǎng)頁(yè)游戲詳細(xì)的例子
那么一個(gè)webgame的基本內(nèi)容需要
數(shù)據(jù)庫(kù):玩家、地圖、城市、建筑、武器、士兵。
功能:登陸、升級(jí)、個(gè)人戰(zhàn)斗、士兵之間的戰(zhàn)斗、與城市的戰(zhàn)斗、修建建筑、打造武器、買(mǎi)賣(mài)道具。(注意:每一個(gè)功能,必然對(duì)應(yīng)1個(gè)或多個(gè)數(shù)據(jù)表。上面數(shù)據(jù)庫(kù)中所列的只是基礎(chǔ)中的基礎(chǔ)。)
首先是地圖、城市、建筑。這里認(rèn)為,地圖可以有多張,城市在地圖上,建筑在城市內(nèi)。
地圖表Map :Map_ID ,X坐標(biāo),
Y坐標(biāo),City_ID(城市ID),描述。其中Map_ID是指地圖的id。不是自動(dòng)編號(hào)。一張地圖就是一個(gè)Map_ID,可以重復(fù)。
城市表City:City_ID,城市名字,城市所有人,城市等級(jí),城市資源,描述。
建筑表Build:ID,City_ID,建筑名稱(chēng),建筑等級(jí),建筑功能。
其中,地圖表確定城市的位置,城市表確定城市的相關(guān)數(shù)據(jù)以及所有人,建筑表內(nèi)的多條信息屬于某一個(gè)城市。
建表后,顯示出來(lái)。一個(gè)for循環(huán)。把地圖表整個(gè)取出來(lái)就ok。跟普通網(wǎng)站的新聞列表沒(méi)太大區(qū)別。不同的是,你需要取得X坐標(biāo)和Y坐標(biāo)定位??梢杂胻abel也可以用div。
class Map//地圖類(lèi){var $Map_ID;function
Map_bg_css($Map_ID) {
$this->Map_ID = $Map_ID;mysql_select_db($db_name,$link);$sql=”select * from map where
Map_ID=’”.$this->Map_ID.”‘ limit 1″; $result=mysql_query($sql,$link); echo “
type=”.”text”.”/”.”css>”;$rs=mysql_fetch_array($result); echo
“#map{”; echo “position:absolute;”; echo
“width:”.$rs[X坐標(biāo)].”px;”; echo “height:”.$rs[Y坐標(biāo)].”px;”; echo
“z-index:0;”; echo “left:0px;top:0px;}”;}function
Map_bg($Map_ID){
$this->Map_ID = $Map_ID;$sql=”select * from map where Map_ID=’”.$this->Map_ID.”‘”; $result=mysql_query($sql,$link);while($rs=mysql_fetch_array($result)){ echo “
”; echo
“
title=”.$rs[ID].”>
”;}}}
上面是一個(gè)很簡(jiǎn)單的地圖類(lèi)。代碼可能不太正確,意思是正確的。就是根據(jù)map表中的坐標(biāo),生成了一組div層,以及這一組層的css。你可以改為table的。你可以也把坐標(biāo)放到一個(gè)字段里,用數(shù)組的形式取。
使用的時(shí)候,用
new map;map(N);
其中N是map表里的地圖Map_ID.
城市內(nèi)的建筑也類(lèi)似。如果要顯示出來(lái)的話(huà)。
有了地圖和城市后。
涉及到的問(wèn)題就是城市里資源的產(chǎn)生。
這時(shí)候,City表里需要有可供判斷的時(shí)間和數(shù)量的字段。比如:產(chǎn)生資金量Money,產(chǎn)生資金花費(fèi)的時(shí)間Action_Time,上次產(chǎn)生資金時(shí)間Money_time。
這兩個(gè)字段的數(shù)值應(yīng)該在City_base表里出現(xiàn)。(即城市基礎(chǔ)表,不同等級(jí),不同類(lèi)型城市的對(duì)應(yīng)數(shù)值。這是給策劃填數(shù)據(jù)用的,建好表后就等策劃去頭痛吧。如果你身兼數(shù)職。。。)
如何自動(dòng)產(chǎn)生資源呢?
我們可以在城市所有人改變的時(shí)候,寫(xiě)入一個(gè)時(shí)間?;蛘咴诔鞘谐跏蓟臅r(shí)候?qū)懭胍粋€(gè)時(shí)間。
$Now_Time=date(’Y-m-d H:i:s’);
(說(shuō)明:$開(kāi)頭是變量的意思。php里特有的。如果是asp的話(huà)可以寫(xiě)成。Now_Time=Now()
)
把$Now_Time寫(xiě)入到Money_time里。
update(”UPDATE City SET Money_time=’$Now_Time
WHERE City_ID=’$City_ID’ LIMIT 1;”);
$City_ID是你自己定義的。指某一個(gè)城市。如:$City_ID=1;
我們假定當(dāng)前城市產(chǎn)生資金量為100。即$Money=100;(具體的數(shù)值,應(yīng)該是由City_base表里取出的。)
假設(shè)間隔時(shí)間為$Action_Time,我們?cè)偌俣ㄊ敲啃r(shí)執(zhí)行一次。即$Action_Time=3600;(具體的數(shù)值,是根據(jù)你的初始化表里取得的。也可以根據(jù)城市等級(jí)或者用戶(hù)等級(jí)取得。反正隨便你自己怎么設(shè)定。)
這時(shí)候,有基礎(chǔ)時(shí)間了。有基礎(chǔ)資金產(chǎn)量了。有間隔時(shí)間了。
讓它循環(huán)執(zhí)行起來(lái)就行了。
上面說(shuō)過(guò),服務(wù)端用C語(yǔ)言定時(shí)器??蛻?hù)端用javascript。
服務(wù)端,資源定時(shí)器設(shè)定為5分鐘執(zhí)行一次。那么我們的誤差就是5分鐘。對(duì)網(wǎng)頁(yè)游戲來(lái)說(shuō),可以接受。(戰(zhàn)斗的定時(shí)器得1分鐘吧。當(dāng)然服務(wù)器夠牛的話(huà),幾秒鐘都可以。)
每次執(zhí)行什么代碼呢?
首先得新建一個(gè)定時(shí)器任務(wù)的表。目的就是讓定時(shí)器知道需要執(zhí)行哪些程序和數(shù)據(jù)的更新。表內(nèi)容比如:城市資源更新。當(dāng)然,這個(gè)表可要可不要。建立的好處是方便處理類(lèi)似保護(hù)狀態(tài)不產(chǎn)生資源之類(lèi)的問(wèn)題。
服務(wù)端程序:
獲得當(dāng)前服務(wù)器時(shí)間。
獲得當(dāng)前需要更新城市。
判斷服務(wù)器時(shí)間與$Money_time的時(shí)間差。(時(shí)間戳,具體的時(shí)間戳網(wǎng)上資料滿(mǎn)多的。)
判斷時(shí)間差是否大于$Action_Time。
大于,則更新資源。同時(shí)更新$Money_time。小于,則無(wú)操作。
客戶(hù)端程序:
獲得當(dāng)前服務(wù)器時(shí)間。
獲得當(dāng)前城市的$Money,$Money_time,$Action_Time。
使用javascript顯示剩余時(shí)間的倒計(jì)時(shí),以及增加的資源量。
客戶(hù)端特殊情況觸發(fā):因?yàn)榭蛻?hù)端顯示的資源情況是偽同步,所以當(dāng)客戶(hù)端使用該資源的時(shí)候。需要服務(wù)端將當(dāng)前的實(shí)際資源更新,屬于定時(shí)器處理的時(shí)間也需要更新。即,當(dāng)客戶(hù)端觸發(fā)涉及資源的情況時(shí),立即更新當(dāng)前資源。同時(shí)更新定時(shí)器中會(huì)用到的$Money_time。這樣才不會(huì)造成,看的資源用不到,或者定時(shí)器重復(fù)產(chǎn)生資源。
總體來(lái)說(shuō)。這部分程序都很簡(jiǎn)單。難點(diǎn)在C語(yǔ)言定時(shí)器的制作,以及前臺(tái)javascipt倒計(jì)時(shí)的寫(xiě)法上。
C語(yǔ)言定時(shí)器,找個(gè)C語(yǔ)言程序員,超簡(jiǎn)單;前臺(tái)的javascipt,網(wǎng)上有很多倒計(jì)時(shí)的代碼,找個(gè)來(lái)改改就能用。
LANGUAGE=”JavaScript”>var maxtime =
這里是你的時(shí)間差///一個(gè)小時(shí),按秒計(jì)算,自己調(diào)整!function
CountDown(){if(maxtime>=0){minutes =
Math.floor(maxtime/60);seconds = Math.floor(maxtime%60);msg =
“你的文字說(shuō)明”+minutes+”分”+seconds+”秒”;//動(dòng)態(tài)顯示剩余時(shí)間。document.all["timer"].innerHTML=msg;//if(maxtime
== 3)
document.all["timer"].innerHTML=’只剩3秒!’;–maxtime;}else{clearInterval(timer);document.all["timer"].innerHTML=’時(shí)間到’;}}timer
= setInterval(”CountDown()”,1000);
這個(gè)是網(wǎng)上找的代碼。稍微修改就可以用的。這里只是顯示了倒計(jì)時(shí)。也可以改為顯示資源的增加情況。
C語(yǔ)言里操作mysql數(shù)據(jù)庫(kù)。
// TODO: Add your control notification handler
code herebool bRes = m_dbConn.Connect(”數(shù)據(jù)庫(kù)ip地址”, 3306 , “用戶(hù)名”,
“[email=d203!@#ghj]密碼[/email]“, “數(shù)據(jù)庫(kù)名”);
if(!bRes){AfxMessageBox(”connect fail”);return;}
string strSql = “select * from city limit
1″;//所有顯示或取值類(lèi)的都用這段。中間的sql語(yǔ)句可以自己構(gòu)造。ResultSet* rs =
m_dbConn.ExecuteQuery(strSql);while(rs->Next()){string str =
rs->GetString(”username”);AfxMessageBox(str.c_str());}/*strSql
= “update city set money=money +100 where
City_ID=’xxx’”;//所有的增加、刪除、更新都用這段,中間的sql語(yǔ)句可以自己構(gòu)造。
bRes = m_dbConn.ExecuteUpdate(strSql);
if(!bRes){AfxMessageBox(”ExecuteUpdate
fail”);}*/m_dbConn.Close();
定時(shí)器的主函數(shù)。void
CBeiLiDlg::Go(){while(true){//
AfxMessageBox(”go”);Sleep(5*1000);//毫秒。定時(shí)器刷新時(shí)間。}}//相當(dāng)?shù)暮?jiǎn)單..。
當(dāng)然。這里的C的代碼不能直接用。只是一部分。
地圖、城市、基本上算是有了。
接下來(lái)是城市里的建筑。
上面講的資源增加,其實(shí)定位在建筑上更準(zhǔn)確。不過(guò)建筑的分類(lèi)和數(shù)值會(huì)復(fù)雜很多。那是策劃考慮的問(wèn)題。
建筑上,只講一個(gè)前臺(tái)的修建效果。
當(dāng)然,這個(gè)效果是可有可無(wú)。你可以直接給個(gè)類(lèi)似新聞列表的顯示,再加個(gè)倒計(jì)時(shí)就行。顯示的效果就是,點(diǎn)修建后。不刷新頁(yè)面,調(diào)入一張動(dòng)畫(huà)圖片。并在時(shí)間到后自動(dòng)轉(zhuǎn)換為其他圖片。
language=’javascript’> function xiujian() {
top.abc.document.getElementById(’前臺(tái)建筑位置所在圖片的id’).src=’修建后建筑的圖片地址’;//顯示修建后的建筑圖片??梢约由虾笈_(tái)時(shí)間判斷。其中abc,是建筑所在層的id,
} function xiujian1() {
setTimeout(’xiujian()’,5000);//動(dòng)畫(huà)時(shí)間5秒。這里也可以加入時(shí)間判斷。當(dāng)時(shí)間不到的完成的時(shí)候,繼續(xù)調(diào)用動(dòng)畫(huà)。
} function donghua() {
top.abc.document.getElementById(’前臺(tái)建筑位置所在圖片的id’).src=’建筑動(dòng)畫(huà)所在的地址’;//顯示修建動(dòng)畫(huà)。
} donghua(); xiujian1();
后臺(tái)部分,把時(shí)間到增加資源的代碼改為時(shí)間到增加或更新建筑就行了。又是增加N個(gè)表。。
建筑基礎(chǔ)表:產(chǎn)出,類(lèi)型,圖片等等。。建筑詳細(xì)表:屬于哪個(gè)城市,可以在城市表里關(guān)聯(lián)。關(guān)聯(lián)的方式不同會(huì)對(duì)程序有很大的影響。各種關(guān)聯(lián)方式都行,但是一旦關(guān)聯(lián)方式確定后,最好別改動(dòng)。
現(xiàn)在建筑也有了。用類(lèi)似的定時(shí)方式,打工,征兵等等都可以實(shí)現(xiàn)。
戰(zhàn)斗,兵的參數(shù):兵種,數(shù)量,攻擊,防御等等。
戰(zhàn)斗的臨時(shí)表:誰(shuí)的兵,打誰(shuí),出發(fā)時(shí)間,戰(zhàn)斗時(shí)間,戰(zhàn)斗結(jié)果。
這里的幾個(gè)字到是簡(jiǎn)單。實(shí)際的表會(huì)復(fù)雜一些。
webgame中,戰(zhàn)斗的過(guò)程分兩種,
一種是給出雙方參數(shù),時(shí)間到,就根據(jù)公式計(jì)算結(jié)果。
一種是半即時(shí)或者即時(shí)的戰(zhàn)斗,可以邊打邊喝藥邊用技能的那種。
第一種流程。
點(diǎn)出兵。這時(shí)候,兵的參數(shù),出發(fā)時(shí)間,到達(dá)時(shí)間,都記錄進(jìn)戰(zhàn)斗臨時(shí)表。
定時(shí)器中,處理戰(zhàn)斗的部分,判斷時(shí)間是否到開(kāi)打的時(shí)候。到開(kāi)打的時(shí)間了,則取得被攻擊方的兵的參數(shù)。然后通過(guò)幾個(gè)公式計(jì)算結(jié)果。處理結(jié)果,比如誰(shuí)的兵掛了多少,戰(zhàn)場(chǎng)掉落了多少錢(qián),城市被誰(shuí)搶到了。一大堆判斷以及updata。(這里的定時(shí)器處理和獲得資源的定時(shí)器處理是很類(lèi)似的。)
最后把結(jié)果分別發(fā)給雙方。(又涉及到一個(gè)短信息系統(tǒng)。)
第二種流程。
點(diǎn)攻擊。馬上就處理數(shù)據(jù)。打打npc好做。玩家之間對(duì)戰(zhàn),也可以把被攻擊的玩家當(dāng)成npc來(lái)處理。
兩個(gè)人或兩人以上即時(shí)戰(zhàn)斗。需要用到ajax了。目前在技術(shù)上和理論上是沒(méi)問(wèn)題的,還沒(méi)實(shí)際寫(xiě)代碼,所以不好講。
很簡(jiǎn)單的公式,兩種戰(zhàn)斗都可以用到:
intval(sqrt($User_B_AP)-sqrt($User_A_DP));
根號(hào)下攻擊-根號(hào)下防御=傷害。
具體寫(xiě)的時(shí)候,公式肯定會(huì)復(fù)雜不少,不過(guò)這頭痛的事,還是交給策劃去做吧。
ajax函數(shù):(可選)某些需要偽即時(shí)的功能要用到。
javascript函數(shù):(可選)模擬客戶(hù)端的數(shù)據(jù)計(jì)算。也就是webgame的與時(shí)間相關(guān)的數(shù)據(jù)。分為兩部分。一部分是真實(shí)數(shù)據(jù),是由服務(wù)器端的定時(shí)器計(jì)算的。另一部分是只有初始值,客戶(hù)端顯示用的。不需要即時(shí)同步,僅僅需要模擬同步就行。
服務(wù)器定時(shí)器:(C語(yǔ)言或自己設(shè)定服務(wù)器)定時(shí)循環(huán)執(zhí)行某一段代碼。而這段代碼主要是根據(jù)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行更新。這個(gè)可以找個(gè)C語(yǔ)言程序員來(lái)做。對(duì)于C語(yǔ)言程序員來(lái)講,這個(gè)功能是相當(dāng)?shù)暮?jiǎn)單。當(dāng)然,具體的處理數(shù)據(jù)的判斷和操作數(shù)據(jù)庫(kù),需要你自己寫(xiě)。讓C語(yǔ)言程序員給你段標(biāo)準(zhǔn)代碼就行了。完全支持sql語(yǔ)句的。
當(dāng)然在網(wǎng)頁(yè)游戲開(kāi)發(fā)前,還要組織相關(guān)的專(zhuān)業(yè)人才,制作一款網(wǎng)絡(luò)游戲需要的最核心人才是原畫(huà)、2D、3D、程序設(shè)計(jì)、策劃等這些方面的人才是必不可少的,因此,要開(kāi)發(fā)一個(gè)網(wǎng)頁(yè)游戲除了要程序員以外,千萬(wàn)不要忘了準(zhǔn)備以上人才。
網(wǎng)頁(yè)游戲游戲種類(lèi)
策略類(lèi)
可以說(shuō)策略類(lèi)游戲這是最主流的一類(lèi)網(wǎng)頁(yè)游戲,玩家在游戲中扮演的是一塊領(lǐng)域(星球/國(guó)家/城市等)的統(tǒng)治者,可以招募英雄(將軍),通過(guò)發(fā)展自己的領(lǐng)域去占領(lǐng)周邊的領(lǐng)域,或者侵占其他玩家的領(lǐng)域。戰(zhàn)爭(zhēng)以系統(tǒng)自動(dòng)計(jì)算的方式進(jìn)行,勝負(fù)取決于雙方的軍事實(shí)力,所以不在線的玩家只要建設(shè)好防御設(shè)施擁有足夠的防御兵力就不用擔(dān)心被別人侵略。
“借鑒”了《OGAME》的作品可謂舉不勝舉,較為流行的就有:《戰(zhàn)千雄》、《臥龍吟》、《戰(zhàn)神世界》、《地球帝國(guó)網(wǎng)絡(luò)》、《亂舞春秋》、《圖騰三國(guó)》、《世界領(lǐng)袖》與《三國(guó)風(fēng)云》等。
寵物養(yǎng)成類(lèi)
這類(lèi)游戲雖然在玩家數(shù)量上不如前面的戰(zhàn)爭(zhēng)策略類(lèi)游戲,不過(guò)寵物養(yǎng)成類(lèi)的游戲數(shù)量可絕對(duì)不比任何戰(zhàn)爭(zhēng)策略類(lèi)游戲少,比較知名的如《怪物世界》、《寵物特工》、《創(chuàng)世之光》、《最終幻想WEB》等。這其中MOP的《貓游記》已經(jīng)成了養(yǎng)寵型網(wǎng)頁(yè)游戲的代表之作。與其他類(lèi)型的WEB游戲相比,該類(lèi)型游戲更注重玩家之間的交流與互動(dòng),更接近于一個(gè)社區(qū)網(wǎng)游。游戲中,玩家可以培養(yǎng)自己的寵物,通過(guò)打怪練級(jí)來(lái)提高寵物的各項(xiàng)屬性,還可以和其他玩家的寵物進(jìn)行PK競(jìng)技。同時(shí),寵物還可以擁有自己的技能和裝備,可以與其他寵物合成......但從寵物系統(tǒng)上來(lái)看《貓游記》已經(jīng)和普通的網(wǎng)絡(luò)游戲沒(méi)什么兩樣了。
網(wǎng)頁(yè)MMORPG類(lèi)
角色扮演類(lèi)網(wǎng)頁(yè)游戲中的《笑傲江湖》大概可以算是中國(guó)網(wǎng)頁(yè)游戲的鼻祖級(jí)游戲了,《笑傲江湖》從最早的江湖聊天室演變發(fā)展而來(lái),早在2000年的時(shí)候就曾經(jīng)風(fēng)行一時(shí),擁有N多個(gè)游戲版本。玩家在游戲中扮演初出茅廬的俠客,通過(guò)各種方式(如任務(wù)、打怪、PK等)升級(jí)提高自己的能力屬性,可以購(gòu)買(mǎi)或打造武器裝備、修煉或自創(chuàng)武功技能,可以創(chuàng)建或加入某個(gè)門(mén)派?;旧衔鋫b題材類(lèi)網(wǎng)游所擁有的功能,它都能實(shí)現(xiàn)。
休閑競(jìng)技類(lèi)
休閑競(jìng)技類(lèi)游戲是當(dāng)前最受歡迎的網(wǎng)頁(yè)游戲之一,用戶(hù)可以在放松身心的同時(shí)獲得游戲帶來(lái)的樂(lè)趣,休閑競(jìng)技類(lèi)游戲通常操作簡(jiǎn)易,畫(huà)面以卡通形象為主,內(nèi)容又十分豐富,同時(shí)游戲又帶有一定的競(jìng)爭(zhēng)性,是玩家?guī)в袏蕵?lè)的心態(tài)去競(jìng)技。比如:彈彈堂,坦克大戰(zhàn),熱舞街等。
模擬經(jīng)營(yíng)類(lèi)
模擬經(jīng)營(yíng)類(lèi)游戲是由玩家扮演管理者的角色,對(duì)游戲中虛擬的現(xiàn)實(shí)世界進(jìn)行經(jīng)營(yíng)管理。模擬經(jīng)營(yíng)類(lèi)游戲按游戲載體分,主要包括模擬經(jīng)營(yíng)類(lèi)單機(jī)游戲和模擬經(jīng)營(yíng)類(lèi)網(wǎng)頁(yè)游戲,模擬經(jīng)營(yíng)類(lèi)網(wǎng)頁(yè)游戲主要表現(xiàn)在體育類(lèi)型較為多一些,代表作由:足球經(jīng)理、籃球經(jīng)理、商業(yè)大亨等。
猜您感興趣: