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-12-23 01:09:29

java_弹球小游戏的相关文章

是男人就坚持20秒java的swing弹弹球小游戏代码

package com.day09.am01; import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.util.Timer; import ja

c语言 弹弹球小游戏

#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <time.h>#include<mmsystem.h>#pragma comment(lib, "WINMM.LIB") #define BRICK_NUM 100//形状类型#define SQUARE 1#define STAR 2#define DIAMOND 3 /*建立对应模型:20/

C语言实现双人控制的战斗小游戏

实现功能 1.双人分别控制小人移动 2.子弹碰撞 3.可改变出弹方向 4.血条实体化 前言 这个游戏是看了知乎一位非常好的老师的专栏后练手写的,(至于是哪位,知乎搜C语言小游戏最牛逼的那位) 有老师系统性的交这些的确规范了许多,我之前自己摸索写的游戏相对它来说规范性是大大的不抵. 我大致是看了一个飞机游戏的代码,学会了实时更新函数与用户输入更新函数,与设置子弹体. 在此基础上我结合我最近学的弹球写出了这个靠风骚走位的双人战斗小游戏.下面是图与具体实现. 0.游戏主体   while(1) {•

Java_电脑版_2048小游戏

今天翻了翻电脑, 突然看到这个小东西, 拿来和大家分享一下 import java.awt.Color; import java.awt.Font; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Random; import javax.

js选择颜色小游戏(随机生成不含重复数字的数组,通过数组中的数控制定义好的数组)

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>js网页版小游戏</title> <style media="screen"> .wrap { width: 577px; outline: 1px solid hotpink; margin: 100px auto; box-shadow: 0 0 5px; } .

使用AxureRP7.0制作经典小游戏"大家来找茬"

本案例是<网站蓝图AxureRP7.0从入门到精通视频教程>中的最后一节,适用于对Axure基础知识掌握比较熟练的同学:教程由axure原型库网站录制,转载请注明出处!相信很多刚接触Axure或者学习了一段时间但并没有深入的同学们,看到这个案例一定很惊讶,使用Axure竟然能做出如此逼真的交互效果!通过此案例也可以激发广大同学们学习Axure的热情和信心!试想一下,如果你有情侣的话,把你们珍藏的合影拿出来处理几张,做成大家来找茬的小游戏,不但锻炼了自己的技能,还能给对方一个惊喜,岂不是一举两得

使用AxureRP7.0制作经典数独小游戏原型,axure游戏原型下载

之前,有同学在Q群中提问,如何使用axure制作经典数独解谜小游戏,当时由于时间关系没有来得及亲手制作,而是给同学们提供了Axure6.5版本的一个数独解谜游戏的原型,本教程由axure原型库网站录制,转载请注明出处!但是那个原型做的太过繁杂,所以仅供大家参考交流:在此,金乌老师特地抽时间给同学们使用AxureRP7.0制作了一下,感觉对实战逻辑分析和axure变量的掌握比较有考验,所以就放出来供大家学习交流使用. 在学习的过程中,如果你仅凭自己现有的对axure的掌握,无法准确分析并组织出原型

【H5小游戏开发教程】如何限制微信游戏只能在微信端打开?

在这行里接触的时间多了,就会发现很多有意思的东西. 比如,很多微信小游戏会限制只能在微信端打开,有木有? 有这样的, 也有这样的, 妈蛋,不能用PC访问,这游戏就没法扒呀..... 其实涛舅舅告诉你,这两种都可以扒 而且是用PC! 但是今天,我不教你扒皮 我要教你的是,怎么让你的微信游戏也能限制PC打不开 很想学吧  准备开始! 1.第一种不提了,因为人家是设置了微信授权登录,从微信那里就拦截住了,只能用微信访问,你可能弄不了这么高级的微信授权这块,如果你真能弄,这一讲你也不用听了,因为你已经能

Chrome自带恐龙小游戏的源码研究(完)

在上一篇<Chrome自带恐龙小游戏的源码研究(七)>中研究了恐龙与障碍物的碰撞检测,这一篇主要研究组成游戏的其它要素. 游戏分数记录 如图所示,分数及最高分记录显示在游戏界面的右上角,每达到100分就会出现闪烁特效,游戏第一次gameover时显示历史最高分.分数记录器由DistanceMeter构造函数实现,以下是它的全部代码: 1 DistanceMeter.dimensions = { 2 WIDTH: 10, //每个字符的宽度 3 HEIGHT: 13, //每个字符的高 4 DE