電子書籍の厳選無料作品が豊富!

if(pawn > 0)continue;
margin = [ 0,0,0,0,0,2,1,1 ];
flip = 1-(player*2);
y = ofsy+(player*8)+(margin[id]*flip);
while(isinside(x,y,ofsx,ofsy,9,9) == true){
if(board[y][x].id == -1){
drawpiece(x,y,-1,0,3);
board[y][x].movable = true;
}
y += flip;
}
}return;
}
for (dir=0; dir<10; dir++){
x = startx;
y = starty;
flip = 1-(player*2);
while(movtbl[id][dir] > 0){
x += x1[dir];
y += y1[dir]*flip;
if(isinside(x,y,ofsx,ofsy,9,9) == false)break;
id2 = board[y][x].id;
player2 = board[y][x].player;
if((id2 != -1)&&(player == player2))break;
drawpiece(x,y,id2,player2,3);
board[y][x].movable = true;
if(id2 != -1)break;
if(movtbl[id][dir] == 1)break;
}
}
}
function setMochi(id,player){
tx = (1-player)*(bw-3)+1;
ty = (1-player)*(bh-3)+1;
tx1 = (player*2)-1;
ty1 = (player*2)-1;
for (i=0; i<20; i++){
x = tx+(i % 3)*tx1;
y = ty+Math.floor(i/3)*ty1;
//console.log(i, x, y)
if(board[y][x].id == -1)break;
}
board[y][x].id = id & 7;
board[y][x].player = player;
}
function moveend(endx,endy){
if(board[endy][endx].movable == false)return;
id = board[starty][startx].id;
player = board[starty][startx].player;
if (isinside(startx,starty,ofsx,ofsy,9,9) == true){
exist1 = isinside(startx,starty,ofsx,ofsy+6*player,9,3);
exist2 = isinside(endx ,endy ,ofsx,ofsy+6*player,9,3);
if((exist1 == true)||(exist2 == true)){
if((id < 8)&&(nametbl[id | 8] != "")){
if(confirm("成りますか?")){
board[starty][startx].id |= 8;
}
}
}
}
if(board[endy][endx].id != -1){
setMochi(board[endy][endx].id, player);
}
board[endy][endx].id = board[starty][startx].id;
board[endy][endx].player = board[starty][startx].player;
board[starty][startx].id = -1;
turn = 1 - turn;
}
function drawpiece(x,y,id,player,color){
px = x*psize;
py = y*psize;
ctx.fillStyle = boxcolor[color];
ctx.fillRect(px, py, psize, psize);
ctx.fillStyle = fillcolor[color];
ctx.fillRect(px+1, py+1, psize-2, psize-2);
if(id == -1)return;
ctx.fillStyle = fontcolor[(id >> 3)& 1];
if(player){
px = -px-psize;
py = -py-psize;
ctx.rotate(Math.PI);
}
ctx.fillText(nametbl[id], px+4, py+24,300);
if(player)ctx.rotate(Math.PI);
}
function isinside(x,y,ax,ay,w,h){
if((x<ax)||(x>=(ax+w))||(y<ay)||(y>=(ay+h)))return(false);
return(true);
}
function redraw(){
for (y=0; y<bh; y++){
for (x=0; x<bw; x++){
if (isinside(x,y,ofsx,ofsy,9,9))c=1; else c=0;
id = board[y][x].id;
player = board[y][x].player;
drawpiece(x,y,id,player,c);
board[y][x].movable = false;
}
}
ctx.fillStyle = fontcolor[0];
ctx.fillText(playtbl[turn] ,280 ,(1-turn)*318+26,300);
}

HTML

<html>
<head>
<meta charset="UTF-8">
<script src ="shogi.js"> </script>
<title>詰将棋</title>
</head>
<body onload="init()">
<canvas id="world"></canvas>
 <audio controls src="WavePad_u.mp3" type="audio/mp3">幻想的</audio>
  <img src="畳.jpg">
