Skip to content

Instantly share code, notes, and snippets.

@d3x0r
Last active April 9, 2020 05:27
Show Gist options
  • Save d3x0r/e53303364ce8f28ec97eae12a4db928e to your computer and use it in GitHub Desktop.
Save d3x0r/e53303364ce8f28ec97eae12a4db928e to your computer and use it in GitHub Desktop.
Utility to convert binary array buffer to usable card information.
// buffer is an array buffer, this routine will apply a Uint8Array to it.
// numbers is the numbers of the game (0 or 75 is 75, or 90 number which is different)
// call with '75'
function MakeCardFromBuffer( buffer, numbers ) {
buffer = new Uint8Array(buffer);
//console.log( "Length...", buffer.byteLength, buffer[0] );
if( buffer.byteLength == 12 ) {
if( !numbers || numbers === 75 ) {
var card = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]];
var row,col, n = 0;
if( !buffer )
return undefined;
//console.log( "doing for buffer", buffer)
for( col = 0; col < 5; col++ ) {
var base = col * 15;
for( row = 0; row < (col==2?4:5); row++) {
//console.log( "Buffer ", buffer[n>>1].toString(16), " base ", base, ' n ', n );
if( n & 1 )
card[col][row] = base + ( buffer[n>>1] & 0xF );
else
card[col][row] = base + ( buffer[n>>1] >> 4 );
n++;
}
}
}else{
var bufData = new ArrayBuffer(buffer.buffer);
//var buf = new Uint8Array( bufData );
//console.log( "buf is ", bufData, buffer.data, typeof buffer, Object.getPrototypeOf( buffer ) );
var card = expand(buffer.slice( 0, 4 ), buffer.slice( 4, 12 ) )
//console.log( "buf is ", card );
}
return card;
}
if( (buffer.length==8) || ( buffer.length == 7 ) ) {
// upick 7 or 8 dat buffer
var card = [];
buffer.forEach( (val)=>{ card.push(val); })
return card;
}
return undefined;
}
function writeOne( n, card ){
//var test_buf;
test_buf = cardUtils.MakeCardFromBuffer( card, 75 );
var nums = [];
card = new Uint8Array(card);
//console.log( "card:", card );
// this sorts the resulting card face array into 'nums' for ordered count
// 0 is the N free space.
for( let c = 0; c < 5; c++ ) for( let r = 0; r < 5; r++ ) {
for( let n = 0; n < nums.length; n++ ) {
if( test_buf[c][r] < nums[n] ){
nums.splice( n, 0, test_buf[c][r] );
break;
}
}
if( n == nums.length )
nums.push( test_buf[c][r] );
}
// previous colum values are now `nums.join(',')` which is SortCardNumber
// CardNumber is like `test_buf.map( row=>row.join(",") ).join("," )`
// CardJson is `JSON.stringify(card)`
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment