mild styling makeovers for the Chess and Draughts Game looks โฆ
structure of webpage, in a user experience sense, helping make enough room for the main point of the webpage, the game table board
Primarily, weโd been a bit annoyed by the table rows not having the same height, as the game webpage is first presented. Oddly, this CSS styling Javascript logic helped โฆ
Youโll also see above a fair bit of negative margin-top styling, in attempts to give precedence to the game parts of the webpage. As well, there is a bit more colour and table cell border pizazz.
Trying not to have the status element be a nuisance we got great help from this great webpage, thanks, for the heads ups styling to try to avoid line breaks.
Still on the theme for allowing for reduced โabove game table boardโ usage we start using a reveal favourite of ours, to use the details/summary HTML element combination, allowing a user finished with player name settings, forgo seeing the names in order to allow the playing board more height to work with.
And whatโs with the Javascript deq wrapper function oddity? Well, just in case a player name involves the letters of draughts (hello โJohnny draughts Gameplayer IIIโ) we fleshed out โฆ
function deq(inideais) {
if (document.URL.indexOf(inideais + '=') != -1) {
return inideais + '=';
} else if (document.URL.indexOf('=' + inideais) != -1) {
Is โmutipurposing codeโ overrated? We asked the general populace.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
You know what? Weโll leave that topic for another day. But, on a personal level, we like it. We like the concept of reuse, and maybe sometimes we go too far, but in our defence โฆ
a Draughts Game (as proposed today) โฆ has more in common with โฆ
a Chess Game โฆ in the sense that the โฆ
playing board is the same โฆ and, for us, looking for what makes us the same, rather than different, we see โฆ
the Chess Bishop is a lot like a Draughts Default Piece โฆ and โฆ
the Chess Queen is a lot like a Draughts King (which a Default Piece turns into on getting to the other side)
โฆ and far outweigh the differences, in our opinion.
And so, as a principle for us, to facilitate Draughts Game logic, we use Chess Game logic but check for โdraughtsโ, as a word, in this first draft, appearing in URLs as the means by which โฆ
โฆ as we reach Bishop move validity checks (in a Chess Game) we intervene with our Draughts Game new intervening logic โฆ
โฆ as the first worry we attended to. But thereโs also โฆ
emoji changes โฆ alas, the โmore aptโ โฆ
Black draughts king is ⛃ โ (vs ⛂ โ) white is ⛁ โ (vs ⛀ โ)
โฆ emoji set did not look good, yet, for us, and so we took our Bishop and Queen piece similarity ideas to heart, so that the player is not confused (but into other drafts, we may do better)
and the โonly black squareโ positioning (weโd forgotten about Draughts, since playing it as a kid)
the rule โyou have to take opposition pieces, when possibleโ, which we are not enforcing on this โfirst draftโ
the โmultiple hopโ moves in Draughts weโve given the user 10 seconds to show they intend to pursue, which do not happen in Chess (unless you categorize Castling as being like that) has, so far, hampered our email or SMS methodology means by which the opponentโs last move is shown coming off the email or SMS linkโs web browser address bar URL navigation (as we can do for Chess games)
knowing when your King is in check or somebody has put your King in check
knowing when an illegal move has happened regarding leaving your own King in check
knowing when itโs Checkmate (or perhaps even Stalemate)
โฆ and the illegal move whereby a King might get too close to the other King, weโre checking for within the same logic, working it that the Javascript global variable isbad is set true when a move is illegal because it puts your own King in check ..
function anybw(asq, thebrd, bwenemy, alertallowed) {
thebrd+='&';
isbad=false;
iswrong=false;
var bwfriend=bwenemy.replace('w','!').replace('b','W').replace('!', 'b').toLowerCase();
var okfornow=true, startat=eval('' + asq), twos=[];
var startrow=Math.floor(eval(-1 + asq) / 8);
var startcol=Math.floor(eval(-1 + asq) % 8);
var lastcol=-1, lastrow=-1;
var kposa=[18,-18,17,-17,15,-15,6,-6,10,10];
var pposa=[9,7];
var kgposa=[9,8,7,-1,1,-7,-8,-9];
var ikposa=0;
if (asq == thissquare) {
asq=asq;
}
if (bwfriend == 'w') {
pposa=[-9,-7];
}
//alert('Checking ' + bwfriend + ' King at ' + asq);
Yesterdayโs Chess Game Midway Scenario Layout Tutorial โMidway Layout Scenarioโ for our Chess Game Practice was a conduit to another idea. Any ideas what? Anyone? Anyone? Yes, ConNike, we can send off a snapshot of the Chess Game at any point in time, and so this means we can play the game โฆ
our โfirst caseโ anticipated way with two players hovering over the one device โฆ and as of today with โฆ
two email and/or SMS correspondents
โฆ and perhaps just one correspondent (though have not worked the practicalities of this in testing).
Luckily, the data requirements of doing this can be handled via URLs with the familiar ? and & argument arrangements, and so we add links into โฆ
email (via โaโ element โmailto:โ links) โฆ or โฆ
SMS (via โaโ element โsms:โ links)
โฆ helping the transfer of game details onto the Chess Game players.
And what is the conduit for the initial user of our Chess Game Practice web application to make this happen? Well, as they name the players start using a name such as โฆ
R. Metcalfe [rmetcalfe15@gmail.com]
โฆ for both Black and White players to perform a Chess Game via correspondence.
We are always intrigued by those Chess โend game scenariosโ that appear in the newspaper. Weโre guessing to get good at Chess you need to know strategies to adopt for various scenarios. With that in mind, in addition, onto those โฆ
drag from an emoji sentence the Chess pieces โฆ and โฆ
traditional layout game of Chess โฆ and โฆ
weird and random layout game of Chess โฆ today weโd like to add โฆ
scenario descriptor mechanism to recreate a Chess endgame or โmidway gameโ or even โnear the start gameโ set of circumstances (which the user can define)
We just added a Javascript prompt popup window means by which we could add this, adding into the PHP parent code the new button โฆ
<?php echo โ
<button style=background-color:rgba(255,255,0,0.5); id=chessinitmid onclick="location.href=(document.URL.split(String.fromCharCode(35))[0] + ' . "'&traditional=' + encodeURIComponent(prompt('Pieces have designations bK wK bQ wQ bR1 wR1 bR2 wR2 bB1 wB1 bB2 wB2 bK1 wK1 bK2 wK2 bP1 wP1 bP2 wP2 bP3 wP3 bP4 wP4 bP5 wP5 bP6 wP6 bP7 wP7 bP8 wP8 ... so example answer bK_25wK_27bQ_32wQ_37&move=wQ_37_39 places the Kings and Queens to squares in the range 1 to 64 (starting top left of board) and the optional but advisable move says move white Queen from square 37 to square 39 ... as an albeit pretty stupid (on so many levels) example!','')).replace(encodeURIComponent(String.fromCharCode(38)),String.fromCharCode(38)).replace(encodeURIComponent(String.fromCharCode(61)),String.fromCharCode(61))" . ").replace('.php&','.php?'" . ');">Midway Start to Game</button>
โ; ?>
โฆ and look for the new ($_GET[]) ? and & arguments in the child Javascript โฆ
We wanted to start thinking more of the players regarding our recent Chess Game Practice web application, further to yesterdayโs Chess Game Practice Touchdown Tutorial.
As such, regarding player names in games we really admire the โฆ
โฆ global attribute for such tasks, these days, the affect of which todayโs tutorial pictureโs blue bordered part helps explain.
Once we have collected those optional non-Black and non-White names, we concentrate on providing an HTML p element as a repository for commentary, whose visibility can be toggled by clicking that versus word Claytonโs hardcoding.
the โtouchโ mobile platform event which is the โtouchโ equivalent to the โmouseโ event onmousedown (preceding the onclick event, in the normal flow of events)
โฆ and โฆ yes โฆ thatโs worth a yayyyyyy!!!! in anyoneโs language.
Why are we needing this? Well, after the layout posting, populating a traditional Chess board with the default chess player positions, we lost the Drag and Drop โsmartsโ for the tabular span elements.
We asked ourselves โฆ
How best to fix the problem for mobile platforms and minimize the interference to existant non-mobile platform working code?
And we thought โฆ
We could introduce a whole new separate layer of event logic with an event that does not occur in the non-mobile realm โฆ ontouchdown
The Javascript code below can populate the elements of interest with new ontouchdown (discrete clicking or touching) logic for the chess piece moves.
function rejig() {
if (navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) {
if (document.URL.indexOf('traditional=') != -1) {
var huhih=document.getElementsByTagName('h1')[0].innerHTML.substring(26);
Maybe in mathematics, in school, you discussed limits (and/or perhaps even โproof by contradictionโ and/or โparadoxesโ). You know, those fancy ways of saying if โsuch and suchโ you never finish the race, such as in โAchilles and the Tortoiseโ โฆ
Achilles and the tortoise
Achilles and the tortoise
In a race, the quickest runner can never overยญtake the slowest, since the pursuer must first reach the point whence the pursued started, so that the slower must always hold a lead.
โโas recounted by Aristotle, Physics VI:9, 239b15
In the paradox of Achilles and the tortoise, Achilles is in a footrace with the tortoise. Achilles allows the tortoise a head start of 100 meters, for example. Suppose that each racer starts running at some constant speed, one faster than the other. After some finite time, Achilles will have run 100 meters, bringing him to the tortoiseโs starting point. During this time, the tortoise has run a much shorter distance, say 2 meters. It will then take Achilles some further time to run that distance, by which time the tortoise will have advanced farther; and then more time still to reach this third point, while the tortoise moves ahead. Thus, whenever Achilles arrives somewhere the tortoise has been, he still has some distance to go before he can even reach the tortoise. As Aristotle noted, this argument is similar to the Dichotomy.[14] It lacks, however, the apparent conclusion of motionlessness.
Beware the project that runs the same way, by worrying too much about the one percenters. On the other side of the ledger though, is that you learn far less when not trying to tackle any of those one percenters. With these thoughts swirling around we undertook the first of the โdooziesโ (amidst a lot of swearing and โwhat have we gotten ourselves into hereโ thoughts) referenced in yesterdayโs Chess Game Practice Basic Moves Tutorial โฆ
We learnt things about the interface between โdrag eventsโ and events like โonmouseoverโ, the latter of which we needed to resort to, alas. If you didnโt, life would be much easier, and try to design the initial premise, perhaps, better, so that those two wooooorrrrlllldddsss never have to meet (and just image the in-law get togethers!).
We learnt, again, that DOM methodology can come undone when there is no time gap between element arrangements that rely on a previous Javascript DOM arranged task. Take a look at our setInterval Javascript function setup to help here โฆ
var domcmds=[];
function dodoms() {
var stopit=false;
# Irrelevant to blurb above ...
if (document.getElementById('span4') && fouroh == '') { fouroh=document.getElementById('span4').outerHTML; }
if (document.getElementById('span5') && wsixoh == '') { wsixoh=document.getElementById('span5').outerHTML; }
if (document.getElementById('span6') && sixoh == '') { sixoh=document.getElementById('span6').outerHTML; }
if (document.getElementById('span0') && spanzero == '') { spanzero=document.getElementById('span0').outerHTML; }
if (document.getElementById('span1') && spanfive == '') { spanfive=document.getElementById('span1').outerHTML; }
Onto yesterdayโs Chess Game Practice Tutorialโs Chess Game Practice web application, today, weโve developed further, in a โlayoutโ sense, to allow for โฆ
practice via Drag and Drop from the top emojis into your select Chess Board game positions โฆ (no news there) โฆ and, today โฆ
initiate the Chess Board for a traditional game of Chess between black and white players โฆ and โฆ
weird layout of Chess Board where pieces are placed randomly and nonsensically
โฆ but no piece move logic yet! That is for tomorrow, but this โlayoutโ logic helped us get to a better piece identification set of protocols to work with. So, try thechangedexperimental_drag_and_drophtm HTML and Javascript and CSS assisted โseconddraftโchess_gamephpChessPractice Game for you to โฆ practice (after choosing a layout) โฆ
โฆ we present our start to our Chess web application, weโre calling โChess Game Practiceโ for now because it will take some time. In todayโs first draft โฆ
we assemble the chess pieces in a line (like an emoji sentence) up the top โฆ
draggable โฆ onto โฆ
a black and white squared chess board โฆ our โDrop Zoneโ
โฆ and the chess pieces can be dragged around the board as well, but no checks on legal or illegal moves yet, nor the default starting positions to a game. Anyway, achangedexperimental_drag_and_drophtm HTML and Javascript and CSS underpins a calling โfirst draftโ chess_gamephpChessPractice Game for you to โฆ practice โฆ
Did you know?
A little esoteric, we know, but research (thanks to this useful link) got us to (finally) discover the Claytonโs emoji. In other words, an emoji taking no (or little to no) screen display space but differentiates one emoji representation from another when you want to just differentiate via โinnerHTMLโ content, for HTML elements. Itโs (the โnobreakโ) โฆ
โ
You missed it?! Try โฆ
⁠
Why, regarding chess, are we interested? It means regarding the two black rooks, for example, adding a ⁠ to its display contents makes little difference, but we can hone in on an exact black rook, โinnerHTMLโ wise, in the code.
allow the number of cells across in a column not be 3
โฆ has us considering making the dragee be made up of more than one part, today, continuing on with our Drag and Drop functionalities of recent times.
The first game type of application of this, we sort of stumbled upon, trying it, is to create a โฆ
Sentence Shuffle game
โฆ (good for ESL perhaps) where a sentenceโs words are shuffled and the user โgets satisfactionโ (euphemism for โweโre not keeping scoreโ) from piecing a sentence back together again. Arguments for this involve โฆ
Get ? or & argument label
Use
sourcenum
Count of words in sentence or less than or equal to 0 for web application to count them
shuffle
Any mention causes sentence word shuffling to occur โฆ game on!
We wanted to improve functionality, by changing our usual โ-โ hardcoding to a link โ+โ idea whereby the user can enter in their own โyourblurbโ sentence, as above. It being collected in a Javascript prompt popup window, the user can enter emojis (via control-command-space for macOS or Mac OS X, logo key + . (period) for Windows, control=space for iOS, top left + for Android keyboard) as part of the sentence mix, the only rule being a space character separates words in a sentence with ourfurther changedexperimental_drag_and_drophtm HTML and Javascript and CSS sentenceshuffle game web application.
allow the number of cells across in a column not be 3
โฆ in a (very difficult) Numbers Guessing game for numbers from 1 to 99 that regular readers may be familiar with as the (same content (and mentioned at this link โฆ thanks โฆ) as the) Numbers Guessing game at this blog, but presented using a Drag and Drop modus operandi.
On your smaller devices we found the Numbers Guessing Game a bit hard to use. As such, we researched and played around with โdrag and dropโ cursor ideas unsuccessfully to end up, instead, not thinking about the cursor (albeit, we find that idea cuter) but rather styling the target table cellโs background colour and informing the user of that up at the top button wording in ourchangedseconddraft PHP game, which leans on ourchangedexperimental_drag_and_drophtm HTML and Javascript and CSS helperโฆ
var lastbco=null;
const target = document.querySelector("#target");
target.addEventListener("dragover", (ev) => {
if (lastbco) { lastbco.style.backgroundColor='white'; lastbco=null; }
Another thing that there is nine of (as contentious as it is regarding Pluto) is Planets in the Solar System, revolving around the Sun. And so, in keeping with a lot of the same design as yesterdayโs Enneagram Type Game Tutorial we have a Planet Moon Game to present for you to play around with today.
Again, PHP uses a framework of Experimental Drag and Drop HTML and Javascript and CSS, mainly via one PHP codeline โฆ
โฆ and, perhaps, your curiosity that we have not โpassedโ data via $_GET[] or $_POST[] arguments, but rather just the simple act of โฆ
moulding and manipulating (eg. arranging โcallbackโ logic means, as used below) that $templategame โtemplateโ for our purposes โฆ nga ha ha ha ha ha ha ha ha โฆ but we digress โฆ
simply โฆ
<?php
echo $templategame;
?>
โฆ outputs a webpage โฆ
and on the way back to play again, we use $_GET[โscoreโ] and $_GET[โsecsโ] (in experimental_drag_and_drophtml HTML and Javascript and CSS gameweb application) to keep the ball rolling back to the game specific PHP we use โฆ
โฆ just as weโre curious about โthe things that go wrongโ, and not having them repeat! Same with pooches!
Take our firsttoseconddraft PHP game (to the opera, would be preferable). We wondered why, occasionally, with the โfirst draftโ it would hang. It took us a half day to realize, as you could yourself have tweaked to a lot quicker if you had followed the adage โฆ
Hanging issues mostly team up with code within a loop
The situation, weโve reasoned, is that we had that PHP $badlist variable store a comma separated list of planets with either zero moons or more than one moon randomly selected representing it. Weโd assumed, yesterday, not that weโd put it in words, but in logic, that this list would not (have the same length or) be the same as a (new $goodlist variable) list of planets with either zero moons or selected while collecting the random list of Moon/Planet combinations โฆ ie. we assumed in the list would be a Planet with only one of its Moons randomly selected โฆ mistake!!! Better is โฆ
<?php
$goodlist=',Mercury,Venus,';
$badlist=',Mercury,Venus,';
while (strlen($goodlist) == strlen($badlist)) {
$goodlist=',Mercury,Venus,';
$badlist=',Mercury,Venus,';
$correctans=rand(0,8);
$sofar=';';
for ($i=0; $i<9; $i++) {
$j=rand(0, (-1 + sizeof($wikidesignations)));
if ($crandlist == '') {
$crandlist='' . $j;
$sofar.=$wikidescriptions[$j] . ';';
if (strpos($goodlist, $wikidescriptions[$j]) === false) { $goodlist.=$wikidescriptions[$j] . ','; }
A lot of us wonder what goes towards making up our personalities. We remember doing a Myers-Briggs test for some job as part of the vetting process. We thought weโd write another experimental drag and drop game, like yesterdayโs Australian Street Type Game Tutorial, regarding โฆ
The experimental drag and drop theme continues on today, after Experimental Drag and Drop Game Tutorialโs debut game application, with a Wikipedia inspired โAustralian Street Typeโ game today.
Huh?! Well, you know those street names that baffle? Or are we easily baffleable?! Anyway, you had to be there. And if you ever feel youโre alone with an interest, just look it up in Wikipedia or Google and youโre almost sure to find out โฆ
you are not alone
Yes, our Wikipedia page mentioned Australian Street Type Designations with their lawyerly Australian Street Type Descriptions. Who could ask for more? Well?!
It can be interesting turning a โconceptโ (or even a โproof of conceptโ web application) into an, on the side, โgameโ web application, and that way, learn whatโs possible via user action. This is how we felt about yesterdayโs Experimental Drag and Drop Primer Tutorial and that teamed with the wonder about how we could add some useful complexity to our โExperimental Drag and Dropโ web applicationโs โฆ
Drop Zone
Can โinheritanceโ be harnessed to make it work for some complexity of nested HTML elements inside that โDrop Zoneโ element when the document.bodyโs onload event happens? We wondered whether a Brady Bunch style 3ร3 table could be the go? And whether the nine cells could have a โscoreโ associated with them, and that set of scores be changing over time to make the game more challenging and interesting? Well โฆ
Weโve added the word experimental into todayโs blog posting title, mainly because our first of two inspirational webpage sources (last modified on 23/02/2023) regarding somewhat alternative โDrag and Dropโ functionalities told us, regarding the DataTransfer object informational โDataTransferโ webpage โฆ
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
โฆ but our testing of the methodologies on various platforms hasnโt totally failed yet on any of the several desktop and mobile platform scenarios weโve tried. On mobile, we just held on for a sustained touch (down) to make it possible. So maybe the industry has caught up with the ideas? Weโre hoping so, because โdrag and dropโ is a kind of natural thing online users think of to do, and people associate it with โgetting things doneโ we reckon.
Anyway, we relied on the great source code of the second of two inspirational webpages DataTransfer: setData() method, thanks โฆ
The DataTransfer.setData() method sets the drag operationโs drag data to the specified data and type. If data for the given type does not exist, it is added at the end of the drag data store, such that the last item in the types list will be the new type. If data for the given type already exists, the existing data is replaced in the same position. That is, the order of the types list is not changed when replacing data of the same type.
Chess and Draughts Game Styling Tutorial


โ 
Chess and Draughts Game Styling Tutorial
Onto yesterdayโs Draughts Game Logic Tutorial we progress with โฆ
Primarily, weโd been a bit annoyed by the table rows not having the same height, as the game webpage is first presented. Oddly, this CSS styling Javascript logic helped โฆ
//var rectis=document.getElementsByTagName('td')[0].getBoundingClientRect();
var rectis=document.getElementById('td11').getBoundingClientRect();
var perch=eval(100 * eval('' + screen.height) / eval(eval('' + rectis.height) * 8));
//document.getElementById('mytable').style.height='' + perch + '%';
//document.getElementById('dstyle').innerHTML='<style> #mytable { height: ' + perch + '%; } td { min-height: 12.5%; } </style>';
//alert('' + rectis.height + ' ' + eval(eval('' + rectis.height) * 8));
//document.getElementById('dstyle').innerHTML='<style> html, body , .outer, .inner { height:100%; width:100%; margin:0; } #target { display:block; height: ' + eval(eval('' + rectis.height) * 8) + 'px !important; min-height:100%; } #mytable { display:block; height: ' + eval(eval('' + rectis.height) * 8) + 'px !important; } tr { height: ' + rectis.height + 'px !important; } </style>';
var tbit=' ';
if (document.URL.indexOf(deq('draughts')) != -1 || 1 == 1) { tbit=' margin-top: -34px !important; '; }
document.getElementById('dstyle').innerHTML='<style> h1 { margin-top: -12px; overflow-x: hidden; text-overflow-x: ellipsis; } #pstatus { vertical-align: bottom; overflow-x: hidden; text-overflow-x: ellipsis; font-size: 12px; white-space: nowrap; } body { background-image: linear-gradient(#f0f0f0, #f2f2f2, #f4f4f4, #f6f6f6, #f8f8f8, #fafafa) !important; } #target { ' + tbit + ' border-right: 1px solid transparent !important; background-color: white; } #mytable { border-right: 1px solid transparent !important; } tr { height: ' + eval(4 + eval('' + rectis.height)) + 'px !important; } td { border: 2px dashed green; } #pwhite { background-color: white !important; } #pblack { background-color: white !important; } </style>';
Youโll also see above a fair bit of negative margin-top styling, in attempts to give precedence to the game parts of the webpage. As well, there is a bit more colour and table cell border pizazz.
Trying not to have the status element be a nuisance we got great help from this great webpage, thanks, for the heads ups styling to try to avoid line breaks.
Still on the theme for allowing for reduced โabove game table boardโ usage we start using a reveal favourite of ours, to use the details/summary HTML element combination, allowing a user finished with player name settings, forgo seeing the names in order to allow the playing board more height to work with.
Feel free to try thechanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisting thechanged chess_game
php Chess or Draughts Practice Game โฆ
And whatโs with the Javascript deq wrapper function oddity? Well, just in case a player name involves the letters of draughts (hello โJohnny draughts Gameplayer IIIโ) we fleshed out โฆ
function deq(inideais) {
if (document.URL.indexOf(inideais + '=') != -1) {
return inideais + '=';
} else if (document.URL.indexOf('=' + inideais) != -1) {
return '=' + inideais;
}
return "you'l" + "lnever#findth" + "is";
}
Previous relevant Draughts Game Logic Tutorial is shown below.
Draughts Game Logic Tutorial
Is โmutipurposing codeโ overrated? We asked the general populace.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
You know what? Weโll leave that topic for another day. But, on a personal level, we like it. We like the concept of reuse, and maybe sometimes we go too far, but in our defence โฆ
โฆ and far outweigh the differences, in our opinion.
And so, as a principle for us, to facilitate Draughts Game logic, we use Chess Game logic but check for โdraughtsโ, as a word, in this first draft, appearing in URLs as the means by which โฆ
โฆ as the first worry we attended to. But thereโs also โฆ
Black draughts king is ⛃ โ (vs ⛂ โ) white is ⛁ โ (vs ⛀ โ)
โฆ emoji set did not look good, yet, for us, and so we took our Bishop and Queen piece similarity ideas to heart, so that the player is not confused (but into other drafts, we may do better)
โฆ matters to attend to.
And so, onto the recent Chess Game Check Logic Tutorial achanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisting achanged chess_game
php Draughts
Practice Game can have you playing Draughts โฆ
โฆ toot sweet!
Previous relevant Chess Game Check Logic Tutorial is shown below.
Chess Game Check Logic Tutorial
Finally, after the recent Chess Game Correspondence Tutorial, today, we tackle โฆ
Chess check logic
โฆ regarding โฆ
โฆ and the illegal move whereby a King might get too close to the other King, weโre checking for within the same logic, working it that the Javascript global variable isbad is set true when a move is illegal because it puts your own King in check ..
function anybw(asq, thebrd, bwenemy, alertallowed) {
thebrd+='&';
isbad=false;
iswrong=false;
var bwfriend=bwenemy.replace('w','!').replace('b','W').replace('!', 'b').toLowerCase();
var okfornow=true, startat=eval('' + asq), twos=[];
var startrow=Math.floor(eval(-1 + asq) / 8);
var startcol=Math.floor(eval(-1 + asq) % 8);
var lastcol=-1, lastrow=-1;
var kposa=[18,-18,17,-17,15,-15,6,-6,10,10];
var pposa=[9,7];
var kgposa=[9,8,7,-1,1,-7,-8,-9];
var ikposa=0;
if (asq == thissquare) {
asq=asq;
}
if (bwfriend == 'w') {
pposa=[-9,-7];
}
//alert('Checking ' + bwfriend + ' King at ' + asq);
// Horizontal check
startat=eval(-1 + asq);
while (startat >= 1 && startat <= 64 && startrow == Math.floor(eval(-1 + startat) / 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(1);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(2);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(3);
return asq;
}
}
}
startat--;
}
startat=eval(1 + asq);
while (startat >= 1 && startat <= 64 && startrow == Math.floor(eval(-1 + startat) / 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(11);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(12);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(13);
return asq;
}
}
}
startat++;
}
// Vertical check
startat=eval(-8 + asq);
while (startat >= 1 && startat <= 64 && startcol == Math.floor(eval(-1 + startat) % 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(21);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(22);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(23);
return asq;
}
}
}
startat-=8;
}
startat=eval(8 + asq);
while (startat >= 1 && startat <= 64 && startcol == Math.floor(eval(-1 + startat) % 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(24);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(25);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('R') != -1) {
isbad=true;
//alert(26);
return asq;
}
}
}
startat+=8;
}
// Diagonal check
lastcol=Math.floor(eval(-1 + asq) % 8);
lastrow=Math.floor(eval(-1 + asq) / 8);
startat=eval(-9 + asq);
while (startat >= 1 && startat <= 64 && Math.abs(lastcol - Math.floor(eval(-1 + startat) % 8)) == 1 && Math.abs(lastrow - Math.floor(eval(-1 + startat) / 8)) == 1) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert('31 ' + bwfriend + ' ' + twos[0].slice(-3) + ' ' + startat + ' ' + asq);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(32);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(33);
return asq;
}
}
}
lastcol=Math.floor(eval(-1 + startat) % 8);
lastrow=Math.floor(eval(-1 + startat) / 8);
startat-=9;
}
lastcol=Math.floor(eval(-1 + asq) % 8);
lastrow=Math.floor(eval(-1 + asq) / 8);
startat=eval(-7 + asq);
while (startat >= 1 && startat <= 64 && Math.abs(lastcol - Math.floor(eval(-1 + startat) % 8)) == 1 && Math.abs(lastrow - Math.floor(eval(-1 + startat) / 8)) == 1) { // && startcol == Math.floor(eval(-1 + startat) % 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(41);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(42);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(43);
return asq;
}
}
}
lastcol=Math.floor(eval(-1 + startat) % 8);
lastrow=Math.floor(eval(-1 + startat) / 8);
startat-=7;
}
lastcol=Math.floor(eval(-1 + asq) % 8);
lastrow=Math.floor(eval(-1 + asq) / 8);
startat=eval(9 + asq);
while (startat >= 1 && startat <= 64 && Math.abs(lastcol - Math.floor(eval(-1 + startat) % 8)) == 1 && Math.abs(lastrow - Math.floor(eval(-1 + startat) / 8)) == 1) { // && startcol == Math.floor(eval(-1 + startat) % 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(44);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(45);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(46);
return asq;
}
}
}
lastcol=Math.floor(eval(-1 + startat) % 8);
lastrow=Math.floor(eval(-1 + startat) / 8);
startat+=9;
}
lastcol=Math.floor(eval(-1 + asq) % 8);
lastrow=Math.floor(eval(-1 + asq) / 8);
startat=eval(7 + asq);
while (startat >= 1 && startat <= 64 && Math.abs(lastcol - Math.floor(eval(-1 + startat) % 8)) == 1 && Math.abs(lastrow - Math.floor(eval(-1 + startat) / 8)) == 1) { // && startcol == Math.floor(eval(-1 + startat) % 8)) {
//alert('checking square ' + startat);
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(51);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(52);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
break;
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('Q') != -1 || twos[0].slice(-3).indexOf('B') != -1) {
isbad=true;
//alert(53);
return asq;
}
}
}
lastcol=Math.floor(eval(-1 + startat) % 8);
lastrow=Math.floor(eval(-1 + startat) / 8);
startat+=7;
}
// Knight check
for (ikposa=0; ikposa<kposa.length; ikposa++) {
startat=eval(kposa[ikposa] + asq);
if (startat >= 1 && startat <= 64 && startrow != Math.floor(eval(-1 + startat) / 8) && startcol != Math.floor(eval(-1 + startat) % 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('K1') != -1 || twos[0].slice(-3).indexOf('K2') != -1) {
isbad=true;
//alert(61);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('K1') != -1 || twos[0].slice(-3).indexOf('K2') != -1) {
isbad=true;
//alert(62);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('K1') != -1 || twos[0].slice(-3).indexOf('K2') != -1) {
isbad=true;
//alert(63);
return asq;
}
}
}
}
}
// Pawn check
for (ikposa=0; ikposa<pposa.length; ikposa++) {
startat=eval(pposa[ikposa] + asq);
if (startat >= 1 && startat <= 64 && startrow != Math.floor(eval(-1 + startat) / 8) && startcol != Math.floor(eval(-1 + startat) % 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('P') != -1) {
isbad=true;
//alert(71);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('P') != -1) {
isbad=true;
//alert(72);
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('P') != -1) {
isbad=true;
//alert(73);
return asq;
}
}
}
}
}
// King too near King check
for (ikgposa=0; ikgposa<kgposa.length; ikgposa++) {
startat=eval(kgposa[ikgposa] + asq);
if (startat >= 1 && startat <= 64 && startrow != Math.floor(eval(-1 + startat) / 8) && startcol != Math.floor(eval(-1 + startat) % 8)) {
if (thebrd.indexOf('_' + startat + 'w') != -1) {
twos=thebrd.split('_' + startat + 'w');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('K') != -1 && twos[0].slice(-3).indexOf('K1') == -1 && twos[0].slice(-3).indexOf('K2') == -1) {
iswrong=true;
if (alertallowed) { alert('Kings can not be this close together.'); }
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + 'b') != -1) {
twos=thebrd.split('_' + startat + 'b');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('K') != -1 && twos[0].slice(-3).indexOf('K1') == -1 && twos[0].slice(-3).indexOf('K2') == -1) {
iswrong=true;
if (alertallowed) { alert('Kings can not be this close together.'); }
return asq;
}
}
} else if (thebrd.indexOf('_' + startat + '&') != -1) {
twos=thebrd.split('_' + startat + '&');
if (twos[0].slice(-3).indexOf(bwfriend) != -1) {
twos[0]=twos[0];
} else if (twos[0].slice(-3).indexOf(bwenemy) != -1) {
if (twos[0].slice(-3).indexOf('K') != -1 && twos[0].slice(-3).indexOf('K1') == -1 && twos[0].slice(-3).indexOf('K2') == -1) {
iswrong=true;
if (alertallowed) { alert('Kings can not be this close together.'); }
return asq;
}
}
}
}
}
return asq;
}
โฆ for you to involve yourself with in thechanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisting theunchanged chess_game
php Chess
Practice Game for you to better practice your Chess โฆ
Previous relevant Chess Game Correspondence Tutorial is shown below.
Chess Game Correspondence Tutorial
Yesterdayโs Chess Game Midway Scenario Layout Tutorial โMidway Layout Scenarioโ for our Chess Game Practice was a conduit to another idea. Any ideas what? Anyone? Anyone? Yes, Con Nike, we can send off a snapshot of the Chess Game at any point in time, and so this means we can play the game โฆ
โฆ and perhaps just one correspondent (though have not worked the practicalities of this in testing).
Luckily, the data requirements of doing this can be handled via URLs with the familiar ? and & argument arrangements, and so we add links into โฆ
โฆ helping the transfer of game details onto the Chess Game players.
And what is the conduit for the initial user of our Chess Game Practice web application to make this happen? Well, as they name the players start using a name such as โฆ
R. Metcalfe [rmetcalfe15@gmail.com]
โฆ for both Black and White players to perform a Chess Game via correspondence.
As such, itโs definitely worth trying thechanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisting thechanged chess_game
php Chess
Practice Game for you to better practice your Chess โฆ
Previous relevant Chess Game Midway Scenario Layout Tutorial is shown below.
Chess Game Midway Scenario Layout Tutorial
We are always intrigued by those Chess โend game scenariosโ that appear in the newspaper. Weโre guessing to get good at Chess you need to know strategies to adopt for various scenarios. With that in mind, in addition, onto those โฆ
We just added a Javascript prompt popup window means by which we could add this, adding into the PHP parent code the new button โฆ
<?php echo โ
<button style=background-color:rgba(255,255,0,0.5); id=chessinitmid onclick="location.href=(document.URL.split(String.fromCharCode(35))[0] + ' . "'&traditional=' + encodeURIComponent(prompt('Pieces have designations bK wK bQ wQ bR1 wR1 bR2 wR2 bB1 wB1 bB2 wB2 bK1 wK1 bK2 wK2 bP1 wP1 bP2 wP2 bP3 wP3 bP4 wP4 bP5 wP5 bP6 wP6 bP7 wP7 bP8 wP8 ... so example answer bK_25wK_27bQ_32wQ_37&move=wQ_37_39 places the Kings and Queens to squares in the range 1 to 64 (starting top left of board) and the optional but advisable move says move white Queen from square 37 to square 39 ... as an albeit pretty stupid (on so many levels) example!','')).replace(encodeURIComponent(String.fromCharCode(38)),String.fromCharCode(38)).replace(encodeURIComponent(String.fromCharCode(61)),String.fromCharCode(61))" . ").replace('.php&','.php?'" . ');">Midway Start to Game</button>
โ; ?>
โฆ and look for the new ($_GET[]) ? and & arguments in the child Javascript โฆ
var trad='';
var amove='';
if (document.URL.indexOf('traditional=') != -1) {
trad=decodeURIComponent(document.URL.split('traditional=')[1].split('&')[0]);
}
if (document.URL.indexOf('move=') != -1) {
amove=decodeURIComponent(document.URL.split('move=')[1].split('&')[0]);
}
var movefrom=-1, moveto=-1, nextmove=-1;
โฆ so that the Chess piece distribution code could cater, in this way โฆ
function butwhatifchessgame(inspanstuff) {
var outspanstuff=inspanstuff, ii=0, thisth='', tnum=0;
if (document.URL.indexOf('/chess') != -1 && document.URL.indexOf('traditional=') != -1) {
var ths=[];
var ourmap=[];
var thas=inspanstuff.split('</th>');
for (ii=0; ii<thas.length; ii++) {
if (thas[ii].trim() != '') {
thisth='<th' + thas[ii].split('<th')[-1 + eval('' + thas[ii].split('<th').length)] + '</th>';
ths.push(thisth);
} // outspanstuff=outspanstuff.replace(thisth, '');
}
var outtg=document.getElementById('mytable').innerHTML;
thas=outtg.split('</td>');
//ouralert(65);
for (ii=0; ii<thas.length; ii++) {
if (trad.indexOf('_') != -1) {
if (trad.indexOf(cpa[ii] + '_') != -1) {
ourmap.push(eval(-1 + eval(trad.split(cpa[ii] + '_')[1].split('w')[0].split('b')[0])));
occupiedlist+='' + eval(-1 + eval(trad.split(cpa[ii] + '_')[1].split('w')[0].split('b')[0])) + ',';
}
} else if (staidmap[ii] >= 0 && document.URL.indexOf('traditional=mayhem') == -1 && trad.indexOf('_') == -1) {
ourmap.push(staidmap[ii]);
occupiedlist+='' + eval(1 + eval('' + staidmap[ii])) + ',';
} else {
tnum=Math.floor(Math.random() * 64);
occupiedlist+='' + eval(1 + tnum) + ',';
ourmap.push(tnum);
}
}
if (amove.trim() != '') {
//alert(amove);
if (trad.trim().indexOf(amove.split('_')[0] + '_') == -1) {
ourmap.push(eval(-1 + eval(trad.trim().split(cpa[ii] + '_')[1].split('w')[0].split('b')[0].split('_')[0])));
occupiedlist+='' + eval(-1 + eval(trad.trim().split(cpa[ii] + '_')[1].split('w')[0].split('b')[0].split('_')[0])) + ',';
}
var amvs=amove.split('_');
if (eval('' + amvs.length) > 2) {
moveto=eval('' + amvs[2]);
if (movefrom == -1) { movefrom=eval('' + amvs[1]); }
//alert('' + movefrom + ' to ' + moveto);
}
}
//ouralert(165);
var preclick='';
if (navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) {
preclick='data-';
}
for (ii=(-1 + eval('' + ths.length)); ii>=0; ii--) {
//ouralert(thas[ii] + ' ... ' + ths[ii]);
outtg=outtg.replace(thas[ourmap[ii]], thas[ourmap[ii]] + ths[ii].replace(/th/g,'span').replace('<span ', '<span style=font-size:60px; data-ontouchstart=fit(this); onmouseover=fit(this); ' + preclick + 'onclick=fit(this); ')); // .replace(/th/g,'SPAN')
}
document.getElementById('mytable').innerHTML=outtg;
setTimeout(prevl, 500);
return '<td></td>';
}
return outspanstuff;
}
And so, further to yesterdayโs Chess Game Practice Player Commentary Tutorial โฆ
โฆ we have achanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisting achanged chess_game
php Chess
Practice Game for you to better practice your Chess โฆ
Previous relevant Chess Game Practice Player Commentary Tutorial is shown below.
Chess Game Practice Player Commentary Tutorial
We wanted to start thinking more of the players regarding our recent Chess Game Practice web application, further to yesterdayโs Chess Game Practice Touchdown Tutorial.
As such, regarding player names in games we really admire the โฆ
contenteditable=true
โฆ global attribute for such tasks, these days, the affect of which todayโs tutorial pictureโs blue bordered part helps explain.
Once we have collected those optional non-Black and non-White names, we concentrate on providing an HTML p element as a repository for commentary, whose visibility can be toggled by clicking that versus word Claytonโs hardcoding.
That commentary should better explain โฆ
โฆ in ourchanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisting thechanged chess_game
php Chess
Practice Game for you to better practice your Chess โฆ
Previous relevant Chess Game Practice Touchdown Tutorial is shown below.
Chess Game Practice Touchdown Tutorial
The โtouchdownโ referred to in our blog posting title (further to the work of yesterdayโs Chess Game Practice Castling Tutorial) โฆ
โฆ and โฆ yes โฆ thatโs worth a yayyyyyy!!!! in anyoneโs language.
Why are we needing this? Well, after the layout posting, populating a traditional Chess board with the default chess player positions, we lost the Drag and Drop โsmartsโ for the tabular span elements.
We asked ourselves โฆ
And we thought โฆ
The Javascript code below can populate the elements of interest with new ontouchdown (discrete clicking or touching) logic for the chess piece moves.
function rejig() {
if (navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) {
if (document.URL.indexOf('traditional=') != -1) {
var huhih=document.getElementsByTagName('h1')[0].innerHTML.substring(26);
if (huhih.indexOf('Discrete Touch') == -1) {
document.getElementsByTagName('h1')[0].innerHTML="Discrete Touch" + huhih;
}
}
//document.body.addEventListener("touchdown", (ev) => { gev=ev; refit(ev); });
document.getElementById('mytable').addEventListener("click", (ev) => { gev=ev; if (1 == 1) { setTimeout(delayedrefit, 500); } else { refit(ev); } });
if (1 == 1) {
elems=document.getElementsByTagName('td');
for (ielems=0; ielems
}
}
elems=document.getElementsByTagName('span');
for (ielems=0; ielems
}
}
elems=document.getElementsByTagName('th');
for (ielems=0; ielems
}
}
}
}
}
in thegreatly changed experimental_drag_and_drop
htm HTML and Javascript and CSS assisting theunchanged chess_game
php Chess
Practice Game for you to better practice your Chess โฆ
โฆ further to yesterdayโs Chess Game Practice Castling Tutorial.
Previous relevant Chess Game Practice Castling Tutorial is shown below.
Chess Game Practice Castling Tutorial
Maybe in mathematics, in school, you discussed limits (and/or perhaps even โproof by contradictionโ and/or โparadoxesโ). You know, those fancy ways of saying if โsuch and suchโ you never finish the race, such as in โAchilles and the Tortoiseโ โฆ
Beware the project that runs the same way, by worrying too much about the one percenters. On the other side of the ledger though, is that you learn far less when not trying to tackle any of those one percenters. With these thoughts swirling around we undertook the first of the โdooziesโ (amidst a lot of swearing and โwhat have we gotten ourselves into hereโ thoughts) referenced in yesterdayโs Chess Game Practice Basic Moves Tutorial โฆ
Castling (between a Rook and a King with a lot of provisos)
We learnt things about the interface between โdrag eventsโ and events like โonmouseoverโ, the latter of which we needed to resort to, alas. If you didnโt, life would be much easier, and try to design the initial premise, perhaps, better, so that those two wooooorrrrlllldddsss never have to meet (and just image the in-law get togethers!).
We learnt, again, that DOM methodology can come undone when there is no time gap between element arrangements that rely on a previous Javascript DOM arranged task. Take a look at our setInterval Javascript function setup to help here โฆ
var domcmds=[];
function dodoms() {
var stopit=false;
# Irrelevant to blurb above ...
if (document.getElementById('span4') && fouroh == '') { fouroh=document.getElementById('span4').outerHTML; }
if (document.getElementById('span5') && wsixoh == '') { wsixoh=document.getElementById('span5').outerHTML; }
if (document.getElementById('span6') && sixoh == '') { sixoh=document.getElementById('span6').outerHTML; }
if (document.getElementById('span0') && spanzero == '') { spanzero=document.getElementById('span0').outerHTML; }
if (document.getElementById('span1') && spanfive == '') { spanfive=document.getElementById('span1').outerHTML; }
if (document.getElementById('td22') && tdtte == '') { tdtte=document.getElementById('td22').outerHTML.split('>')[0] + '></td>'; }
if (document.getElementById('td211') && wtdtte == '') { wtdtte=document.getElementById('td211').outerHTML.split('>')[0] + '></td>'; }
if (document.getElementById('td193') && wwtdtte == '') { wwtdtte=document.getElementById('td193').outerHTML.split('>')[0] + '></td>'; }
if (document.getElementById('td11') && wwwtdtte == '') { wwwtdtte=document.getElementById('td11').outerHTML.split('>')[0] + '></td>'; }
# Relevant below ...
for (var ikj=0; ikj<domcmds.length; ikj++) {
if (!stopit && domcmds[ikj] != '') {
stopit=true;
//if (prompt(domcmds[ikj], domcmds[ikj])) {
eval(domcmds[ikj]);
//}
domcmds[ikj]='';
}
}
//domcmds=[];
}
โฆ called into play via โone onlyโ call โฆ
setInterval(dodoms, 1000);
โฆ and given DOM (but doesnโt have to be) jobs to do via Javascript commands, such as a few examples from our โCastlingโ code โฆ
domcmds.push("document.getElementById('td202').innerHTML='" + wsixoh + "'; ");
domcmds.push("document.getElementById('td203').innerHTML='" + spanfive + "'; ");
domcmds.push("document.getElementById('tr8').innerHTML='" + wwtdtte + "' + document.getElementById('tr8').innerHTML; itisthiscmove='b'; adddrop('" + lohoh.split(' id="')[1].split('"')[0] + "'); ");
โฆ the Javascript DOM actions of which would have a one second gap between each domcmds[] array member โcall to actionโ.
Again, why not try thechanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisted โfourthdraftโ chess_game
php Chess
Practice Game for you to better practice your Chess โฆ
Previous relevant Chess Game Practice Basic Moves Tutorial is shown below.
Chess Game Practice Basic Moves Tutorial
Adding onto yesterdayโs Chess Game Practice Layout Tutorialโs basis for a more formal Chess game, today we feel like weโre in the calm โฆ
Coding for the basic pawn and knight and bishop and rook and queen and king chess piece moving rules
โฆ before the storm, into the future, coding for โฆ
โฆ in the category of โdoozyโ.
So, why not try thechanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisted โthirddraftโ chess_game
php Chess
Practice Game for you to better practice your Chess โฆ
Previous relevant Chess Game Practice Layout Tutorial is shown below.
Chess Game Practice Layout Tutorial
Onto yesterdayโs Chess Game Practice Tutorialโs Chess Game Practice web application, today, weโve developed further, in a โlayoutโ sense, to allow for โฆ
โฆ but no piece move logic yet! That is for tomorrow, but this โlayoutโ logic helped us get to a better piece identification set of protocols to work with. So, try thechanged experimental_drag_and_drop
htm HTML and Javascript and CSS assisted โseconddraftโ chess_game
php Chess
Practice Game for you to โฆ practice (after choosing a layout) โฆ
Previous relevant Chess Game Practice Tutorial is shown below.
Chess Game Practice Tutorial
Further to the recent Sentence Shuffle Game Tutorialโs concepts regarding โฆ
โฆ we present our start to our Chess web application, weโre calling โChess Game Practiceโ for now because it will take some time. In todayโs first draft โฆ
โฆ and the chess pieces can be dragged around the board as well, but no checks on legal or illegal moves yet, nor the default starting positions to a game. Anyway, achanged experimental_drag_and_drop
htm HTML and Javascript and CSS underpins a calling โfirst draftโ chess_game
php Chess
Practice Game for you to โฆ practice โฆ
Did you know?
A little esoteric, we know, but research (thanks to this useful link) got us to (finally) discover the Claytonโs emoji. In other words, an emoji taking no (or little to no) screen display space but differentiates one emoji representation from another when you want to just differentiate via โinnerHTMLโ content, for HTML elements. Itโs (the โnobreakโ) โฆ
โ
You missed it?! Try โฆ
⁠
Why, regarding chess, are we interested? It means regarding the two black rooks, for example, adding a ⁠ to its display contents makes little difference, but we can hone in on an exact black rook, โinnerHTMLโ wise, in the code.
Previous relevant Sentence Shuffle Game Tutorial is shown below.
Sentence Shuffle Game Tutorial
More genericization onto yesterdayโs Numbers Guessing Game Tutorialโs โฆ
โฆ has us considering making the dragee be made up of more than one part, today, continuing on with our Drag and Drop functionalities of recent times.
The first game type of application of this, we sort of stumbled upon, trying it, is to create a โฆ
Sentence Shuffle game
โฆ (good for ESL perhaps) where a sentenceโs words are shuffled and the user โgets satisfactionโ (euphemism for โweโre not keeping scoreโ) from piecing a sentence back together again. Arguments for this involve โฆ
โฆ for ourchanged experimental_drag_and_drop
htm HTML and Javascript and CSS game
web application basis, is also playable below โฆ
Did you know?
We wanted to improve functionality, by changing our usual โ-โ hardcoding to a link โ+โ idea whereby the user can enter in their own โyourblurbโ sentence, as above. It being collected in a Javascript prompt popup window, the user can enter emojis (via control-command-space for macOS or Mac OS X, logo key + . (period) for Windows, control=space for iOS, top left + for Android keyboard) as part of the sentence mix, the only rule being a space character separates words in a sentence with ourfurther changed experimental_drag_and_drop
htm HTML and Javascript and CSS sentence
shuffle game web application.
And then we thought we should also allow for a Pictogram Puzzle scenario (where every picture is worth a thousand words, they say) with ourfurtherer changed experimental_drag_and_drop
htm HTML and Javascript and CSS sentence
image shuffle game web application (thanks to https://www.puzzles-on-line-niche.com) โฆ
Previous relevant Numbers Guessing Game Tutorial is shown below.
Numbers Guessing Game Tutorial
Weโve been working on aspects to the genericity of the table that is โฆ
โฆ do do โฆ do do โฆ do do โฆ do do โฆ do do do do do do do do do do do do โฆ yesterdayโs threat โnow so yesterdayโ being โฆ
โฆ in a (very difficult) Numbers Guessing game for numbers from 1 to 99 that regular readers may be familiar with as the (same content (and mentioned at this link โฆ thanks โฆ) as the) Numbers Guessing game at this blog, but presented using a Drag and Drop modus operandi.
Feel free to try our first
draft PHP game, which leans on achanged experimental_drag_and_drop
htm HTML and Javascript and CSS game
web application basis, is also playable below โฆ
Stop Press
On your smaller devices we found the Numbers Guessing Game a bit hard to use. As such, we researched and played around with โdrag and dropโ cursor ideas unsuccessfully to end up, instead, not thinking about the cursor (albeit, we find that idea cuter) but rather styling the target table cellโs background colour and informing the user of that up at the top button wording in ourchanged second
draft PHP game, which leans on ourchanged experimental_drag_and_drop
htm HTML and Javascript and CSS helperโฆ
var lastbco=null;
const target = document.querySelector("#target");
target.addEventListener("dragover", (ev) => {
if (lastbco) { lastbco.style.backgroundColor='white'; lastbco=null; }
console.log("dragOver " + ev.target.id + ' ' + ('' + ev.target.style.backgroundColor).replace('white','') + ' ' + document.body.innerHTML.indexOf('tab' + 'lece' + 'llb' + 'c'));
ev.preventDefault();
if (('' + ev.target.id).indexOf('td') == 0 && ('' + ev.target.style.backgroundColor).trim().replace('white','') == '' && document.body.innerHTML.indexOf('Numbe' + 'rs Guessi' + 'ng Ga' + 'me') != -1) {
//document.getElementById(sourceid).style.opacity='0.6';
lastbco=ev.target;
ev.target.style.backgroundColor='pink';
if (document.getElementById('mybut')) {
if (document.getElementById('mybut').innerHTML.indexOf(' .. ') == -1) {
document.getElementById('mybut').innerHTML=document.getElementById('mybut').innerHTML.replace(' Game Game', ' Game');
document.getElementById('mybut').innerHTML+=' .. current guess is ' + ev.target.innerHTML;
} else {
document.getElementById('mybut').innerHTML=document.getElementById('mybut').innerHTML.split(' .. ')[0] + ' .. current guess is ' + ev.target.innerHTML;
}
}
}
//document.getElementById(sourceid).style.cursor='progress';
//ev.target.style.cursor='progress';
//ev.target.dataTransfer.dropEffect = 'progress';
});
Previous relevant Planet Moon Game Tutorial is shown below.
Planet Moon Game Tutorial
Another thing that there is nine of (as contentious as it is regarding Pluto) is Planets in the Solar System, revolving around the Sun. And so, in keeping with a lot of the same design as yesterdayโs Enneagram Type Game Tutorial we have a Planet Moon Game to present for you to play around with today.
Again, PHP uses a framework of Experimental Drag and Drop HTML and Javascript and CSS, mainly via one PHP codeline โฆ
<?php
$templategame=file_get_contents('./experimental_drag_and_drop.htm');
?>
โฆ and, perhaps, your curiosity that we have not โpassedโ data via $_GET[] or $_POST[] arguments, but rather just the simple act of โฆ
<?php
echo $templategame;
?>
โฆ outputs a webpage โฆ
location.href=document.getElementById('callback').value + '?score=' + score + '&secs=' + secs;
โฆ in our first
draft PHP game, which leans on achanged experimental_drag_and_drop
html HTML and Javascript and CSS game
web application basis, is also playable below โฆ
Stop Press
We fully concur with any adage that goes โฆ
โฆ just as weโre curious about โthe things that go wrongโ, and not having them repeat! Same with pooches!
Take our firstto second
draft PHP game (to the opera, would be preferable). We wondered why, occasionally, with the โfirst draftโ it would hang. It took us a half day to realize, as you could yourself have tweaked to a lot quicker if you had followed the adage โฆ
Hanging issues mostly team up with code within a loop
The situation, weโve reasoned, is that we had that PHP $badlist variable store a comma separated list of planets with either zero moons or more than one moon randomly selected representing it. Weโd assumed, yesterday, not that weโd put it in words, but in logic, that this list would not (have the same length or) be the same as a (new $goodlist variable) list of planets with either zero moons or selected while collecting the random list of Moon/Planet combinations โฆ ie. we assumed in the list would be a Planet with only one of its Moons randomly selected โฆ mistake!!! Better is โฆ
<?php
$goodlist=',Mercury,Venus,';
$badlist=',Mercury,Venus,';
while (strlen($goodlist) == strlen($badlist)) {
$goodlist=',Mercury,Venus,';
$badlist=',Mercury,Venus,';
$correctans=rand(0,8);
$sofar=';';
for ($i=0; $i<9; $i++) {
$j=rand(0, (-1 + sizeof($wikidesignations)));
if ($crandlist == '') {
$crandlist='' . $j;
$sofar.=$wikidescriptions[$j] . ';';
if (strpos($goodlist, $wikidescriptions[$j]) === false) { $goodlist.=$wikidescriptions[$j] . ','; }
} else if (strpos((',' . $crandlist . ','), (',' . $j . ',')) !== false) { // || strpos($sofar, ';' . $wikidescriptions[$j] . ';') !== false) {
while (strpos((',' . $crandlist . ','), (',' . $j . ',')) !== false) { // || strpos($sofar, ';' . $wikidescriptions[$j] . ';') !== false) {
$j=rand(0, (-1 + sizeof($wikidesignations)));
}
$crandlist.=',' . $j;
$sofar.=$wikidescriptions[$j] . ';';
if (strpos($goodlist, $wikidescriptions[$j]) === false) { $goodlist.=$wikidescriptions[$j] . ','; }
} else {
if (strpos($sofar, ';' . $wikidescriptions[$j] . ';') !== false) { $badlist.=$wikidescriptions[$j] . ','; }
$crandlist.=',' . $j;
$sofar.=$wikidescriptions[$j] . ';';
if (strpos($goodlist, $wikidescriptions[$j]) === false) { $goodlist.=$wikidescriptions[$j] . ','; }
}
}
}
?>
Previous relevant Enneagram Type Game Tutorial is shown below.
Enneagram Type Game Tutorial
A lot of us wonder what goes towards making up our personalities. We remember doing a Myers-Briggs test for some job as part of the vetting process. We thought weโd write another experimental drag and drop game, like yesterdayโs Australian Street Type Game Tutorial, regarding โฆ
โฆ of human personalities, and we found a webpage linking these categorizations to Hollywood Movie Stars for you to get the gist of the ideas. We also thank Wikipedia as our source for Movie Star images.
It being a topic โฆ
โฆ you may be wondering how we stumbled upon the idea? We let Google autocomplete our โฆ
nine types of
โฆ search textbox typing, fully expecting โCarolโ? to be at the top of the list when we saw โฆ
nine types of enneagram
โฆ to flesh out a family of โgame interestโ, we hope?!
Our first
draft PHP game is also playable below โฆ
Previous relevant Australian Street Type Game Tutorial is shown below.
Australian Street Type Game Tutorial
The experimental drag and drop theme continues on today, after Experimental Drag and Drop Game Tutorialโs debut game application, with a Wikipedia inspired โAustralian Street Typeโ game today.
Huh?! Well, you know those street names that baffle? Or are we easily baffleable?! Anyway, you had to be there. And if you ever feel youโre alone with an interest, just look it up in Wikipedia or Google and youโre almost sure to find out โฆ
Yes, our Wikipedia page mentioned Australian Street Type Designations with their lawyerly Australian Street Type Descriptions. Who could ask for more? Well?!
To make this happen we wrote some PHP, which leans on achanged experimental_drag_and_drop
html HTML and Javascript and CSS game
web application basis, or template, to mould and bend towards our purpose โฆ nga ha ha!
Our first
draft PHP game is also playable below โฆ
Previous relevant Experimental Drag and Drop Game Tutorial is shown below.
Experimental Drag and Drop Game Tutorial
It can be interesting turning a โconceptโ (or even a โproof of conceptโ web application) into an, on the side, โgameโ web application, and that way, learn whatโs possible via user action. This is how we felt about yesterdayโs Experimental Drag and Drop Primer Tutorial and that teamed with the wonder about how we could add some useful complexity to our โExperimental Drag and Dropโ web applicationโs โฆ
Can โinheritanceโ be harnessed to make it work for some complexity of nested HTML elements inside that โDrop Zoneโ element when the document.bodyโs onload event happens? We wondered whether a Brady Bunch style 3ร3 table could be the go? And whether the nine cells could have a โscoreโ associated with them, and that set of scores be changing over time to make the game more challenging and interesting? Well โฆ
โฆ is the answer regardingmaking a game out of a proof of concept with our experimental_drag_and_drop
html HTML and Javascript and CSS game
web application (also shown below) using these techniques, about which we think some of you readers will be interested?!
Previous relevant Experimental Drag and Drop Primer Tutorial is shown below.
Experimental Drag and Drop Primer Tutorial
Weโve added the word experimental into todayโs blog posting title, mainly because our first of two inspirational webpage sources (last modified on 23/02/2023) regarding somewhat alternative โDrag and Dropโ functionalities told us, regarding the DataTransfer object informational โDataTransferโ webpage โฆ
โฆ but our testing of the methodologies on various platforms hasnโt totally failed yet on any of the several desktop and mobile platform scenarios weโve tried. On mobile, we just held on for a sustained touch (down) to make it possible. So maybe the industry has caught up with the ideas? Weโre hoping so, because โdrag and dropโ is a kind of natural thing online users think of to do, and people associate it with โgetting things doneโ we reckon.
Anyway, we relied on the great source code of the second of two inspirational webpages DataTransfer: setData() method, thanks โฆ
โฆ to getus going with our โproof
of conceptโ web
application (also shown below) using these techniques, about which we think some of you readers will be interested?!
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.