文档章节

Java桌球小游戏

森林之下
 森林之下
发布于 06/23 22:47
字数 844
阅读 30
收藏 0
点赞 0
评论 0

 

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。

左右直线碰撞

package com.bjsxt.test;

import javax.swing.*;
import java.awt.*;

public class BallGame extends JFrame/*继承swing里面的窗口类*/ {

    //加载图片
    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");/*得到系统默认的工具包*/
    Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");/*得到系统默认的工具包*/

    double x = 50;//小球的起始横坐标
    double y = 80;//小球的起始纵坐标
    boolean right = true;//方向向右

    //将图片画到窗口
    public void paint(Graphics g) {
        System.out.println("窗口被画了一次");
        g.drawImage(desk, 0, 0, null);/*desk图片左上角在窗口内的坐标*/
        g.drawImage(ball, (int) x, (int) y, null);/*ball图片左上角在窗口内的坐标*/

        //如果向右,坐标加15;如果向左,坐标减15
        if (right) {
            x = x + 15;
        } else {
            x = x - 15;
        }

        //是否掉头判断
        if (x > 776) {/*856-50-30,desk图片长度856,边框50,小球直径30*/
            right = false;
        }
        if (x < 50) {/*0+40,ball图片左上角坐标0,边框50*/
            right = true;
        }
    }

