{"id":70007,"date":"2026-11-09T07:37:23","date_gmt":"2026-11-09T02:07:23","guid":{"rendered":"https:\/\/www.quickonlinetips.com\/archives\/games\/reversi\/"},"modified":"2026-11-09T07:37:23","modified_gmt":"2026-11-09T02:07:23","slug":"reversi","status":"publish","type":"page","link":"https:\/\/www.quickonlinetips.com\/archives\/games\/reversi\/","title":{"rendered":"Reversi: Play Online Against the Computer or a Friend"},"content":{"rendered":"<p>Play <strong>Reversi<\/strong> free online against the computer or a friend. Place a disc so that you trap your opponent&#8217;s discs in a straight line, flip them to your colour, and finish with the most discs on the board. Three computer levels, move hints, undo and a running score make it easy to learn and hard to master.<\/p>\n<style>.qrv-wrap{width:min(480px,100%);margin:14px auto 0} .qrv-b{display:grid;grid-template-columns:repeat(8,1fr);gap:2px;background:#16324F;border:8px solid #16324F;border-radius:10px;user-select:none;-webkit-user-select:none;touch-action:manipulation} .qrv-c{position:relative;aspect-ratio:1;background:#2F6493;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center} .qrv-c:hover{background:#3A73A6} .qrv-d{width:80%;height:80%;border-radius:50%;box-shadow:inset 0 -4px 0 rgba(0,0,0,.18),0 2px 3px rgba(0,0,0,.35);transition:transform .25s} .qrv-o{background:radial-gradient(circle at 35% 30%,#FFC27A,#F28C28 55%,#C9661A)} .qrv-w{background:radial-gradient(circle at 35% 30%,#FFFFFF,#EEF2F7 60%,#C7D0DB)} .qrv-flip{animation:qrvflip .35s ease-out} @keyframes qrvflip{0%{transform:scaleX(.1)}100%{transform:scaleX(1)}} .qrv-hint{width:26%;height:26%;border-radius:50%;background:rgba(255,255,255,.38)} .qrv-last{box-shadow:inset 0 0 0 3px #FDE68A} .qrv-msg{text-align:center;font-size:19px;font-weight:700;color:#215387;min-height:1.5em;margin:6px 0 0} .qrv-sw{display:inline-block;width:14px;height:14px;border-radius:50%;vertical-align:-2px;margin-right:4px}<\/style>\n<div class=\"qt-tool\" id=\"qrv\"><p class=\"qt-label\" style=\"font-size:1.15em;margin:0 0 10px\"><strong>Step 1:<\/strong> Choose your opponent<\/p> <div class=\"qt-grid\" style=\"grid-template-columns:repeat(auto-fit,minmax(200px,1fr))\"><div class=\"qt-field\"><label for=\"qrv-mode\">Opponent<\/label><select id=\"qrv-mode\"><option value=\"1\">Computer: easy<\/option><option value=\"2\" selected>Computer: medium<\/option><option value=\"3\">Computer: hard<\/option><option value=\"2p\">Friend (2 players)<\/option><\/select><\/div> <div class=\"qt-field\"><label for=\"qrv-side\">You play<\/label><select id=\"qrv-side\"><option value=\"1\" selected>Orange (you move first)<\/option><option value=\"-1\">White (computer moves first)<\/option><\/select><\/div><\/div> <div class=\"qt-grid\"><label class=\"qt-check\"><input type=\"checkbox\" id=\"qrv-hints\" checked> Show where I can play<\/label><\/div> <p class=\"qt-label\" style=\"font-size:1.15em;margin:18px 0 10px\"><strong>Step 2:<\/strong> Tap a square to place a disc and flip your opponent's discs<\/p> <p class=\"qrv-msg\" id=\"qrv-msg\" aria-live=\"polite\"><\/p> <div class=\"qrv-wrap\"><div class=\"qrv-b\" id=\"qrv-b\" role=\"grid\" aria-label=\"Reversi board\"><\/div><\/div> <div class=\"qt-stats\"><div class=\"qt-stat\"><span class=\"qt-num\" id=\"qrv-no\">2<\/span><span class=\"qt-lab\"><span class=\"qrv-sw qrv-o\"><\/span>Orange discs<\/span><\/div><div class=\"qt-stat\"><span class=\"qt-num\" id=\"qrv-nw\">2<\/span><span class=\"qt-lab\"><span class=\"qrv-sw qrv-w\" style=\"border:1px solid #A0AEC0\"><\/span>White discs<\/span><\/div><div class=\"qt-stat\"><span class=\"qt-num\" id=\"qrv-w1\">0<\/span><span class=\"qt-lab\" id=\"qrv-l1\">Your wins<\/span><\/div><div class=\"qt-stat\"><span class=\"qt-num\" id=\"qrv-w2\">0<\/span><span class=\"qt-lab\" id=\"qrv-l2\">Computer wins<\/span><\/div><\/div> <div class=\"qt-row\" style=\"justify-content:center\"><button type=\"button\" class=\"qt-btn qt-btn-big\" id=\"qrv-new\">New game<\/button><button type=\"button\" class=\"qt-btn qt-btn-ghost\" id=\"qrv-undo\">Undo move<\/button><\/div> <p class=\"qt-note\"><strong>Private by design:<\/strong> the game and the computer player run in your own browser. Nothing is sent to QuickOnlineTips or stored.<\/p><\/div>\n<script>(function () { function qtReady(fn) { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', fn); } else { fn(); } } function qtRand32() { var c = window.crypto || window.msCrypto; if (c) { if (c.getRandomValues) { var a = new Uint32Array(1); c.getRandomValues(a); return a[0]; } } return Math.floor(Math.random() * 4294967296); } function qtRandInt(range) { var limit = Math.floor(4294967296 \/ range) * range; var x = qtRand32(); while (x >= limit) { x = qtRand32(); } return x % range; } qtReady(function () { var root = document.getElementById('qrv'); if (!root) { return; } function $(id) { return document.getElementById('qrv-' + id); } var B = $('b'), cells = [], bd = [], turn = 1, over = false, busy = false, hist = [], last = -1, flipped = [], wins = [0, 0], tmr = 0, passMsg = ''; var D = [[-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1]]; var W = [100, -20, 10, 5, 5, 10, -20, 100, -20, -50, -2, -2, -2, -2, -50, -20, 10, -2, 1, 1, 1, 1, -2, 10, 5, -2, 1, 0, 0, 1, -2, 5, 5, -2, 1, 0, 0, 1, -2, 5, 10, -2, 1, 1, 1, 1, -2, 10, -20, -50, -2, -2, -2, -2, -50, -20, 100, -20, 10, 5, 5, 10, -20, 100]; var CN = [[0, 1, 8, 9], [7, 6, 15, 14], [56, 57, 48, 49], [63, 62, 55, 54]]; function at(b, r, c) { if (0 > r || r > 7 || 0 > c || c > 7) { return 9; } return b[r * 8 + c]; } function flips(b, i, s) { if (b[i] !== 0) { return []; } var r = Math.floor(i \/ 8), c = i % 8, out = []; D.forEach(function (d) { var rr = r + d[0], cc = c + d[1], line = []; while (at(b, rr, cc) === -s) { line.push(rr * 8 + cc); rr += d[0]; cc += d[1]; } if (line.length) { if (at(b, rr, cc) === s) { out = out.concat(line); } } }); return out; } function moves(b, s) { var m = [], i, f; for (i = 0; 64 > i; i++) { if (b[i] === 0) { f = flips(b, i, s); if (f.length) { m.push({ i: i, f: f }); } } } return m; } function apply(b, m, s) { var nb = b.slice(); nb[m.i] = s; m.f.forEach(function (k) { nb[k] = s; }); return nb; } function count(b, s) { var n = 0; b.forEach(function (v) { if (v === s) { n++; } }); return n; } function evalB(b, s) { var sc = 0, i; for (i = 0; 64 > i; i++) { sc += W[i] * b[i]; } CN.forEach(function (q) { if (b[q[0]] !== 0) { for (var k = 1; 4 > k; k++) { sc -= W[q[k]] * b[q[k]]; } } }); sc += (moves(b, 1).length - moves(b, -1).length) * 6; return sc * s; } function nega(b, s, depth, a, z, passed) { if (depth === 0) { return evalB(b, s); } var ms = moves(b, s); if (!ms.length) { if (passed) { return (count(b, s) - count(b, -s)) * 1000; } return -nega(b, -s, depth, -z, -a, true); } ms.sort(function (p, q) { return W[q.i] - W[p.i]; }); var best = -Infinity; for (var k = 0; ms.length > k; k++) { var v = -nega(apply(b, ms[k], s), -s, depth - 1, -z, -a, false); if (v > best) { best = v; } if (best > a) { a = best; } if (a >= z) { break; } } return best; } function aiMove(s) { var ms = moves(bd, s), lvl = $('mode').value; if (!ms.length) { return null; } if (lvl === '1') { if (qtRandInt(10) > 3) { return ms[qtRandInt(ms.length)]; } var g = ms[0]; ms.forEach(function (m) { if (m.f.length > g.f.length) { g = m; } }); return g; } var empty = count(bd, 0), depth = lvl === '2' ? 2 : (8 >= empty ? empty : (12 >= empty ? 6 : 4)); ms.sort(function (p, q) { return W[q.i] - W[p.i]; }); var best = null, bv = -Infinity; ms.forEach(function (m) { var v = -nega(apply(bd, m, s), -s, depth - 1, -Infinity, Infinity, false) + qtRandInt(3); if (v > bv) { bv = v; best = m; } }); return best; } function vsAI() { return $('mode').value !== '2p'; } function human() { return Number($('side').value); } function name(s) { return s === 1 ? 'Orange' : 'White'; } function say(t) { $('msg').textContent = t; } function draw() { var legal = (over || busy) ? [] : moves(bd, turn), show = $('hints').checked, lm = {}; if (vsAI()) { if (turn !== human()) { legal = []; } } legal.forEach(function (m) { lm[m.i] = 1; }); for (var i = 0; 64 > i; i++) { var c = cells[i]; c.textContent = ''; c.classList.toggle('qrv-last', i === last); c.classList.toggle('qrv-can', !!lm[i]); if (bd[i] !== 0) { var d = document.createElement('div'); d.className = 'qrv-d ' + (bd[i] === 1 ? 'qrv-o' : 'qrv-w'); if (flipped.indexOf(i) > -1) { d.classList.add('qrv-flip'); } c.appendChild(d); c.setAttribute('aria-label', name(bd[i]) + ' disc'); } else if (lm[i]) { if (show) { var h = document.createElement('div'); h.className = 'qrv-hint'; c.appendChild(h); } c.setAttribute('aria-label', 'Empty square, you can play here'); } else { c.setAttribute('aria-label', 'Empty square'); } } $('no').textContent = count(bd, 1); $('nw').textContent = count(bd, -1); flipped = []; } function finish() { over = true; busy = false; var o = count(bd, 1), w = count(bd, -1), hi = Math.max(o, w), lo = Math.min(o, w), t; if (o === w) { t = 'It is a draw, ' + o + ' to ' + w + '.'; } else { var win = o > w ? 1 : -1; if (vsAI()) { if (win === human()) { wins[0]++; t = 'You win ' + hi + ' to ' + lo + '! \ud83c\udf89'; } else { wins[1]++; t = 'The computer wins ' + hi + ' to ' + lo + '. Try again!'; } } else { if (win === 1) { wins[0]++; } else { wins[1]++; } t = name(win) + ' wins ' + hi + ' to ' + lo + '! \ud83c\udf89'; } } $('w1').textContent = wins[0]; $('w2').textContent = wins[1]; draw(); say(t); } function prompt() { draw(); if (over) { return; } if (vsAI()) { if (turn !== human()) { busy = true; draw(); say(passMsg + 'Computer is thinking...'); tmr = setTimeout(function () { var m = aiMove(turn); busy = false; if (m) { place(m); } }, 420); return; } say(passMsg + 'Your turn (' + name(turn) + ').'); return; } say(passMsg + name(turn) + ' to play.'); } function next() { turn = -turn; passMsg = ''; if (!moves(bd, turn).length) { if (!moves(bd, -turn).length) { finish(); return; } passMsg = vsAI() ? (turn === human() ? 'You have no move, so you pass. ' : 'The computer has no move and passes. ') : name(turn) + ' has no move and passes. '; turn = -turn; } prompt(); } function place(m) { bd = apply(bd, m, turn); last = m.i; flipped = m.f.slice(); next(); } function click(i) { if (over || busy) { return; } if (vsAI()) { if (turn !== human()) { return; } } var m = null; moves(bd, turn).forEach(function (x) { if (x.i === i) { m = x; } }); if (!m) { if (bd[i] === 0) { say('You cannot play there. Choose a square that flips at least one disc' + ($('hints').checked ? ' (the dots).' : '.')); } return; } hist.push({ bd: bd.slice(), turn: turn, last: last }); place(m); } function reset() { clearTimeout(tmr); bd = []; for (var i = 0; 64 > i; i++) { bd.push(0); } bd[27] = -1; bd[28] = 1; bd[35] = 1; bd[36] = -1; turn = 1; over = false; busy = false; hist = []; last = -1; flipped = []; passMsg = ''; $('l1').textContent = vsAI() ? 'Your wins' : 'Orange wins'; $('l2').textContent = vsAI() ? 'Computer wins' : 'White wins'; $('side').disabled = !vsAI(); prompt(); } for (var i = 0; 64 > i; i++) { (function (k) { var c = document.createElement('div'); c.className = 'qrv-c'; c.setAttribute('role', 'gridcell'); c.addEventListener('click', function () { click(k); }); B.appendChild(c); cells.push(c); })(i); } $('new').addEventListener('click', reset); $('undo').addEventListener('click', function () { if (!hist.length) { say('Nothing to undo yet.'); return; } clearTimeout(tmr); busy = false; over = false; var h = hist.pop(); bd = h.bd; turn = h.turn; last = h.last; passMsg = ''; flipped = []; prompt(); }); $('mode').addEventListener('change', function () { wins = [0, 0]; $('w1').textContent = 0; $('w2').textContent = 0; reset(); }); $('side').addEventListener('change', reset); $('hints').addEventListener('change', draw); reset(); }); })();<\/script>\n<div class=\"qt-next\"><p class=\"qt-next-h\">Play next<\/p><div class=\"qt-next-g\"><a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/checkers\/\">Checkers<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/gomoku\/\">Gomoku<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/mancala\/\">Mancala<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/backgammon\/\">Backgammon<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/tic-tac-toe\/\">Tic Tac Toe<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/dots-and-boxes\/\">Dots and Boxes<\/a><\/div><\/div>\n<p><strong>Quick answer:<\/strong> Choose the computer or a friend, then tap a square with a dot. Your new disc must trap at least one of your opponent&#8217;s discs between it and another of your discs, across, down or diagonally. All trapped discs flip to your colour. When neither player can move, the player with more discs wins.<\/p>\n<h2>How to play Reversi<\/h2>\n<ol>\n<li>The game starts with four discs in the middle, two of each colour. Orange moves first.<\/li>\n<li>On your turn, place a disc next to one or more of your opponent&#8217;s discs so that a straight line of their discs is closed off at the far end by one of yours.<\/li>\n<li>Every disc in that line flips to your colour. One move can flip discs in several directions at once.<\/li>\n<li>If you have no move that flips a disc, you must pass. If you do have a move, you must play.<\/li>\n<li>The game ends when the board is full or neither player can move. Count the discs: most discs wins.<\/li>\n<\/ol>\n<h2>Reversi strategy tips<\/h2>\n<ul>\n<li><strong>Take the corners.<\/strong> A disc in a corner can never be flipped, and it helps you build a stable edge.<\/li>\n<li><strong>Avoid the squares next to an empty corner.<\/strong> Playing there often gives your opponent the corner.<\/li>\n<li><strong>Do not grab too many discs early.<\/strong> Having fewer discs in the middle of the game usually gives you more choices of move, and leaves your opponent with fewer.<\/li>\n<li><strong>Think about passes.<\/strong> A move that leaves your opponent with no good reply can be worth more than one that flips the most discs.<\/li>\n<\/ul>\n<h2>Computer levels<\/h2>\n<table class=\"qt-ref\">\n<thead>\n<tr>\n<th>Level<\/th>\n<th>How it plays<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Easy<\/td>\n<td>Mostly random moves, good for children and first games.<\/td>\n<\/tr>\n<tr>\n<td>Medium<\/td>\n<td>Looks two moves ahead and values corners and edges.<\/td>\n<\/tr>\n<tr>\n<td>Hard<\/td>\n<td>Looks four to six moves ahead, and plays the last eight moves of the game perfectly.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Like board games? Try <a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/checkers\/\">checkers<\/a>, <a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/gomoku\/\">Gomoku<\/a> or <a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/mancala\/\">Mancala<\/a>, or see all our <a href=\"https:\/\/www.quickonlinetips.com\/archives\/games\/\">free online games<\/a>.<\/p>\n<h2>FAQ<\/h2>\n<h3>Is Reversi free to play?<\/h3>\n<p>Yes. It is free with no sign-up and no download, and it works on phones, tablets and computers.<\/p>\n<h3>Can I play with a friend?<\/h3>\n<p>Yes. Choose <strong>Friend (2 players)<\/strong> and take turns on the same device.<\/p>\n<h3>Can a game end in a draw?<\/h3>\n<p>Yes. If both players have 32 discs when the game ends, it is a draw.<\/p>\n<h3>What happens if I have no move?<\/h3>\n<p>You pass and your opponent plays again. The game tells you when this happens.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Play Reversi free online against the computer or a friend. Place a disc so that you trap your opponent&#8217;s discs in a straight line, flip them to your colour, and finish with the most discs on the board. Three computer levels, move hints, undo and a running score make it easy to learn and hard&#8230;<\/p>\n","protected":false},"author":7,"featured_media":0,"parent":66148,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-70007","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/pages\/70007","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/comments?post=70007"}],"version-history":[{"count":0,"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/pages\/70007\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/pages\/66148"}],"wp:attachment":[{"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/media?parent=70007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}