各种曲线运动、弹球、笔记

// 绘制曲线
import java.awt.*;

public class BallGame extends Frame {

    Image img = Toolkit.getDefaultToolkit().getImage("pingpang.jpg"); // 这种写法的问题就是开始时静态图像不会显示,需要最小化或最大化后才能显示
    double x = 200;
    double y = 200;
    double degree = 0;
    public void paint(Graphics g) // 自动调用, g相当于画笔
    {
            System.out.println("窗口被画了一次");
            g.drawImage(img, (int)x, (int)y, null);
            // 椭圆
            /*x = 250 + 200*Math.cos(degree);
            y = 250 + 100*Math.sin(degree);*/

            // 正弦曲线
            x = x + 2;
            y = 200 + 100*Math.sin(degree);
            degree = degree + 0.1;

// g.drawImage(img, 100, 100, null);

        /*g.setColor(Color.GREEN);
        g.drawLine(100, 100, 200, 200);
        g.drawRect(50, 50, 100, 80);
        g.drawOval(50, 50, 100, 80);
        g.setColor(Color.YELLOW);
        g.drawString("游戏开始!", 80, 80);*/
    }
    void launchFrame()
    {
        setSize(500, 300);
        setLocation(50, 50);
        setTitle("hallo ball");
        setBackground(Color.blue);
        setVisible(true);
        new PaintThread().start();
    }

    public static void main(String[] args)
    {
        new BallGame().launchFrame();

    }

    class PaintThread extends Thread
    {
        public void run()
        {
            while(true)
            {
                repaint(); // 重画窗口!
                try
                {
                    Thread.sleep(40); // 40MS, 1S画25次

                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }

            }
        }
    }
}
//------------------------------我是分割线---------------------------------------------------------------
弹球:
import java.awt.*;

public class BallGame extends Frame {

    Image img = Toolkit.getDefaultToolkit().getImage("pingpang.png"); // 这种写法的问题就是开始时静态图像不会显示,需要最小化或最大化后才能显示
    double x = 100;
    double y = 100;
    double degree = 3.14 / 3;
    public void paint(Graphics g) // 自动调用, g相当于画笔
    {
            System.out.println("窗口被画了一次");
            g.drawImage(img, (int)x, (int)y, null);

            if(y > 300 - 30)
            {
                degree = -degree;
            }
            else if(y < 30)
            {
                degree = - degree;
            }
            else if(x > 500 - 30)
            {
                degree = 3.14 - degree;
            }
            else if(x < 0)
            {
                degree = 3.14 - degree;
            }

            x = x + 10*Math.cos(degree);
            y = y + 10*Math.sin(degree);

//        g.drawImage(img, 100, 100, null);

        /*g.setColor(Color.GREEN);
        g.drawLine(100, 100, 200, 200);
        g.drawRect(50, 50, 100, 80);
        g.drawOval(50, 50, 100, 80);
        g.setColor(Color.YELLOW);
        g.drawString("游戏开始!", 80, 80);*/
    }
    void launchFrame()
    {
        setSize(500, 300);
        setLocation(50, 50);
        setTitle("hallo ball");
        setBackground(Color.blue);
        setVisible(true);
        new PaintThread().start();
    }

    public static void main(String[] args)
    {
        new BallGame().launchFrame();

    }

    class PaintThread extends Thread
    {
        public void run()
        {
            while(true)
            {
                repaint(); // 重画窗口!
                try
                {
//                    Thread.sleep(40); // 40MS, 1S画25次
                    Thread.sleep(40);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }

            }
        }
    }
}
//----------------------------我是分割线--------------------------------------------------
笔记:
1.JAVA开发环境安装和配置
a)下载JDK(Java Development Kit)
b)安装JDK、 JRE(Java Runtime environment)
c)配置环境变量:
i.path(系统通过path指定的目录寻找相关的可执行文件!)
右键单击我的电脑属性高级环境变量修改path即可!
ii.classpath(系统通过classpath寻找类文件)
JDK1.5之后,可以不设置!
2.Eclipse的使用(目前使用最多的IDE:integrated development environment集成开发环境)
a)下载
b)解压即可
3.新建一个JAVA项目
a)New Java Project只需要输入project name,回车即可!
4.新建一个JAVA类
a)右键单击srcnew Class键入类名:BallGame
b)输入代码:
public class BallGame {
    public static void main(String[] args){
        System.out.println("我是尚学堂的高淇!");
    }
}
c)运行java程序的三种方式:
i.右键单击Run asjava application
ii.Alt+shift+X,再按J
iii.Ctrl+F11
iv.单击运行按钮

开始开发我们的小游戏
1.增加窗口
import java.awt.*;
public class BallGame extends Frame {

