Игра на кръсчета и нули с Javascript
12-10-2009
Здравейте!

В този урок ще създадем една игра, която изисква минимални познания по Javascript и по-конкретно вземането на innerHTML. Не ни трябват картинки, всичко е в един файл.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<style type="text/css">
body {
margin:0;

}
a {
text-decoration:none;
color:black;
}
</style>
</head>
<body>

<script type="text/javascript">
/*

Автор: Тихомир Янев 07.08.2009
Играта е успешно тествана под IE 7, FF 3, Google Chrome 2 :)


Следващите няколко реда въвеждаме няколко важни променливи:

*/

var fields=20; // Колко полета да е квадратната мрежа (20*20=400 полета)
var kolko=5; // Колко поредни трябват за победа
var me="X"; // Символ на 1-ви играч
var you="O"; // Символ на 2-ри играч
var first=1; // Кой да започне играта (2 = 2-рия играч)
var empty="..."; // Как да изглеждат празните клетки
var font=21; // Големина на символите
var color1="#00a5f9"; // Цвят на първия играч
var color2="#ff7612"; // Цвят на 2-рия
var backgr="#cdcdcd"; // Цвят на фона
var ifwin="Печелите!"; // Какво да извежда при победа

// Не бутайте по-надолу освен ако не сте сигурни какво правите

var i,s,win,a1,check,br,a2;

var colors=new Array(2);
colors[0]=color1;
colors[1]=color2;

document.write('<table width="100%" height="100%" id="info" style="background:' + backgr + ';padding:5px;color:white;font-size:' + font + 'px;">');

/* сега ще изведем празни клетки, като на всяка от тях ще дадем id, за да може по-късно да се обръщаме към тях */

for (i=1;i<=fields;i++) {
document.write("<tr>");
for (k=1;k<=fields;k++)
document.write("<td id=\"" + i + "," + k + "\" style='border:1px solid gray;text-align:center'><a href='javascript:void(0)' onclick='set_one("+i+","+k+");check_win("+i+","+k+");'>" + empty + "</a></td>");
document.write("</tr>");
}

function set_one(k,l) {

if (!document.getElementById(k+ "," +l).innerHTML==empty)
return 0;
else {
if (first==1) {
s=me;
first=0;
}
else { s=you;
first=1;
}
document.getElementById(k+ "," +l).innerHTML=s;
document.getElementById(k+ "," +l).bgColor=colors[first];

}
}

function check_win(a,b) { // следва една огромна функция, която има за цел да провери дали печелите

//тук със сигурност има и по-лесен вариант, кодът трябва да се оптимизира

if (first==1)
check=you;

else check=me;

a1=a-1;
if (a1==0)
a1=1;
a2=a+1;
if (a2>fields)
a2=fields;

br=0;

if (document.getElementById(a1 + "," + b).innerHTML==check || document.getElementById(a2 + "," + b).innerHTML==check) {


for (x=1;x<=fields;x++) {

if (document.getElementById(x + "," + b).innerHTML==check)
br++;

else br=0;

if (br>=kolko) {
alert(ifwin);
window.location.reload();
}

}
}

a1=b-1;
if (a1==0)
a1=1;
a2=b+1;
if (a2>fields)
a2=fields;

br=0;
if (document.getElementById(a + "," + a1).innerHTML==check || document.getElementById(a + "," + a2).innerHTML==check) {


for (x=1;x<=fields;x++) {

if (document.getElementById(a + "," + x).innerHTML==check)
br++;

else br=0;

if (br>=kolko) {
alert(ifwin);
window.location.reload();
}

}
}

a1=a-1;
a2=b+1;
a3=b-1;
a4=a+1;
if (a1==0)
{
a1=1;
a2=b;
}
if (a2>fields) {
a2=fields;
a1=a;
}
if (a3==0) {
a3=1;
a1=a;
}
if (a4>fields) {
a4=fields;
a2=b;
}
br=0;

if (document.getElementById(a1 + "," + a3).innerHTML==check || document.getElementById(a4 + "," + a2).innerHTML==check) {

for (x=a,z=b;x>1 && z>1;x--,z--)
;

while (x<=fields && z<=fields) {
if (document.getElementById(x + "," + z).innerHTML==check)
br++;

else br=0;

if (br>=kolko) {
alert(ifwin);
window.location.reload();
}
x++;
z++;
}
}



br=0;
a1=a-1;
a2=b+1;
a3=b-1;
a4=a+1;
if (a1==0)
{
a1=1;
a2=b;
}
if (a2>fields) {
a2=fields;
a1=a;
}
if (a3==0){
a3=1;
a4=a;
}
if (a4>fields) {
a4=fields;
a3=b;
}
br=0;

if (document.getElementById(a1 + "," + a2).innerHTML==check || document.getElementById(a4 + "," + a3).innerHTML==check) {
for (x=a,z=b;x<fields && z>1;x++,z--)
;
//alert(x + "," + z);
while (z<=fields && x>0) {
//alert(x + "," + z);
if (document.getElementById(x + "," + z).innerHTML==check)
br++;

else br=0;

if (br>=kolko) {
alert(ifwin);
window.location.reload();
}
x--;
z++;
}
}
}

</script>
</table>
</body></html>


Това е всичко! Може да се усложни като се играе срещу компютър, който да изчислява на кое поле да сложи знак, но това оставям на вас.

ДЕМО на играта










/ Трябва да сте регистриран за да напишете коментар /
От: 0u7
17:49 12-10-2009
Интересно ;п
От: Foxy
14:47 14-10-2009
Е то хубаво, ама сами да играем срещу себе си ли?
От: bama
21:28 15-10-2009
Фащаш някой приятел и си подавате мишката :Д
От: icho
2:48 31-12-2009
Благодарско за страхотното изживяване!
Върна няколко души в детството :)
1