本来一心一意学Python, 结果在做爬虫的时候,发现如果不懂Html/Javascript 的话, 很难做好。 好吧, Html/Javascript 确实很枯燥, 只好先做个小游戏: 2 球动态碰撞, 碰撞后自动分开。这样, 学习起来应该更有趣一些。

代码如下:

<!DOCTYPE html>
<html>
    
<body>
<canvas id="myCanvas" width="300" height="280"></canvas>

<script>

var ctx = document.getElementById('myCanvas').getContext('2d');
var lastframe = 0;
 
var Box={x:1,y:1,width:myCanvas.width-2,height:myCanvas.height-2};

class Ball {
    constructor(x,y,r,speed) {
        this.x=x;
        this.y=y;
        this.r=r;
        this.xdir=1;
        this.ydir=1;
        this.speed=speed;
        }
    update(dt) {
        this.x+=dt*this.speed*this.xdir;
        this.y+=dt*this.speed*this.ydir;
        if (this.y+this.r> Box.height+Box.y){
            this.ydir=-1;}
        if (this.x+this.r>Box.width+Box.x) {
            this.xdir=-1;}
        if (this.y-this.r< Box.y){
            this.ydir=1;}
        if (this.x-this.r<Box.x) {
            this.xdir=1;}        
        
        }
    }
     
const ball1=new Ball(12,23,20,200);
const ball2=new Ball(150,210,35,150);

function collide(b1,b2) {
    dist=Math.sqrt((b1.y-b2.y)*(b1.y-b2.y)+(b1.x-b2.x)*(b1.x-b2.x));
    if (dist<b1.r+b2.r) return 1; 
    return 0;}

function main(tframe) {
        // Request animation frames
        window.requestAnimationFrame(main);
        //document.write(tframe)
        // Update and render the game
        update(tframe);
        render();
    }

function update(tframe) {
        var dt = (tframe - lastframe)/1000;
        lastframe = tframe;
        
        ball1.update(dt);
        ball2.update(dt);
        if (collide(ball1,ball2)) { 
            temp=ball1.xdir;
            ball1.xdir=ball2.xdir;
            ball2.xdir=temp;
            temp=ball1.ydir;
            ball1.ydir=ball2.ydir;
            ball2.ydir=temp; } 
    }        
            
function draw_ball(b) {
    ctx.fillStyle = "#f00";
    ctx.beginPath();
    ctx.arc(b.x,b.y,b.r,0,2*Math.PI,1);
    ctx.fill();
  }
    
function drawFrame() {
        // Draw background and a border
        ctx.fillStyle = "#d0d0d0";
        ctx.fillRect(0, 0, myCanvas.width, myCanvas.height);
        
        ctx.strokeStyle="#000000";
        ctx.lineWidth=2;
        ctx.strokeRect(Box.x,Box.y,Box.width,Box.height);
    }

function render() {
    drawFrame();
    draw_ball(ball1);
    draw_ball(ball2);
}

main(0);

</script>

</body>
</html>

Html/Javascript 做游戏的第一步: 2球碰撞游戏(附全部代码)相关推荐

  1. 浪潮服务器nf5270m5做raid_服务器安装第一步RAID配置——企业服务器常用RIAD技术介绍及配置...

    其实服务器安装第一步是打开包装箱,呵呵,第二步是安装导轨,第三步服务器上机架,第四步接上显示器,第五步通电开机-为啥我说服务器安装第一步是RAID配置,因为它相当重要!这是你在服务器安装相关系统之前的 ...

  2. 虚幻引擎 创建游戏的第一步,人类的一大步

    制作第一步,输入映射 前为正后为负,左为负右为正 设置鼠标控制旋转映射 Horizontal mouse movement为鼠标水平移动 Vertical mouse movement为鼠标竖直移动 ...

  3. unity 角度限制_喵的Unity游戏开发之路 推球:游戏中的物理

    前言很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本 ...

  4. 喵的Unity游戏开发之路 - 推球:游戏中的物理

    很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...

  5. 单人扑克游戏:地城恶棍的Python实现(附实现代码)

    基于Numpy的单人扑克游戏:地城恶棍 [!] 本项目为原创内容,若有错误之处还需批评指正 由于篇幅过长,本文全代码文件位于另一个博客中:传送门 文章目录 基于Numpy的单人扑克游戏:地城恶棍 1. ...

  6. unity java游戏大全_3D unity   滚球小游戏

    3D unity 滚球小游戏 1.打开unity,创建一个新的项目(或在已创建的项目里创建一个新的场景). 2.制作平台 创建一个Plane和四个cube模型,附上相应的材质,调整大小和位置,形成一个 ...

  7. unity3d,跟着大佬做自己的第一个游戏(第一步,游戏模型制作)

    网址http://www.bilibili.com/video/av5814699/当然我不会全部按照他的来 首先下载了一个magicavoxel 某乎介绍https://zhuanlan.zhihu ...

  8. lua 学习笔记---游戏开发第一步

    lua 学习笔记-从数组开始 数组 数组大小范围不一定需要在声明是确定,可以改变 一维数组 例 > array = {"Lua", "lualu"} &g ...

  9. 桌球游戏java_JAVA 第一个小项目 桌球游戏 (桌球小程序练习)

    标签: 今天装了Eclipse 学习第一个小程序'' #加载窗口 #画窗口 import java.awt.*; import javax.swing.*; public class BallGame ...

最新文章

  1. 【c语言】蓝桥杯算法提高 简单加法
  2. Navicat for Oracle Cannot load OCI DLL
  3. BZOJ.3058.四叶草魔杖(Kruskal 状压DP)
  4. 1380C. Create The Teams
  5. RabbitMq(十三)消息发送确认与回调机制
  6. mysql三高讲解(二)2.9: mysql示例数据库sakia database的使用
  7. linux中安装和配置 jdk
  8. Android全局变量使用
  9. 小腹下面是什么部位_产后新妈妈去掉大肚腩,恢复平坦小腹,不妨试试这4个动作...
  10. java简单租车系统 慕课手记_Java租车系统(新手)
  11. python vtk_Python vtk.vtkRenderer方法代码示例
  12. Java编程英语单词大全_java编程常用英语单词
  13. 老旗舰华为能用上鸿蒙吗,千元机也能用鸿蒙!曝荣耀 9X 手机年内全部升级鸿蒙系统...
  14. 计算机网络英文习题(中文及答案解析)
  15. 怎样让表格的行高一样_怎么把excel的行高变成一样的
  16. Eigenvalue of random matrix
  17. 香港科技大学委任汪扬教授为副校长(大学拓展)
  18. 解决Linux没有声音的问题
  19. 全息存储:名气大于实力的存储技术?
  20. 过采样和求均值提高ADC分辨率

热门文章

  1. RN8302B模块资料
  2. Python异常处理try,except,else,finally用法解析。
  3. 数字图像处理——皮肤美白(Skin whitening)算法实现
  4. NumberFormatException: For input string: quot;quot;数字格式异常解决
  5. 河源微信分销系统开发日记:wordpress每篇文章评论人数统计
  6. Replicates
  7. android如何动态显示时间轴,Android时间轴的实现
  8. Python实现简单的勒索病毒
  9. 【人工智能】自动化编程的历史,现状,发展与未来
  10. unity使用websocket接受服务器数据推送