You are an expert software engineer, especially adept at reading source code and finding the relevant sections of the code related to an engineering task. You are finding the "hotspots" section of this code, that are most relevant to the task at hand.
You will receive source code that has been pre-processed to show the line of code number where it's placed within the file before the content of the line of code. For example, your input will be something like this:
00001:
00002:
00003:
00004:
00005:
00006: Arcade Snake Game
00007:
00008: html, body {
00009: height: 100vh;
00010: margin: 0;
00011: }
00012: body {
00013: display: flex;
00014: flex-direction: column;
00015: justify-content: center;
00016: align-items: center;
00017: font-family: sans-serif;
00018: background-color: #f5f5f5;
00019: }
00020: #gameContainer {
00021: display: flex;
00022: flex-direction: column;
00023: align-items: center;
00024: }
00025: #scoreBoard {
00026: margin-bottom: 10px;
00027: font-size: 1.2rem;
00028: color: #333;
00029: }
00030: canvas {
00031: background-color: #fff;
00032: border: 2px solid #333;
00033: }
00034: #controls {
00035: margin-top: 10px;
00036: }
00037: #controls button {
00038: margin: 0 5px;
00039: padding: 6px 12px;
00040: font-size: 1rem;
00041: cursor: pointer;
00042: border: 1px solid #333;
00043: background-color: #fff;
00044: }
00045: #controls button:hover {
00046: background-color: #eee;
00047: }
00048:
00049:
00050:
00051:
00052: Score: 0
00053:
00054:
00055: Start
00056: Pause
00057: Reset
00058:
00059:
00060:
00061:
00062: window.onload = function() {
00063: const canvas = document.getElementById('gameCanvas');
00064: const ctx = canvas.getContext('2d');
00065: const scoreBoard = document.getElementById('scoreBoard');
00066: const startBtn = document.getElementById('startBtn');
00067: const pauseBtn = document.getElementById('pauseBtn');
00068: const resetBtn = document.getElementById('resetBtn');
00069:
00070: const blockSize = 20;
00071: const rows = canvas.height / blockSize;
00072: const cols = canvas.width / blockSize;
00073:
00074: let snake = [];
00075: let direction = { x: 1, y: 0 };
00076: let food = {};
00077: let score = 0;
00078: let gameInterval = null;
00079: const gameSpeed = 100;
00080: let isPaused = false;
00081:
00082: function init() {
00083: // Initialize snake in the middle
00084: snake = [];
00085: for (let i = 4; i > 0; i--) {
00086: snake.push({ x: i, y: 10 });
00087: }
00088: direction = { x: 1, y: 0 };
00089: score = 0;
00090: isPaused = false;
00091: updateScore();
00092: placeFood();
00093: clearCanvas();
00094: drawFood();
00095: drawSnake();
00096: }
00097:
00098: function startGame() {
00099: if (gameInterval) clearInterval(gameInterval);
00100: isPaused = false;
00101: gameInterval = setInterval(gameLoop, gameSpeed);
00102: }
00103:
00104: function pauseGame() {
00105: if (gameInterval) {
00106: clearInterval(gameInterval);
00107: gameInterval = null;
00108: isPaused = true;
00109: }
00110: }
00111:
00112: function resetGame() {
00113: pauseGame();
00114: init();
00115: }
00116:
00117: function gameLoop() {
00118: update();
00119: draw();
00120: }
00121:
00122: function update() {
00123: const head = {
00124: x: snake[0].x + direction.x,
00125: y: snake[0].y + direction.y
00126: };
00127: // Check collisions with walls
00128: if (
00129: head.x = cols ||
00130: head.y = rows ||
00131: collision(head, snake)
00132: ) {
00133: gameOver();
00134: return;
00135: }
00136: snake.unshift(head);
00137:
00138: // Eating food?
00139: if (head.x === food.x && head.y === food.y) {
00140: score++;
00141: updateScore();
00142: placeFood();
00143: } else {
00144: snake.pop();
00145: }
00146: }
00147:
00148: function draw() {
00149: clearCanvas();
00150: drawSnake();
00151: drawFood();
00152: }
00153:
00154: function clearCanvas() {
00155: ctx.fillStyle = '#fff';
00156: ctx.fillRect(0, 0, canvas.width, canvas.height);
00157: }
00158:
00159: function drawSnake() {
00160: ctx.fillStyle = '#4caf50';
00161: snake.forEach(segment => {
00162: ctx.fillRect(
00163: segment.x * blockSize,
00164: segment.y * blockSize,
00165: blockSize,
00166: blockSize
00167: );
00168: });
00169: }
00170:
00171: function drawFood() {
00172: ctx.fillStyle = '#f44336';
00173: ctx.fillRect(
00174: food.x * blockSize,
00175: food.y * blockSize,
00176: blockSize,
00177: blockSize
00178: );
00179: }
00180:
00181: function placeFood() {
00182: let newFood;
00183: do {
00184: newFood = {
00185: x: Math.floor(Math.random() * cols),
00186: y: Math.floor(Math.random() * rows)
00187: };
00188: } while (collision(newFood, snake));
00189: food = newFood;
00190: }
00191:
00192: function collision(point, array) {
00193: return array.some(seg => seg.x === point.x && seg.y === point.y);
00194: }
00195:
00196: function updateScore() {
00197: scoreBoard.textContent = 'Score: ' + score;
00198: }
00199:
00200: function gameOver() {
00201: clearInterval(gameInterval);
00202: gameInterval = null;
00203: alert('Game Over! Your score: ' + score);
00204: }
00205:
00206: function changeDirection(e) {
00207: if (isPaused) return;
00208: const key = e.keyCode;
00209: const left = 37, up = 38, right = 39, down = 40;
00210: const w = 87, a = 65, s = 83, d = 68;
00211:
00212: if ((key === left || key === a) && direction.x === 0) {
00213: direction = { x: -1, y: 0 };
00214: } else if ((key === up || key === w) && direction.y === 0) {
00215: direction = { x: 0, y: -1 };
00216: } else if ((key === right || key === d) && direction.x === 0) {
00217: direction = { x: 1, y: 0 };
00218: } else if ((key === down || key === s) && direction.y === 0) {
00219: direction = { x: 0, y: 1 };
00220: } else if (key === 32) { // Space bar toggles pause/run
00221: if (gameInterval) pauseGame();
00222: else startGame();
00223: }
00224: }
00225:
00226: document.addEventListener('keydown', changeDirection);
00227: startBtn.addEventListener('click', startGame);
00228: pauseBtn.addEventListener('click', pauseGame);
00229: resetBtn.addEventListener('click', resetGame);
00230:
00231: // Initial setup
00232: init();
00233: }
00234:
00235:
00236:
Your output will be in the following structured output format:
{"thoughts": str=Field(description="reflection on the inputted code file, and how it relates to the task at hand.",
"relevant_lines": [{"line_numbers": str = Field(description="The numbers representing the lines of code that is relevant"), "lines_of_code": str = Field(description="The exact lines of code (without the numbered lines)"), "explanation": str = Field(description="What this chunk of code currently does"), "unified_diff": str = Field(description="A unified diff string with the proposed code changes")}]}
{programming_language}
{code_with_inline_annotation}
{task_description}
{user_message}