</body>
</html>

教えてください〜

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (4件)

調べると色々出てきてよくわからないのですが



あくまでも例

「王様」を取る(詰みを)判定を行うコード
ゲームの各ターンが終了した後
新しいターンが始まる前  配置

プレイヤーが打った後の盤面を評価し、ゲームが終了したかどうか
(つまり、王が取られたかどうか)を判断する

このコードは、あくまで参考のためで具体的なものではない

def game_loop():
while True:
# プレイヤーのターン
player_move()

# 詰み判定
if is_checkmate():
print("Checkmate! Game over.")
break

# AIのターン
ai_move()

# 詰み判定
if is_checkmate():
print("Checkmate! Game over.")
break

例:player_move()とai_move()はそれぞれプレイヤーとAIが手を打つための関数です
is_checkmate()は詰み判定を行う関数です
各ターンの後に詰み判定を行うこと
ゲームは良いタイミングで終了

動くかどうかはわかりません。
これ以上は、無理です

気合を入れ考えてください
    • good
    • 0

将棋のプログラムで「王様」を取る(詰みを)判定


と考えて

調べた結果:
一例 コードはJavaScriptです
他の言語も同様のロジックです

function isCheckmate(board, kingPosition) {
// boardは現在の盤面を表す2次元配列
// kingPositionは王様の位置を表す{x, y}のオブジェクト

for (let y = 0; y < board.length; y++) {
for (let x = 0; x < board[y].length; x++) {
// 各マスについて、そのマスの駒が敵の駒であれば
if (board[y][x].player !== board[kingPosition.y][kingPosition.x].player) {
// その駒が王様を取れるかどうかをチェック
if (canTakeKing(board, {x, y}, kingPosition)) {
// 王様を取れる駒があれば、詰みである
return true;
}
}
}
}

// どの駒も王様を取れなければ、詰みではない
return false;
}

function canTakeKing(board, piecePosition, kingPosition) {
// piecePositionの駒がkingPositionの王様を取れるかどうかを判定するロジック
// この部分は駒の種類(歩、香、桂、銀、金、角、飛、王)によって異なる

でよいかどうかはわかりませんが
偶々の一例です
もっと簡単なのを考えてください
    • good
    • 0
この回答へのお礼

ありがとうございます!
どこの部分に挿入したら良いのでしょうか...

お礼日時:2024/07/21 22:44

>音声ファイルが正しく読み込まれない問題:



ファイルパスの問題:
WavePad_u.mp3が正しいパスに存在しているか確認

相対パスを使用の場合:
HTMLファイルからの相対位置が正しいことを確認

ファイル形式の問題:
WavePad_u.mp3が正しいMP3形式であることを確認

ファイルの破損・互換性のないコーデックでエンコードの可能性

ブラウザの問題:
ブラウザがすべての音声形式をサポートしていません
異なるブラウザで試してみる

ブラウザが最新バージョンかどうかの確認

これをしてもダメ場合は、専門家に相談してください
    • good
    • 0
この回答へのお礼

ありがとうございます!
後は、王様ゲットのソースコードを追加できたら良いのですが...

お礼日時:2024/07/21 18:57

コードを見て言えること:


全体としては問題なさそう
動作させて、エラーメッセージ出ないと
フィードバックを提供できないです

将棋ゲームの一部と考えます:
駒の動きやゲームの進行制御のようです

次の点に注意:
shogi.jsという外部スクリプトで内容や存在を確認
init()関数がページの読み込み時呼びだすようですが
関数の定義が見当たらない
関数の定義はされていますか

画像ファイル畳.jpgと音声ファイルWavePad_u.mp3:
正しく読み込まれるか確認必要です

試して正常に動くか確認してください
    • good
    • 0
この回答へのお礼

正しくは動きますが、音声ファイルが上手く読み込めれていないです。

お礼日時:2024/07/21 16:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!