H5 canvas实现简单的飞机大战小游戏

H5 小游戏开发(红包雨、打地鼠、拼图、老虎机) 一段时间没更新,是因为公司下面的子公司移动端开发需要人员去支援,好了,鄙人被派去了,主要完成四个小游戏的H5开发。接着挨个介绍这四个小游戏我是怎么完成的,以下只贴上核心代码文件,想要直接cv运行的话,可能不行嗷,看懂逻辑,自己去改也是一种学习过程!有问题私信我。 阅读详情

整体分析飞机大战游戏

游戏存在就会有准备阶段(控制游戏全局属性):

1. 定义游戏状态
		第一阶段:游戏欢迎状态   0     START
		第二阶段:游戏加载状态   1			LOADING
		第三阶段:游戏运行状态   2			RUNNING
		第四阶段:游戏暂停阶段   3			PAUSE
		第五阶段:游戏结束阶段   4			GAMEOVER
2. 定义游戏得分 score = 0
3. 定义我方飞机的生命值 life = 3
4. 定义游戏开关:State=0
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>飞机</title>
	<style type="text/css">
		body{
			text-align: center;
		}
		canvas{
			background-color: #ccc;
		}
	</style>
</head>
<body>
	<canvas id="canvas" width="480" height="850"></canvas>
	<script type="text/javascript">
	//1.	定义游戏状态 第一阶段:游戏欢迎状态 0 START  第二阶段:游戏加载状态 1 LOADING 第三阶段:游戏运行状态 2 RUNNING 第四阶段:游戏暂停阶段 3 PAUSE 第五阶段:游戏结束阶段 4	GAMEOVER
	const START = 0,
		  LOADING = 1,
		  RUNNING = 2,
		  PAUSE = 3,
		  GAMEOVER = 4;

    //2.	定义游戏得分  score = 0
      var  score = 0,
     //3.	定义我方飞机的生命值  
      	   life = 3,
     //4.	定义游戏开关
      	   State=0 ,
      //当前画布的宽高
      	   WIDTH = 480,
      	   HEIGHT = 850;
//1.第一阶段开始:游戏欢迎阶段
	var canvas = document.getElementById('canvas');
	var cxt = canvas.getContext('2d');
	var myimg = new Image();
	myimg.src ="images/background.png";
	
 //定义背景的数据
     var obj = {
     	imgs : myimg,
     	width:480,
     	height:850 
     }
//定义背景对象的构造器
	function BG(obj){
		//定义绘制背景的坐标
		this.x1 = 0;
		this.y1 = 0;
		this.x2 = 0;
		this.y2 = -obj.height;

		this.width = obj.width;
		this.height = obj.height;
//定义绘制背景图片的方法
	    this.draw = function(){
	    	cxt.drawImage(obj.imgs,this.x1,this.y1);
	    	cxt.drawImage(obj.imgs,this.x2,this.y2);
	    }
//判断两张图片的临界值
	    this.bgrun =function(){
	    	this.y1++;
	    	this.y2++;
	    	if(this.y1 == this.height){
	    		this.y1 = -this.height;
	    	}else if(this.y2 == this.height){
	    		this.y2 = -this.height;
	    	}
	    }
	}
	var bg = new BG(obj);
	var logo = new Image();
	logo.src ="images/start.png";

//控制游戏状态从一个变为第二个
	canvas.onclick = function(){
		if(State == START){
			State = LOADING;
		}
	}
  //2.第二阶段开始
	var loadings = [];
	loadings[0] = new Image();
	loadings[0].src="images/game_loading1.png";
	loadings[1] = new Image();
	loadings[1].src="images/game_loading2.png";
	loadings[2] = new Image();
	loadings[2].src="images/game_loading3.png";
	loadings[3] = new Image();
	loadings[3].src="images/game_loading4.png";
  //初始化动态效果的数据
    var loading={
    	imgs:loadings,
    	width : 186,
    	height : 38,
    	length : loadings.length
    }
	function Loading(obj){
		this.startIndex = 0;
		//定义绘制加载效果图片的方法
		this.endloading = function(){
			cxt.drawImage(obj.imgs[this.startIndex],(WIDTH-obj.width)/2,HEIGHT-obj.height)
		}
		this.time = 0;
		//定义动画方法
		this.speed = function(){
			this.time++;
			if(this.time % 5 == 0){
				this.startIndex++;
			}
			if(this.startIndex == obj.length){
					State = RUNNING;
			}
		}
	}
	var load = new Loading(loading);

