天天看點

使用Javascript實作【你畫我猜】前端部分

《你畫我猜》是一款大家熟知的聚會遊戲,需要兩個或以上的玩家參與。遊戲過程中,每個玩家輪流在畫闆上畫出一幅畫,其他玩家來猜畫圖者所畫的是什麼。遊戲時間通常為一分鐘,畫筆顔料不能擦除或塗改,最先猜到的玩家得到一定的得分,而畫圖者也可得到一定的得分。這款遊戲有利于鍛煉玩家的想象力和表達能力,同時也能增強玩家之間的互動和溝通。在網絡上,也有類似的線上遊戲平台供玩家進行遊戲。

使用Javascript實作【你畫我猜】前端部分

1、HTML部分

我們需要一個HTML頁面來作為遊戲的主體架構。在HTML中,我們需要引入CSS和JavaScript檔案。

<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="UTF-8">  
    <title>你畫我猜小遊戲</title>  
    <link rel="stylesheet" href="style.css">  
    <script src="game.js"></script>  
</head>  
<body>  
    <div class="container">  
        <canvas id="canvas"></canvas>  
        <div class="toolbar">  
            <button id="clear">清空</button>  
            <button id="submit">送出</button>  
        </div>  
    </div>  
</body>  
</html>             

這裡我們使用了一個canvas元素作為繪圖區域,兩個按鈕分别用于清空畫布和送出答案。

2、樣式部分

body {  
    margin: 0;  
    padding: 0;  
    background: #eee;  
}  
.container {  
    margin: 20px auto;  
    width: 800px;  
    height: 600px;  
    background: #fff;  
    box-shadow: 0 0 10px rgba(0,0,0,0.5);  
}  
#canvas {  
    margin: 10px;  
    border: 1px solid #ccc;  
}  
.toolbar {  
    margin: 10px;  
    display: flex;  
    justify-content: space-between;  
}  
button {  
    padding: 10px;  
    background: #03a9f4;  
    color: #fff;  
    border: none;  
    border-radius: 5px;  
    cursor: pointer;  
}  
button:hover {  
    background: #039be5;  
}             

這裡我們添加了簡單的主體架構的樣式。

3、擷取畫布

const canvas = document.getElementById('canvas');  
const context = canvas.getContext('2d');  
canvas.width = 800;  
canvas.height = 500;            

這裡我們設定畫布的寬度和高度。

4、繪圖代碼

  • drawLine: 繪制直線
  • drawPoint: 繪制圓點
  • drawImage: 繪制背景圖檔
let draw = {  
  isDrawing: false,  
  lastX: 0,  
  lastY: 0,  
  lineWidth: 2,  
  color: 'black',  
  drawLine: function(x1, y1, x2, y2) {  
    context.beginPath();  
    context.moveTo(x1, y1);  
    context.lineTo(x2, y2);  
    context.stroke();  
    context.closePath();  
  },  
  drawPoint: function(x, y) {  
    context.beginPath();  
    context.arc(x, y, draw.lineWidth / 2, 0, Math.PI * 2);  
    context.fill();  
    context.closePath();  
  },  
  drawImage: function(src) {  
    const image = new Image();  
    image.src = src;  
    image.onload = function() {  
      context.drawImage(image, 0, 0);  
    }  
  }  
};             

這裡我們定義了一個draw對象,包含了繪圖相關的屬性和方法。其中, drawLine 函數使用了canvas的基本繪圖API, drawPoint 函數用于畫小圓點, drawImage 函數用于加載背景圖檔。

5、背景

在繪圖之前,我們需要先加載遊戲所需的背景圖檔。

draw.drawImage('background.png');             

6、繪畫行為

我們使用滑鼠或觸屏裝置的事件監聽器來擷取使用者的繪圖行為。

  • handleMouseDown: 當滑鼠按下時執行
  • handleMouseMove: 當滑鼠移動時執行
  • handleMouseUp: 當滑鼠擡起時執行
function handleMouseDown(e) {  
  draw.isDrawing = true;  
  draw.lastX = e.offsetX;  
  draw.lastY = e.offsetY;  
}  
function handleMouseMove(e) {  
  if (draw.isDrawing) {  
    draw.drawLine(draw.lastX, draw.lastY, e.offsetX, e.offsetY);  
    draw.drawPoint(e.offsetX, e.offsetY);  
    draw.lastX = e.offsetX;  
    draw.lastY = e.offsetY;  
  }  
}  
function handleMouseUp() {  
  draw.isDrawing = false;  
}             

在這裡,我們使用了offsetX和offsetY屬性擷取滑鼠/觸屏的位置,然後調用drawLine和drawPoint函數進行繪圖。

7、擷取繪圖結果

我們需要在送出按鈕被點選時擷取使用者繪圖的結果。

  • handleSubmit: 處理送出畫布的函數
function handleSubmit() {  
  const imageData = canvas.toDataURL();  
  // 将圖像資料發送到後端進行識别  
}             

在這裡,我們使用canvas的toDataURL方法将畫布中的圖像資料以Base64的形式編碼,友善後端進行識别處理。

8、按鈕操作

// 為按鈕注冊事件  
document.getElementById('clear').addEventListener('click', function() {  
  context.clearRect(0, 0, canvas.width, canvas.height);  
  draw.drawImage('background.png');  
});  
document.getElementById('submit').addEventListener('click', handleSubmit);  
// 為畫布注冊事件  
canvas.addEventListener('mousedown', handleMouseDown);  
canvas.addEventListener('mousemove', handleMouseMove);  
canvas.addEventListener('mouseup', handleMouseUp);             

在這裡,我們為清空按鈕和送出按鈕注冊了點選事件,為canvas元素注冊了滑鼠事件。清空按鈕事件中使用了context.clearRect方法清空畫布,然後重新加載背景圖檔。

到這裡,一個簡單的你畫我猜小遊戲就完成了。

希望本文能夠對您有所幫助,感謝您的閱讀!

人人為我,我為人人,謝謝您的浏覽,我們一起加油吧。

繼續閱讀