java_弹球游戏

弹球游戏实现原理:

  隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint()方法来实现。这里我们用了键盘监听事件、Timer类等。

游戏说明:

  该弹球游戏中的小球会随着时间增加速度且速度最多是横向速度和垂直速度为10。当小球的y坐标(垂直坐标)大于球拍的y坐标(垂直坐标)即判断游戏结束。控制台显示的是小球的x方向的速度和y方向的速度。

  1 import java.awt.*;
  2 import java.util.Random;
  3 import javax.swing.Timer;
  4 import java.awt.event.*;
  5 public class PinBall
  6 {
  7     private Frame f=new Frame("弹球游戏");
  8     Random rand=new Random();
  9     //桌面的宽度以及高度
 10     private final int TABLE_WIDTH=300;
 11     private final int TABLE_HEIGHT=400;
 12     //球拍的宽度以及高度以及水平位置、垂直位置
 13     private final int RACKET_WIDTH=60;
 14     private final int RACKET_HEIGHT=20;
 15     private int racketX=rand.nextInt(24)*10;
 16     private int racketY=300;
 17     //小球的大小、运行速度、坐标
 18     private final int BALL_SIZE=16;
 19     private int ySpeed=1;
 20     private double xyRate=1;
 21     private int xSpeed=(int)(xyRate*ySpeed);
 22     private int ballX=rand.nextInt(284);
 23     private int ballY=1;
 24     //创建画布
 25     private MyCanvas tableArea=new MyCanvas();
 26     //定义时间类
 27     Timer timer;
 28     //游戏是否结束的旗标
 29     private boolean isLose=false;
 30     //设置游戏等级
 31     private int time_times=1;
 32     public void init(){
 33         tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
 34         f.add(tableArea);
 35         //定义键盘监听器
 36         KeyAdapter keyProcessor=new KeyAdapter()
 37         {
 38             public void keyPressed(KeyEvent ke){
 39                 if(ke.getKeyCode()==KeyEvent.VK_LEFT){
 40                     if(racketX>0)
 41                         racketX-=10;
 42                 }
 43                 if(ke.getKeyCode()==KeyEvent.VK_RIGHT){
 44                     if(racketX<TABLE_WIDTH-RACKET_WIDTH)
 45                         racketX+=10;
 46                 }
 47             }
 48
 49         };
 50         f.addKeyListener(keyProcessor);
 51         //tableArea.addKeyListener(keyProcessor);
 52         ActionListener taskPerformer=evt->
 53         {
 54             //小球碰到左边框或右边框
 55             if(ballX<=0||ballX>=TABLE_WIDTH-BALL_SIZE){
 56                 xSpeed=-xSpeed;
 57             }
 58             if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH-BALL_SIZE)){
 59                 timer.stop();
 60                 isLose=true;
 61                 tableArea.repaint();
 62             }else if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<=racketX+RACKET_WIDTH)){
 63                 ySpeed=-ySpeed;
 64             }
 65             ballY+=ySpeed;
 66             ballX+=xSpeed;
 67             tableArea.repaint();
 68             if((xSpeed<10&&xSpeed>-10)&&(ySpeed<10&&ySpeed>-10)){
 69                 time_times++;
 70             }
 71             if(time_times==10){
 72                 if(xSpeed>0){
 73                     xSpeed++;
 74                 }else{
 75                     xSpeed--;
 76                 }
 77                 if(ySpeed>0){
 78                     ySpeed++;
 79                 }else{
 80                     ySpeed--;
 81                 }
 82                 time_times-=10;
 83                 System.out.println(xSpeed+" "+ySpeed);
 84             }
 85         };
 86         timer=new Timer(100,taskPerformer);
 87         timer.start();
 88         f.pack();
 89         f.setVisible(true);
 90     }
 91     class MyCanvas extends Canvas
 92     {
 93         public void paint(Graphics g){
 94             if(isLose){
 95                 g.setColor(new Color(255,0,0));
 96                 g.setFont(new Font("Times",Font.BOLD,30));
 97                 g.drawString("游戏结束",50,200);
 98             }else{
 99                 g.setColor(new Color(240,240,80));
100                 g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);
101                 g.setColor(new Color(80,80,200));
102                 g.fillRect(racketX,racketY,RACKET_WIDTH,RACKET_HEIGHT);
103             }
104         }
105     }
106     public static void main(String[] args)
107     {
108         new PinBall().init();
109     }
110 }                        

