java实现一个桌球小游戏

本文实例为大家分享了java实现桌球小游戏的具体代码,供大家参考,具体内容如下

在ecplise中新建一个JAVA项目

建立四个class分别对应游戏登陆界面,游戏界面,数据库操作,和一个开始类

代码如下

游戏类:

package 弹球游戏;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import javax.swing.JTextPane;
import javax.swing.Timer;

/*----------------游戏界面,弹球游戏------------------*/
public class Game {
  private final int FRAME_X =500;
  private final int FRAME_Y =450;
  private final int FRAME_WIDTH =500;
  private final int FRAME_HIGH =500;
  private final int TABLE_WIDTH = 100;     //板子宽度
  private final int TABLE_HIGH =20 ;     //板子高度
  private final int BALL_SIZE =20;      //球的大小
  Random rand = new Random();
  private int TABLE_X=rand.nextInt(200);   //板子的坐标
  private int TABLE_Y=400;
  private int BALL_X=10;           //小球的横坐标
  private int BALL_Y=10;            //小球的纵坐标
  private int SPEED = 10;           //小球横向速度
  Frame f = new Frame("弹球游戏");
  private Mycanvas draw = new Mycanvas();
  private boolean is_X = true;      //为true的时候横坐标+
  private boolean is_Y = true;      //为true的时候纵坐标+
  private int score =0;          //游戏的得分
  private Panel p = new Panel();
  private JTextPane tex = new JTextPane();  //排行榜显示
  //定义键盘监听器
  KeyAdapter keyProcessor = new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
      if(e.getKeyCode()==KeyEvent.VK_LEFT&&TABLE_X>0) {
        TABLE_X -=10;
      }
      if(e.getKeyCode()==KeyEvent.VK_RIGHT&&TABLE_X<370){
        TABLE_X +=10;
      }
      if(e.getKeyCode()==KeyEvent.VK_UP&&TABLE_Y>0) {
        TABLE_Y -=10;
      }
      if(e.getKeyCode()==KeyEvent.VK_DOWN&&TABLE_Y<430) {
        TABLE_Y +=10;
      }
    }
  };
  //定义事件监听器

  ActionListener task = new ActionListener (){
     public void actionPerformed(ActionEvent e) {

       if(BALL_X>FRAME_X||BALL_Y>FRAME_Y&&BALL_Y>TABLE_Y-15) {

         try {
          DataBaseLoding d = new DataBaseLoding();
          d.initParam("mysql.ini");
          d.insertScore(score);
        } catch (Exception e1) {
          e1.printStackTrace();
        }

         System.out.println("结束了");
         timer.stop();
       }
       if(is_X) {
         BALL_X +=10;
       }else {
         BALL_X -=10;
       }
       if(BALL_X>440){
        is_X=false;
       }
       if(BALL_X<10) {
         is_X=true;

       }

       if(BALL_Y<0) {
         is_Y =true;
       }
       if(is_Y) {
         BALL_Y+=10;

       }else {
         BALL_Y-=10;
       }

       if(BALL_Y==TABLE_Y-10&&BALL_X>TABLE_X&&BALL_X<TABLE_X+100) {
         is_Y=false;
       }
       score++;
      draw.repaint();
     }
  };
  Timer timer = new Timer(100,task);
  public void text() {
    Font f = new Font("排行榜的字体",Font.ITALIC,25);
    tex.setFont(f);
    String first ="名次"+"\t"+"\t"+"分数"+"\r";
    try {
      DataBaseLoding d = new DataBaseLoding();
      d.initParam("mysql.ini");
      first +=d.select();
    } catch (Exception e1) {
      e1.printStackTrace();
    }
    tex.setText(first);
    p.add(tex);
  }
  public void init() {
    f.add(draw);
    text();
    f.add(p, BorderLayout.EAST);
    //长800,高500
    f.setBounds(FRAME_X, FRAME_Y, FRAME_WIDTH+350, FRAME_HIGH);
    //关闭窗口
    f.addWindowListener(new WindowAdapter() {                  //添加窗口监听器
      public void windowClosing(WindowEvent e) {
        try {
          DataBaseLoding d = new DataBaseLoding();
          d.initParam("mysql.ini");
          d.insertScore(score);
        } catch (Exception e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
        System.exit(0);
      }
    });
    f.addKeyListener(keyProcessor);                       //添加键盘监听器
    draw.addKeyListener(keyProcessor);
    //画布长500,高500
    draw.setPreferredSize(new Dimension(FRAME_WIDTH,FRAME_HIGH));
    timer.start();
    f.setVisible(true);
  }
  class Mycanvas extends Canvas{
    public void paint(Graphics g) {
      g.setColor(new Color(0, 0, 0));
      g.drawLine(0, FRAME_Y, FRAME_X-20, FRAME_Y);
      g.drawLine(FRAME_X-25, 0, FRAME_X-25, FRAME_Y);
      g.drawLine(0, 0, 0, FRAME_Y);
      g.setColor(new Color(0,0,0));
      g.fillRect(TABLE_X,TABLE_Y , TABLE_WIDTH, TABLE_HIGH);
      g.setColor(new Color(255,175,175));
      g.fillRect(BALL_X, BALL_Y, BALL_SIZE, BALL_SIZE);
      Font font = new Font("分数",10,20);
      g.setFont(font);
      g.drawString("分数:"+score, 380, 20);
    }
  }
}

