`
hh.凝望
  • 浏览: 64032 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

很有趣的弹球游戏

阅读更多
  想必很多人都喜欢玩游戏,其实当工作或学习累了玩玩游戏有助于我们消除疲劳,另外也可以锻炼我们的大脑反应能力以及大及和身体各部位的谐调度,当然这只是在玩适当的时间为前提的,但是我们经常碰到的很多大型游戏又总是要花我们很多时间才能大战仅仅一个回合,显然是起不到健身益脑的作用的,这时候要怎么办呢?我们总不能每时每刻都沉浸在工作和学习吧,总会看到或听到周围的人说生活精彩,精彩生活,那么我们的生活到底精彩到哪儿呢?不要走开,答案即将揭晓。也许有的朋友已经猜到了,没错,就在于游戏,有人说,人生就像一场戏,其实呢,他说的就是一场游戏,而且是一场小型的游戏,呵呵,正所谓游戏人生。今天我就介绍一下一个弹球游戏制作过程,保证看到最后大家也能亲手做一个。Ok,Lets' go!
  我们涉及到的java知识有Swing中的窗口设置,添加菜单以及相关的监听器,另外我们还要用到线程的知识。
   我分以下三步,编写三个类,来完成该游戏的制作。
   首先,我们先建一个窗口,请看代码:
  import java.awt.Graphics;
import java.awt.event.ActionEvent;

import javax.swing.JOptionPane;

/**
* 主界面类
*
* @author Administrator
*
*/
public class TanBallGame extends javax.swing.JFrame {
// 画布
private java.awt.Graphics g;
// 监听器
private MyListener ms;
// 睡眠时间,通过改变睡眠时间,可以改变游戏速度,从而设置游戏难度
public static int sleeptime;

// 程序入口
public static void main(String[] args) {
TanBallGame tbg = new TanBallGame();
tbg.showUI();

}

// 主界方法
private void showUI() {
// 设置标题
this.setTitle("弹球游戏");
// 设置界面大小
this.setSize(600, 600);
// 创建菜单条
javax.swing.JMenuBar bar = createMenu();

// 给窗体设置菜单条
this.setJMenuBar(bar);
// 界面布局方式
java.awt.FlowLayout fl = new java.awt.FlowLayout();
this.setLayout(fl);
// 让窗口初始化居中
this.setLocationRelativeTo(null);
// 窗口关闭量退出程序
this.setDefaultCloseOperation(3);

this.setVisible(true);
// 得到画布对象
g = this.getGraphics();
// 给画布添加监听器
MyListener ms = new MyListener(this, g);

this.addMouseMotionListener(ms);
this.update(g);

}

/**
* 创建菜单的方法
*
* @return
*/
public javax.swing.JMenuBar createMenu() {
// 菜单条对象
javax.swing.JMenuBar Bar = new javax.swing.JMenuBar();
// 菜单
javax.swing.JMenu play = new javax.swing.JMenu("游戏控制");
// 菜单选项
final javax.swing.JMenuItem start = new            javax.swing.JMenuItem("开始游戏");
javax.swing.JMenuItem stop = new javax.swing.JMenuItem("结束游戏");
javax.swing.JMenuItem view = new javax.swing.JMenuItem("关于");
// 菜单
javax.swing.JMenu nandu = new javax.swing.JMenu("游戏难度");
// 菜单选项
javax.swing.JMenuItem Level1 = new javax.swing.JMenuItem("简单");
javax.swing.JMenuItem Level2 = new javax.swing.JMenuItem("中等");
javax.swing.JMenuItem Level3 = new javax.swing.JMenuItem("困难");
// 把菜单添加到菜单条
Bar.add(play);
Bar.add(nandu);
// 把菜单选项添加到菜单
play.add(start);
play.add(stop);
play.add(view);
nandu.add(Level1);
nandu.add(Level2);
nandu.add(Level3);
// 通过内部类,为菜单选项添加监听器
java.awt.event.ActionListener al = new java.awt.event.ActionListener() {

@SuppressWarnings("deprecation")
// 实现动作事件的方法
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if ("开始游戏".equals(command)) {
// 游戏开始,默认难度为简单
sleeptime = 40;
// 球的线程开始
Board bt = new Board(ms, getBallGame(), g);
bt.start();
}
if ("结束游戏".equals(command)) {
// 用户点击了“结束游戏”时,会弹出确认框
int n = JOptionPane.showConfirmDialog(getComponent(0),
"确定要退出游戏吗?");
// 当用户点击了YES时,退出程序,并关闭窗口
if (n == 0) {
System.exit(0);
// 用户点击NO时,回到主界面,提示框会自动消失,游戏将继续
} else if (n == 1) {
Board bt = new Board(ms, getBallGame(), g);
bt.stop();
bt.start();

}

}
// 查看相关提示
if ("关于".equals(command)) {
javax.swing.JOptionPane
.showMessageDialog(null,
"欢迎体验蓝杰游戏,祝你玩的愉快!在游戏过程每点一次“开始游戏”则会增加一个球,特别欢迎挑战高难度!");

}
}

};
// 给菜单选项添加监听器
start.addActionListener(al);
stop.addActionListener(al);
view.addActionListener(al);
// 创建给“游戏难度”菜单的相关监听器
java.awt.event.ActionListener alr = new java.awt.event.ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if ("简单".equals(str)) {
sleeptime = 40;

}
if ("中等".equals(str)) {
sleeptime = 20;

}
if ("困难".equals(str)) {
sleeptime = 10;

}

}
};
// 添加到监听器
Level1.addActionListener(alr);
Level2.addActionListener(alr);
Level3.addActionListener(alr);
return Bar;

}

public TanBallGame getBallGame() {
return this;
}
}
大家会发现程序的主函数也在上面这个类中,而主函数中只调用了定义界面的方法,本类中其它的方法以及其它类的方法将会在主界面的方法中调用,大家可能很多地方没搞明白,没有关系,等看完下面的一切问题将会不功自破。
   import java.awt.event.MouseEvent;
/*
*事件监听器
*/
import java.util.Random;

public class MyListener extends java.awt.event.MouseAdapter {
//随机取数对象
Random rand = new Random();
//画布对象
private java.awt.Graphics g;
//背景对象
private TanBallGame bg;

//挡板的参数
private int width = 80, height = 14;
//挡板初始位置
public static int x1 = 0;

private static int y1 = 575;
          //用构造器传TanBallGame中的画布背景和画画布
public MyListener(TanBallGame bg, java.awt.Graphics g) {
this.bg = bg;
this.g = g;
}
            //重写动作事件的方法,画一个矩形
public void mouseMoved(MouseEvent e) {
//重绘
g.setColor(bg.getBackground());
g.fillRect(x1, y1, width, height);

x1 = e.getX();

g.setColor(java.awt.Color.BLACK);
g.fillRect(x1, y1, width, height);

}
}
下面是一个线程类,也是本程序的重点和难点所在,当然这只是对于初步接触java而言的,呵呵。
package tanball;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

public class Board extends Thread {
// 新建一个随机取数对象
java.util.Random ran = new java.util.Random();
// 引入画布对象
private java.awt.Graphics g;

// 定义球的初始位置以及球的大小
private int x = ran.nextInt(500), y = 100, width = 20, height = 20;

// 画板的背景

// 随机得到球的移动变量,使球随机转到一个方向
private int dx = 8, dy = 3;
private int Marks = 0;
private TanBallGame gb;
private MyListener ms;

// 用构造器对参数赋值

public Board(MyListener ms, TanBallGame gb, Graphics g) {
this.ms = ms;
this.gb = gb;
this.g = g;
}

// 球的线程
public void run() {
while (true) {

// 球在框内部运行时,
if (x >= 15 && x <= 570 && y > 60 && y < 549) {
if (x < 300 && x >= 15) {
g.setColor(java.awt.Color.RED);
g.fillOval(x, y, width, height);
x = x + dx;
y = y + dy;

try {
Thread.sleep(TanBallGame.sleeptime);
} catch (Exception ef) {
ef.printStackTrace();
}

g.setColor(gb.getBackground());
g.fillOval(x - dx, y - dy, width, height);
}
             //在此范围内小球颜色会变为深情的蓝色
if (x >= 300 && x < 400) {
g.setColor(java.awt.Color.BLUE);
g.fillOval(x, y, width, height);
x = x + dx;
y = y + dy;
try {
Thread.sleep(TanBallGame.sleeptime);
} catch (Exception ef) {
ef.printStackTrace();
}

g.setColor(gb.getBackground());
g.fillOval(x - dx, y - dy, width, height);
}
if (x >= 400 && x < 570) {
g.setColor(java.awt.Color.GREEN);
g.fillOval(x, y, width, height);
x = x + dx;
y = y + dy;

try {
Thread.sleep(TanBallGame.sleeptime);
} catch (Exception ef) {
ef.printStackTrace();}

g.setColor(gb.getBackground());
g.fillOval(x - dx, y - dy, width, height);
}



}
// 球碰到左右边界时
else if (x < 15 || x > 570) {
g.setColor(java.awt.Color.CYAN);
g.fillOval(x, y, width, height);
x = x - dx;
y = y + dy;
dx = (-dx);
try {
Thread.sleep(TanBallGame.sleeptime);
} catch (Exception ef) {
ef.printStackTrace();
}

g.setColor(gb.getBackground());
g.fillOval(x - dx, y - dy, width, height);

}// 球碰到上边界
else if (y <= 200) {
g.setColor(java.awt.Color.GREEN);
g.fillOval(x, y, width, height);
x = x + dx;
y = y - dy;
dy = (-dy);
try {
Thread.sleep(TanBallGame.sleeptime);
} catch (Exception ef) {
ef.printStackTrace();
}

g.setColor(gb.getBackground());
g.fillOval(x - dx, y - dy, width, height);

}// 球碰到滑板
else if ((x + 10) >= MyListener.x1
&& (x - 10) <= (MyListener.x1 + 80) && y >= 549) {
g.setColor(gb.getBackground());
g.fillOval(x, y, width, height);

try {
Thread.sleep(TanBallGame.sleeptime);
} catch (Exception ef) {
ef.printStackTrace();
}
x = x + dy;
y = y - dy;
dy = (-dy);
g.setColor(java.awt.Color.RED);
g.fillOval(x, y, width, height);
                 //当游戏为简单难度时每次加10分
if (TanBallGame.sleeptime == 40) {
Marks = Marks + 10;
}
//中等难度加20
if (TanBallGame.sleeptime == 20) {
Marks = Marks + 20;
}
//困难时每碰到一次挡板加40
if (TanBallGame.sleeptime == 10) {
Marks = Marks + 40;
}
}
// 球碰到下边界时
else if ((x < MyListener.x1 - 10 || x > MyListener.x1 + 90)
&& y > 549) {

JOptionPane.showMessageDialog(null, "Game over,本次得分为" + Marks
+ "分", "Game over", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);

}

}

}
}
这个类的名字没起好,大家可以自行改到自己喜欢的,以上就是本游戏所有设计过程用源码,如果朋友们有什么建议或意见敬请多多指教,在下只是一只小小菜鸟,但我相信不会是怎么飞也飞不高的那种,因为有朋友们的支持和关怀。
2
2
分享到:
评论
4 楼 1641606815 2012-07-01  
像涉及到界面之类的,如果添加图形会更好,并且让别人一眼看到你的程序结果
3 楼 flycatdeng 2011-10-31  
this.addMouseMotionListener(ms); 这一句有问题!!!老是显示错误  [img][/img]:
2 楼 flycatdeng 2011-10-31  
呀呀,原来是学长!!!
1 楼 沈冠军 2010-08-05  
呵呵,不错,特色蛮多的,加油

相关推荐

    html5弹球游戏

    在这个"html5弹球游戏"中,开发者充分利用了HTML5的核心特性,尤其是Canvas元素,来创建了一个有趣的弹球游戏。Canvas是一个基于矢量图形的画布,通过JavaScript进行编程,可以动态绘制图形、动画以及实现复杂的游戏...

    用VHDL做的桌面弹球游戏,很有趣,是学习VGA的好材料

    在这个项目中,VHDL被用来实现一个桌面弹球游戏,这是一个创新且有趣的实践,对于理解和掌握VGA(Video Graphics Array)显示系统以及FPGA(Field-Programmable Gate Array)的应用有着极大的帮助。 VGA是一种广泛...

    Android studio 小游戏,弹球小游戏

    【Android Studio小游戏:弹球小游戏】是基于Android开发平台,使用Android Studio集成开发环境创建的一款简单而有趣的休闲游戏。这个游戏通常包含一个弹球和多个障碍物,玩家通过控制挡板来反射弹球,避免弹球掉落...

    python100行代码写一个弹球游戏

    在Python编程世界里,开发游戏是一项有趣的挑战,尤其对于初学者而言。本篇文章将深入探讨如何使用Python的pgzero库创建一个经典的弹球游戏——PONG。PONG是一款简单的双人对战游戏,两个玩家各控制一个垂直移动的...

    H5弹球游戏

    【H5弹球游戏】是一种基于HTML5技术开发的在线休闲游戏,它利用了HTML5的Canvas元素、JavaScript以及可能的CSS3等技术,为玩家提供了一种无需下载...通过深入学习和实践,开发者可以创建出更多有趣且引人入胜的H5游戏。

    弹球小游戏源码

    【弹球小游戏源码】是一款基于Java编程语言开发的小型游戏项目,主要涵盖了游戏逻辑、图形界面和事件处理等核心知识点。在这个项目中,开发者利用Java的Swing库或者JavaFX库来创建用户界面,通过Java的面向对象编程...

    MFC弹球游戏(多线程编程)

    MFC弹球游戏是利用MFC框架实现的一款简单但有趣的桌面游戏,它通过多线程技术提升游戏体验,使其运行更加流畅。 在MFC中,多线程编程是一项关键技能,尤其在需要同时处理多个任务或不希望主界面因后台处理而卡顿时...

    弹球小游戏键盘操控

    开发者需要具备良好的编程技能,理解基本的物理原理,并能够将这些元素融合在一起,创造出有趣且具有挑战性的游戏体验。通过分析和理解这款游戏,我们可以更深入地了解游戏开发的复杂性和乐趣。

    linux编程_弹球游戏_bounce(有错误版本)

    在Linux编程领域,开发弹球游戏“bounce”是一项有趣且具有挑战性的实践。这个项目涉及到图形用户界面(GUI)编程,事件处理,以及多线程技术。在这个名为“bounce(有错误版本)”的项目中,我们可以看到一个弹球...

    VB制作弹球游戏-初级的首选

    【VB制作弹球游戏】是适合初级学习者入门的一个编程项目,主要利用Visual Basic(VB)这一编程语言来实现一个简单而有趣的互动游戏。VB作为微软开发的面向对象的编程工具,以其直观易懂的界面和事件驱动的编程模式,...

    用verilog写得弹珠小游戏

    在这个弹珠游戏中,我们可以定义多个模块,如控制逻辑、计分系统、显示驱动等,每个模块负责特定的功能。Verilog支持数据类型如reg、wire,以及操作符如assign、always等,这些是构建游戏逻辑的基础。 Basys2开发板...

    java弹球游戏

    Java弹球游戏是一种基于Java编程语言开发的简单但有趣的小型游戏。这个游戏通常包含一个球体,可以在屏幕上移动,碰到边界或物体时反弹。玩家通常可以通过控制一块挡板来防止球体落下屏幕。以下是关于创建Java弹球...

    java经典小游戏弹球程序

    "弹球程序"就是一个很好的例子,它展示了Java在实现简单但引人入胜的休闲游戏方面的潜力。 "打砖块"是一款经典的街机游戏,其基本玩法是控制一个板子来反弹弹球,避免球掉到底部,同时通过弹球击碎屏幕上排列的砖块...

    VB 弹球游戏课程设计

    在这个课程设计中,学生将学习如何构建一个简单但有趣的弹球游戏,游戏的核心是通过用户控制的板子反射弹球,避免球掉出屏幕。下面我们将详细探讨这个项目中的关键知识点。 1. **VB编程环境**:首先,学生需要了解...

    VC实现弹珠游戏

    在计算机编程领域,游戏开发是一项充满挑战且有趣的工作,而使用Visual C++(简称VC)作为开发工具可以创建出丰富多彩的2D游戏,如弹珠游戏。弹珠游戏,以其简单的规则和无尽的乐趣,一直是游戏爱好者们喜爱的经典...

    用vb实现小弹球游戏

    在这个项目中,我们将VB应用于创建一个简单但有趣的弹球游戏。 【描述】"根据快中慢来调整小球弹跳的速度"这一描述揭示了游戏中的动态性和可调整性。在VB中,我们可以利用时间间隔(Timer控件)和速度变量来控制...

    少儿scratch编程项目源代码文件案例素材-经典弹球游戏.zip

    6. **动画效果**:为了增强游戏的视觉效果,Scratch提供了丰富的动画指令,如“改变形状”、“改变颜色”等,可以为角色添加各种特效,让游戏更加生动有趣。 通过这个弹球游戏案例,孩子们不仅可以掌握Scratch的...

    python弹球小游戏

    这个小程序是一个使用 tkinter 编写的弹球小游戏,采用了经典的弹球游戏设计。玩家可以通过控制板拍弹球,使其不断弹跳...这个小游戏采用了简单的图形界面,是一个有趣的练手项目,适合初学者学习基本的游戏开发概念。

    PYTHON 游戏:六边形弹球游戏(基于pygame的弹球生存游戏)

    在本项目中,我们探索的是一个基于Python编程语言和Pygame库开发的六边形弹球游戏——"Hex Dash"。Pygame是Python的一个模块,专门...这样的游戏项目是学习和实践编程技能的好方式,不仅有趣,还能锻炼解决问题的能力。

    c++编程之弹球游戏

    在C++编程中,开发一款弹球游戏是一个有趣且实用的学习项目,它涵盖了基础的图形绘制、物理模拟、事件处理等多个重要概念。本资源提供的"弹球游戏"出自《windows游戏编程大师》,对于想要深入理解C++游戏开发的初学...

Global site tag (gtag.js) - Google Analytics