「ゲーム」の編集履歴(バックアップ)一覧はこちら
「ゲーム」(2012/05/23 (水) 13:53:18) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
#Flash(<HTML>
<HEAD>
<TITLE>オセロゲームサンプル</TITLE>
<SCRIPT language="JavaScript">
//*******************************************************************
//** グローバル変数定義(どの関数からも参照可能) **
//*******************************************************************
var count_kuro; var count_siro; //盤上のそれぞれの石数
var siro_pass; var kuro_pass; //パスフラグ
var tysen=1; //デモ:1、 対人間:2
var gspeed; //wait時間(処理速度)
var hspeed=200; //反転スピード
var yusen=new Array(60); //白の優先順の場所
yusen[0] =0; yusen[1] =7; yusen[2]=63; yusen[3]=56; yusen[4]=19;
yusen[5]=20; yusen[6]=29; yusen[7]=37; yusen[8]=44; yusen[9]=43;
yusen[10]=34;yusen[11]=26;yusen[12]=21;yusen[13]=45;yusen[14]=42;
yusen[15]=18;yusen[16]=11;yusen[17]=12;yusen[18]=30;yusen[19]=38;
yusen[20]=52;yusen[21]=51;yusen[22]=33;yusen[23]=25;yusen[24] =3;
yusen[25] =4;yusen[26]=31;yusen[27]=39;yusen[28]=60;yusen[29]=59;
yusen[30]=32;yusen[31]=24;yusen[32]=17;yusen[33]=10;yusen[34]=13;
yusen[35]=22;yusen[36]=46;yusen[37]=53;yusen[38]=50;yusen[39]=41;
yusen[40] =2;yusen[41] =5;yusen[42]=23;yusen[43]=47;yusen[44]=61;
yusen[45]=58;yusen[46]=40;yusen[47]=16;yusen[48] =1;yusen[49] =6;
yusen[50]=15;yusen[51]=55;yusen[52]=62;yusen[53]=57;yusen[54]=48;
yusen[55] =8;yusen[56] =9;yusen[57]=14;yusen[58]=54;yusen[59]=49;
var ikuro=new Array(60); //黒の優先順の場所
ikuro[0]=56; ikuro[1]=63; ikuro[2] =7; ikuro[3] =0; ikuro[4]=43;
ikuro[5]=44; ikuro[6]=37; ikuro[7]=29; ikuro[8]=20; ikuro[9]=19;
ikuro[10]=26;ikuro[11]=34;ikuro[12]=45;ikuro[13]=21;ikuro[14]=18;
ikuro[15]=42;ikuro[16]=59;ikuro[17]=60;ikuro[18]=39;ikuro[19]=31;
ikuro[20] =4;ikuro[21] =3;ikuro[22]=24;ikuro[23]=32;ikuro[24]=58;
ikuro[25]=61;ikuro[26]=47;ikuro[27]=23;ikuro[28] =5;ikuro[29] =2;
ikuro[30]=16;ikuro[31]=40;ikuro[32]=51;ikuro[33]=52;ikuro[34]=38;
ikuro[35]=30;ikuro[36]=12;ikuro[37]=11;ikuro[38]=25;ikuro[39]=33;
ikuro[40]=53;ikuro[41]=46;ikuro[42]=22;ikuro[43]=13;ikuro[44]=10;
ikuro[45]=17;ikuro[46]=41;ikuro[47]=50;ikuro[48]=57;ikuro[49]=62;
ikuro[50]=55;ikuro[51]=15;ikuro[52] =6;ikuro[53] =1;ikuro[54] =8;
ikuro[55]=48;ikuro[56]=49;ikuro[57]=54;ikuro[58]=14;ikuro[59] =9;
var siro=1; var kuro=2; var clickok; var x; var y; var ino; var iro;
var up_left; var upp; var down; var left; var rgt; var up_rgt;
var down_left; var down_rgt;
var haichi = new Array();
for(i=0;i<64;i++){haichi[i]=0}
haichi[27]=haichi[36]=siro; haichi[28]=haichi[35]=kuro;
//画像の設定
drawishi = new Array();
drawishi[0]=new Image();drawishi[0].src="haikei.gif";
drawishi[1]=new Image();drawishi[1].src="siro.gif";
drawishi[2]=new Image();drawishi[2].src="kuro.gif";
drawishi[3]=new Image();drawishi[3].src="hanten.gif";
//*******************************************************************
//*** 開始ボタン **
//*******************************************************************
function g_start(){
var i;
siro_pass=kuro_pass=0;
gspeed=document.form1.tspeed.value;
if(gspeed < 0) gspeed=0;
if(gspeed > 9000) gspeed=9000;
for(i=0;i<64;i++){
if(haichi[i]!==0){
if(i==27 || i==36)
{haichi[i]=siro;document.images[i].src=drawishi[siro].src;
}else{
if(i==28 || i==35)
{haichi[i]=kuro;document.images[i].src=drawishi[kuro].src;
}else{
haichi[i]=0;document.images[i].src=drawishi[0].src;
};
};
};
};
clickok=2;
document.form1.info.value="黒の番";
if (tysen==1){
settei_kuro(kuro);
};
};
//*******************************************************************
//** メイン実行**
//*******************************************************************
function Main_Sub(){
var i1;
count_kuro=count_siro=0;
for(i1=0;i1<=63;i1++){
if(haichi[i1]==kuro){count_kuro++};
if(haichi[i1]==siro){count_siro++};
};
document.form1.kuro.value=count_kuro;
document.form1.siro.value=count_siro;
//パスのチェック
siro_pass=1;
for (i1=0;i1<=63;i1++){
ino=i1; x=ino%8; y=(ino-x)/8;
flg=getck(x,y,siro);
if (flg != 0 ){siro_pass=0; break;};
};
kuro_pass=1;
for (i1=0;i1<=63;i1++){
ino=i1; x=ino%8; y=(ino-x)/8;
flg=getck(x,y,kuro);
if (flg != 0 ){kuro_pass=0; break;};
};
//終了チェック
if (kuro_pass==1 && siro_pass==1) {
gamesett(); return;
}
if(count_kuro+count_siro==64 || count_kuro==0 || count_siro==0){
gamesett(); return;
}else{
if(clickok==1){
if(siro_pass==0){
document.form1.info.value="コンピュータの番(考え中)";
setTimeout('settei(siro)',gspeed);
}else{
clickok=2;
document.form1.info.value="白はパスです。黒の番";
if (tysen==1) setTimeout('settei_kuro(kuro)',gspeed);
};
}else{
if(kuro_pass==0){
document.form1.info.value="黒の番";
if (tysen==1) setTimeout('settei_kuro(kuro)',gspeed);
}else{
clickok=1;
document.form1.info.value="黒はパスです。白の番";
setTimeout('settei(siro)',gspeed);
};
};
};
};
//********************************************************************
//** 置ける場所チェック **
//********************************************************************
function getck(x,y,irono){
var iflg;
up_left=ck_ok(x,y,-1,-1,irono); //上左方向
left=ck_ok(x,y,-1,0,iro); //左方向
down_left=ck_ok(x,y,-1,1,irono); //下左方向
down=ck_ok(x,y,0,1,irono); //下方向
down_rgt=ck_ok(x,y,1,1,irono); //下右方向
rgt=ck_ok(x,y,1,0,irono); //右方向
up_rgt=ck_ok(x,y,1,-1,irono); //上右方向
upp=ck_ok(x,y,0,-1,irono); //上方向
iflg=upp+down+left+rgt+up_left+up_rgt+down_left+down_rgt;
return iflg;
};
//********************************************************************
//** 反転数を得る **
//********************************************************************
function ck_ok(x,y,xx,yy,irono){
var num=0;
if(haichi[x+y*8]!=0) return 0; //空白でなければNG
x=x+xx;y=y+yy; //指定の方向に1つ進む
if(x<0 || 7<x || y<0 || 7<y) return 0; //盤外で終了
while(haichi[x+y*8]==3-irono){ //相手の色(反転対象)
num++;x=x+xx;y=y+yy;
if(x<0 || 7<x || y<0 || 7<y) return 0;
};
if(haichi[x+y*8]!=irono) return 0; //自分で終わる(はさめるかチェック)
return num;
};
//********************************************************************
//** 反転対象の色変え **
//********************************************************************
function Hanten_iti(){
if(0<upp){i=1;while(i<upp+1) {
document.images[ino-8*i].src=drawishi[3].src;i++};
};
if(0<down){i=1;while(i<down+1) {
document.images[ino+8*i].src=drawishi[3].src;i++};
};
if(0<rgt){i=1;while(i<rgt+1) {
document.images[ino+i].src=drawishi[3].src;i++};
};
if(0<left){i=1;while(i<left+1) {
document.images[ino-i].src=drawishi[3].src;i++};
};
if(0<up_rgt){i=1;while(i<up_rgt+1) {
document.images[ino-7*i].src=drawishi[3].src;i++};
};
if(0<up_left){i=1;while(i<up_left+1) {
document.images[ino-9*i].src=drawishi[3].src;i++};
};
if(0<down_rgt){i=1;while(i<down_rgt+1) {
document.images[ino+9*i].src=drawishi[3].src;i++};
};
if(0<down_left){i=1;while(i<down_left+1) {
document.images[ino+7*i].src=drawishi[3].src;i++};
};
setTimeout('Hanten()',hspeed); //反転石を0.2秒表示
};
//*******************************************************************
//** 反転の色替え **
//*******************************************************************
function Hanten(){
if(0<upp){i=1;while(i<upp+1){
haichi[ino-8*i]=iro;
document.images[ino-8*i].src=drawishi[iro].src;i++};
};
if(0<down){i=1;while(i<down+1){
haichi[ino+8*i]=iro;
document.images[ino+8*i].src=drawishi[iro].src;i++};
};
if(0<rgt){i=1;while(i<rgt+1){
haichi[ino+i]=iro;
document.images[ino+i].src=drawishi[iro].src;i++};
};
if(0<left){i=1;while(i<left+1){
haichi[ino-i]=iro;
document.images[ino-i].src=drawishi[iro].src;i++};
};
if(0<up_rgt){i=1;while(i<up_rgt+1){
haichi[ino-7*i]=iro;
document.images[ino-7*i].src=drawishi[iro].src;i++};
};
if(0<up_left){i=1;while(i<up_left+1){
haichi[ino-9*i]=iro;
document.images[ino-9*i].src=drawishi[iro].src;i++};
};
if(0<down_rgt){i=1;while(i<down_rgt+1){
haichi[ino+9*i]=iro;
document.images[ino+9*i].src=drawishi[iro].src;i++};
};
if(0<down_left){i=1;while(i<down_left+1){
haichi[ino+7*i]=iro;
document.images[ino+7*i].src=drawishi[iro].src;i++};
};
Main_Sub();
};
//*******************************************************************
// ゲーム終了 **
//*******************************************************************
function gamesett(){
clickok=0;
if(count_kuro == count_siro){
document.form1.info.value="引き分けです";
}else if(count_kuro > count_siro){
document.form1.info.value="まいりました、黒の勝ちです";
}else{
document.form1.info.value="黒の負けです。";
};
};
//*******************************************************************
//** 黒の番です **
//*******************************************************************
function input_kuro(i){
var flg; var i0;
if(clickok!=2 || haichi[i]!=0) return;
x=i%8;y=(i-x)/8;ino=i;iro=kuro;clickok=1;
flg=getck(x,y,kuro);
if(flg!=0){
haichi[ino]=iro;
document.images[ino].src=drawishi[iro].src;
setTimeout('Hanten_iti()',gspeed);
}else{
document.form1.info.value="そこには置けません";
clickok=2;
};
};
//*******************************************************************
//** デモ用黒の入力 **
//*******************************************************************
function settei_kuro(kuro){
var i; var flg;
iro=kuro; clickok=1; // 初期設定
for (i=0;i<60;i++){
x=ikuro[i]%8; y=(ikuro[i]-x)/8; ino=ikuro[i];
flg=getck(x,y,kuro);
if(flg!=0){
haichi[ino]=iro;
document.images[ino].src=drawishi[iro].src;
setTimeout('Hanten_iti()',hspeed); return;
};
};
document.form1.info.value="黒はパスです。白の番です。";
Main_Sub();
};
//*******************************************************************
//** 白入力用 **
//*******************************************************************
function settei(siro){
var i; var flg;
iro=siro; clickok=2; //初期化設定
for (i=0;i<60;i++){
x=yusen[i]%8; y=(yusen[i]-x)/8; ino=yusen[i];
flg=getck(x,y,siro);
if(flg!=0){
haichi[ino]=iro;
document.images[ino].src=drawishi[iro].src;
setTimeout('Hanten_iti()',hspeed); return; //反転処理
};
};
document.form1.info.value="白はパスです。黒の番です。";
Main_Sub();
};
//*******************************************************************
//** ロジック終了 **
//*******************************************************************
</SCRIPT>
</HEAD>
<BODY bgcolor="#eeffee" text="#111122">
<BR>
<DIV align="center">
<FORM name="form1"> <FONT SIZE="3" FONT color="#000000">
<PRE>実行時間(mmsec)(0-9000の範囲)<INPUT type="text" size="4" name="tspeed" value="1000">
デモ:<INPUT TYPE="radio" NAME="ttype" CHECKED onClick="tysen=1"> 人間対コンピュータ:<INPUT TYPE="radio" NAME="ttype" onClick="tysen=2">
あなた(黒)<INPUT type="text" size="2" name="kuro" value="2"> コンピュータ(白)<INPUT type="text" size="2" name="siro" value="2">
<BR>
<INPUT type="text" size="36" name="info" value="開始ボタンを押してください。">
</PRE>
</FONT>
</FORM>
</DIV>
<TABLE align="center" border=3 bgcolor="#006633">
<TR><TD>
<SCRIPT LANGUAGE="JavaScript">
var i; var i1;
for(i=0; i<64; i++){
i1=i+1;
document.write('<A href="JavaScript:input_kuro(',i,')"><IMG src="haikei.gif" WIDTH=38 HEIGHT=38 BORDER=0></A>');
if(i1%8 == 0) document.write('<BR>');
};
document.images[27].src=drawishi[siro].src;
document.images[28].src=drawishi[kuro].src;
document.images[35].src=drawishi[kuro].src;
document.images[36].src=drawishi[siro].src;
</SCRIPT>
</TD></TR>
</TABLE>
<BR>
<DIV align="center">
<FORM name="form2"> <FONT SIZE="3">
<INPUT TYPE="button" VALUE="開始" onClick="g_start()"><BR>
</FONT>
</FORM>
</DIV>
</BODY>
</HTML>
)
#javascript(<HTML>
<HEAD>
<TITLE>オセロ</TITLE>
<SCRIPT language="JavaScript">
//*******************************************************************
//** グローバル変数定義(どの関数からも参照可能) **
//*******************************************************************
var count_kuro; var count_siro; //盤上のそれぞれの石数
var siro_pass; var kuro_pass; //パスフラグ
var tysen=1; //デモ:1、 対人間:2
var gspeed; //wait時間(処理速度)
var hspeed=200; //反転スピード
var yusen=new Array(60); //白の優先順の場所
yusen[0] =0; yusen[1] =7; yusen[2]=63; yusen[3]=56; yusen[4]=19;
yusen[5]=20; yusen[6]=29; yusen[7]=37; yusen[8]=44; yusen[9]=43;
yusen[10]=34;yusen[11]=26;yusen[12]=21;yusen[13]=45;yusen[14]=42;
yusen[15]=18;yusen[16]=11;yusen[17]=12;yusen[18]=30;yusen[19]=38;
yusen[20]=52;yusen[21]=51;yusen[22]=33;yusen[23]=25;yusen[24] =3;
yusen[25] =4;yusen[26]=31;yusen[27]=39;yusen[28]=60;yusen[29]=59;
yusen[30]=32;yusen[31]=24;yusen[32]=17;yusen[33]=10;yusen[34]=13;
yusen[35]=22;yusen[36]=46;yusen[37]=53;yusen[38]=50;yusen[39]=41;
yusen[40] =2;yusen[41] =5;yusen[42]=23;yusen[43]=47;yusen[44]=61;
yusen[45]=58;yusen[46]=40;yusen[47]=16;yusen[48] =1;yusen[49] =6;
yusen[50]=15;yusen[51]=55;yusen[52]=62;yusen[53]=57;yusen[54]=48;
yusen[55] =8;yusen[56] =9;yusen[57]=14;yusen[58]=54;yusen[59]=49;
var ikuro=new Array(60); //黒の優先順の場所
ikuro[0]=56; ikuro[1]=63; ikuro[2] =7; ikuro[3] =0; ikuro[4]=43;
ikuro[5]=44; ikuro[6]=37; ikuro[7]=29; ikuro[8]=20; ikuro[9]=19;
ikuro[10]=26;ikuro[11]=34;ikuro[12]=45;ikuro[13]=21;ikuro[14]=18;
ikuro[15]=42;ikuro[16]=59;ikuro[17]=60;ikuro[18]=39;ikuro[19]=31;
ikuro[20] =4;ikuro[21] =3;ikuro[22]=24;ikuro[23]=32;ikuro[24]=58;
ikuro[25]=61;ikuro[26]=47;ikuro[27]=23;ikuro[28] =5;ikuro[29] =2;
ikuro[30]=16;ikuro[31]=40;ikuro[32]=51;ikuro[33]=52;ikuro[34]=38;
ikuro[35]=30;ikuro[36]=12;ikuro[37]=11;ikuro[38]=25;ikuro[39]=33;
ikuro[40]=53;ikuro[41]=46;ikuro[42]=22;ikuro[43]=13;ikuro[44]=10;
ikuro[45]=17;ikuro[46]=41;ikuro[47]=50;ikuro[48]=57;ikuro[49]=62;
ikuro[50]=55;ikuro[51]=15;ikuro[52] =6;ikuro[53] =1;ikuro[54] =8;
ikuro[55]=48;ikuro[56]=49;ikuro[57]=54;ikuro[58]=14;ikuro[59] =9;
var siro=1; var kuro=2; var clickok; var x; var y; var ino; var iro;
var up_left; var upp; var down; var left; var rgt; var up_rgt;
var down_left; var down_rgt;
var haichi = new Array();
for(i=0;i<64;i++){haichi[i]=0}
haichi[27]=haichi[36]=siro; haichi[28]=haichi[35]=kuro;
//画像の設定
drawishi = new Array();
drawishi[0]=new Image();drawishi[0].src="haikei.gif";
drawishi[1]=new Image();drawishi[1].src="siro.gif";
drawishi[2]=new Image();drawishi[2].src="kuro.gif";
drawishi[3]=new Image();drawishi[3].src="hanten.gif";
//*******************************************************************
//*** 開始ボタン **
//*******************************************************************
function g_start(){
var i;
siro_pass=kuro_pass=0;
gspeed=document.form1.tspeed.value;
if(gspeed < 0) gspeed=0;
if(gspeed > 9000) gspeed=9000;
for(i=0;i<64;i++){
if(haichi[i]!==0){
if(i==27 || i==36)
{haichi[i]=siro;document.images[i].src=drawishi[siro].src;
}else{
if(i==28 || i==35)
{haichi[i]=kuro;document.images[i].src=drawishi[kuro].src;
}else{
haichi[i]=0;document.images[i].src=drawishi[0].src;
};
};
};
};
clickok=2;
document.form1.info.value="黒の番";
if (tysen==1){
settei_kuro(kuro);
};
};
//*******************************************************************
//** メイン実行**
//*******************************************************************
function Main_Sub(){
var i1;
count_kuro=count_siro=0;
for(i1=0;i1<=63;i1++){
if(haichi[i1]==kuro){count_kuro++};
if(haichi[i1]==siro){count_siro++};
};
document.form1.kuro.value=count_kuro;
document.form1.siro.value=count_siro;
//パスのチェック
siro_pass=1;
for (i1=0;i1<=63;i1++){
ino=i1; x=ino%8; y=(ino-x)/8;
flg=getck(x,y,siro);
if (flg != 0 ){siro_pass=0; break;};
};
kuro_pass=1;
for (i1=0;i1<=63;i1++){
ino=i1; x=ino%8; y=(ino-x)/8;
flg=getck(x,y,kuro);
if (flg != 0 ){kuro_pass=0; break;};
};
//終了チェック
if (kuro_pass==1 && siro_pass==1) {
gamesett(); return;
}
if(count_kuro+count_siro==64 || count_kuro==0 || count_siro==0){
gamesett(); return;
}else{
if(clickok==1){
if(siro_pass==0){
document.form1.info.value="コンピュータの番(考え中)";
setTimeout('settei(siro)',gspeed);
}else{
clickok=2;
document.form1.info.value="白はパスです。黒の番";
if (tysen==1) setTimeout('settei_kuro(kuro)',gspeed);
};
}else{
if(kuro_pass==0){
document.form1.info.value="黒の番";
if (tysen==1) setTimeout('settei_kuro(kuro)',gspeed);
}else{
clickok=1;
document.form1.info.value="黒はパスです。白の番";
setTimeout('settei(siro)',gspeed);
};
};
};
};
//********************************************************************
//** 置ける場所チェック **
//********************************************************************
function getck(x,y,irono){
var iflg;
up_left=ck_ok(x,y,-1,-1,irono); //上左方向
left=ck_ok(x,y,-1,0,iro); //左方向
down_left=ck_ok(x,y,-1,1,irono); //下左方向
down=ck_ok(x,y,0,1,irono); //下方向
down_rgt=ck_ok(x,y,1,1,irono); //下右方向
rgt=ck_ok(x,y,1,0,irono); //右方向
up_rgt=ck_ok(x,y,1,-1,irono); //上右方向
upp=ck_ok(x,y,0,-1,irono); //上方向
iflg=upp+down+left+rgt+up_