102 lines
4.1 KiB
JavaScript
102 lines
4.1 KiB
JavaScript
const { exec } = require('child_process');
|
|
|
|
// Test the pattern-based approach movement calculation
|
|
function calculateMovement(currentPosition, stepValue, diceRoll, border, isPositive) {
|
|
// Calculate base movement (multiplication for larger distances)
|
|
let baseMovement = Math.abs(stepValue) * diceRoll;
|
|
if (!isPositive) {
|
|
baseMovement = -baseMovement;
|
|
}
|
|
|
|
// Get position modifier based on current position pattern for strategic thinking
|
|
let patternModifier = 0;
|
|
|
|
// Pattern rules: Players must consider their current position
|
|
if (currentPosition % 10 === 0) {
|
|
// Positions ending in 0 (10, 20, 30, etc.) get no modifier
|
|
patternModifier = 0;
|
|
} else if (currentPosition % 5 === 0) {
|
|
// Positions ending in 5 (15, 25, 35, etc.) get ±3 modifier
|
|
patternModifier = isPositive ? 3 : -3;
|
|
} else if (currentPosition % 3 === 0) {
|
|
// Positions divisible by 3 get ±2 modifier
|
|
patternModifier = isPositive ? 2 : -2;
|
|
} else if (currentPosition % 2 === 1) {
|
|
// Odd positions get ±1 modifier
|
|
patternModifier = isPositive ? 1 : -1;
|
|
} else {
|
|
// Even positions (not divisible by other patterns) get no modifier
|
|
patternModifier = 0;
|
|
}
|
|
|
|
// Calculate final position
|
|
let finalPosition = currentPosition + baseMovement + patternModifier;
|
|
|
|
// Handle bounds (no wrapping - clamp to 1-100)
|
|
if (finalPosition > 100) finalPosition = 100;
|
|
if (finalPosition < 1) finalPosition = 1;
|
|
|
|
return finalPosition;
|
|
}
|
|
|
|
// Test function for various positions
|
|
function testPatternLogic() {
|
|
console.log('Testing Pattern-Based Movement Calculation');
|
|
console.log('=========================================');
|
|
|
|
const testPositions = [3, 5, 10, 15, 18, 20, 25, 30, 33, 40, 45, 50, 60, 65, 75, 80, 85, 90, 95, 100];
|
|
const border = Array.from({length: 100}, (_, i) => i + 1); // Simple 1-100 border for testing
|
|
|
|
for (const pos of testPositions) {
|
|
console.log(`\nPosition ${pos}:`);
|
|
|
|
// Check pattern
|
|
const lastDigit = pos % 10;
|
|
let patternType = 'even (no modifier)';
|
|
if (pos % 10 === 0) patternType = 'ends in 0 (no modifier)';
|
|
else if (pos % 5 === 0) patternType = 'ends in 5 (±3 modifier)';
|
|
else if (pos % 3 === 0) patternType = 'divisible by 3 (±2 modifier)';
|
|
else if (pos % 2 === 1) patternType = 'odd (±1 modifier)';
|
|
|
|
console.log(` Pattern: ${patternType}`);
|
|
|
|
// Test positive movement with dice 1-6 and step value 4
|
|
console.log(' Positive moves (step=4):');
|
|
for (let dice = 1; dice <= 6; dice++) {
|
|
const result = calculateMovement(pos, 4, dice, border, true);
|
|
const distance = Math.abs(result - pos);
|
|
const valid = (pos <= 85 && distance >= 20 && distance <= 30) ||
|
|
(pos > 85 && distance >= 20 && distance <= 30);
|
|
console.log(` Dice ${dice}: ${pos} -> ${result} (distance: ${distance}) ${valid ? '✓' : '✗'}`);
|
|
}
|
|
|
|
// Test negative movement with dice 1-6 and step value -4
|
|
console.log(' Negative moves (step=-4):');
|
|
for (let dice = 1; dice <= 6; dice++) {
|
|
const result = calculateMovement(pos, -4, dice, border, false);
|
|
const distance = Math.abs(result - pos);
|
|
const valid = (pos <= 85 && distance >= 20 && distance <= 30) ||
|
|
(pos > 85 && distance >= 20 && distance <= 30);
|
|
console.log(` Dice ${dice}: ${pos} -> ${result} (distance: ${distance}) ${valid ? '✓' : '✗'}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
testPatternLogic();
|
|
|
|
// Test board generation
|
|
console.log('\n\nTesting Board Generation...');
|
|
console.log('============================');
|
|
|
|
exec('cd d:\\munka\\SzeSnake\\SerpentRace_Backend && npm run test -- --testNamePattern="BoardGenerationService"',
|
|
(error, stdout, stderr) => {
|
|
if (error) {
|
|
console.error(`Error: ${error}`);
|
|
return;
|
|
}
|
|
console.log(stdout);
|
|
if (stderr) {
|
|
console.error(`Stderr: ${stderr}`);
|
|
}
|
|
}
|
|
); |