赛车小游戏c语言代码,网页赛车小游戏(纯JavaScript编写)
赛车(改良版)
利用js实现以下功能:
在四个赛道随记生成路障,其移动速度随用户生存的时间增加而增加
用户可以通过方向键或者A、D键控制用户小车左右移动,躲避路障
当路障与用户小车碰撞,游戏结束
实时记录和显示生存时间以及所得分数
效果展示
在这里插入图片描述
源代码
html
Document
Score: 0
Time: 0s
css
* {
margin: 0;
padding: 0;
}
body {
text-align: center;
}
#background {
margin: 0 auto;
width: 1000px;
background: url(../img/bg.jpg) no-repeat #5f5762;
background-position: center;
border-radius: 50px;
}
#band {
margin: 0 auto;
margin-top: 15px;
width: 300px;
height: 100px;
background-color: #333;
border-radius: 15px;
font-size: 25px;
line-height: 50px;
font-family: 'Times New Roman', Times, serif;
font-weight: bold;
color: #fff;
}
#bgImg {
position: relative;
}
#bg {
position: relative;
margin: 0px auto;
width: 320px;
background-color: #5d7182;
overflow: hidden;
/* background: url(../img/racing.png) repeat-y; */
opacity: 0.98;
}
.box, #mybox {
position: absolute;
width: 45px;
height: 60px;
background-color: #333;
/* opacity: 1; */
}
#mybox {
/* background-color: red; */
background: url(../img/mycar.png);
}
javascript
window.onload = function () {
alert('使用左右方向键或者A,D字母控制小车左右移动\n\n点击确定按钮开始游戏')
// 捕获背景(父元素)
var bg = this.document.getElementById('bg');
var background = this.document.getElementById('background');
var bgImg = this.document.getElementById('bgImg');
// 获取屏幕高度,赋予背景
var h = this.document.documentElement.clientHeight / 1.25;
var w = bg.clientWidth;
var carsBg = ['url(../img/block1.png)'];
bg.style.height = h + 'px';
bgImg.style.top = -(bgImg.clientHeight - h + 10) + 'px';
background.style.height = document.documentElement.clientHeight + 'px';
var score = this.document.getElementById('score');
var timeLast = this.document.getElementById('timeLast');
// 生成box
function createBox() {
var box = this.document.createElement('div')
box.setAttribute('class', 'box');
// 生成的位置---> 22;88;172;238 四个赛道随机生成
var randNum = Math.random();
var deltai = (((w - 20) / 4) - boxw) / 2;
var i = deltai + 10; // 起始横坐标
// console.log(randNum);
if (randNum < 0.25) {
box.style.left = i + 'px';
} else if (randNum >= 0.25 && randNum < 0.5) {
box.style.left = i + boxw + (2 * deltai) + 'px';
} else if (randNum >= 0.5 && randNum < 0.75) {
box.style.left = i + (2 * boxw) + (4 * deltai) + 'px';
} else {
box.style.left = i + (3 * boxw) + (6 * deltai) + 'px';
};
box.style.background = carsBg[Math.floor(Math.random() * carsBg.length)];
bg.appendChild(box);
moveBox(box); // 为每个box绑定对象
var carNum = document.querySelectorAll('.box').length;
if (carNum < 6) {
intervalTime -= 50;
clearInterval(timer);
if (intervalTime < 0) {
intervalTime = 10;
};
if (intervalTime > 0) {
timer = setInterval(add, intervalTime);
// console.log(intervalTime);
};
};
};
// 统计游戏时间
var timeLastNum = 0;
setInterval(function () {
timeLastNum++;
timeLast.innerHTML = 'Time: ' + timeLastNum + 's';
}, 1000)
// 当屏幕数量的车辆小于3辆时生成车辆
// 初始每隔1s判断数量,添加小车,每次最多添加3辆
// 每当车辆总数小于3时,同时减少生成车辆的时间间隔
var intervalTime = 2000;
// 需要正确关闭!!!
function add() {
createBox(); // 生成第1辆
createBox(); // 生成第2辆
createBox(); // 生成第3辆
};
var timer = setInterval(add, intervalTime);
// 设置移动背景
movebg();
function movebg() {
var timerS = setInterval(moveStreet, time);
function moveStreet() {
var pos = bgImg.offsetTop;
pos += deltaX;
if (pos > 0) {
bgImg.style.top = -(bgImg.clientHeight - h) + 'px';
} else {
clearInterval(timerS);
bgImg.style.top = pos + 'px';
timerS = setInterval(moveStreet, time);
}
}
}
// 使得每个box运动起来
var deltaX = 1;
var time = 5;
var scoreNum = 0;
function moveBox(obj) {
// bgImg.style.top = -(bgImg.clientHeight - h) + 'px';
deltaX += 0.01; // 加速度运动
var pos = 0;
var id = setInterval(move, time);
function move() {
if (pos > (h - boxh * 1.2)) {
pos = h - boxh * 1.2;
if (pos == (h - boxh * 1.2)) {
clearInterval(id);
bg.removeChild(obj); // 移除运动到底的box
scoreNum++;
score.innerHTML = 'Score: ' + scoreNum;
}
} else {
pos += deltaX;
obj.style.top = pos + 'px';
// 死亡判断!!!
// if (obj.offsetTop > h - 10 - 2 * boxh) {
// if ((mybox.offsetLeft > obj.offsetLeft - boxw) && (mybox.offsetLeft < obj.offsetLeft + boxw)) {
// alert('游戏结束\n最终得分:' + scoreNum + '分' + '\n存活时间:' + timeLastNum + 's');
// window.location.reload(true);
// }
// }
};
// bgImg.style.top = -(bgImg.clientHeight - h) + pos + 'px';
}
};
// 加入自定义小车
var mybox = this.document.getElementById('mybox');
var boxh = mybox.clientHeight;
var boxw = mybox.clientWidth;
// 指定初始位置
mybox.style.top = h - boxh - 10 + 'px';
mybox.style.left = w / 2 + 'px';
var speed = 10;
// 定义位移函数
// function moveUp() {
// // console.log('Up');
// mybox.style.top = mybox.offsetTop - speed + 'px';
// };
// function moveDown() {
// // console.log('Down');
// mybox.style.top = mybox.offsetTop + speed + 'px';
// };
function moveLeft() {
// console.log('Left');
if (mybox.offsetLeft >= 25) {
mybox.style.left = mybox.offsetLeft - speed + 'px';
}
};
function moveRight() {
// console.log('Right');
if (mybox.offsetLeft <= w - boxw - 20) {
mybox.style.left = mybox.offsetLeft + speed + 'px';
}
};
var sensitivity = 30; // 控制方向灵敏度,越小越灵敏
setInterval(function () {
switch (dir) {
// case 87:
// moveUp();
// break;
// case 38:
// moveUp();
// break;
// case 83:
// moveDown();
// break;
// case 40:
// moveDown();
// break;
case 65:
moveLeft();
break;
case 37:
moveLeft();
break;
case 68:
moveRight();
break;
case 39:
moveRight();
break;
}
}, sensitivity);
// 边缘判断 ——————> 已改良
// function getPos(obj) {
// // setInterval(function() {
// // var left = obj.offsetLeft;
// // var top = obj.offsetTop;
// // console.log(left+ ' '+top);
// // }, 10)
// }
// function end(obj) {
// var v = deltaX / time;
// var x = h - 10 - 2 * boxh;
// var t = x / v;
// setTimeout(function () {
// var deltaMin = obj.offsetLeft;
// var deltaMax = obj.offsetLeft + boxw;
// // console.log(deltaMin);
// // console.log(deltaMax);
// // console.log(mybox.offsetLeft);
// if (mybox.offsetLeft <= deltaMax && mybox.offsetLeft >= deltaMin) {
// alert('Game End');
// window.location.reload();
// }
// }, t + 300);
// };
// 绑定键盘事件
var dir = 0;
this.document.onkeydown = function (event) {
event = event || window.event;
// up 38 w 87;down 40 s 83;left 37 a 65;right 39 d 68
dir = event.keyCode;
};
this.document.onkeyup = function () {
dir = 0;
};
}
mycar.png
mycar.png
block1.png
block1.png
赛车小游戏c语言代码,网页赛车小游戏(纯JavaScript编写)相关推荐
- 生命游戏c语言代码easy,c++生命游戏源码
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 glViewport( 0, 0, width, height ); glMatrixMode( GL_PROJECTION ); glLoadIdent ...
- 格斗游戏c语言代码,C/C++知识点之设计并编写代码自动格斗类游戏
#includeusing namespace std; class CRole//角色类:基类 { public: CRole(); CRole(char *name,int ATK,int DEF ...
- Java控制台游戏~600行代码实现打怪小游戏
Java控制台游戏~600行代码实现打怪小游戏(多图预警) 一,先放个启动界面(一些英雄,怪物技能介绍跟装备属性都写在里边): 二,在这个简单的小游戏里,你可以体验到: 1.打怪: 2.随机玩法寻宝: ...
- 弹力球C语言课程设计,弹力球游戏c语言代码.docx
弹力球游戏c语言代码 #include #include #include #include /*定义游戏级别*/#define ELEMENTARY 15 /*初级*/#define INTERME ...
- 弹力球c语言代码运行,弹力球游戏c语言代码
弹力球游戏c语言代码 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 #include #include #include #inc ...
- c语言做搬山游戏,C语言实现搬山小游戏,适合新手的项目实战,超易上手!
原标题:C语言实现搬山小游戏,适合新手的项目实战,超易上手! 问题描述 设有n座山,计算机与人作为比赛的双方,轮流搬山.规定每次搬山数不能超过k座,谁搬最后一座谁输. 游戏开始时,计算机请人输入山的总 ...
- C语言可以敲哪些小游戏,C语言可以写哪些小游戏?
C语言可以写哪些小游戏? C语言可以编手机游戏.你叫他去死不过我这有贪吃蛇的代码,你倒可以看看(用TC编译一定过( #包括 #包括 #包括 #包括 #包括 #定义输入7181 #定义ESC 283 # ...
- 快快吃豆游戏c语言代码,C语言快快吃豆游戏.doc
C语言快快吃豆游戏 C语言--快快吃豆游戏 使用说明 运行程序时,首先进入到是游戏开始界面,根据提示,按键,决定是否进入游戏.运行效果如图7.1所示. 图7.1 进入游戏界面 按两下任意键,进入到快快 ...
- 猜成语游戏c语言代码,拼音首字母猜词语游戏 快乐大本营的一个游戏,给了些拼音的首字母,然后组词,让方块移到对面,这个游戏叫什么名字?...
快乐大本营的一个游戏,给了些拼音的首字母,然后组词,让方块移到对面,这个游戏叫什么名字? 游戏名字叫'天才笨笨碰'游戏规则两人同时坐在椅子上(椅子会喷气.翻倒和摇晃),随机给出4个活动声母和一个固定声 ...
最新文章
- 46、Power Query-Table.FillDown函数简介
- 机器学习、深度学习、强化学习课程超级大列表!
- 强大的Mockito测试框架(转)
- 用xml画水平虚线和竖直虚线.md
- Effective C++ 条款21
- python find函数_Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
- 计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
- 剖析HotSpot的Launcher
- 免费的专业SQL server杂志
- VARCHART XGantt甘特图具有更多功能的HTML5 / Gantt图表的可视计划小部件
- android 有序map,给HashMap排序,使之成为有序Map
- 亿图图示-----思维导图MindMaster示例
- iPhone4S、iPod5代、iPad2、iPad3、mini1代完美绕激活工具Sliver发布全新6.0版,支持工厂激活FMI OFF
- linux命令获取root权限,Linux命令学习:获取root权限
- Alpha版本冲刺(八)
- opencv学习【绘图】多边形polylinesfillPoly
- sarscape5.6.2 结果在arcgis中制图(2可以在envi里调好色带导入arcgis)
- Flash Professional CC新功能简介
- 使用IDM批量抓取音效素材下载
- 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐
热门文章
- 利用Linux宝塔界面搭建个不限速的网盘
- 手机怎么升级为鸿蒙系统,这9款华为手机可升级为鸿蒙系统,有你的手机吗?...
- currentThread方法
- 关于“服务器限制无法上传那么大的附件 ”的解决方法
- 3dmax中布尔命令的方法
- asp.net火车票务信息管理系统
- 华为交换机重制_FAQ:5700能否通过reset按键清空配置
- 笔记本电脑键盘按键有两个功能,如何切换
- 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)
- iosepub阅读器_iOS苹果手机上最好的3个mobi阅读器