Суббота, 21.02.2026, 19:11
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Морской бой
Kaza4ok
 Дата: Воскресенье, 20.12.2009, 15:43 | Сообщение # 1

Группа: Пользователи
Сообщений: 276
Награды: 4
Уважение: 8716
Code
]<html>   
<head>   
<style type="text/css">   
.intro { FONT-SIZE: 10pt; FONT-STYLE: italic}   
.heading { FONT-FAMILY: sans-serif; FONT-SIZE: 14pt; FONT-WEIGHT: bold }   
.title { BACKGROUND-COLOR: navy; COLOR: white; FONT-FAMILY: sans-serif; FONT-SIZE: 18pt; FONT-WEIGHT: bold; TEXT-ALIGN: center }   
#adv { HEIGHT: 60px; LEFT: 0px; TOP: 0px; WIDTH: 468px }   
</style>   
</HEAD>   
<body>   
<script language="JavaScript">   
<!-- Begin   
/* Information used to draw the ships   
*/   
var ship = [[[1,5], [1,2,5], [1,2,3,5], [1,2,3,4,5]], [[6,10], [6,7,10], [6,7,8,10], [6,7,8,9,10]]];   
/* Information used to draw sunk ships   
*/   
var dead = [[[201,203], [201,202,203], [201,202,202,203], [201,202,202,202,203]], [[204,206], [204,205,206], [204,205,205,206], [204,205,205,205,206]]];   
/* Information used to describe ships   
*/   
var shiptypes = [["Минер",2,4],["Фрегат",3,4],[ "Крейсер",4,2],[ "Боевой Корабль",5,1]];   

var gridx = 16, gridy = 16;   
var player = [], computer = [], playersships = [], computersships = [];   
var playerlives = 0, computerlives = 0, playflag=true, statusmsg="";   

/* Function to preload all the images, to prevent delays during play   
*/   
var preloaded = [];   
function imagePreload() {   
var i,ids = [1,2,3,4,5,6,7,8,9,10,100,101,102,103,201,202,203,204,205,206];   
window.status = "Идет загруска картинок.....";   
for (i=0;i<ids.length;++i) {   
var img = new Image, name = "img/batt"+ids[i]+".gif";   
img.src = name;   
preloaded[i] = img;   
}   
window.status = "";   
}   

/* Function to place the ships in the grid   
*/   
function setupPlayer(ispc) {   
var y,x;   
grid = [];   
for (y=0;y<gridx;++y) {   
grid[y] = [];   
for (x=0;x<gridx;++x)   
grid[y][x] = [100,-1,0];   
}   

var shipno = 0;   
var s;   
for (s=shiptypes.length-1;s>=0;--s) {   
var i;   
for (i=0;i<shiptypes[s][2];++i) {   
var d = Math.floor(Math.random()*2);   
var len = shiptypes[s][1], lx=gridx, ly=gridy, dx=0, dy=0;   
if ( d==0) {   
lx = gridx-len;   
dx=1;   
}   
else {   
ly = gridy-len;   
dy=1;   
}   
var x,y,ok;   
do {   
y = Math.floor(Math.random()*ly);   
x = Math.floor(Math.random()*lx);   
var j,cx=x,cy=y;   
ok = true;   
for (j=0;j<len;++j) {   
if (grid[cy][cx][0] < 100) {   
ok=false;   
break;   
}   
cx+=dx;   
cy+=dy;   
}   
} while(!ok);   
var j,cx=x,cy=y;   
for (j=0;j<len;++j) {   
grid[cy][cx][0] = ship[d][s][j];   
grid[cy][cx][1] = shipno;   
grid[cy][cx][2] = dead[d][s][j];   
cx+=dx;   
cy+=dy;   
}   
if (ispc) {   
computersships[shipno] = [s,shiptypes[s][1]];   
computerlives++;   
}   
else {   
playersships[shipno] = [s,shiptypes[s][1]];   
playerlives++;   
}   
shipno++;   
}   
}   
return grid;   
}   

/* Function to change an image shown on a grid   
*/   
function setImage(y,x,id,ispc) {   
if ( ispc ) {   
computer[y][x][0] = id;   
document.images["pc"+y+"_"+x].src = "img/batt"+id+".gif";   
}   
else {   
player[y][x][0] = id;   
document.images["ply"+y+"_"+x].src = "img/batt"+id+".gif";   
}   
}   

/* Function to insert HTML source for a grid   
*/   
function showGrid(ispc) {   
var y,x;   
for (y=0;y<gridy;++y) {   
for (x=0;x<gridx;++x) {   
if ( ispc )   
document.write ('<a href="" OnClick="gridClick('+y+','+x+');return false;"><img name="pc'+y+'_'+x+'" src="img/batt100.gif" width=16 height=16 border=0></a>');   
else   
document.write ('<img name="ply'+y+'_'+x+'" src="img/batt'+player[y][x][0]+'.gif" width=16 height=16 border=0>');   
}   
document.write('<img src=img/dot.gif width=1 height=16><br>');   
}   
polewidth = 1 + gridx * 16;   
document.write('<img src=img/dot.gif width='+polewidth+' height=1><br>');   
}   

/* Handler for clicking on the grid   
*/   
function gridClick(y,x) {   
if ( playflag ) {   
if (computer[y][x][0] < 100) {   
setImage(y,x,103,true);   
var shipno = computer[y][x][1];   
if ( --computersships[shipno][1] == 0 ) {   
sinkShip(computer,shipno,true);   
//alert("You sank my "+shiptypes[computersships[shipno][0]][0]+"!");   
updateStatus();   
if ( --computerlives == 0 ) {   
alert("Вы победили!");   
playflag = false;   
}   
}   
if ( playflag ) computerMove();   
}   
else if (computer[y][x][0] == 100) {   
setImage(y,x,102,true);   
computerMove();   
}   
}   
}   

