赛车(改良版)

利用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编写)相关推荐

  1. 生命游戏c语言代码easy,c++生命游戏源码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 glViewport( 0, 0, width, height ); glMatrixMode( GL_PROJECTION ); glLoadIdent ...

  2. 格斗游戏c语言代码,C/C++知识点之设计并编写代码自动格斗类游戏

    #includeusing namespace std; class CRole//角色类:基类 { public: CRole(); CRole(char *name,int ATK,int DEF ...

  3. Java控制台游戏~600行代码实现打怪小游戏

    Java控制台游戏~600行代码实现打怪小游戏(多图预警) 一,先放个启动界面(一些英雄,怪物技能介绍跟装备属性都写在里边): 二,在这个简单的小游戏里,你可以体验到: 1.打怪: 2.随机玩法寻宝: ...

  4. 弹力球C语言课程设计,弹力球游戏c语言代码.docx

    弹力球游戏c语言代码 #include #include #include #include /*定义游戏级别*/#define ELEMENTARY 15 /*初级*/#define INTERME ...

  5. 弹力球c语言代码运行,弹力球游戏c语言代码

    弹力球游戏c语言代码 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 #include #include #include #inc ...

  6. c语言做搬山游戏,C语言实现搬山小游戏,适合新手的项目实战,超易上手!

    原标题:C语言实现搬山小游戏,适合新手的项目实战,超易上手! 问题描述 设有n座山,计算机与人作为比赛的双方,轮流搬山.规定每次搬山数不能超过k座,谁搬最后一座谁输. 游戏开始时,计算机请人输入山的总 ...

  7. C语言可以敲哪些小游戏,C语言可以写哪些小游戏?

    C语言可以写哪些小游戏? C语言可以编手机游戏.你叫他去死不过我这有贪吃蛇的代码,你倒可以看看(用TC编译一定过( #包括 #包括 #包括 #包括 #包括 #定义输入7181 #定义ESC 283 # ...

  8. 快快吃豆游戏c语言代码,C语言快快吃豆游戏.doc

    C语言快快吃豆游戏 C语言--快快吃豆游戏 使用说明 运行程序时,首先进入到是游戏开始界面,根据提示,按键,决定是否进入游戏.运行效果如图7.1所示. 图7.1 进入游戏界面 按两下任意键,进入到快快 ...

  9. 猜成语游戏c语言代码,拼音首字母猜词语游戏 快乐大本营的一个游戏,给了些拼音的首字母,然后组词,让方块移到对面,这个游戏叫什么名字?...

    快乐大本营的一个游戏,给了些拼音的首字母,然后组词,让方块移到对面,这个游戏叫什么名字? 游戏名字叫'天才笨笨碰'游戏规则两人同时坐在椅子上(椅子会喷气.翻倒和摇晃),随机给出4个活动声母和一个固定声 ...

最新文章

  1. 46、Power Query-Table.FillDown函数简介
  2. 机器学习、深度学习、强化学习课程超级大列表!
  3. 强大的Mockito测试框架(转)
  4. 用xml画水平虚线和竖直虚线.md
  5. Effective C++ 条款21
  6. python find函数_Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
  7. 计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
  8. 剖析HotSpot的Launcher
  9. 免费的专业SQL server杂志
  10. VARCHART XGantt甘特图具有更多功能的HTML5 / Gantt图表的可视计划小部件
  11. android 有序map,给HashMap排序,使之成为有序Map
  12. 亿图图示-----思维导图MindMaster示例
  13. iPhone4S、iPod5代、iPad2、iPad3、mini1代完美绕激活工具Sliver发布全新6.0版,支持工厂激活FMI OFF
  14. linux命令获取root权限,Linux命令学习:获取root权限
  15. Alpha版本冲刺(八)
  16. opencv学习【绘图】多边形polylinesfillPoly
  17. sarscape5.6.2 结果在arcgis中制图(2可以在envi里调好色带导入arcgis)
  18. Flash Professional CC新功能简介
  19. 使用IDM批量抓取音效素材下载
  20. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐

热门文章

  1. 利用Linux宝塔界面搭建个不限速的网盘
  2. 手机怎么升级为鸿蒙系统,这9款华为手机可升级为鸿蒙系统,有你的手机吗?...
  3. currentThread方法
  4. 关于“服务器限制无法上传那么大的附件 ”的解决方法
  5. 3dmax中布尔命令的方法
  6. asp.net火车票务信息管理系统
  7. 华为交换机重制_FAQ:5700能否通过reset按键清空配置
  8. 笔记本电脑键盘按键有两个功能,如何切换
  9. 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)
  10. iosepub阅读器_iOS苹果手机上最好的3个mobi阅读器