时间: 2024-10-10 13:48:41

java_弹球游戏的相关文章

java_弹球小游戏

弹球游戏实现原理: 隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint()方法来实现.这里我们用了键盘监听事件.Timer类等. 游戏说明: 该弹球游戏中的小球会随着时间增加速度且速度最多是横向速度和垂直速度为10.当小球的y坐标(垂直坐标)大于球拍的y坐标(垂直坐标)即判断游戏结束.控制台显示的是小球的x方向的速度和y方向的速度. 1 import java.awt

纯js制作的弹球游戏

纯js的弹球游戏,撞壁自动返回,按钮放置暂停移动,移开开始移动 1 <!-- 2 author:zhangjie 3 date :2016-7-23 4 --> 5 <!DOCTYPE html> 6 <html> 7 <head> 8 <title></title> 9 <meta charset="UTF-8"> 10 <script type='text/javascript'> 11

HTML5与Javascript 实现网页弹球游戏

终于效果图: 1. 使用html 5 的canvas 技术和javascript实现弹球游戏 总体流程图: 1.1 html5 canvas技术的使用 首先在html页面中定义画布. <canvas bgcolor = "#FFF" id="gamePane" width="1000" height="500" tabindex="0"> Sorry, your browser doesn't

弹球游戏

scratch官网:Create a Pong Game 弹球游戏 小球在舞台上旋转,若碰到边缘则反弹:若碰到绿杆,则小球颜色变并加1分:若碰到红线,则游戏结束. 总结 1. (1)如何检测小球碰到绿杆?   (绿杆为角色对象) (2)如何检测小球碰到红线? 红线为绘制角色,就需要用颜色来侦测 2 弄明白方向     如何画一条红色直线? 1选择矢量模式,设置线条的颜色.粗细 (矢量模式,为保证图不管放大缩小都清晰) 2当画线时,按shift键画出直线 如何设定侦测条件的颜色 选择碰到红色的方法

最近新学了图形界面,写了一个弹球游戏,拿出来让大家指正。

1 package org.xn.chapter11.practice; 2 3 /** 4 * 课后习题2:做一个弹球游戏,在书中程序的基础上将所有的组件换成图片显得更美观和实用 5 * 程序分解: 6 * 1.图形界面: 7 * 球桌.弹球.球杆.障碍物 8 * 2.动画核心: 9 * 定时器,每隔100ms绘制一次图形 10 * JPanel组件,这里要使用JPanel而不是Canvas,因为使用Canvas会产生闪烁 11 * 键盘监听类,用于左右键来控制球杆的运动 12 * JPane

基于FPGA的VGA视频弹球游戏

这是2011下半年我在这边第一年的一个期末课程项目.课程是嵌入式系统.我利用一个FPGA开发板做了一个VGA视频输出的弹球游戏.自认为做得不错,课程拿了A+,也因为这个作业通过了暑期实习面试.现在拿出来分享. 平台: 该课程使用的是Sparten 3e starter board开发板.开发板信息及购买地址:http://www.digilentinc.com/Products/Detail.cfm?NavTop=2&NavSub=423&Prod=S3EBOARD&CFID=11

弹球游戏设计

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12164369.html 一.问题描述 1.问题描述 用c语言实现一个弹球游戏,实现小球在控制台的一定范围内(可自行定义范围,此博客小球的横坐标范围在(5,15),小球的纵坐标在(0,19)做抛物线运动. 二.解决问题的物理模型 2.1.没有大小的小球. 2.2.运动轨迹. 小球合运动轨迹是一个抛物线,把小球运动分解,分为水平方向运动和竖直方向运动.小球在水平方向是匀速直线运动,在竖直方向是加速度向下的变

趣学Python之弹球游戏第一阶段

最近在看一本叫<趣学Python--教孩子学编程>的书,非常适合我这种从来不写代码的人. 今天开始照着书本,学写人生第一个游戏:弹球. 目前这些代码只是个开始,仅仅有一个窗口和一个红球罢了 from tkinter import * import random import time #创建ball类 class Ball:     def __init__(self,canvas,color):    #初始化函数,包含画布canvas和颜色color参数         self.canv

趣学Python之弹球游戏最后阶段--击球结束

最后阶段,加入判断球拍击中小球的代码,并以小球落入窗口底部为结束. #引入下列模块 from tkinter import *                                                #画图模块 import random                                                        #随机数模块 import time