    void launchFrame(){
        setSize(500, 300);
        setLocation(50, 50);
        setVisible(true);
        setTitle("尚学堂---张三作品");
        setBackground(Color.black);
    }

    public static void main(String[] args){
        System.out.println("我是尚学堂的高淇!");
        new BallGame().launchFrame();
    }
}

2.加载图片
在项目下新建images文件夹,将sun.jpg拷贝到images下面

import java.awt.*;

public class BallGame extends Frame {

    Image sun = Toolkit.getDefaultToolkit().getImage("images/sun.jpg"); //这种写法并不好,但是是最简单的!

    public void paint(Graphics g){
        g.drawImage(sun, 100, 100, null);
    }

    void launchFrame(){
        setSize(500, 300);
        setLocation(50, 50);
        setTitle("尚学堂---张三作品");
        setBackground(Color.black);
        setVisible(true);
    }

    public static void main(String[] args){
        System.out.println("我是尚学堂的高淇!");
        new BallGame().launchFrame();
    }
}
注意:运行时,第一次打开窗口看不到图片。需要将窗口最小化再打开即可看到!

3.学习画各种曲线、形状、字符串:

import java.awt.*;

public class BallGame extends Frame {

    Image sun = Toolkit.getDefaultToolkit().getImage("images/sun.jpg"); //这种写法并不好,但是是最简单的!

    public void paint(Graphics g){
        g.drawImage(sun, 100, 100, null);
        g.setColor(Color.blue);
        g.drawLine(100, 100, 200, 200);
        g.drawRect(50, 50, 100, 80);
        g.drawOval(50, 50, 100, 80);
        g.setColor(Color.yellow);
        g.drawString("游戏开始啦!!", 80, 80);
[暂时跟我们的游戏无关,但是一些基本的编程知识!]    }

    void launchFrame(){
        setSize(500, 300);
        setLocation(50, 50);
        setTitle("尚学堂---张三作品");
        setBackground(Color.black);
        setVisible(true);
    }

    public static void main(String[] args){
        System.out.println("我是尚学堂的高淇!");
        new BallGame().launchFrame();
    }
}

4.增加动画

import java.awt.*;

public class BallGame extends Frame {

    Image sun = Toolkit.getDefaultToolkit().getImage("images/sun.jpg"); //这种写法并不好,但是是最简单的!
    int x=100;
    int y=100;
    public void paint(Graphics g){
        System.out.println("窗口被画了一次!");
        g.drawImage(sun, x, y, null);
        x = x+2;
    }

    void launchFrame(){
        setSize(500, 300);
        setLocation(50, 50);
        setTitle("尚学堂---张三作品");
        setBackground(Color.black);
        setVisible(true);
        new PaintThread().start();
    }

    public static void main(String[] args){
        System.out.println("我是尚学堂的高淇!");
        new BallGame().launchFrame();
    }

