文档章节

弹球游戏源代码

非著名程序员Bla
 非著名程序员Bla
发布于 2016/05/18 18:03
字数 566
阅读 32
收藏 0
弹球游戏源代码

package com;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.Timer;
public class PinBall {
public static void main(String[] args) {
new PinBall().init();
}

class MyCanvas extends Canvas {
// 重写Canvas的paint()方法,实现绘图
@Override
public void paint(Graphics g) {
if (isLose) {// 遊戲
g.setColor(new Color(255, 0, 0));
g.setFont(new Font("Times", Font.BOLD, 30));
g.drawString("哈哈,游戏结束啦~~~~~", 0, 200);
} else {// 游戏没有结束
g.setColor(new Color(240, 240, 80));
// 绘制小球
g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);
g.setColor(new Color(80, 80, 200));
// 绘制球拍
g.fillRect(racketX, RACKET_Y, RACKET_WIDTH, RACKET_HEIGHT);
}
}

}

// 桌面的宽度
private final int TABLE_WIDTH = 300;
// 桌面的高度
private final int TABLE_HEIGHT = 400;
// 球拍的垂直位置
private final int RACKET_Y = 340;
// 球拍的高度
private final int RACKET_HEIGHT = 20;
// 球拍的宽度
private final int RACKET_WIDTH = 60;
// 球的大小
private final int BALL_SIZE = 16;
// 窗体
private JFrame f = new JFrame("弹球游戏——润康制作");
// 随机数
Random rand = new Random();
// 小球的纵向运行速度
private int ySpeed = 10;
// 控制小球的运动方向 -0.5~0.5
private double xyRate = rand.nextDouble() - 0.5;
// 小球的横向运行速度
private int xSpeed = (int) (ySpeed * xyRate * 2);
// 小球的坐标
private int ballX = rand.nextInt(200) + 20;
private int ballY = rand.nextInt(10) + 20;
// 球拍的水平位置
private int racketX = rand.nextInt(200);
// 画布
private MyCanvas tableArea = new MyCanvas();
// 计时器
Timer timer;
// 记录游戏是否结束 isLose
private boolean isLose = false;

public void init() {
// 设置桌面区域的最佳大小
tableArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));// Dimension
// 尺寸
f.add(tableArea);
// 定义键盘的监听器
KeyAdapter keyProcessor = new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
// 按下左键时的动作
if (ke.getKeyCode() == KeyEvent.VK_LEFT) {
if (racketX > 0)
racketX -= 10;
}
// 按下右键时的动作
if (ke.getKeyCode() == KeyEvent.VK_RIGHT) {
if (racketX < TABLE_WIDTH - RACKET_WIDTH)
racketX += 10;
}
}
};
// 为窗口和tableArea对象分别添加键盘监听器
f.addKeyListener(keyProcessor);
tableArea.addKeyListener(keyProcessor);

// 定义事件执行的周期
ActionListener taskPerformer = new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// 如果小球碰到左边的边框
if (ballX <= 0 || ballX > TABLE_WIDTH - BALL_SIZE) {
xSpeed = -xSpeed;
}
// 如果小球的高度超出了球拍的位置,且横向不在球拍的范围之内,游戏结束
if (ballY >= RACKET_Y - BALL_SIZE
&& (ballX < racketX || ballX > racketX + RACKET_WIDTH)) {
timer.stop();
isLose = true;
tableArea.repaint();
} else if (ballY <= 0
|| (ballY >= RACKET_Y - BALL_SIZE && racketX < ballX && ballX <= racketX
+ RACKET_WIDTH)) {// 如果小球在球拍之内,且达到球拍的位置,小球反弹
ySpeed = -ySpeed;
}
// 改变小球的坐标
ballX += xSpeed;
ballY += ySpeed;
System.out.println("小球的横坐标" + ballX + "小球的纵坐标" + ballY);
tableArea.repaint();

}
};
// 0.1秒,执行一次时间
timer = new Timer(90, taskPerformer);
timer.start();
f.pack();
f.setVisible(true);
}
}

本文转载自:http://blog.csdn.net/yangrunkangbla/article/details/45134411

共有 人打赏支持
上一篇: AWT编程
下一篇: 军事笔记本
非著名程序员Bla
粉丝 15
博文 75
码字总数 0
作品 0
合肥
后端工程师
私信 提问
做游戏,学编程(C语言) 网易云课堂MOOC视频

应一些同学的要求,把这学期上C语言编程课的讲课视频录制剪辑,上传到网易云课堂,感兴趣的朋友可以在线观看,欢迎多提宝贵意见。 MOOC视频链接:http://study.163.com/course/introduction....

童晶
2017/11/07
0
0
关于弹球游戏,弹球的运行和重力影响

要写一个弹球游戏,可不太明白弹球的运行算法包括重力影响和遇墙壁反弹等。希望各位大神给点思路

裴俊枫
2013/04/08
130
3
弹球游戏--Linball

Linball,全称 Linux Pinball,它是一款开源的弹球游戏,支持 Windows 和 Linux 系统。具有音效,缺憾是画面效果稍微有点粗糙。 玩法很简单,相信玩过 Windows 弹球的朋友都很熟悉。这里只简...

匿名
2008/11/30
829
0
python学习笔记--趣学Python编程第十三章的例子

弹球 由反弹球和球拍构成的游戏。球会在屏幕上飞过来,玩家要用球拍把它弹回去 画布和画弹球 引入模块 创建窗体 创建Ball类 创建Ball类,它有两个参数,一个是画布,另一个是球的颜色 把画布...

cysky
2018/06/28
0
0
弹球游戏--LBreakout2

LBreakout2是一款很华丽的弹球游戏,如果你玩过DxBall的话,你会发现LBreakout2和它很类似,而且比DxBall 还要好玩。 LBreakout2 具有: 丰富的关卡,31 个原创关卡和多得令人发指的附加关卡...

匿名
2009/01/29
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
20分钟前
2
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
38分钟前
2
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
38分钟前
1
0
oracle dg备库重建redolog:ora-00313,ora-00312

trace文件: Errors in file /crbank/dbs/app/product/diag/rdbms/rdbs/dbs/trace/dbs_mrp0_24445130.trc: ORA-00313: open failed for members of log group 8 of thread 1 ORA-00312: onl......

hnairdb
51分钟前
1
0
深入分析Java I/O的工作机制 (一)

1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合,类库包括接口、抽象类、具体类等。 I/O是机器获取和交互信息的主要渠道。 java在I/O上也一直在做持续的优化,在1.4版开始...

java菜分享
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部