//  游戏运行阶段
//  绘制我方灰机
	var heros = [];
	heros[0] = new Image();
	heros[0].src = "images/hero1.png";
	heros[1] = new Image();
	heros[1].src = "images/hero2.png";
	heros[2] = new Image();
	heros[2].src = "images/hero_blowup_n1.png";
	heros[3] = new Image();
	heros[3].src = "images/hero_blowup_n2.png";
	heros[4] = new Image();
	heros[4].src = "images/hero_blowup_n3.png";
	heros[5] = new Image();
	heros[5].src = "images/hero_blowup_n4.png";

//初始化我方飞机的数据
	var HERO = {
		imgs:heros,
		length:heros.length,
		width:99,
		height :124,
		frame : 2
	}

	//我方飞机
	function Hero(obj){
		this.imgs = obj.imgs;
		this.length = obj.length;
		this.height=obj.height;
		this.width = obj.width;
		this.x =(WIDTH-this.width)/2;
		this.y = HEIGHT-this.height;
		this.frame = obj.frame;
		this.startIndex = 0;
	
		this.candel = false;
		//新增一个标识--表示是否被撞击,当前没有被撞击
		this.down = false;

		
        //绘制图片
		this.draw = function(){
			cxt.drawImage(this.imgs[this.startIndex],this.x,this.y)
		}
		this.speed = function(){
			if(!this.down){
				//没有被撞击:startIndex在0和1进行切换
				if(this.startIndex == 0){
					this.startIndex = 1
				}else{
					this.startIndex = 0;
				}
			}else{
				//被撞击
				this.startIndex++;
				if(this.startIndex == obj.length){
					//生命减少1
					life--;
					if(life == 0){
						State = GAMEOVER;
						this.startIndex = this.length-1;
					}else{
						hero = new Hero(HERO)
					}
				}
			}
		}
		this.time = 0;
		//增加子弹射击的方法
		//物体运动思想控制敌机和子弹的速度
		this.shoot = function(){
			this.time++;
			if(this.time% 5 == 0){
				bullets.push(new Bullet(BULLET));
			}
			if(this.time% 13== 0){
				shootenemys.push(new Enemy(ENEMY));
			}
			if(this.time% 120== 0){
				shootenemys.push(new Enemy(ENEMYM));
			}
			if(this.time% 310== 0){
				shootenemys.push(new Enemy(ENEMYL));
			}
		}
		this.bang = function(){
			this.down = true;
		}
	}

    var hero = new Hero(HERO);
    
    canvas.onmousemove = function(event){
    	// var event = event || e || arguments[0];
    	if(State == RUNNING){
    		var x = event.offsetX;
    		var y = event.offsetY;
    		hero.x = x-hero.width/2; 
    		hero.y = y-hero.height/2;
    	}
    }
	//制造子弹
	var bullet = new Image();
	bullet.src = "images/bullet1.png";
	//初始化子弹的构造器
	var BULLET ={
		imgs : bullet,
		width : 9,
		height : 21
	}
	function Bullet(obj){
		this.imgs = obj.imgs;
		this.width = obj.width;
		this.height = obj.height;
		//子弹绘制的坐标
		this.x = hero.x + hero.width/2-this.width/2;
		this.y = hero.y-this.height-10;
		this.draw = function(){
			cxt.drawImage(this.imgs,this.x,this.y);
		}
		this.speed = function(){
			this.y -=4;
		}
		this.candel = false;
		this.bang = function(){
			this.candel = true;
		}
	}
	//创建存储子弹的数组
	var bullets = [];
	//创建函数,用于绘制所有的子弹
	// function bulletsPanit(){
	// 	for(var i=0;i<bullets.length;i++){
	// 		bullets[i].draw();
	// 		bullets[i].speed();
	// 		if(bullets[i].y < -bullets[i].height || bullets[i].candel){
	// 			bullets.splice(i,1);
	// 		}
	// 	}
	// }
	// 绘制子弹
	function drawBullets(){
		for(var i=0;i<bullets.length;i++){
			bullets[i].draw();
		}
	}
	//子弹运动
	function speedBullets(){
		for(var i=0;i<bullets.length;i++){
			bullets[i].speed();
		}// 绘制子弹
//子弹运动
//删除击中和越界的子弹
	}
	//删除击中和越界的子弹
	function delBullets(){
		for(var i=0;i<bullets.length;i++){
			if(bullets[i].y < -bullets[i].height || bullets[i].candel){
				bullets.splice(i,1);
			}
		}
	}

	//敌机小号
    var enemys = [];
    enemys[0] = new Image();
    enemys[0].src="images/enemy1.png";
    enemys[1] = new Image();
    enemys[1].src="images/enemy1_down1.png";
    enemys[2] = new Image();
    enemys[2].src="images/enemy1_down2.png";
    enemys[3] = new Image();
    enemys[3].src="images/enemy1_down3.png";
    enemys[4] = new Image();
    enemys[4].src="images/enemy1_down4.png";

    var ENEMY = {
    	length : enemys.length,
    	imgs : enemys,
    	width : 57,
    	height : 51,
    	type : 1,
		life : 1,
		score : 1 ,
		frame : 1
    }
    //敌机构造
    function Enemy(obj){
    	this.type = obj.type;
    	this.imgs = obj.imgs;
    	this.life = obj.life;
    	this.width = obj.width;
    	this.height = obj.height;
    	this.length = obj.length;

    	this.x = Math.floor(Math.random()*(WIDTH-this.width));
    	this.y = -this.height;
    	//当前没被撞击
		this.down = false;
		this.startIndex = 0;
		//确定动画是否播完
		this.cancel = false;
		//分数
		this.score = obj.score;
		//
		this.frame = obj.frame;
    	this.draw = function(){
    		cxt.drawImage(this.imgs[this.startIndex],this.x,this.y);
    	}
    	this.speed =function(){
    		if(!this.down){
    			this.y+=5;
    			this.startIndex++;
    			this.startIndex = this.startIndex%this.frame;
    
    		}else{
    			this.startIndex++;
    			if(this.startIndex == this.length){
    				this.cancel = true;
    				this.startindex = this.length-1;
    			}
    		}
    	}
    	//碰撞
    	this.collision = function(obj){

    		return obj.y + obj.height > this.y
			&& obj.x + obj.width > this.x
			&& obj.y < this.y + this.height
			&& obj.x < this.x + this.width;
    	}
    	this.bang = function(){
    		this.life--;
    		if(this.life == 0){
    			this.down = true;
    			score += this.score;
    		}
    	}
    }
    var shootenemys = []; 
    // function shootenemy(){
    // 	for(var i=0;i<shootenemys.length;i++){
    // 		shootenemys[i].draw();
    // 		shootenemys[i].speed();
    // 		if( shootenemys[i].cancel||shootenemys[i].y > (HEIGHT+shootenemys[i].height) ){
    // 			shootenemys.splice(i,1);
    // 		}
    // 	}
    // }
    // 绘制敌机
    function drawEnemies(){
    	for(var i=0;i<shootenemys.length;i++){
    		shootenemys[i].draw();
    	}
    }
	//敌机运动
     function speedEnemies(){
    	for(var i=0;i<shootenemys.length;i++){
    		shootenemys[i].speed();
    	}
    }
	//删除击中和越界的敌机
    function delEnemies(){
    	for(var i=0;i<shootenemys.length;i++){
    		if( shootenemys[i].cancel||shootenemys[i].y > (HEIGHT+shootenemys[i].height) ){
    			shootenemys.splice(i,1);
    		}
    	}
    }
    function hit(){
    	for(var i=0;i<shootenemys.length;i++){
			// 我方飞机撞击敌方飞机
			if(shootenemys[i].collision(hero)){
				// 处理敌方飞机撞击后的逻辑
				shootenemys[i].bang();
				// 处理我方飞机撞击后的逻辑
				hero.bang();
			}

			// 子弹撞击敌方飞机bullets
			for(var j=0;j<bullets.length;j++){
				if(shootenemys[i].collision(bullets[j])){
					// 处理敌方飞机撞击后的逻辑
					shootenemys[i].bang();
					// 处理子弹撞击后的逻辑
					bullets[j].bang();
				}
			}
		}
    }
 

    //敌机中号
    var enemym = [];
    enemym[0] = new Image();
    enemym[0].src="images/enemy2.png";
    enemym[1] = new Image();
    enemym[1].src="images/enemy2_down1.png";
    enemym[2] = new Image();
    enemym[2].src="images/enemy2_down2.png";
    enemym[3] = new Image();
    enemym[3].src="images/enemy2_down3.png";
    enemym[4] = new Image();
    enemym[4].src="images/enemy2_down4.png";

    var ENEMYM = {
    	length : enemym.length,
    	imgs : enemym,
    	width : 69,
    	height : 95,
    	type : 1,
		life : 3,
		score : 4 ,
		frame : 1
    }

      // 敌机大号
    var enemyl = [];
    enemyl[0] = new Image();
    enemyl[0].src="images/enemy3_n2.png";
    enemyl[1] = new Image();
    enemyl[1].src="images/enemy3_n1.png";
    enemyl[2] = new Image();
    enemyl[2].src="images/enemy3_down1.png";
    enemyl[3] = new Image();
    enemyl[3].src="images/enemy3_down2.png";
    enemyl[4] = new Image();
    enemyl[4].src="images/enemy3_down3.png";
    enemyl[5] = new Image();
    enemyl[5].src="images/enemy3_down4.png";
    enemyl[6] = new Image();
    enemyl[6].src="images/enemy3_down5.png";
    enemyl[7] = new Image();
    enemyl[7].src="images/enemy3_down6.png";

    var  ENEMYL = {
    	length : enemyl.length,
    	imgs : enemyl,
    	width : 165,
    	height : 261,
    	type : 1,
		life : 20,
		score : 10 ,
		frame : 2
    }
    //绘制分数和生命
	function text(){
        	cxt.font = "bold 26px 宋体"
        	cxt.fillText(`score:${score}`,10,30)
        	cxt.fillText("LIFE"+life,WIDTH-80,30);
        }
    //鼠标移入
    canvas.onmouseover =function(){
    	if(State == PAUSE){
    		State = RUNNING;
    	}
    }
    //鼠标移出
    canvas.onmouseout =function(){
    	if(State == RUNNING){
    		State = PAUSE;
    	}

    }
    //暂停
    var pause = new Image();
	pause.src = "images/game_pause_nor.png";
    
	function over(){
		cxt.font = "bold 48px 宋体";	
		cxt.fillText("GAME OVER",150,400);
	}
	//游戏核心控制器
	setInterval(function(){
		bg.draw();
		//控制背景运动
		bg.bgrun();
		if(State == START){
			cxt.drawImage(logo,40,20);
		}else if(State == LOADING){
			load.endloading();
			load.speed();
		}else if(State == RUNNING){
			//我方飞机
			hero.draw();
			//我方飞机运动
			hero.speed();
			 //绘制分数和生命
			text();
			//我方飞机射击
			hero.shoot();
			// bulletsPanit();
			// 检查碰撞
			hit()
			//绘制敌机
			drawEnemies()
			//绘制敌机运动
			speedEnemies()
			//判断删除敌机
			delEnemies()
			//绘制子弹
			drawBullets()
			//绘制子弹运动
			speedBullets()
			//判断删除子弹
			delBullets()
		}else if(State == PAUSE){
			//暂停状态时保存画面除去运动
			text()
			//绘制暂停图标
			cxt.drawImage(pause,200,400);
			drawEnemies()
			drawBullets()
			hero.draw();
		}else if(State == GAMEOVER){
			//游戏结束
			drawEnemies()
			drawBullets()
			delEnemies()
			text()
			over()
			hero.draw();
		}
	},100);