    class PaintThread extends Thread {
        public void run(){
            while(true){
                repaint(); //重画窗口!
                try{
                    Thread.sleep(40); //40ms 1s=1000ms
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

5.通过我们掌握的数学函数(抛物线、正弦曲线、椭圆等),控制游戏中物体的运动!

import java.awt.*;

public class BallGame extends Frame {

    Image sun = Toolkit.getDefaultToolkit().getImage("images/sun.jpg"); //这种写法并不好,但是是最简单的!
    double x=100;
    double y=100;
    double degree = 0;
    public void paint(Graphics g){
        System.out.println("窗口被画了一次!");
        g.drawImage(sun, (int)x,(int)y, null);
        x =150+ 100*Math.cos(degree);
        y = 150+100*Math.sin(degree);
        degree = degree + 0.1;
    }

    void launchFrame(){
        setSize(500, 300);
        setLocation(50, 50);
        setTitle("尚学堂---张三作品");
        setBackground(Color.black);
        setVisible(true);
        new PaintThread().start();
    }

    public static void main(String[] args){
        System.out.println("我是尚学堂的高淇!");
        new BallGame().launchFrame();
    }

    class PaintThread extends Thread {
        public void run(){
            while(true){
                repaint(); //重画窗口!
                try{
                    Thread.sleep(40); //40ms 1s=1000ms
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

6.实现台球的运动!

import java.awt.*;

public class BallGame extends Frame {

    Image sun = Toolkit.getDefaultToolkit().getImage("images/sun.jpg"); //这种写法并不好,但是是最简单的!
    double x=100;
    double y=100;
    double degree = 3.14/3;
    public void paint(Graphics g){
        System.out.println("窗口被画了一次!");
        g.drawImage(sun, (int)x,(int)y, null);
        x = x+ 10*Math.cos(degree);
        y = y+10*Math.sin(degree);

        if(y>300-30){
            degree = - degree;
        }
        if(x>500-30){
            degree = 3.14-degree;
        }
        if(x<0){
            degree = 3.14-degree;
        }
        if(y<30){
            degree = -degree;
        }
    }

    void launchFrame(){
        setSize(500, 300);
        setLocation(50, 50);
        setTitle("尚学堂---张三作品");
        setBackground(Color.black);
        setVisible(true);
        new PaintThread().start();
    }

    public static void main(String[] args){
        System.out.println("我是尚学堂的高淇!");
        new BallGame().launchFrame();
    }

    class PaintThread extends Thread {
        public void run(){
            while(true){
                repaint(); //重画窗口!
                try{
                    Thread.sleep(40); //40ms 1s=1000ms
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

7.通过键盘来控制物体的运动!

参考:尚学堂高淇游戏视频

时间: 2024-12-17 08:15:30

各种曲线运动、弹球、笔记的相关文章

jqueryrotate 使用 帮助 笔记 学习

1.想变角度 $("imgID").rotate(45); 2.想变角度时,有运动过程 $("imgID").rotate({animateTo:45}); 这里可以说参数了  animateTo: 变化到的角度 3.想从A角度到B角度,有动画过程 $("imgID").rotate({angle:A, animateTo:B}); angle: 起始角度 4.第3点,时间太久了,想500MS完成 $("imgID").rot

瘸腿蛤蟆笔记31-cocos2d-x-3.2 Box2d物理引擎Fixture类介绍

上篇回顾 本篇名言:好的木材并不在顺境中生长:风越强,树越壮. [马里欧特] 上篇中,我们学习了dynamics模块中的Body类,从定义到创建再到使用基本上都覆盖了,就差实战了(这个蛤蟆后在后面中补上的). 接下去蛤蟆继续学习dynamics模块中的类,这次咱们学习Fixture这个类. 理论介绍 我们知道Shape可以不知道Body,独立于物理仿真使用.所以Box2d需要Fixture类来将shape附加到Body.一个Body可以有1个或者多个Fixture.一个拥有多个fixture的B

cocos2d-x 动作笔记

一  基本概念 1. CCAction是动作类的基类 ,所以动作都派生自这个类,它创建一个对象代表一个动作.动作作用于CCNode,因此任何一个动作都是有CCNode来执行 实例1.   一个图片从一点1秒时间移动到另一点 Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto sprite02 =

笔记:利用 Cocos2dx 3.2 与 Box2D制作一个跑酷游戏

最近写lua写得没有力气了,所以想让脑袋放松一下,刚好看到有人在用swift做游戏: Swift游戏实战-跑酷熊猫 于是脑子一短路,就想到了利用这些素材来做一个游戏. 本来不想记笔记的,但是由于选择物理引擎的时候遇到诸多问题,所以选择记录下来,目前只做了个雏形,需要再完善一点. 需要知识: 1 cocos2dx-3.2 基本知识 2 box2d有一定的了解. 由于比较简单,所以把所有代码给上了先,然后再简单介绍下遇到的问题之类的东西. 首先是主角,熊猫类: Panda.h 1 #ifndef _

【安全牛学习笔记】

弱点扫描 ╋━━━━━━━━━━━━━━━━━━━━╋ ┃发现弱点                                ┃ ┃发现漏洞                                ┃ ┃  基于端口五福扫描结果版本信息(速度慢)┃ ┃  搜索已公开的漏洞数据库(数量大)      ┃ ┃  使用弱点扫描器实现漏洞管理            ┃ ╋━━━━━━━━━━━━━━━━━━━━╋ [email protected]:~# searchsploit Usage:

51CTO持续更新《通哥的运维笔记》

<通哥的运维笔记>将持续在51CTO网站更新,希望大家多多关注.互相学习,后期,我将会退出<通哥的运维笔记>系列视频教程,希望带给大家最大的收获,帮助大家更好的学习.进步.<通哥的运维笔记>主要从linux系统管理.虚拟化.cloudstack云平台以及网络管理之CCNA.CCNP.CCIE,等等方面深入讲解.

WPF笔记整理 - Bitmap和BitmapImage

项目中有图片处理的逻辑,因此要用到Bitmap.而WPF加载的一般都是BitmapImage.这里就需要将BitmapImage转成Bitmap 1. 图片的路径要用这样的,假设图片在project下的Images目录,文件名XXImage.png. pack://application:,,,/xxx;component/Images/XXImage.png 2. 代码: Bitmap bmp = null; var image = new BitmapImage(new Uri(this.X

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main