首页 > 其他分享 >HTML5 Canvas API制作一个简单的猜字单机游戏

HTML5 Canvas API制作一个简单的猜字单机游戏

时间:2023-07-16 18:46:54浏览次数:41  
标签:function Canvas letters 单机游戏 fillStyle API context var 猜测

这篇文章主要介绍了借助HTML5 Canvas API制作一个简单的猜字单机游戏的实例分享,游戏中每局会自动生成一个字母,玩家按键盘来猜测该字母是哪一个,需要的朋友可以参考下

HTML代码

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<script type="text/javascript" src="chp1_guess_the_letter.js"></script>
<script type="text/javascript" src="modernizr.custom.99886.js"></script>
</head>
<body>
<canvas id="canvas_guess_the_letter" width="500" height="300">
你的浏览器不支持HTML5 Canvas
</canvas>
<form>
<input type="button" id="createImageData" value="Export Canvas Image" />;
</form>
</body>
</html>
JavaScript Code

/**
* @author Rafael
*/
window.addEventListener("load", eventWindowLoaded, false);

var Debugger = function() {

};
Debugger.log = function(message) {
try {
console.log(message);
} catch(exception) {
return;
}
}

function eventWindowLoaded() {
canvasApp();
}

function canvasSupport() {
return Modernizr.canvas;
}