</script>
</body>
</html>
微信小游戏开发全解析:从技术原理到实战上线 在移动应用开发领域,Canvas渲染与JavaScript运行环境是构建交互式图形应用的基础技术。其原理在于通过脚本语言驱动图形API,在特定容器内进行逐帧绘制,从而实现动态视觉效果。这项技术的核心价值在于平衡了开发效率与运行时性能,使得开发者能够以相对较低的开发成本,创建出体验接近原生的应用。在应用场景上,它尤其适合轻量级、强交互、需要快速传播的产品,例如各类休闲游戏和互动营销应用。微信小游戏正是这一技术理念的典型实践,它基于优化后的专属运行环境,深度融合了微信的社交生态与原生能力,为开发者提供了从开发、 阅读详情

相关推荐

HTML5飞机大战小游戏开发实战

在游戏开发中,每个游戏对象(如飞机、子弹、敌机)都需要具备清晰的视觉样式。CSS3 提供了类选择器、盒模型、背景图等能力,使得我们可以快速构建出具备交互感的游戏界面。我们可以使用一个枚举对象来定义游戏的各个状态:代码逻辑分析:GAME_STATE是一个常量对象,用于集中管理游戏的各个状态标识。使用字符串而非数字,提高可读性,避免魔法值的出现。每个状态标识清晰地对应游戏的生命周期阶段。参数说明:INIT:游戏初始化阶段,尚未开始。START:等待用户开始游戏。

