Về việc áp dụng game chủ yếu vẫn là tính điểm, và game chỉ có thể dùng javascript.
Cách tính điểm sử dụng gửi bài để trừ point sẽ hao tốn tài nguyên diễn đàn và sẽ mất thêm 1 lần tài dữ liệu, phải mất nhân công dọn rác rồi còn tìm cách ẩn trên last ...
Mình đã sử dụng cách tính điểm riêng so với point của forum nên sẽ dễ xử lý hơn rất nhiều,
Hệ thống sẽ tính điểm dựa trên số bài viết của thành viên kết hợp với 1 dữ liệu ẩn là số điểm đã sử dụng.
Khi vừa bắt đầu áp dụng thì mình cũng sẽ dễ dàng xây dựng bảng thống kê 10 thành viên có nhiều điểm nhất.
Chi tiết thực hiện hệ thống tính điểm:
1 - Lấy số bài viết, thêm 3 số 0 để có số điểm gốc.
2 - Tạo field chứa số điểm đã sử dụng.
3 - Lấy điểm gốc trừ cho số điểm sử dụng để sử dụng tính toán trong game (hoặc shop).
4 - Lấy top thành viên gửi bài nhiều nhất làm danh sách chuẩn.
5 - Khi thành viên truy cập game (hoặc shop) sẽ lấy dữ liệu điểm so sánh với danh sách chuẩn, nếu số điểm vào top thì cập nhật lại danh sách, mình nghĩ nên dùng wall để chứa dữ liệu ấy, khi cần truy xuất bảng top điểm chỉ cần lấy bài đầu tiên trên wall.
Game javascript làm chủ yếu là giải trí cho thành viên và ko thể bảo mật nên hi vọng không có thánh nào tự mãn đi hack game.
Vừa làm lại game Casino số 7 để test thử cách tính điểm, trong code có sử dụng một số hàm riêng nên không thể copy là sài được.
http://www.fmvi.vn/h43-casino-so-7
- Code:
<style type="text/css">
/* casiono seven - baivong - www.fmvi.vn */
#buttonC .button,#casinoR{display:none;float:none}
.casino{background:url(http://i15.servimg.com/u/f15/16/58/89/73/1-4-2010.png) repeat-y top left;width:75px;height:75px}
.fmvi1{background-position:0 0!important}
.fmvi2{background-position:0 -75px!important}
.fmvi3{background-position:0 -150px!important}
.fmvi4{background-position:0 -225px!important}
.fmvi5{background-position:0 -300px!important}
.fmvi6{background-position:0 -375px!important}
.fmvi7{background-position:0 -450px!important}
.itemC{display:inline-block;height:145px;overflow:hidden;position:relative;width:75px;margin:10px;
}
.gadi{display:inline-block;height:145px;left:0;width:75px;z-index:10;background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjM5JSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjU5Ii8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 39%, rgba(255,255,255,0.59) 75%, rgba(255,255,255,1) 100%);background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(39%,rgba(255,255,255,0)), color-stop(75%,rgba(255,255,255,0.59)), color-stop(100%,rgba(255,255,255,1)));background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 39%,rgba(255,255,255,0.59) 75%,rgba(255,255,255,1) 100%);background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 39%,rgba(255,255,255,0.59) 75%,rgba(255,255,255,1) 100%);background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 39%,rgba(255,255,255,0.59) 75%,rgba(255,255,255,1) 100%);background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 39%,rgba(255,255,255,0.59) 75%,rgba(255,255,255,1) 100%);filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff',GradientType=0 );}
.itemC div{position:absolute}
</style>
<div class="center">
<p>Thông báo: <span id="casinoT">Phiên bản thử nghiệm<span></p>
<p>Điểm hiện có: <span id="casinoM">Đang kiểm tra...<span></p>
<input type="hidden" id="casinoR" value="Đang kiểm tra..." />
</div>
<div class="center">
<div class="itemC">
<div class="gadi"></div>
<div id="casinox1" class="casino fmvi6" style="top: -40px;"></div>
<div id="casino1" class="casino fmvi7" style="top: 35px;"></div>
<div id="casinoy1" class="casino fmvi1" style="bottom: -40px;"></div>
</div>
<div class="itemC">
<div class="gadi"></div>
<div id="casinox2" class="casino fmvi4" style="top: -40px;"></div>
<div id="casino2" class="casino fmvi5" style="top: 35px;"></div>
<div id="casinoy2" class="casino fmvi6" style="bottom: -40px;"></div>
</div>
<div class="itemC">
<div class="gadi"></div>
<div id="casinox3" class="casino fmvi2" style="top: -40px;"></div>
<div id="casino3" class="casino fmvi3" style="top: 35px;"></div>
<div id="casinoy3" class="casino fmvi4" style="bottom: -40px;"></div>
</div>
</div>
<p id="buttonC" class="center">
<button id="startcasino" class="button">
Bắt đầu
</button>
<button id="stop1" class="button">
Dừng 1
</button>
<button id="stop2" class="button">
Dừng 2
</button>
<button id="stop3" class="button">
Dừng 3
</button>
</p>
<script type="text/javascript">
var casino = "version 1 - by baivong - www.fmvi.vn";
$.ajax({
type: "GET",
cache: false,
url: "/u" + $("#numID").text(),
success: function (d) {
var e = $(d).find("#profile_field_13_3").val();
d = $(d).find("#field_id-6 div").text() + "0000";
"" == e ? e = 0 : null != my_getcookie("casino") && ($("#casinoM").text(d), fmviPoint("restore", my_getcookie("casino")), e = my_getcookie("casino"));
d = eval(d) - eval(e);
$("#casinoM").text(d);
$("#casinoR").val(e);
$("#startcasino").fadeIn();
checkP(d);
$("#startcasino").click(function () {
checkP($("#casinoM").text());
$("#casinoT").text("L\u00e0m gi\u00e0u n\u00e0o...");
playC("a", casino.match(/\d/), 50);
playC("b", 2, 65);
playC("c", 3, 30);
$("#startcasino").hide();
$("#stop1").show()
});
$("#stop1,#stop2").click(function () {
checkP($("#casinoM").text());
$(this).hide().next().show()
});
$("#stop3").click(function () {
checkP($("#casinoM").text());
$("#startcasino").text("Ch\u01a1i l\u1ea1i");
$(this).hide();
var a = $("#casino1").attr("class").match(/\d/).toString(),
b = $("#casino2").attr("class").match(/\d/).toString(),
c = $("#casino3").attr("class").match(/\d/).toString();
3 == a && 3 == b && 3 == c ? fmviPoint("Gold 7", 100000) : 5 == a && 5 == b && 5 == c ? fmviPoint("Red 7", 70000) : 7 == a && 7 == b && 7 == c ? fmviPoint("Blue 7", 50000) : 6 == a && 6 == b && 6 == c ? fmviPoint("Gold Bars", 30000) : 2 == a && 2 == b && 2 == c ? fmviPoint("Red Bars", 25000) : 4 == a && 4 == b && 4 == c ? fmviPoint("Blue Bar", 20000) : 1 == a && 1 == b && 1 == c ? fmviPoint("Cherry", 15000) : /[357]/.test(a) && /[357]/.test(b) && /[357]/.test(c) && a != b && b != c && a != c ? fmviPoint("VIP seven", 150000) : /[246]/.test(a) && /[246]/.test(b) && /[246]/.test(c) && a != b && b != c && a != c ? fmviPoint("Seri Bars", 120000) : a == b || a == c || b == c ? fmviPoint("Double", 10000) : fmviPoint("Tr\u1eadt r\u1ed3i em \u01a1i", -5000)
})
}
});
function fmviPoint(d, e) {
var a;
checkP($("#casinoM").text());
"restore" == d ? ($("#casinoR").val(-e), $("#casinoT").text("Ph\u1ee5c h\u1ed3i do l\u1ed7i (" + e + " \u0111i\u1ec3m)"), a = 1) : ($("#casinoT").text(d + " (" + e + " \u0111i\u1ec3m)"), a = eval($("#casinoR").val()) - eval(e), $("#casinoM").text(eval($("#casinoM").text()) + eval(e)), $("#casinoR").val(a));
0 == a ? $("#startcasino").fadeIn() : $.ajax({
type: "POST",
cache: !1,
dataType: "json",
url: "/ajax_profile.forum?jsoncallback=?",
data: {
id: 3,
user: $("#numID").text(),
active: 1,
content: '[["profile_field_13_3", "' + $("#casinoR").val() + '"]]',
tid: $("#qjump input[name='tid']").val()
},
success: function (a) {
undefined != a[3] ? (null != my_getcookie("casino") && (document.cookie = "casino=; expires=Monday, December 1, 2010 0:0:0 AM;"), $("#startcasino").fadeIn(), $("#casinoR").val(a[3])) : (sendbot("g\u0103\u0323p l\u00f4\u0303i khi ch\u01a1i game casino 7 (" + $("#casinoR").val() + " \u0111i\u1ec3m)"), my_setcookie("casino", $("#casinoR").val(), !0), $("#buttonC").html('<button style="display:inline" class="button" onclick="javascript:window.location.reload();">C\u00f3 l\u1ed7i x\u1ea3y ra. Click v\u00e0o \u0111\u00e2y \u0111\u1ec3 t\u1ea3i l\u1ea1i trang</button>'));
checkP($("#casinoM").text())
}
})
}
function playC(c, b, e) {
var d = 1,
a;
c = setInterval(function () {
a = d++;
7 == a && (d = 1);
x = a - 1;
0 == x && (x = 7);
y = a + 1;
8 == y && (y = 1);
$("#casino" + b).removeClass().addClass("casino fmvi" + a);
$("#casinox" + b).removeClass().addClass("casino fmvi" + x);
$("#casinoy" + b).removeClass().addClass("casino fmvi" + y)
}, e);
$("#stop" + b).click(function () {
clearInterval(c)
})
}
function checkP(a) {
0 >= eval(a) && ($("#buttonC").html('<a style="display:inline" class="button" href="/">B\u1ea1n kh\u00f4ng \u0111\u1ee7 \u0111i\u1ec3m, vui l\u00f2ng quay l\u1ea1i sau</a>'), clearInterval("a"), clearInterval("b"), clearInterval("b"))
}
</script>
Đây là chuyên mục dự án nên rất cần ý kiến đóng góp của các bạn.