    //窗口加载
    void launchFrame() {
        setSize(856, 500);/*size指窗口大小*/
        setLocation(50, 50);/*location指的窗口左上角位置*/
        setVisible(true);

        //重画窗口
        while (true) {
            repaint();
            try {
                Thread.sleep(40);//40毫秒,1秒=1000毫秒,大约一秒画25次窗口
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    //main方法是程序执行的入口
    public static void main(String[] args) {
        System.out.println("我是森林之下,这是一个小游戏");
        BallGame2 game = new BallGame2();
        game.launchFrame();
    }
}

 有角度的碰撞

package com.bjsxt.test;

import javax.swing.*;
import java.awt.*;

public class BallGame2 extends JFrame/*继承swing里面的窗口类*/ {

    //加载图片
    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");/*得到系统默认的工具包*/
    Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");/*得到系统默认的工具包*/

    double x = 50;//小球的起始横坐标
    double y = 80;//小球的起始纵坐标

    double degree = 3.14 / 3;//弧度,此处是60度

    //将图片画到窗口
    public void paint(Graphics g) {
        System.out.println("窗口被画了一次");
        g.drawImage(desk, 0, 0, null);/*desk图片左上角在窗口内的坐标*/
        g.drawImage(ball, (int) x, (int) y, null);/*ball图片左上角在窗口内的坐标*/

        x = x + 10 * Math.cos(degree);//水平移动的距离
        y = y + 10 * Math.sin(degree);//垂直移动的距离

        //碰到上下边框
        if (y > 450 || y < 80) {/*500-50,小球的y轴、窗口的高500,边框50;50+30,边框50,标题框30*/
            degree = -degree;/*弹射(关于x轴对称)*/
        }

        //碰到左右边框
        if (x < 50 || x > 806) {/*856-50,desk图片长度856,边框50*/
            degree = 3.14 - degree;/*弹射(关于y轴对称)*/
        }
    }

    //窗口加载
    void launchFrame() {
        setSize(856, 500);/*size指窗口大小*/
        setLocation(50, 50);/*location指的窗口左上角位置*/
        setVisible(true);

        //重画窗口
        while (true) {
            repaint();
            try {
                Thread.sleep(40);//40毫秒,1秒=1000毫秒,大约一秒画25次窗口
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    //main方法是程序执行的入口
    public static void main(String[] args) {
        System.out.println("我是森林之下,这是一个小游戏");
        BallGame2 game = new BallGame2();
        game.launchFrame();
    }
}

有角度的碰撞需要一定的数学基础

代码中所需的两张图片在下面

desk:

ball:

代码是对着高淇Java300集敲得,方便自己彻底理解,想要了解的,可以自己对着视频敲一遍。

© 著作权归作者所有

共有 人打赏支持
森林之下
粉丝 0
博文 14
码字总数 5919
作品 0
襄樊
程序员
Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区
05/09
0
0
Oracle Java SE 8 发行版更新:限制商业或生产用途

Oracle Java SE 8 发行版更新 Oracle Java SE 8 的公开更新仍面向单独的个人使用提供,至少持续至 2020 年底。 2019 年 1 月以后发布的 Oracle Java SE 8 公开更新将不向没有商用许可证的业务...

抢小孩糖吃
04/18
0
61
如何让Java和C++接口互相调用:JNI使用指南

写在前面的话 对于cocos2d-x开发者而言,游戏对多平台的支持是一个刚需,一般而言需要支持Android和iOS。然而,在开发过程中,android 平台遇到的一系列问题着实让人头疼,本文以集成新浪微博...

zhangyujsj
2015/08/23
0
0
cocos2d-x中通过Jni实现Java与C++的互相调用

cocos2d-x中通过Jni实现Java与C++的互相调用。 cocos2d-x用开发者提供了一个类JniHelper,提供了java与c++之间互调的jni解决方案。 笔者所开发的“史上最坑爹的游戏”项目中使用到了JNI,为此...

MingliC
2013/12/23
0
2
Java序列化技术即将被废除!!!

我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据...

Java技术栈
05/30
0
0
Java研发大学毕业后为何找不到理想的工作

现在大学生在大学学习Java技术,毕业后直接工作,我想在大家心里这只是再平常不过的事情了,可是为啥刚一毕业的Java应聘工程师会遭到各个研发企业的拒绝,这是刚毕业的每个大学生心中的疑虑,...

我爱编程学习
06/07
0
0
java基础io流——配角也风流(不求甚解)

本章简单介绍几个常见的io流派生。 1:数据操作流(操作基本类型数据的流)(理解) 代码示例: 2:内存操作流(理解) 用于处理临时存储信息的,程序结束,数据就从内存中消失。 代码示例: 注:查看...

潇潇漓燃
05/30
0
0
Cocos移植到Android-使用Eclipse交叉编译打包

如果对命令行望而生畏,我们可以借助于安装有ADT插件的Eclipse工具实现交叉编译。 使用Eclipse进行交叉编译,首先需要将要编译的工程导入到Eclipse的Workspace中,Workspace是多个工程的集合...

智捷课堂
2014/11/16
0
0
13.7-全栈Java笔记:打飞机游戏实战项目|Rectangle|intersects|Plane

碰撞类检测技术 游戏中,碰撞是遇到最频繁的技术。当然,很多游戏引擎内部已经做了碰撞检测处理,我们只需调用即可。本节课是从碰撞的原理进行讲解,大家自己去实现基本的碰撞检测。 矩形检测...

全栈Java
06/26
0
0
Java游戏开发中怎样才能获得更快的FPS?

众所周知,Java应用的运行速度虽然不慢,却也谈不上快,以最新的JRE1.6表现来说,至多也就是优胜于一些纯粹的解释型语言,距离C/C++等编译型的执行效率还有一定差距。平心而论,如果我们使用...

鹏凌三千
2009/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git 基础 - 远程仓库的使用

远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某...

谢思华
7分钟前
0
0
面试宝典-悲观锁和乐观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。 乐观锁(Optimistic...

suyain
9分钟前
0
0
崛起于Springboot2.X之集成MongoDb使用mongoTemplate CRUD(27)

1、pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency><dependency> <groupId>log4j</......

木九天
19分钟前
0
0
切分log日志

新建logback.xml放到resource里面 <?xml version="1.0" encoding="utf-8"?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <......

talen
24分钟前
0
0
spring @Resource 和 @Autowired 的使用区别

这两个 注解 @Resource 和 @Autowired , 常识都知道 @Resource 是 JAVAEE 自带的,@Autowired 是 spring 的自定义注解。 一般情况下, 使用 bean的时候, 这两个注解 随便使用一个即可。 但...

之渊
29分钟前
0
0
springboot集成elasticsearch客户端问题记录

1背景说明 服务端ES版本为5.5.2,springboot版本为1.5.6。 工程中添加如下依赖 2问题记录 2.1 NetworkPlugin类找不到 报错java.lang.ClassNotFoundException: org.elasticsearch.plugins.Net...

zjg23
31分钟前
1
0
快速构建ceph可视化监控系统

前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_expor...

万建宁
31分钟前
0
0
Java构造器使用注意

public class 父类A {int age = 10;protected void say() {System.out.println("父类A");}public 父类A() {override();}public void override() {Syst...

咸鱼AI
32分钟前
0
0
TensorFlow 线性分类

构造直线 z = 2 * x - 3 * y + 4 x0*w0+x1*w1+b=0 x1=-x0* w0/w1-b/w1 斜率 k= -w0/w1 截距 -b/w1 随机生成数据,加入一定的偏差,用直线将二维平面分为两部分 使用线性模型拟合参数 损失函数...

阿豪boy
35分钟前
0
0
翻译冒泡排序测试

翻译一个冒泡排序: var a = [1,3,2,4,6,5];var f = 0;var n = a.length ;for( var i =1; i<= n; i++) { for( var j = n-1 ; j >= i; j --) { if(a[j] < a[j+1]) { ......

钟元OSS
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部