登陆类:输入一个名字,成功后就直接开始游戏

package 弹球游戏;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/*-----------------登陆界面,输入名字--------------------*/
public class Langding {
  private final int FRAME_X =500;
  private final int FRAME_Y =450;
  private final int FRAME_WIDTH =500;
  private final int FRAME_HIGH =500;
  private JFrame f;
  private JButton ok;
  private JPanel p;
  private TextField name;
  private TextField pass;
  private Game g;
  private int score=0;
  /*-------------暂时还没用到这个*/
  //private String PASS_WORD ="";
  private String NAME_WORD ="";

  public void init() throws Exception {
    f = new JFrame("登陆窗口");
    p = new JPanel() {
      protected void paintComponent(Graphics g) {
      ImageIcon icon = new ImageIcon("lib/01.png");
      Image img = icon.getImage();
      Image img1 = img.getScaledInstance(FRAME_WIDTH+300, FRAME_HIGH,Image.SCALE_DEFAULT);
      icon.setImage(img1);
      g.drawImage(img, 0, 0, icon.getIconWidth(),
      icon.getIconHeight(), icon.getImageObserver());
      }
     };
    f.add(p);
    ok = new JButton("登陆");
    name = new TextField(20);
    //pass = new TextField(20);
    p.add(name);
    //p.add(pass);
    ok.setPreferredSize(new Dimension(100, 100));
    p.add(ok);
    //点击按钮的事件
    Action go = new AbstractAction() {
      public void actionPerformed(ActionEvent e) {
      DataBaseLoding d = new DataBaseLoding();
        try {
          //获得输入的名字
          NAME_WORD = name.getText();
          //将名字导入到数据库
          d.initParam("mysql.ini");
          d.insertName(NAME_WORD);
        } catch (Exception e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
        System.out.println("玩家名字是"+name.getText());
        //游戏开始
        g = new Game();
        g.init();
      }
    };
    ok.addActionListener(go);
    f.setBounds(FRAME_X, FRAME_Y, FRAME_WIDTH+300, FRAME_HIGH);
    f.add(p);
    f.setVisible(true);
  }

  public static void main(String[] args) throws Exception {
    Langding l = new Langding();
    l.init();
  }
}

数据库操作类:包含两个方法,插入名字和修改分数,用的数据库分数默认是-1

package 弹球游戏;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

/*------------------------ 数据库的连接和插入名字,修改分数的方法--------------------------------------*/
public class DataBaseLoding {
  private String driver;
  private String url;
  private String user;
  private String pass;
  //登陆数据库
  public void initParam(String paramFile) throws Exception {
    Properties props = new Properties();
    props.load(new FileInputStream(paramFile));
    driver = props.getProperty("driver");
    url = props.getProperty("url");
    user = props.getProperty("user");
    pass = props.getProperty("pass");
  }
  //将名字插入到数据库中
  public int insertName(String Name) throws Exception {
    Class.forName(driver);
    String sql ="insert into 弹球游戏(name) values("+"'"+Name+"'"+")"+";";
    try (
      Connection conn =DriverManager.getConnection(url,user,pass);
      Statement stmt =conn.createStatement();
      )
    {
      System.out.println(Name);
      return stmt.executeUpdate(sql);
    }
  }
  //把score插到主键为name的那一行
  public int insertScore(int Score) throws Exception {
      Class.forName(driver);
      String sql ="update 弹球游戏 set score ="+Score

            +" where score = -1"+";";
      try (
        Connection conn =DriverManager.getConnection(url,user,pass);
        Statement stmt =conn.createStatement();
        )
      {
        System.out.println(Score);
        return stmt.executeUpdate(sql);
      }
    }
  public String select() throws Exception{
    Class.forName(driver);
    String sql ="select * from 弹球游戏 ORDER BY score DESC ;";
    String result ="";
    try (
        Connection conn =DriverManager.getConnection(url,user,pass);
        Statement stmt =conn.createStatement();
        ResultSet rs =stmt.executeQuery(sql);
        )
      {
        int i=1;
        while(rs.next()) {
          result +="第"+i+"名"+ rs.getString(1)+"\t"+"\t"+rs.getInt(2)+"\r";
          i++;
          if(i==11) {
            break;
          }
        }
        return result;
      }
  }
}

主类:

package 弹球游戏;
public class Begain {
  public static void main(String[] args) throws Exception {
    Langding l = new Langding();
    l.init()package 弹球游戏;

  }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 解析Java中的定时器及使用定时器制作弹弹球游戏的示例

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. 一.简介       在java中一个完整定时任务需要由Timer.TimerTask两个类来配合完成. API中是这样定义他们的,Timer:一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.由TimerTask:Timer 安排为一次执行或重复执行的任务.