weixin_42601547的博客 872

共226款Html5小游戏源码分享

【代码】共226款Html5小游戏源码分享。

蒙双眼看世界 1万+

微信小游戏斗地主:Node.js服务端权威架构与Canvas渲染实战

在微信小游戏生态中,轻量级棋牌玩法凭借无需下载、即点即玩的特性成为流量常青品类,而其技术实现的关键在于对平台运行环境、网络通信和渲染方式的深度适配。微信小游戏没有DOM与BOM,所有界面必须基于Canvas 2D或WebGL绘制,同时网络层仅支持WebSocket(正式环境需wss),这决定了服务端必须采用Node.js这类异步I/O模型处理大量并发长连接。本文以一套完整的微信小游戏斗地主工程为例,剖析了从牌桌状态机、服务端权威校验、牌型判断边界,到房间管理、通信协议、掉线重连等核心环节的落地思路,并整理了

axfcjwkbi259888707的博客 450

HTML5小游戏代码大全

由于长度原因我将以资源方式上传,本文为例子.1.2048 2.暴打神经猫

m0_72655835的博客 2万+

Html5小游戏源代码H5小游戏源码JS开发网页小游戏开源源码大合集.zip

维京战争,一个都不能死,捕鱼达人,植物大战僵尸,3D魔方,青蛙吃苍蝇,蜘蛛纸牌,贪吃蛇,水果削除,2048中文版,大鱼吃小鱼,飞机大战,跑酷小游戏,贪吃蛇2.0,射击鸭子,激流勇进,天天消消乐,别踩白块,线条生存,打砖块射击,保卫星球射击,吃豆人,开心消消乐,俄罗斯方块,2048方块版,看图猜词,弹球打砖块,小方块回家,双人五子棋,射箭小游戏,飞机大战2.0,简单闯关游戏,重力球滚动,头像迷阵消除,变色弹球跳台阶,最强眼力,俄罗斯方块2.0,双人五子棋2.0,小人推箱子,经典扫雷,英雄宝石消消乐,赛车游戏,大家来找茬,经典扫雷,锅打灰太狼,3D飞机躲避障,兔子吃月饼,接金币,灌篮高手,疯狂打企鹅,吃月饼大赛,坦克大战,图像之谜拼图,飞机躲避,熊出没,拳王,神经猫,表情,拼图魔方等等

