</> game-gomoku.php

99 行5436 字节.php
📥 下载源码 🔙 返回工具
1<?php class=class="string">"keyword">header(class="string">'Content-Type: text/html; charset=utf-class="number">8'); ?>
2<!DOCTYPE html><class="tag">html lang="zh-CN"><class="tag">head><class="tag">meta charset="UTF-class="number">8"><class="tag">meta name="viewport" content="width=device-width,initial-scale=class="number">1.0">
3<class="tag">title>五子棋 - η空间</class="tag">title>
4<class="tag">meta name="description" content="五子棋游戏,和AI对战。免费在线玩。">
5<class="tag">link rel="stylesheet" href="/tools/share.css"><class="tag">link rel="stylesheet" href="/assets/pet-cat.css">
6<class="tag">style>
7*{margin:class="number">0;padding:class="number">0;box-sizing:border-box}
8body{font-family:class="string">'Outfit',-apple-system,sans-serif;background:class=class="string">"keyword">class=class="string">"comment">#0C0C0C;color:#F7F5F0;min-height:100vh;display:flex;flex-direction:column;align-items:center}
9h1{margin-top:20px;font-size:24px}h1 .a{color:class=class="string">"keyword">class=class="string">"comment">#FF6B35}
10.info{display:flex;gap:20px;margin:10px class="number">0;font-size:14px;color:class=class="string">"keyword">class=class="string">"comment">#class="number">888;align-items:center}
11.info .highlight{color:class=class="string">"keyword">class=class="string">"comment">#FF6B35;font-weight:class="number">600}
12.board-wrapper{background:class=class="string">"keyword">class=class="string">"comment">#class="number">161616;border:1px solid #class="number">222;border-radius:12px;padding:8px}
13class=class="string">"keyword">class=class="string">"comment">#canvas{cursor:pointer;border-radius:8px}
14.controls{margin-top:12px;display:flex;gap:10px}
15.btn{padding:8px 20px;border:none;border-radius:8px;font-size:14px;font-weight:class="number">600;cursor:pointer}
16.btn-primary{background:class=class="string">"keyword">class=class="string">"comment">#FF6B35;color:#fff}.btn-primary:hover{background:#e85a2a}
17</class="tag">style></class="tag">head><class="tag">body>
18<class="tag">h1><class="tag">span class=class="string">"keyword">class="a">⚫</class="tag">span> 五子棋</class="tag">h1>
19<class="tag">p style="font-size:12px;color:class=class="string">"keyword">class=class="string">"comment">#class="number">555;margin-bottom:8px;text-align:center">⚫ 你执黑先手,点击交叉点落子。横竖斜连成五子者胜!</class="tag">p>
20<class="tag">div class=class="string">"keyword">class="info"><class="tag">span class=class="string">"keyword">class="highlight" id="status">你的回合(黑棋)</class="tag">span><class="tag">span>⚫ 你 · ⚪ AI</class="tag">span></class="tag">div>
21<class="tag">div class=class="string">"keyword">class="board-wrapper"><class="tag">canvas id="canvas" width="class="number">450" height="class="number">450"></class="tag">canvas></class="tag">div>
22<class="tag">div class=class="string">"keyword">class="controls"><class="tag">button class=class="string">"keyword">class="btn btn-primary" onclick="initGame()">🔄 新游戏</class="tag">button></class="tag">div>
23<class="tag">script src="/tools/share.js"></class="tag">script><class="tag">script src="/assets/pet-cat.js"></class="tag">script>
24<class="tag">script>
25class=class="string">"keyword">var SIZE=class="number">15,CELL=class="number">30,board=[],turn=class="number">0,moved=class="number">0;
26class=class="string">"keyword">function initGame(){
27 board=class="func">Array(SIZE).fill().map(class=class="string">"keyword">function(){class=class="string">"keyword">return class="func">Array(SIZE).fill(class="number">0)});
28 turn=class="number">0;moved=class="number">0;document.class="func">getElementById(class="string">'status').textContent=class="string">'你的回合(黑棋)';draw();}
29class=class="string">"keyword">function draw(){
30 class=class="string">"keyword">var canvas=document.class="func">getElementById(class="string">'canvas'),ctx=canvas.getContext(class="string">'2d');
31 ctx.clearRect(class="number">0,class="number">0,class="number">450,class="number">450);ctx.fillStyle=class="string">'class="keyword">class="comment">#0C0C0C';ctx.fillRect(class="number">0,class="number">0,class="number">450,class="number">450);
32 ctx.strokeStyle=class="string">'class="keyword">class="comment">#class="number">333';ctx.lineWidth=class="number">0.5;
33 class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="tag">SIZE;i++){
34 ctx.beginPath();ctx.moveTo(CELL/class="number">2+i*CELL,CELL/class="number">2);ctx.lineTo(CELL/class="number">2+i*CELL,class="number">450-CELL/class="number">2);ctx.stroke();
35 ctx.beginPath();ctx.moveTo(CELL/class="number">2,CELL/class="number">2+i*CELL);ctx.lineTo(class="number">450-CELL/class="number">2,CELL/class="number">2+i*CELL);ctx.stroke();}
36 class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="tag">SIZE;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="tag">SIZE;j++){
37 class=class="string">"keyword">if(board[i][j]===class="number">0)class=class="string">"keyword">continue;
38 class=class="string">"keyword">var x=CELL/class="number">2+j*CELL,y=CELL/class="number">2+i*CELL;
39 ctx.beginPath();ctx.arc(x,y,class="number">12,class="number">0,class="number">2*Math.PI);
40 ctx.fillStyle=board[i][j]===class="number">1?class="string">'class="keyword">class="comment">#fff':(board[i][j]===class="number">2?class="string">'#fff':class="string">'#fff');
41 ctx.fill();
42 ctx.strokeStyle=board[i][j]===class="number">1?class="string">'class="keyword">class="comment">#class="number">333':class="string">'#class="number">333';ctx.lineWidth=class="number">1;ctx.stroke();
43 ctx.beginPath();ctx.arc(x,y,class="number">8,class="number">0,class="number">2*Math.PI);
44 ctx.fillStyle=board[i][j]===class="number">1?class="string">'class="keyword">class="comment">#class="number">222':class="string">'#eee';ctx.fill();}
45}
46class=class="string">"keyword">function handleClick(e){
47 class=class="string">"keyword">if(turn!==class="number">0)class=class="string">"keyword">return;
48 class=class="string">"keyword">var rect=document.class="func">getElementById(class="string">'canvas').getBoundingClientRect();
49 class=class="string">"keyword">var x=Math.round((e.clientX-rect.left)/CELL),y=Math.round((e.clientY-rect.top)/CELL);
50 class=class="string">"keyword">if(x<class="number">0||x>=SIZE||y<class="number">0||y>=SIZE||board[y][x]!==class="number">0)class=class="string">"keyword">return;
51 board[y][x]=class="number">1;moved++;
52 class=class="string">"keyword">if(checkWin(y,x,class="number">1)){draw();document.class="func">getElementById(class="string">'status').textContent=class="string">'🎉 你赢了!';class=class="string">"keyword">return;}
53 class=class="string">"keyword">if(moved>=SIZE*SIZE){draw();document.class="func">getElementById(class="string">'status').textContent=class="string">'平局!';class=class="string">"keyword">return;}
54 turn=class="number">1;draw();document.class="func">getElementById(class="string">'status').textContent=class="string">'AI思考中...';
55 class="func">setTimeout(aiMove,class="number">200);
56}
57class=class="string">"keyword">function aiMove(){
58 class=class="string">"keyword">var best=null,bestScore=-Infinity;
59 class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="tag">SIZE;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="tag">SIZE;j++){
60 class=class="string">"keyword">if(board[i][j]!==class="number">0)class=class="string">"keyword">continue;
61 class=class="string">"keyword">var score=evaluate(i,j,class="number">2)+evaluate(i,j,class="number">1)*class="number">0.5+Math.random();
62 class=class="string">"keyword">if(score>bestScore){bestScore=score;best={r:i,c:j};}}
63 class=class="string">"keyword">if(!best){document.class="func">getElementById(class="string">'status').textContent=class="string">'平局!';class=class="string">"keyword">return;}
64 board[best.r][best.c]=class="number">2;moved++;
65 class=class="string">"keyword">if(checkWin(best.r,best.c,class="number">2)){draw();document.class="func">getElementById(class="string">'status').textContent=class="string">'🤖 AI赢了!';class=class="string">"keyword">return;}
66 turn=class="number">0;draw();document.class="func">getElementById(class="string">'status').textContent=class="string">'你的回合(黑棋)';}
67class=class="string">"keyword">function evaluate(r,c,player){
68 class=class="string">"keyword">var score=class="number">0;
69 class=class="string">"keyword">var dirs=[[class="number">1,class="number">0],[class="number">0,class="number">1],[class="number">1,class="number">1],[class="number">1,-class="number">1]];
70 class=class="string">"keyword">for(class=class="string">"keyword">var d of dirs){
71 class=class="string">"keyword">var count=class="number">1;
72 class=class="string">"keyword">for(class=class="string">"keyword">var sign=-class="number">1;sign<=class="number">1;sign+=class="number">2){
73 class=class="string">"keyword">for(class=class="string">"keyword">var step=class="number">1;step<class="number">5;step++){
74 class=class="string">"keyword">var nr=r+sign*step*d[class="number">0],nc=c+sign*step*d[class="number">1];
75 class=class="string">"keyword">if(nr<class="number">0||nr>=SIZE||nc<class="number">0||nc>=SIZE)class=class="string">"keyword">break;
76 class=class="string">"keyword">if(board[nr][nc]===player)count++;
77 class=class="string">"keyword">else class=class="string">"keyword">if(board[nr][nc]===class="number">0){score+=class="number">1;class=class="string">"keyword">break;}
78 class=class="string">"keyword">else class=class="string">"keyword">break;}}
79 class=class="string">"keyword">if(count>=class="number">5)score+=class="number">100000;
80 class=class="string">"keyword">else class=class="string">"keyword">if(count===class="number">4)score+=class="number">10000;
81 class=class="string">"keyword">else class=class="string">"keyword">if(count===class="number">3)score+=class="number">1000;
82 class=class="string">"keyword">else class=class="string">"keyword">if(count===class="number">2)score+=class="number">100;}
83 class=class="string">"keyword">return score;}
84class=class="string">"keyword">function checkWin(r,c,player){
85 class=class="string">"keyword">var dirs=[[class="number">1,class="number">0],[class="number">0,class="number">1],[class="number">1,class="number">1],[class="number">1,-class="number">1]];
86 class=class="string">"keyword">for(class=class="string">"keyword">var d of dirs){
87 class=class="string">"keyword">var count=class="number">1;
88 class=class="string">"keyword">for(class=class="string">"keyword">var sign=-class="number">1;sign<=class="number">1;sign+=class="number">2)
89 class=class="string">"keyword">for(class=class="string">"keyword">var step=class="number">1;step<class="number">5;step++){
90 class=class="string">"keyword">var nr=r+sign*step*d[class="number">0],nc=c+sign*step*d[class="number">1];
91 class=class="string">"keyword">if(nr<class="number">0||nr>=SIZE||nc<class="number">0||nc>=SIZE)class=class="string">"keyword">break;
92 class=class="string">"keyword">if(board[nr][nc]===player)count++;class=class="string">"keyword">else class=class="string">"keyword">break;}
93 class=class="string">"keyword">if(count>=class="number">5)class=class="string">"keyword">return true;}
94 class=class="string">"keyword">return false;}
95document.class="func">getElementById(class="string">'canvas').class="func">addEventListener(class="string">'click',handleClick);
96initGame();
97</class="tag">script><class="tag">div style="text-align:center;padding-top:10px;font-size:12px;color:class=class="string">"keyword">class=class="string">"comment">#class="number">555"><class="tag">a href="source-viewer.php?file=game-gomoku.php" style="color:#FF6B35;text-decoration:none;">📖 查看源码</class="tag">a> · 编程小白,AI生成,若体验不佳请多包涵 🙏</class="tag">div>
98</class="tag">body></class="tag">html>
99

Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/273059_cn/tools/source-viewer.php:69) in /www/wwwroot/273059_cn/tools/source-viewer.php on line 72

Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/273059_cn/tools/source-viewer.php:69) in /www/wwwroot/273059_cn/tools/source-viewer.php on line 73
五子棋 - η空间

五子棋

⚫ 你执黑先手,点击交叉点落子。横竖斜连成五子者胜!

你的回合(黑棋)⚫ 你 · ⚪ AI
📖 查看源码 · 编程小白,AI生成,若体验不佳请多包涵 🙏