function canvasApp() {
var guesses = 0;
var message = "Guess The Letter From a(lower) to z(higher)";
var letters = ["a","b","c","d","e","f","g","h","i","j","k","l",
"m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
var today = new Date();
var letterToGuess = "";
var higherOrLower = "";
var letterGuessed = [];
var gameOver = false;

if(!canvasSupport()) {
return;
}

var theCanvas = document.getElementById("canvas_guess_the_letter");
var context = theCanvas.getContext("2d");

initGame();

function initGame() {
var letterIndex = Math.floor(Math.random() * letters.length);
letterToGuess = letters[letterIndex];
guesses = 0;
lettersGuessed = [];
gameOver = false;
window.addEventListener("keyup", eventKeyPressed, true);
var formElement = document.getElementById("createImageData");
formElement.addEventListener('click', createImageDataPressed, false);
drawScreen();
}

function eventKeyPressed(e) {
if(!gameOver) {
var letterPressed = String.fromCharCode(e.keyCode);
letterPressed = letterPressed.toLowerCase();
guesses++;
letterGuessed.push(letterPressed);
if(letterPressed == letterToGuess) {
gameOver = true;
} else {
letterIndex = letters.indexOf(letterToGuess);
guessIndex = letters.indexOf(letterPressed);
if(guessIndex < 0) {
higherOrLower = "请输入正确的字符";
} else if(guessIndex < letterIndex) {
higherOrLower = "小了";
} else {
higherOrLower = "大了";
}
}
drawScreen();
}
}

function drawScreen() {
//背景
context.fillStyle = "#ffffaa";
context.fillRect(0, 0, 500, 300);

//箱子
context.strokeStyle = "#000000";
context.strokeRect(5, 5, 490, 290);
context.textBaseLine = "top";

//日期
context.fillStyle = "#000000";
context.font = "10px _sans";
context.fillText(today, 150, 20);

//消息
context.fillStyle = "#FF0000";
context.font = "14px _sans";
context.fillText(message, 125, 40);

//猜测次数
context.fillStyle = "#109900";
context.font = "16px _sans";
context.fillText("猜测次数: "+guesses, 215, 60);

//大还是小
context.fillStyle = "#000000";
context.font = "16px _sans";
context.fillText("大还是小: "+higherOrLower, 150, 135);

//已经猜测的字符
context.fillStyle = "#FF0000";
context.font = "16px _sans";
context.fillText("已经猜测的字符: "+letterGuessed.toString(), 10, 260);

if(gameOver) {
context.fillStyle = "#FF0000";
context.font = "40px _sans";
context.fillText("你猜中了", 150, 180);
}
}

function createImageDataPressed(e) {
window.open(theCanvas.toDataURL(), "canvasImage","left=0, top=0, width="+theCanvas.width+", height="+theCanvas.height+", toolbar=0, resizable=0");
}
}
从游戏名称可以看出,该游戏是猜字游戏。每局系统都会自动生成一个字母,玩家会按键盘来猜测该字母是哪一个。

例如生成的是s,玩家按了h,则游戏就会提示《小了》,因为英文字母当中h的索引比s的索引更靠前。

案例当中涉及的变量。

guesses:猜测次数
message:文字提示,指导用户如何玩该游戏
letters:文字数组,存放我们要猜测的文字的集合。这个例子用的是a到z
today:今天的日期
letterToGuess:要猜测的文字
higherOrLower:是《大了》还是《小了》
letterGuessed:已经猜测过得文字
gameOver:游戏是否结束,是布尔变量,开始的时候是false,猜对后设为true

标签:function,Canvas,letters,单机游戏,fillStyle,API,context,var,猜测
From: https://www.cnblogs.com/yeci/p/17558312.html

相关文章

  • ASP.NET Core Web API中操作方法中的参数来源
    在ASP.NETCoreWebAPI中,有多种方式可以传递参数给操作方法。以下是一些常见的参数传递方式:路由参数(RouteParameters):参数值从URL的路由中提取。//Route:api/users/{id}[HttpGet("api/users/{id}")]publicIActionResultGetUserById(intid){//使用id执行操作......
  • uni app 封装接api接口
    创建文件 base.jsletbaseURL='';//是否在控制台显示接口请求日志,本地环境启用,打包环境禁用letshowHttpLog=false;//测试环境baseURL='https://api.apiopen.top/api';//正式环境//baseURL='XXXXX.XXXXX.com';module.exports={baseURL:baseURL,......
  • vue3 封装api接口
    新建axiosj.tsimportaxiosfrom'axios';import{showMessage}from"./status";//引入状态码文件import{ElMessage}from'element-plus'//引入el提示框,这个项目里用什么组件库这里引什么//设置接口超时时间axios.defaults.timeout=60000;//请求地址,......
  • 微信个人号机器人,E云API二次开发
    **个人微信开发API****简要描述:**-登录E云平台**请求URL:**-http://域名地址/member/login-域名地址+开发者账号密码:后台系统自助开通**请求方式:**-POST**请求头Headers:**-Content-Type:application/json  **请求参数示例**```clike{"account":"18611......
  • 获得lazada商品详情 API 返回值说明
    ​ item_get-获得lazada商品详情 注册开通lazada.item_get公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]ca......
  • Swagger 管理 API 的一些经验分享
    Swagger是一款开源的API设计工具,主要用于构建、设计、编写和使用RESTfulWeb服务。可以帮助开发人员设计和编写API,以及创建出色的API文档。Swagger是一个强大的开源框架,支持API开发全生命周期,包括设计、构建、文档和使用。Swagger的核心部分是Swagger规范(Specifica......
  • Amazon SP API拉取分类,五点,描述和关键字
    1.用asin拉取五点,品牌,和分类,每次最多20个(但拉取listing的时候法国和日本站点没有返回asin)$result=$requestReport->applicationreport($account->merchant_id,strtolower($account->site),'/catalog/2022-04-01/items?identifiers=B0BNVT65X4,B0BTBWXLCD,B0BTBYS33P&identi......
  • API接口技术开发分享案例,拼多多获得搜索词推荐,接口支持高并发,PHP语言演示案例,支持对语
    ​接口获取数据响应参数接入pinduoduo.item_search_suggest-获得搜索词推荐 公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_name......
  • 【阅读笔记】Rapid, Detail-Preserving Image Downscaling
    Rapid,Detail-PreservingImageDownscaling(快速的图像缩放技术)该论文提出了一种基于卷积滤波器的算法,并确定滤波器的权值,使重要的细节保留在缩小比例的图像。更具体地说,它为更偏离局部图像邻域的像素分配更大的权重。从信息论的角度来看,偏离中心像素的邻域的一些像素数据可能......
  • fastapi框架docs文档Responses去掉默认的异常响应422Validation Error
    fastapi框架原生docs的Responses中会有个默认的422ValidationError响应,但大多数实际开发应该不需要,如何去除呢?我用的方法是用猴子补丁重写fastapi.openapi.util里的get_openapi_path方法,去掉加入默认422的那段代码即可,下面这些http422=str(HTTP_422_UNPROCESSABLE_ENTITY)......