分享一个比较简单的canvas+js 飞翔的小鸟小游戏





<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		canvas{
			border: 1px solid #000;
		}
	</style>
</head>
<body>
	<canvas width="456" height="512" id="canvas">
		对不起,您的浏览器不支持画布,请升级!
	</canvas>

	<script>
		//版本 1.0
		//没有完成的任务
		//1,小鸟倾斜
		//2,开始画面
		//3,2位以上的分数 
		//4,多个排水管同时出现

		var canvas = document.getElementById('canvas');
		var ctx = canvas.getContext('2d');
		//获取最优执行频率的变量
		var raf;

		//整个界面的图片绘制
		var pipeup = new Image();//上下水道
		var pipedown = new Image();//下下水道
		var sky = new Image();//天空
		var land = new Image();//大地
		var birds = new Image();//小鸟
		var count = new Image(); //分数
		var count1 = new Image(); //分数
		var b = parseInt(Math.random()*2.99);  //0,1,2
		var d = parseInt(Math.random()*1.99);  //0,1

		//取值
		pipeup.src = 'images/pipe_up.png';
		pipedown.src = 'images/pipe_down.png';
		sky.src = 'images/bg_' + d + '.png'; //白天或者黑夜
		land.src = 'images/land.png';
		birds.src = 'images/bird' + b + '_0.png';
		count.src = 'images/font_048.png';
		count1.src = 'images/font_048.png';

		//地图
		function map(){
			for (var i = 0; i < 2; i++) {
				ctx.drawImage(sky,i*288,0,288,512);
				ctx.drawImage(land,i*266,400,336,112);
			}
			ctx.drawImage(count1,20,20,34,64);
			ctx.drawImage(count,54,20,34,64);
		}
		//小鸟对象
		var bird = {
			x:100,
			y:220,
			vx:5,
			vy:2,
			src:'images/bird' + b + '_0.png',
			draw:function(){
				birds.src = this.src;
				ctx.drawImage(birds,this.x,this.y,60,60);
				// ctx.save();
				// ctx.translate(bird.x*1.2,bird.y*1.2);
				// ctx.rotate(bird.vy/ 7);
				// ctx.drawImage(birds,-birds.width / 4,-birds.height / 4);
				// ctx.restore();
			}
		}

		//下水道
		var pipe = {
			x:456,
			upy:220,
			downy:-220,
			vx:1.5,
			upsrc:'images/pipe_up.png',
			downsrc:'images/pipe_down.png',
			draw:function(){
				pipeup.src = this.upsrc;
				pipedown.src = this.downsrc;
				ctx.drawImage(pipeup,this.x,this.upy,80,320);
				ctx.drawImage(pipedown,this.x,this.downy,80,320);
			}
		};

		//游戏结束的函数
		function gameover(){
			ctx.fillStyle = 'rgba(255,255,255,0.5)';
			ctx.fillRect(0,0,canvas.width,canvas.height);
			var over = new Image();
			over.src = 'images/text_game_over.png';
			over.onload = function(){
				//确定图片位置,显示图片
				ctx.drawImage(over,80,100,300,80);
			}
			canvas.addEventListener('click',function(){
				location.reload();
			})
		}

		var m = 0;
		var n = 0;
		var score = 0;
		var aa = 0
		//这是一个核心函数
		function draw(){
			//清屏
			ctx.clearRect(0,0,456,512);
			//重新加载地图
			map();
			m++;
			// 每15帧 让小鸟翅膀动一次
			if (m % 4 == 0) {
				n++;
				if (n > 2) {
					n = 0;
				}
				bird.src = 'images/bird' + b + '_' + n + '.png';
				bird.draw();
			}
			//每帧小鸟都会下降0.35px
			bird.vy += 0.25;
			//小鸟水平是不会运动的
			bird.y += bird.vy;
			//下水道一直在运动
			pipe.x -= bird.vx;
			if (pipe.x < -80) {
				pipe.upy = Math.random() * 150 +140;
				pipe.downy = pipe.upy - 440;
				pipe.x = 456;
			}
			//得分
			if (pipe.x == 46) {
				score++;
				if (score > 9) {
					score = 0;
					aa++;
				}
				count.src = 'images/font_0'+(48 + score) + '.png';
				count1.src = 'images/font_0'+(48 + aa) + '.png';
			}

			//画小鸟
			bird.draw();
			pipe.draw();
			//以最优的频率运动
			raf = window.requestAnimationFrame(draw);
			//判断碰撞
			//没有使用像素检测
			if ((bird.y < pipe.downy + 305 || bird.y + 50 > pipe.upy) && (pipe.x < 150 && pipe.x > 50)) {
				//停止动画
				window.cancelAnimationFrame(raf);
				gameover();
			}
		}

		//点击画布开始游戏
		//每次点击都会给小鸟能量,得到能量小鸟会向上移动7
		canvas.addEventListener('click',function(e){
			//停止动画
			window.cancelAnimationFrame(raf);
			bird.vy = -7;
			raf = window.requestAnimationFrame(draw);
		});

		sky.onload = function(){
			//初始化
			map();
			bird.draw();
		}




	</script>
</body>
</html>


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的Java代码示例,实现了一个飞翔小鸟小游戏: ```java import java.util.Scanner; public class FlyingBirdGame { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int height = 10; int velocity = 0; int gravity = 2; int obstacleDistance = 20; int obstacleHeight = 5; int score = 0; System.out.println("欢迎来到飞翔小鸟游戏!"); while (true) { // 输出当前状态 System.out.println("当前高度:" + height); System.out.println("当前速度:" + velocity); System.out.println("当前得分:" + score); // 判断小鸟是否碰到障碍物 if (obstacleDistance == 0 && height <= obstacleHeight) { System.out.println("游戏结束,小鸟撞到了障碍物!"); break; } // 判断小鸟是否落地 if (height <= 0) { System.out.println("游戏结束,小鸟落地了!"); break; } // 让玩家输入操作(向上飞或不飞) System.out.println("请操作小鸟(0表示不飞,1表示向上飞):"); int operation = scanner.nextInt(); if (operation == 1) { velocity -= 5; } // 计算新的高度和速度 height += velocity; velocity += gravity; // 计算障碍物的距离和高度 obstacleDistance--; if (obstacleDistance < 0) { obstacleDistance = 20; obstacleHeight = (int) (Math.random() * 10) + 1; System.out.println("出现新的障碍物,高度为:" + obstacleHeight); } // 计算得分 if (obstacleDistance == 0) { score++; System.out.println("得分加1,当前得分:" + score); } } } } ``` 这个小游戏的规则很简单:玩家需要控制小鸟上下飞行,避开障碍物并尽可能多地得分。小鸟每次向上飞行,速度会减少5,向下飞行时速度会增加2。障碍物每隔一段时间出现,玩家需要在障碍物到来之前及时进行操作。如果小鸟撞到了障碍物或落地了,游戏结束。如果成功躲过障碍物,得分加1。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值