芯片低功耗设计实战:CPF与UPF流程选择指南(附工具对比)

本文深入探讨了芯片低功耗设计实战中CPF与UPF流程的选择策略。文章从两者本质差异与演进脉络出发,结合Cadence与Synopsys工具链的深度支持实况,为工程师提供了基于项目场景的决策框架。重点分析了在混合工具链环境下如何实施流程与验证,并强调了利用Spyglass等工具确保功耗意图无损传递的关键技巧,旨在帮助团队做出明智的流程抉择,提升设计效率与可靠性。

weixin_29197051的博客 408

射击网页游戏

以下是完整的、可直接运行的最终版代码 主要功能说明:直接复制全部代码保存为.html文件,用现代浏览器打开即可体验完整游戏。玩家需要灵活运用两种强化道具来应对不断增强的敌人攻势,挑战更高分数!

wanghao312的博客 2610

用HFSS复现经典论文:从零搭建带孔缝屏蔽箱体模型(附完整建模步骤与避坑指南)

本文详细介绍了如何使用HFSS电磁仿真软件复现经典论文中的带孔缝屏蔽箱体模型,包括从零搭建模型、设置激励与边界条件、求解优化及结果验证的全过程。特别提供了建模中的布尔运算陷阱、激励设置技巧等实操难点的避坑指南,帮助工程师和学生深入理解电磁屏蔽效能研究。