  • java实现简单的弹球游戏

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

  • Java实现简单台球游戏

    Java实现简单台球桌问题,供大家参考,具体内容如下 需求: 使小球可以在桌面上移动,移动到桌面边缘将被弹回,显示小区的移动 素材: 小球照片 桌球照片 程序源代码: package 桌球游戏; import java.awt.*; import javax.swing.*; public class BallGame extends JFrame { Image ball=Toolkit.getDefaultToolkit().getImage("image/ball.png");

  • java桌球小游戏 小球任意角度碰撞

    本文实例为大家分享了java桌球小游戏的具体代码,供大家参考,具体内容如下 import javax.swing.*; import java.awt.*; public class BallGame extends JFrame { /** *继承swing里面的窗口类 */ //加载图片 Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.jpg.png");/*得到系统默认的工具包*/ Image desk

  • java实战之桌球小游戏

    本文实例为大家分享了java桌球小游戏的具体代码,供大家参考,具体内容如下 源码: import java.awt.*; import javax.swing.*; public class BallGame2 extends JFrame{ Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png"); Image desk = Toolkit.getDefaultToolkit().getImage(&qu

  • Java基于swing实现的弹球游戏代码

    本文实例讲述了Java基于swing实现的弹球游戏代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: package Game; import java.awt.Graphics; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Random;

  • java实现桌球小游戏

    本文实例为大家分享了java实现桌球小游戏的具体代码,供大家参考,具体内容如下 桌球小游戏 两张图片放在src的同级目录下 版本一.出现窗口 package cn.xjion.game; /** * 出现窗口 * @author xjion * */ import java.awt.*; import javax.swing.*; //继承窗口类 public class BallGame extends JFrame{ // 窗口加载的方法 void launchFrame(){ // 窗口的

  • java实现一个桌球小游戏

    本文实例为大家分享了java实现桌球小游戏的具体代码,供大家参考,具体内容如下 在ecplise中新建一个JAVA项目 建立四个class分别对应游戏登陆界面,游戏界面,数据库操作,和一个开始类 代码如下 游戏类: package 弹球游戏; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; im

  • Java基于面向对象实现一个战士小游戏

    目录 一.思路 二.代码实现 设计一个游戏系统,在该系统当中拥有战士 Soldier 角色:,每个角色拥有自己的名字 name .等级 level.生命力 hp ,攻击力 atk.防御力 def:,战士都有普通攻击行为 attack,其实现为根据自己的攻击力减去 被攻击对象的防御力 从而得到对方的失血量:,请设计这个系统中有哪些类,分别有什么属性和行为,有什么关联关系,并在main方法中调用查看效果. 一.思路 首先,我们知道在系统中有个战士的角色叫Soldier,Soldier角色拥有自己的名

  • Java完美实现2048小游戏

    完美地模仿了2048游戏,是根据网友的一个2048改的. Block.java import javax.swing.*; import java.awt.*; public class Block extends JLabel { private int value; public Block() { value = 0;//初始化值为0 setFont(new Font("font", Font.PLAIN, 40));//设定字体 setBackground(Color.gray

  • Java实现打飞机小游戏(附完整源码)

    写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐.代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习. 效果如下 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy

  • java实现数字猜拳小游戏

    本文编写一个java数字猜拳的小游戏,具体实现很简单 package guenum; import java.util.ArrayList; import java.util.Scanner; public class Demo { // private static Object list; public static void main(String ad[]) { System.out.println("-------------------------------------小游戏---

  • Java实现的打地鼠小游戏完整示例【附源码下载】

    本文实例讲述了Java实现的打地鼠小游戏.分享给大家供大家参考,具体如下: 这里涉及到java线程和GUI的相关知识,一个简单的java小游戏打地鼠,有兴趣的朋友可以优化一下.先来看看运行效果: 具体代码: Mouse.java: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt

  • Java实现猜字小游戏

    猜字游戏是一款益智游戏,喜欢玩具有挑战性单词游戏的你就可以来体验一下了,给你一个字母板.尝试通过想象相邻字母的单词.您将获得一个分数,根据您使用的字母,你已经使用了多少个字母,并以这些字母相关联的任何修饰符都可以的. 具体代码如下所示: package test07; import java.util.Scanner; //猜字符游戏 public class Guessing { //主方法 public static void main(String[] args) { Scanner sc

随机推荐