オセロゲーム

レベル→1:2:

このゲームの遊び方

  1. コンピュータのレベルを選ぶ。レベル1が弱く、レベル2が強い。
  2. 先手で開始」か「後手で開始」かを選び、ボタンを押すと、ゲーム開始。
  3. 自分のコマ(石)を置きたい場所をクリックすると、そこにコマが置かれる。
  4. コンピューターのレベルは途中で変更可能。やめて新しくゲームを始めたい場合は、2からやり直し。

(c)1997 naohiro izumi氏作・交々改造

<script>
sq=new Array(64);
for(i=1; i<=64;
i++) sq[i]=0;
sq[28]=2; sq[29]=1;
sq[36]=1; sq[37]=2;
ps=new Array(64);
pn=0;nm=new Array(2);
od=0;
pa=0;
lv=2;
po=new Array(64);
function timer(n){d1=new Date();d2=new Date();while(d2.getTime()-d1.getTime()<=n) d2=new Date();}
function check(n){i=1; a=0;while(i<=pn && a==0){if(ps[i]==n) a=1;i++;}return a;}
function count(n){pn=0; ps[0]=0;for(i=1; i<=64; i++){if(sq[i]==0){if(i>=17 && sq[i-8]==(od==n)+1){a=0; b=0;while(a==0 && i-b>=17){if(sq[i-16-b]==0) a=1;if(sq[i-16-b]==(od!=n)+1){a=1; pn++; ps[pn]=i;}b=b+8;}}if(ps[pn]!=i && i<=48 && sq[i+8]==(od==n)+1){a=0; b=0;while(a==0 && i+b<=48){if(sq[i+16+b]==0) a=1;if(sq[i+16+b]==(od!=n)+1){a=1; pn++; ps[pn]=i;}b=b+8;}}if(ps[pn]!=i && i%8+(i%8==0)*8>=3 && sq[i-1]==(od==n)+1){a=0; b=0;while(a==0 && i%8+(i%8==0)*8-b>=3){if(sq[i-2-b]==0) a=1;if(sq[i-2-b]==(od!=n)+1){a=1; pn++; ps[pn]=i;}b=b+1;}}if(ps[pn]!=i && i%8+(i%8==0)*8<=6 && sq[i+1]==(od==n)+1){a=0; b=0;while(a==0 && i%8+(i%8==0)*8+b<=6){if(sq[i+2+b]==0) a=1;if(sq[i+2+b]==(od!=n)+1){a=1; pn++; ps[pn]=i;}b=b+1;}}if(ps[pn]!=i && i>=17 && i%8+(i%8==0)*8>=3 && sq[i-9]==(od==n)+1){a=0; b=0;while(a==0 && i-b>=17 && i%8+(i%8==0)*8-b/9>=3){if(sq[i-18-b]==0) a=1;if(sq[i-18-b]==(od!=n)+1){a=1; pn++; ps[pn]=i;}b=b+9;}}if(ps[pn]!=i && i<=48 && i%8+(i%8==0)*8<=6 && sq[i+9]==(od==n)+1){a=0; b=0;while(a==0 && i+b<=48 && i%8+(i%8==0)*8+b/9<=6){if(sq[i+18+b]==0) a=1;if(sq[i+18+b]==(od!=n)+1){a=1; pn++; ps[pn]=i;}b=b+9;}}if(ps[pn]!=i && i>=17 && i%8+(i%8==0)*8<=6 && sq[i-7]==(od==n)+1){a=0; b=0;while(a==0 && i-b>=17 && i%8+(i%8==0)*8+b/7<=6){if(sq[i-14-b]==0) a=1;if(sq[i-14-b]==(od!=n)+1){a=1; pn++; ps[pn]=i;}b=b+7;}}if(ps[pn]!=i && i<=48 && i%8+(i%8==0)*8>=3 && sq[i+7]==(od==n)+1){a=0; b=0;while(a==0 && i+b<=48 && i%8+(i%8==0)*8-b/7>=3){if(sq[i+14+b]==0) a=1;if(sq[i+14+b]==(od!=n)+1){a=1; pn++; ps[pn]=i;}b=b+7;}}}}}
function put(m,n){document.images[n-1].src='oth_img'+((od!=m)+1)+'.gif';sq[n]=(od!=m)+1; nm[m]++;if(n>=17 && sq[n-8]==(od==m)+1){a=0; b=0;while(a==0 && n-b>=17){if(sq[n-b-16]==0) a=1;if(sq[n-b-16]==(od!=m)+1){for(i=0; i<=b; i=i+8){timer(300);document.images[n-i-9].src='oth_img'+((od!=m)+1)+'.gif';sq[n-i-8]=(od!=m)+1; nm[m]++; nm[(m==1)+1]--;}a=1;}b=b+8;}}if(n>=17 && n%8+(n%8==0)*8<=6 && sq[n-7]==(od==m)+1){a=0; b=0;while(a==0 && n-b>=17 && n%8+(n%8==0)*8+b/7<=6){if(sq[n-b-14]==0) a=1;if(sq[n-b-14]==(od!=m)+1){for(i=0; i<=b; i=i+7){timer(300);document.images[n-i-8].src='oth_img'+((od!=m)+1)+'.gif';sq[n-i-7]=(od!=m)+1; nm[m]++; nm[(m==1)+1]--;}a=1;}b=b+7;}}if(n%8+(n%8==0)*8<=6 && sq[n+1]==(od==m)+1){a=0; b=0;while(a==0 && n%8+(n%8==0)*8+b<=6){if(sq[n+2+b]==0) a = 1;if(sq[n+2+b]==(od!=m)+1){for(i=0; i<=b; i++){timer(300);document.images[n+i].src='oth_img'+((od!=m)+1)+'.gif';sq[n+i+1]=(od!=m)+1; nm[m]++; nm[(m==1)+1]--;}a=1;}b=b+1;}}if(n<=48 && n%8+(n%8==0)*8<=6 && sq[n+9]==(od==m)+1){a=0; b=0;while(a==0 && n+b<=48 && n%8+(n%8==0)*8+b/9<=6){if(sq[n+b+18]==0) a=1;if(sq[n+b+18]==(od!=m)+1){for(i=0; i<=b; i=i+9){timer(300);document.images[n+i+8].src='oth_img'+((od!=m)+1)+'.gif';sq[n+i+9]=(od!=m)+1; nm[m]++; nm[(m==1)+1]--;}a=1;}b=b+9;}}if(n<=48 && sq[n+8]==(od==m)+1){a=0; b=0;while(a==0 && n+b<=48){if(sq[n+b+16]==0) a=1;if(sq[n+b+16]==(od!=m)+1){for(i=0; i<=b; i=i+8){timer(300);document.images[n+i+7].src='oth_img'+((od!=m)+1)+'.gif';sq[n+i+8]=(od!=m)+1; nm[m]++; nm[(m==1)+1]--;}a=1;}b=b+8;}}if(n<=48 && n%8+(n%8==0)*8>=3 && sq[n+7]==(od==m)+1){a=0; b=0;while(a==0 && n+b<=48 && n%8+(n%8==0)*8-b/7>=3){if(sq[n+b+14]==0) a=1;if(sq[n+b+14]==(od!=m)+1){for(i=0; i<=b; i=i+7){timer(300);document.images[n+i+6].src='oth_img'+((od!=m)+1)+'.gif';sq[n+i+7]=(od!=m)+1; nm[m]++; nm[(m==1)+1]--;}a=1;}b=b+7;}}if(n%8+(n%8==0)*8>=3 && sq[n-1]==(od==m)+1){a=0; b=0;while(a==0 && n%8+(n%8==0)*8-b>=3){if(sq[n-2-b]==0) a=1;if(sq[n-2-b]==(od!=m)+1){for(i=0; i<=b; i++){timer(300);document.images[n-i-2].src='oth_img'+((od!=m)+1)+'.gif';sq[n-i-1]=(od!=m)+1; nm[m]++; nm[(m==1)+1]--;}a=1;}b=b+1;}}if(n>=17 && n%8+(n%8==0)*8>=3 && sq[n-9]==(od==m)+1){a=0; b=0;while(a==0 && n-b>=17 && n%8+(n%8==0)*8-b/9>=3){if(sq[n-b-18]==0) a=1;if(sq[n-b-18]==(od!=m)+1){for(i=0; i<=b; i=i+9){timer(300);document.images[n-i-10].src='oth_img'+((od!=m)+1)+'.gif';sq[n-i-9]=(od!=m)+1; nm[m]++; nm[(m==1)+1]--;}a=1;}b=b+9;}}status='プレイヤー:'+nm[1]+' コンピューター:'+nm[2];}
function think(){if(lv==1){z=ps[Math.ceil(Math.random()*pn)];}if(lv==2){hp=0;for(i=1; i<=pn; i++){pd='8477774842555524756666577560065775600657756666574255552484777748';po[i]=parseInt(pd.charAt(ps[i]-1));pd='0133331010000001300000033000000330000003300000031000000101333310';if((Math.ceil(ps[i]/8)==1 || Math.ceil(ps[i]/8)==8) && ps[i]%8!=1 && ps[i]%8!=0){if(sq[ps[i]-1]!=0 && sq[ps[i]+1]!=0 && nm[1]+nm[2]<56){po[i]=parseInt(pd.charAt(ps[i]-1));}else{a=0;if(sq[ps[i]-1]==0 && sq[ps[i]+1]!=0) a=1;if(sq[ps[i]-1]!=0 && sq[ps[i]+1]==0) a=-1;if(a!=0){if(sq[ps[i]+a]==(od!=2)+1){b=a; y=0;while(y==0 && (Math.ceil((ps[i]+a+b)/8)==1 || Math.ceil((ps[i]+a+b)/8)==8)){if(sq[ps[i]+a+b]==(od==2)+1) po[i]=parseInt(pd.charAt(ps[i]-1));if(sq[ps[i]+a+b]==0){po[i]=7.5; y=1;}b=b+a;}}if(sq[ps[i]+a]==(od==2)+1){if((ps[i]+a)%8==0 || (ps[i]+a)%8==1){po[i]=parseInt(pd.charAt(ps[i]-1));}else{b=a;if(sq[ps[i]+a+b]==0) po[i]=parseInt(pd.charAt(ps[i]-1));if(sq[ps[i]+a+b]==(od!=2)+1){po[i]=7.5; b=b+a; y=0;while(y==0 &&(Math.ceil((ps[i]+a+b)/8)==1 || Math.ceil((ps[i]+a+b)/8)==8)){if(sq[ps[i]+a+b]==(od==2)+1){po[i]=parseInt(pd.charAt(ps[i]-1)); y=1;}if(sq[ps[i]+a+b]==0){po[i]=7.8; y=1;}b=b+a;}}if(sq[ps[i]+a+b]==(od==2)+1){po[i]=parseInt(pd.charAt(ps[i]-1));b=b+a; y=0;while(y==0 && (Math.ceil((ps[i]+a+b)/8)==1 || Math.ceil((ps[i]+a+b)/8)==8)){if(sq[ps[i]+a+b]==(od!=2)+1){po[i]=7.5; b=b+a; w=0;while(w==0 && (Math.ceil((ps[i]+a+b)/8)==1 || Math.ceil((ps[i]+a+b)/8)==8)){if(sq[ps[i]+a+b]==(od==2)+1){po[i]=parseInt(pd.charAt(ps[i]-1)); w=1;}if(sq[ps[i]+a+b]==0){po[i]=7.8; w=1;}b=b+a;}}else{if(sq[ps[i]+a+b]==0) y=1;b=b+a;}}}}}}}}if((ps[i]%8==0 || ps[i]%8==1) && Math.ceil(ps[i]/8)!=1 && Math.ceil(ps[i]/8)!=8){if(sq[ps[i]-8]!=0 && sq[ps[i]+8]!=0 && nm[1]+nm[2]<56){po[i]=parseInt(pd.charAt(ps[i]-1));}else{a=0;if(sq[ps[i]-8]==0 && sq[ps[i]+8]!=0) a=8;if(sq[ps[i]-8]!=0 && sq[ps[i]+8]==0) a=-8;if(a!=0){if(sq[ps[i]+a]==(od!=2)+1){b=a; y=0;while(y==0 && Math.ceil((ps[i]+a+b)/8)>=1 && Math.ceil((ps[i]+a+b)/8)<=8){if(sq[ps[i]+a+b]==(od==2)+1){po[i]=parseInt(pd.charAt(ps[i]-1)); y=1;}if(sq[ps[i]+a+b]==0){po[i]=7.5; y=1;}b=b+a;}}if(sq[ps[i]+a]==(od==2)+1){if(Math.ceil((ps[i]+a)/8)==1 || Math.ceil((ps[i]+a)/8)==8){po[i]=parseInt(pd.charAt(ps[i]-1));}else{b=a;if(sq[ps[i]+a+b]==0) po[i]=parseInt(pd.charAt(ps[i]-1));if(sq[ps[i]+a+b]==(od!=2)+1){po[i]=7.5; b=b+a; y=0;while(y==0 && Math.ceil((ps[i]+a+b)/8)>=1 && Math.ceil((ps[i]+a+b)/8)<=8){if(sq[ps[i]+a+b]==(od==2)+1) po[i]=parseInt(pd.charAt(ps[i]-1));if(sq[ps[i]+a+b]==0) y=1;b=b+a;}}if(sq[ps[i]+a+b]==(od==2)+1){po[i]=parseInt(pd.charAt(ps[i]-1));b=b+a; y=0;while(y==0 && Math.ceil((ps[i]+a+b)/8)>=1 && Math.ceil((ps[i]+a+b)/8)<=8){if(sq[ps[i]+a+b]==(od!=2)+1){po[i]=7.5; b=b+a; w=0;while(w==0 && Math.ceil((ps[i]+a+b)/8)>=1 && Math.ceil((ps[i]+a+b)/8)<=8){if(sq[ps[i]+a+b]==(od==2)+1){po[i]=parseInt(pd.charAt(ps[i]-1)); w=1;}if(sq[ps[i]+a+b]==0){po[i]=7.8; w=1;}b=b+a;}}else{if(sq[ps[i]+a+b]==0) y=1;b=b+a;}}}}}}}}po[i]=po[i]*(Math.random()/100+0.995);if(po[i]>hp){hp=po[i]; z=ps[i];}}}return z;}
function decide(){a=1;if(nm[1]==0){a=0; alert(nm[1]+'対'+nm[2]+'であなたのパーフェクト負けです。');}else{if(nm[2]==0){a=0; alert(nm[1]+'対'+nm[2]+'であなたのパーフェクト勝ちです。');}else{if(nm[1]+nm[2]==64 || pa==2){a=0;if(nm[1]>nm[2]) alert(nm[1]+'対'+nm[2]+'であなたの勝ちです。');if(nm[1]==nm[2]) alert(nm[1]+'対'+nm[2]+'で引き分けです。');if(nm[1]<nm[2]) alert(nm[1]+'対'+nm[2]+'であなたの負けです。');}}}return a;}
function gamestart(n){for(i=1; i<=64; i++) sq[i]=0;sq[28]=2; sq[29]=1; sq[36]=1; sq[37]=2;nm[1]=2; nm[2]=2; od=n;for(i=1; i<=64; i++) document.images[i-1].src = 'oth_img'+sq[i]+'.gif';if(od==2){count(2);put(2,think());}count(1);}
function choose(n){if(check(n)){put(1,n); pa=0;if(decide()){t=0;while(t==0){t=1;count(2);if(pn==0){alert('コンピュータは置けるところがありません。'); pa++;}else{timer(300); put(2,think()); pa=0;}if(pa!=2 && decide()){count(1);if(pn==0){alert('あなたは置けるところがありません。'); t=0; pa++;}}if(pa==2){decide(); t=1;}}}}else{alert('そこには置くことができません。');}}
</script>