weixin_30530339的博客 159

HTML版玩命枪战游戏复刻

我将为您创建一个简化版的HTML射击游戏,复刻经典射击游戏的核心元素。这个游戏将包含玩家角色、敌人、射击机制和得分系统。下面是完整的实现代码: 游戏特点 玩家控制:游戏机制:武器系统:游戏界面:您可以直接复制上面的代码到一个HTML文件中,然后在浏览器中打开即可开始游戏!

shandianjianbing的博客 2409

一种基于OpenPose和DNN的跌倒检测软件系统(中文&英文)

学习并实现一种跌倒检测模型,此模型基于OpenPose实现逐帧人体姿态检测,使用DNN识别人体动作。检测方式有在线与离线两种,本文主要测试了离线模式,测试效果较好。

Tongzhou_Li的博客 2645

别再手动画柜子了!用EPLAN导入STEP模型,5分钟搞定一个标准机柜

本文详细介绍了如何利用EPLAN Pro Panel的3D布局功能,快速将STEP模型转化为智能机柜宏,大幅提升电气工程设计效率。通过实战步骤解析,包括模型导入、智能解析、安装面定义及拼柜技巧,帮助工程师5分钟内完成标准机柜设计,避免传统手动建模的尺寸偏差问题。

weixin_26875109的博客 436

canvas的小游戏开发

最近学习了canvas,利用之前js的类,写了一个小游戏 类似于飞机大战 只不过角色改成了兔子 处理上相对比较粗糙,主要是利用该游戏锻炼一下思维逻辑,完成的写一些js代码 download:canvas小游戏开发-其他文档类资源-优快云下载 该游戏的界面以及图片是参照此博客:用canvas开发H5游戏小记 - 吕大豹 - 博客园 ...

nana啊呀~ 1664

Dify+MCP Server打造禅道AI智能助手

Dify AI与MCP Server结合打造的禅道AI智能助手,实现了项目管理智能化升级。该方案通过大语言模型和自动化工作流,提供四大核心功能:1)自动化报表生成,支持多维度数据统计与可视化;2)禅道系统管理操作,简化产品/项目/任务管理流程;3)基于知识库的智能问答系统;4)数据库灵活查询与可视化输出。系统采用分层架构,通过MCP协议实现AI与数据源解耦,解决了传统禅道在数据孤岛、工具碎片化等问题。实际应用验证了其在用户管理、任务创建、Bug处理等场景的高效性,显著提升了项目管理效率。

oNew_Lifeo的博客 1708

飞机大战小游戏 前端 js canvas Html5

git 地址

qq_38785028的博客 518

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

XiaoqiangClub的博客 1万+

福建公共资源交易平台 portal-sign与响应Data解密逆向实录

本文分析了福建公共资源交易电子公共服务平台的接口加密机制。通过抓包和代码分析,发现请求头中的portal-sign由MD5算法生成,包含固定秘钥和排序后的参数拼接。响应数据采用AES-256-CBC加密,需使用特定Key和IV解密。文章详细介绍了签名生成规则、参数处理流程及加密常量定位方法,为接口对接提供了技术参考。整个过程展示了如何通过逆向工程还原前端加密逻辑,最终实现脱离浏览器环境的纯协议调用。

