কারও হতবাক সিদ্ধান্তকে রক্ষার জন্য লোকেরা প্রায়শই বলে যে সেই ব্যক্তি সবার মাথার উপর দিয়ে “ত্রিমাত্রিক দাবা” খেলছে। এখন ত্রিমাত্রিক দাবা খেলার সুযোগ!
বিধি
3 ডি দাবা বিভিন্ন রূপ আছে , কিন্তু এই চ্যালেঞ্জের জন্য আমি আমার নিজের তৈরি করেছি। আমার সংস্করণটি নিয়মিত দাবার মতো, টুকরাগুলি স্কোয়ারের পরিবর্তে ঘনক্ষেত্রের ভিতরে থাকে এবং এখন চলাচলের অতিরিক্ত মাত্রা থাকে। আছে এই প্রতিদ্বন্দ্বিতা সহজ করতে কোন দাবার গুটির এবং কোন castling ।
টুকরো মুভমেন্ট
(কম্পাসের দিকনির্দেশগুলি এমন গতিবেগকে নির্দেশ করে যা একটি স্ট্যান্ডার্ড দাবাবোর্ডে ঘটে থাকে, উপরে এবং ডাউন 3 ডি দাবা বোর্ডে উল্লম্বভাবে চলতে বোঝায়)।
- কিং - এর 26 টি স্কোয়ার রয়েছে যা এটি প্রদত্ত টার্নে যেতে পারে: N, NE, E, SE, S, SW, W, NW; পাশাপাশি উপরে, নীচে এবং উপরে / ডাউন + কম্পাস দিকনির্দেশগুলির মধ্যে একটি।
- রাণী - রাজার মতো একই দিকে অগ্রসর হতে পারে তবে যতদূর সে সেই দিকগুলিতে চায়।
- রুক - 6 টি দিকে যেতে পারে: এন, ই, এস, ডাব্লু, আপ এবং ডাউন,
- বিশপ - এর ভ্রমণের 8 টি ত্রিভুজিক দিক রয়েছে: এনই + আপ / ডাউন, এসই + আপ / ডাউন, এসডাব্লু + আপ / ডাউন, এনডাব্লু + আপ / ডাউন
- নাইট - 2 স্পেস এক অক্ষ অক্ষরে সরায়, তারপরে 1 স্পেসে অন্য স্থানে চলে। ঠিক নিয়মিত দাবায়ের মতো, নাইটই একমাত্র টুকরা যা অন্য টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো রয়েছে।
পিস টেস্টার
বিভিন্ন টুকরা 3 ডি বোর্ডে কীভাবে সরানো হয় তা দেখতে এই স্নিপেটটি ব্যবহার করুন ( টিপ : *Test
কোনও বর্গটি বৈধ পদক্ষেপের ভিত্তিতে কেবল তার সম্পূর্ণ দূরত্বের ভিত্তিতে কোনও বর্গক্ষেত্র বৈধ পদক্ষেপ কিনা তা নির্ধারণ করার জন্য দ্রুত উপায়গুলির জন্য জেএসে ফাংশনগুলি পরীক্ষা করে দেখুন )):
const color = "Black";
const pieces = ["N","B","R","Q","K"];
const urls = ["https://image.ibb.co/gyS9Cx/Black_N.png","https://image.ibb.co/dknnzc/Black_B.png","https://image.ibb.co/kb3hXx/Black_R.png","https://image.ibb.co/hGO5kH/Black_Q.png","https://image.ibb.co/jApd5H/Black_K.png"];
var dragPiece;
var size = 3;
var index = 0;
function start() {
Array.prototype.add = function(a) {return [this[0]+a[0],this[1]+a[1],this[2]+a[2]]};
document.getElementById("n").onchange=function() {
size = parseInt(this.value);
var s = document.getElementsByClassName("selected");
var pos;
if(s.length > 0) {
pos = s[0].pos;
}
document.body.removeChild(document.body.firstChild);
createBoards();
if(pos != null && valid(...pos)) {
cellAt(...pos).click();
}
};
createBoards();
}
function createBoards() {
var boards = document.createElement("div");
boards.style.counterReset = "board-count "+(size+1);
boards.name=size;
for(var x = 0;x<size;x++) {
var t = document.createElement("table");
for(var i = 0;i<size;i++) {
var row = document.createElement("tr");
row.className="row";
for(var j = 0;j<size;j++) {
var cell = document.createElement("td");
cell.className = (size+i+j)%2 == 1 ? "black" : "white";
var im = document.createElement("img");
im.draggable = true;
im.ondragstart = function(e) {dragPiece = this;e.dataTransfer.setData("piece",this.parentElement.name);
this.parentElement.classList.add("start");
this.classList.add("dragged");
};
im.ondragend = function(e) {this.parentElement.classList.remove("start");this.classList.remove("dragged");};
im.hidden = true;
cell.appendChild(im);
cell.pos = [j,i,x];
cell.ondragover = function(e) {e.preventDefault();};
cell.ondragenter = function(e) {this.classList.add("drag");};
cell.ondragleave = function(e) {this.classList.remove("drag");};
cell.ondrop = function(e) { e.preventDefault();this.classList.remove("drag");
if(this != dragPiece.parentElement && this.firstChild.hidden ){
dragPiece.hidden=true;
setPiece(this,e.dataTransfer.getData("piece"));
}
};
cell.onclick = function() {
if(this.firstChild.hidden == false && this.classList.contains("selected")) {
index++;
if(index == pieces.length) index = 0;
}
setPiece(this,pieces[index]);
};
row.appendChild(cell);
}
t.appendChild(row);
}
boards.appendChild(t);
}
document.body.insertBefore(boards,document.body.firstChild);
}
function clearHighlighted() {
var sel = document.getElementsByClassName("highlighted");
while(sel.length > 0) {
sel[0].classList.remove("highlighted");
}
}
function setPiece(cell,piece) {
var s=document.getElementsByClassName("selected");
if(s.length > 0){ s[0].firstChild.hidden=true;s[0].classList.remove("selected");}
cell.classList.add("selected");
cell.firstChild.hidden = false;
cell.name = piece;
cell.firstChild.src = urls[index];
clearHighlighted();
showMoves(cell,piece);
}
function showMoves(cell,piece) {
if(piece=="K") selector(cell,kingTest)
else if(piece=="N") selector(cell,knightTest);
else if(piece=="Q") selector(cell,queenTest);
else if(piece=="R") selector(cell,rookTest);
else if(piece=="B") selector(cell,bishopTest);
}
function cellAt(col,row,board) {
return document.body.firstChild.children[board].children[row].children[col];
}
function valid(col,row,board) {
return 0<=col && col<size && 0<=row && row<size && 0<=board && board<size;
}
function select(cell) {
if(cell != null && cell.firstChild.hidden) cell.classList.add("highlighted");
}
function rookTest(dist) {
var d = [].concat(dist).sort();
return d[0] == 0 && d[1] == 0;
}
function knightTest(dist) {
var d = [].concat(dist).sort();
return d[0] == 0 && d[1] == 1 && d[2] == 2;
}
function kingTest(dist) {
return dist[0] <= 1 && dist[1] <= 1 && dist[2] <= 1;
}
function bishopTest(dist) {
return dist[0]==dist[1] && dist[1]==dist[2];
}
function queenTest(dist) {
var d = [].concat(dist).sort();
return rookTest(dist) || bishopTest(dist) || (d[0]==0 && d[1]==d[2]) ;
}
function dist(cell,x,y,z) {
return [Math.abs(cell.pos[0]-x),Math.abs(cell.pos[1]-y),Math.abs(cell.pos[2]-z)];
}
function selector(cell,test) {
for(var i = 0;i<size;i++) {
for(var j = 0;j<size;j++) {
for(var k = 0;k<size;k++) {
if(test(dist(cell,k,j,i))) {
var c = cellAt(k,j,i);
if(c != cell) select(c);
}
}
}
}
}
table
{
padding: 10px;
display:inline-block;
}
table:after
{
counter-increment: board-count -1;
content: "("counter(board-count,upper-roman)")";
float:right;
}
td
{
width:28px;
height:28px;
border: 1px solid;
cursor: pointer;
}
.black
{
background-color: rgba(127,127,127,0.6);
}
.white
{
background-color: white;
}
.start {
background-color: rgba(0,204,0,0.6);
}
.highlighted {
background-color: rgba(0,255,0,0.6);
}
.drag
{
background-color: rgba(0,204,255,0.6);
}
.selected {
background-color: green;
cursor: grab;
}
.selected img
{
display:block;
}
.dragged {
cursor: grabbing;
}
<body data-size=3 onload="start()"
<label for="n">Size: </label><select id="n">
<option>2</option>
<option selected>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<div>Click or drag to place the piece. Click on the piece to change its type.</div>
</body>
চ্যালেঞ্জ
একটি এন x এন এক্স এন বোর্ড দেওয়া, সাদা রাজা চেকমেটে আছে কিনা তা নির্ধারণ করুন।
ইনপুট
- ( Ptionচ্ছিক ) n ≥ 2 - বোর্ডের আকার
- গেম বোর্ড
- 1d- 2d- বা 3d- অ্যারে আকারে বা অন্যান্য অনুরূপ ফর্ম্যাট হতে পারে। স্বীকৃতি যে কোনও সাধারণ বিন্যাসে হতে পারে। উদাহরণস্বরূপ, খালি কিউবের জন্য # সহ কে কিউআরবিএন (সাদা) এবং কিকিআরবিএন (কালো)। অথবা, বিভিন্ন মানের জন্য সংখ্যা ব্যবহার করুন।
- একে অপরের শীর্ষে একাধিক বোর্ড স্তুপীকৃত এবং উপরে থেকে নীচে তালিকাভুক্ত হিসাবে 3D দাবা বোর্ডের কথা ভাবেন। তারপরে, প্রতিটি পৃথক বোর্ড বাম থেকে ডানে, সামনে থেকে পিছনে (কালো দিক থেকে সাদা পাশে) স্বাক্ষরিত হয়।
- 3 ডি অ্যারে হিসাবে দেওয়া এই 2x2x2 কেসটি কল্পনা করুন:
[ [[বি কিউ] [##]] [[বাংলা ভাষায়] [KQ]] ]
আউটপুট
- বুলিয়ান (সত্যবাদী / মিথ্যা মান) - সত্য যদি সাদা রাজা চেকমেটে থাকে, অন্যথায় মিথ্যা।
কিস্তিমাত
কোনও কালো টুকরো কালো রঙের পরের বারে ক্যাপচার করার হুমকি দিচ্ছে কিনা তা শ্বেত রাজা পরীক্ষা করে দেখছেন। নজরদারি থেকে বেরিয়ে আসার জন্য, হোয়াইটকে তার বাদশাহকে সুরক্ষায় নিয়ে যেতে হবে, অন্য কোনও টুকরো দিয়ে এটি রক্ষা করতে হবে, বা হুমকী টুকরোটি ক্যাপচার করতে হবে। হোয়াইটের যদি চেক থেকে বেরিয়ে আসার কোনও উপায় না থাকে, তবে সাদা রাজা চেকমেটে আছেন । মনে রাখবেন, হোয়াইট যদি চেক না করে থাকে তবে চেক না করেই চলতে না পারে তবে এটি অচলাবস্থা , যা চেকমেট নয়।
সবিস্তার বিবরণী
- আপনাকে এমন বোর্ড দেওয়া হবে না যেখানে কৃষ্ণ রাজা সাদা বাদশাহকে "চেক" করার চেষ্টা করছেন বা এমন একটি বোর্ড দেওয়া হবে যেখানে উভয় রাজা চেক করে আছেন (অসম্ভব পরিস্থিতি)।
পরীক্ষার মামলা
এন = 3,
[###,n##,#rr],[#b#,###,###],[###,###,bRK]
আউটপুট: সত্য
ব্যাখ্যা: রাজা উপরের তলদেশের দুল থেকে একটি চেক পাচ্ছেন। সাদা ছোকরা আক্রমণটি আটকাতে বা হুমকী ছোঁয়া ধরতে অক্ষম, তাই বাদশাহকে অবশ্যই পথ ছাড়ার চেষ্টা করতে হবে। আসুন রাজার পদক্ষেপের বিকল্পগুলি বিবেচনা করুন:
- সি 2 (আই) - বি 3 (II) এ বিশপ দ্বারা রক্ষিত
- বি 2 (আই) - এ 2 এ নাইট দ্বারা রক্ষিত (III)
- সি 1 (II) - সি 1 (III) এ রুক দ্বারা রক্ষিত
- বি 1 (II) - বি 1 (III) এ রুক দ্বারা রক্ষিত
- সি 2 (II) - এ 2 এ নাইট দ্বারা সুরক্ষিত (III)
- b2 (II) - a1 (I) এ বিশপ দ্বারা রক্ষিত
রাজা যেহেতু চেক থেকে বাঁচতে পারবেন না, এটি চেকমেট!
এন = 3,
[b#b,###,###],[###,###,RNR],[#q#,###,#K#]
আউটপুট: মিথ্যা ব্যাখ্যা: রাজা রানীর কাছ থেকে একটি চেক পেয়েছেন, তার সাথে পালাতে বা অবরুদ্ধ করার কোনও পদক্ষেপ নেই। যাইহোক, নাইট রানী ক্যাপচার করতে পারেন।
এন = 3,
[#q#,#b#,###],[n##,###,###],[#k#,###,#KB]
আউটপুট: মিথ্যা ব্যাখ্যা: হোয়াইটের হুমকী রানী ধরার বা তার বাদশাহকে সুরক্ষায় সরিয়ে দেওয়ার কোনও উপায় নেই। তবে, তাঁর বিশপকে বি 2 (II) এ সরিয়ে দিয়ে হোয়াইট রানির হুমকি ব্লক করতে পারে।
এন = 4,
[####,####,r###,####],[####,#q##,####,####],[##r#,###b,####,BRnn],[####,####,#N##,#KQ#]
আউটপুট: সত্য ব্যাখ্যা: এক্ষেত্রে রাজা একজন নাইট এবং একটি রানির কাছ থেকে একটি চেক পেয়ে যাচ্ছেন। যদিও হোয়াইট চেকিং-এর কোনও অংশ ক্যাপচার / ব্লক করতে পারে, তবুও সে দুটিই ক্যাপচার / ব্লক করতে পারে না। অতএব, হোয়াইটকে অবশ্যই তাঁর রাজাকে সরিয়ে নেওয়ার চেষ্টা করতে হবে, তবে তার কোনও বিকল্প নেই।
এন = 3,
[###,##b,r#r],[###,###,###],[#k#,###,#K#]
আউটপুট: মিথ্যা ব্যাখ্যা: হোয়াইট চেক করা হয় না, তবে চেক না হয়ে চলার কোনও উপায় নেই। অতএব, এটি অচলাবস্থা, তবে চেকমেট নয়।
আউটপুট: সত্য ব্যাখ্যা: হোয়াইট তার রাণীকে রক্ষা করতে তার রানীর সাথে ঝাঁপিয়ে পড়তে চাইবে, তবে তার নাইট পথটি বাধা দিচ্ছে।
আউটপুট: প্রকৃত ব্যাখ্যা: হোয়াইট রানিকে তার নাইটের সাথে নিতে পারে না, কারণ তখন সেই পলক হোয়াইটের রাজাটিকে পরীক্ষা করবে।
আউটপুট: মিথ্যা ব্যাখ্যা: হোয়াইট তার রাজার সাথে রানীকে বন্দী করতে পারে।
আউটপুট: আসল ব্যাখ্যা: এবার রুক পাহারা দিচ্ছে, তাই রাজা রানীকে ধরতে পারছেন না।
আউটপুট: মিথ্যা ব্যাখ্যা: সাদা রাজা নাইটকে ধরে ফেলে পালাতে পারেন।
cell.className = (i + j)%2 == 0 ? "black" : "white"
স্নিপেটে আরও ভাল হবে না ?