/* Function to make the computers move. Note that the computer does not cheat, oh no!   
*/   
function computerMove() {   
var x,y,pass;   
var sx,sy;   
var selected = false;   

/* Make two passes during 'shoot to kill' mode   
*/   
for (pass=0;pass<2;++pass) {   
for (y=0;y<gridy && !selected;++y) {   
for (x=0;x<gridx && !selected;++x) {   
/* Explosion shown at this position   
*/   
if (player[y][x][0]==103) {   
sx=x; sy=y;   
var nup=(y>0 && player[y-1][x][0]<=100);   
var ndn=(y<gridy-1 && player[y+1][x][0]<=100);   
var nlt=(x>0 && player[y][x-1][0]<=100);   
var nrt=(x<gridx-1 && player[y][x+1][0]<=100);   
if ( pass == 0 ) {   
/* On first pass look for two explosions   
in a row - next shot will be inline   
*/   
var yup=(y>0 && player[y-1][x][0]==103);   
var ydn=(y<gridy-1 && player[y+1][x][0]==103);   
var ylt=(x>0 && player[y][x-1][0]==103);   
var yrt=(x<gridx-1 && player[y][x+1][0]==103);   
if ( nlt && yrt) { sx = x-1; selected=true; }   
else if ( nrt && ylt) { sx = x+1; selected=true; }   
else if ( nup && ydn) { sy = y-1; selected=true; }   
else if ( ndn && yup) { sy = y+1; selected=true; }   
}   
else {   
/* Second pass look for single explosion -   
fire shots all around it   
*/   
if ( nlt ) { sx=x-1; selected=true; }   
else if ( nrt ) { sx=x+1; selected=true; }   
else if ( nup ) { sy=y-1; selected=true; }   
else if ( ndn ) { sy=y+1; selected=true; }   
}   
}   
}   
}   
}   
if ( !selected ) {   
/* Nothing found in 'shoot to kill' mode, so we're just taking   
potshots. Random shots are in a chequerboard pattern for   
maximum efficiency, and never twice in the same place   
*/   
do{   
sy = Math.floor(Math.random() * gridy);   
sx = Math.floor(Math.random() * gridx/2)*2+sy%2;   
} while( player[sy][sx][0]>100 );   
}   
if (player[sy][sx][0] < 100) {   
/* Hit something   
*/   
setImage(sy,sx,103,false);   
var shipno = player[sy][sx][1];   
if ( --playersships[shipno][1] == 0 ) {   
sinkShip(player,shipno,false);   
//alert("I sank your "+shiptypes[playersships[shipno][0]][0]+"!");   
if ( --playerlives == 0 ) {   
knowYourEnemy();   
alert("Вы проиграли!");   
playflag = false;   
}   
}   
}   
else {   
/* Missed   
*/   
setImage(sy,sx,102,false);   
}   
}   

/* When whole ship is hit, show it using changed graphics   
*/   
function sinkShip(grid,shipno,ispc) {   
var y,x;   
for (y=0;y<gridx;++y) {   
for (x=0;x<gridx;++x) {   
if ( grid[y][x][1] == shipno )   
if (ispc) setImage(y,x,computer[y][x][2],true);   
else setImage(y,x,player[y][x][2],false);   
}   
}   
}   

/* Show location of all the computers ships - when player has lost   
*/   
function knowYourEnemy() {   
var y,x;   
for (y=0;y<gridx;++y) {   
for (x=0;x<gridx;++x) {   
if ( computer[y][x][0] == 103 )   
setImage(y,x,computer[y][x][2],true);   
else if ( computer[y][x][0] < 100 )   
setImage(y,x,computer[y][x][0],true);   
}   
}   
}   

/* Show how many ships computer has left   
*/   
function updateStatus() {   
var f=false,i,s = "Корабли компьютера: ";   
for (i=0;i<computersships.length;++i) {   
if (computersships[i][1] > 0) {   
if (f) s=s+", "; else f=true;   
s = s + shiptypes[computersships[i][0]][0];   
}   
}   
if (!f) s = s + "ничего не осталось";   
statusmsg = s;   
window.status = statusmsg;   
}   
function setStatus() {   
window.status = statusmsg;   
}   

function NewGame() {   
var rndnum = Math.round(Math.random() * 100000);   
oldlocation = window.location;   
window.location= "index.htm?"+ rndnum;   
}   

var ie4 = (document.all) ? true : false;   
var nn4 = (document.layers) ? true : false;   

/* Start the game!   
*/   
imagePreload();   
player = setupPlayer(false);   
computer = setupPlayer(true);   
document.write("<center><table><tr><td align=center>Флот Компьютера</td>"+   
"<td align=center>Ваш Флот</td></tr><tr><td>");   
showGrid(true);   
document.write("</td><td>");   
showGrid(false);   
document.write("</td></tr></table></center>");   
document.write("<center><form><INPUT style=\"color: #00cc00; background-color: #000000; border-color: #00cc00;\" type=\"submit\" VALUE=\"Новая Игра !\"></form></center>");   
updateStatus();   
setInterval("setStatus();", 500);   
// End -->   
</script>   
</div>   
</body>   
</html>


 
  • Страница 1 из 1
  • 1
Поиск:



X-Force-cs.clan.su © 2009-2026 | Сайт оптимизирован под браузер FireFox Mozila. Sitemap | Sitemap-forum.
Дизайн данного сайта полностью принадлежит Администратору X-Factor-cs.clan.su.