自成背后的博客 1159

H5 打飞机游戏

index.html &lt;!DOCTYPE html&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt; &lt;title&am

一直专注于互联网 1018

大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅

Spring AI 是一个轻量级开源框架,旨在简化 AI 模型在企业级 Java 应用中的集成与管理。它提供了跨多个 AI 服务提供商的便携式 API,支持聊天、文本转图像、嵌入式模型等多种功能,并兼容主流的 AI 模型提供商如 OpenAI、Google 等。Spring AI 的核心功能包括结构化输出、向量数据库支持、工具/函数调用、可观察性、文档摄取 ETL 框架、AI 模型评估等。

寻道AI,探索AI无限可能! 6367

web 基于jquery和canvas的打飞机小游戏

简易的 利用canvas 实现打飞机 h5里的canvas应该是很强大的,能做的东西很多,因为也是刚接触,所以,尝试用canvas实现了一个简易的网页打飞机小游戏。本来想用一下worker工作线程,但是一下也没想到很好的方案,而且,本来js也没有多线程的概念,因为js是单线程的。 canvas基本的api我前面的博客也介绍了,有这些基本api方法已经可以做很多事情了。 今天我们就来实...

lakebobo的博客 1859

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

H5飞机小游戏

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>小游戏</title></head><body> <div style="text-align: center;"> <canvas id = "img" ...

weixin_30326515的博客 395

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

一个简单的canvas射击小游戏

  本人初学前端技术,在HTML5的背景下,逐渐感受到前端技术的越来越强大与完善。web开发者已经不再是简简单单的制作网页name简单了。 近日看见网络上许多H5小游戏,非常感兴趣,于是临时抱佛脚,学习了有关canvas的知识,制作了一个小游戏。 大家保存图片,复制代码就可以用了。   &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &...

qq_38516533的博客 1463

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

从网页小游戏到数据可视化:掌握 HTML5 Canvas 核心能力

ECharts是百度开源、基于 JavaScript 和 Canvas 封装的高性能可视化图表库,开箱即用,无需手动绘制图形,支持折线图、柱状图、饼图、雷达图、地图、热力图等几乎所有图表场景,是企业级数据大屏、后台报表的首选方案。其底层原理就是封装了复杂的 Canvas 绘制逻辑,让开发者只需配置数据和样式,即可快速实现炫酷可视化效果。网页游戏技术从 Flash 迭代到 HTML5 Canvas,实现了跨端、安全、高性能的轻量化渲染;

suger__salt的博客 536

HTML5/Canvas太空射击类小游戏源码

下载地址 JavaScriptHTML5/Canvas太空射击类小游戏源码,非常值得学习的一款js射击小游戏代码,美术有点老旧,但是代码是完全开源的,有参考价值。 dd:

ICode联盟 1054

【干货】阿里的H5游戏引擎Hilo,开源啦!

如果你玩过愤怒的小鸟,玩过植物大战僵尸,我相信你知道什么叫做小游戏!如果你玩过围住神经猫,玩过微信打飞机,我相信你知道什么叫H5小游戏!如果你玩过cocos2d,unit...

yeluoxiang的专栏 891

分享52个微信游戏,总有一款适合您

52个微信游戏下载链接:https://pan.baidu.com/s/1TNxLUdTjdAk_kvc1f5GNBw?Xposed 微信辅助模块,实现消息防撤回、模拟位置、运动步数修改、猜拳骰子游戏作弊、零钱余额修改、微信小程序云开发 「 单词天天斗 」,单词对战游戏,支持好友对战、随机匹配、人机对战等,单词 毕业设。用Emacs Lisp开发的微信小游戏;勇闯地下室小游戏,使用cocos-creator编写的下游戏,可以发布到微信小游戏。治愈七夕,微信小游戏,音乐游戏,cocos creator。

KlDMEO的博客 401
上一篇: 多物体多目标的缓冲运动及js设置获取元素css样式的方法
下一篇: web常用的三种存储方式的区别及记录登录名和密码案例
笨啊ni
博客等级 码龄7年 11粉丝 29原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值