Java小游戏-猜数字

 

随着现代科学技术的持续发展,互联网与计算机等技术被广泛应用到人们的日常生活、工作中。智能化技术的的发展推动了相应软件的开发,软件开发编程语言种类众多,其中使用范围比较广泛的是Java编程语言,为此,以Java编程语言为例,分析了其在计算机软件中的开发应用

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承指针等概念,因此Java语言具有功能强大和简单易用两个特征。  

Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式健壮性安全性、平台独立与可移植性、多线程、动态性等特点Java可以编写桌面应用程序Web应用程序分布式系统嵌入式系统应用程序等。

本文采用Java语言实现了一个猜数字小游戏此款游戏中用户进行猜数字游戏,系统根据用户键入的数值进行判断并给出判断是大了还是小了,猜对即提示用户,键入的数值不符合要求系统也会给于提示。最后给出随机数值及猜数所用次数和时间。

连接数据库可查看用户猜题信息。

关键词  Java编程语言 软件开发 猜数游戏 数据库

第一章 概述

1.1 引言 

猜数游戏是Java语言学习过程中常见的小游戏,其可以锻炼Java初学者的编程思维,增强动手能力,包含Java知识中的输入输出语句、随机函数、循环语句again、判断选择语句if、多种运算符、类和对象的创建、类的方法及构造方法、和接口及继承。

1.1.1Java特点

1、Java语言是简单的,Java语言的语法与c语言和c++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别的,Java语言不使用指针,并提供了自动的废料收集,使程序员不必为内存管理而担忧。

2、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。

3、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以放恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制,如分配不同的名字空间以防代替本地的同名类、字节代码检查,并提供安全管理机制让Java应用设置安全哨兵。

4、Java语言是体系结构中立的。Java程序在Java平台上被编译为体系结构中立的字节代码格式,然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的开发。

5、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java海洋人规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的。

6、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在连接阶段被载入到运行环境中。

1.1.2Java平台介绍

    J2SE:称为Java标准版或Java标准平台,J2SE提供了标准的SDK开发平台。利用该平台乐意开发Java桌面应用程序和低端的服务器应用程序。

J2ME是Java 2的一个组成部分,它与J2SEJ2EE并称。根据Sun的定义:J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒汽车导航系统等等。J2ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。

J2EE:一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。

1.2 系统目标

计算机产生随机数,用户需输入用户名进行游戏,猜中即胜,猜不中会提示猜大了还是猜小了,继续踩,直至猜到,给出所用时间和次数。连接数据库可查看历史游戏记录。

猜数游戏程序总体设计

2.1 功能设计

    计算机产生随机数,用户可以用户名进行游戏,猜中即胜,猜不中会提示猜大了还是猜小了,继续猜,直至猜到,给出所用时间和次数。

2.2 系统功能设计

2.2.1用户名功能

用户可以输入名字进行游戏。

详细代码:JLabel label2 = new JLabel("请输入你的名字");

label2.setFont(new Font("华彩文云",Font.BOLD,16));

label2.setBounds(41,13,119,15);

contentPane.add(label2);

2.2.2排行榜功能

点击界面上的排行榜按钮,可以查看历史游戏记录。

详细代码:JButton button_2 = new JButton("排行榜");

button_2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

Table t = new Table();

t.show();

}

});//添加监听事件,点出排行榜界面

2.2.3游戏功能

     

    游戏中会提示用户猜数字的次数和游戏进行时间。

   

章 详细设计

3.1开发工具的选用及其介绍

IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构JavaEE支持、各类版本工具(gitsvn等)、JUnitCVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 

3.2 详细模块设计

3.2.1图形化界面的显示

创建图形界面的步骤

  1. 导入Swing包
  2. 选择界面风格
  3. 设置顶层容器
  4. 设置标签和按钮
  5. 将组件放到容器上
  6. 为组件增加边框
  7. 处理事件
  8. 辅组技术支持

3.2.2界面设计

本程序包含一个操作界面,它是由Swing组件进行编写的。Swing实在AWT的基础上构建的一套新的图形界面系统,它提供了AWT所能提供的所有功能,并且用纯粹的Java代码对AWT功能进行了大幅度的扩充。Swing是基于AWT的Java程序,其运行速度比AWT慢,但其功能要比AWT强大的多,而且在基于普通PC或者工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所以我决定使用Swing编写本程序,以牺牲比AWT慢的可以忽略不计的速度来实现程序的功能。

程序源码

Guess.java

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;


public class Guess extends JFrame{
	private JPanel contentPane;
	private JTextField textField;
	private int number=0;
	private int guessNum=0;
	int count=0;
	long startTime=0;
	long endTime=0;
	int time;
	private JTextField textField_1;
	public static void main (String args[]) {
		Guess frame = new Guess();
		frame.setVisible(true);//显示图形化界面
	}
	public Guess() {
		setTitle("猜数游戏");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100,100,450,300);
		contentPane = new JPanel();
		contentPane.setBackground(Color.ORANGE);
		contentPane.setBorder(new EmptyBorder(5,5,5,5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		textField = new JTextField();
		textField.setBounds(170,45,83,27);
		contentPane.add(textField);
		textField.setColumns(10);
		 
		JButton button = new JButton("猜");
		button.setForeground(Color.BLACK);
		button.setFont(new Font("幼圆",Font.BOLD,20));
		button.setBounds(157,82,108,59);
		contentPane.add(button);
		
		JLabel label = new JLabel("请输入所猜数字");
		label.setFont(new Font("华彩文云",Font.BOLD,16));
		label.setBounds(41,51,119,15);
		contentPane.add(label);
		
		JLabel label1 = new JLabel("");
		label1.setFont(new Font("华彩文云",Font.BOLD,16));
		label1.setBounds(69,151,355,53);
		contentPane.add(label1);
		
		JLabel label2 = new JLabel("请输入你的名字");
		label2.setFont(new Font("华彩文云",Font.BOLD,16));
		label2.setBounds(41,13,119,15);
		contentPane.add(label2);
		
		textField_1 = new JTextField();
		textField_1.setBounds(170,7,83,27);
		contentPane.add(textField_1);
		textField_1.setColumns(10);
		
		JLabel label3 = new JLabel("");
		label3.setFont(new Font("华彩文云",Font.BOLD,16));
		label3.setBounds(142,214,144,37);
		contentPane.add(label3);
		
		JButton button_1 = new JButton("重新开始");
		button_1.setBounds(341,238,93,23);
		contentPane.add(button_1);
		
		JButton button_2 = new JButton("排行榜");
		button_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Table t = new Table();
				t.show();
			}
		});
		button_2.setBounds(341,0,93,23);
		contentPane.add(button_2);

		
		Random random = new Random();//产生随机数
		startTime=System.currentTimeMillis();
		number = random.nextInt(100);
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				guessNum = Integer.parseInt(textField.getText());
				String name = textField_1.getText();
				
				if(guessNum<=100&&guessNum>=0) {
					if(guessNum>number) {
						textField.setText("");
						label1.setText(name+"猜的有点大啦");
						count++;
					}
					if(guessNum<number) {
						textField.setText("");
						label1.setText(name+"猜的有点小啦");
						count++;
					}
					if(guessNum == number) {
						textField.setText("");
						count++;
						endTime = System.currentTimeMillis();
						time = (int)(endTime-startTime)/1000;
						label1.setText(name+"猜对啦!你一共猜了"+count+"次!");
						label3.setText("用时:"+time+"秒");
						
						try {
							Class.forName("com.mysql.jdbc.Driver");
							String ur1 = "jdbc:mysql://localhost:3306/keshe";
							String user = "root";
							String password = "123456";
							Connection conn = DriverManager.getConnection(ur1,user,password);
							Statement stmt = conn.createStatement();
							String sql = "insert into keshe.guessnum(name,count,time)values('"+name+"','"+count+"','"+time+"')";
							int count = stmt.executeUpdate(sql);
						}catch (ClassNotFoundException e1) {
							e1.printStackTrace();
						}catch (SQLException e1) {
							e1.printStackTrace();
						}
					}
				}else {
					textField.setText("");
					label1.setText("输入的值不合法!请重新输入");
				}
			}
		});
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				number = random.nextInt(100);
				textField.setText("");
				label1.setText("");
				label3.setText("");
				count=0;
				startTime = System.currentTimeMillis();
			}
		});
	}
}

Table.java

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import java.awt.BorderLayout;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Table extends JFrame{
	public void show() {
		JPanel panel;
		JFrame frame=new JFrame("排行榜");
		frame.getContentPane().setLayout(new BorderLayout());
		panel = new JPanel();
		frame.getContentPane().add(panel,BorderLayout.CENTER);
		panel.setLayout(null);
		int count=0;
		Object[][]rowDate=new Object[100][3];
		String[] head = {"名字","所猜次数","时间"};
		JTable table = new JTable(rowDate,head);
		JScrollPane sp = new JScrollPane(table);
		frame.add(sp);
		frame.setSize(400,300);
		frame.setLocation(150,100);
		frame.setVisible(true);
		Connection con;
		String driver = "com.mysql.jdbc.Driver";
		String ur1 = "jdbc:mysql://localhost:3306/keshe";
		String user = "root";
		String password = "123456";
		try {
			Class.forName(driver);
			con = (Connection)DriverManager.getConnection(ur1,user,password);
			if(!con.isClosed())
			System.out.println("Succeeded connection to the Datebase!");
			Statement statement = (Statement)con.createStatement();
			String sql = "select * from keshe.guessnum order by time";
			ResultSet rs = statement.executeQuery(sql);
			while(rs.next()) {
			rowDate[count][0]=rs.getString("name");
			rowDate[count][1]=rs.getInt("count");
			rowDate[count][2]=rs.getInt("time");
			count++;
			};
			rs.close();
			con.close();
		    }catch(ClassNotFoundException e) {
		    	e.printStackTrace();
		    }catch(SQLException e) {
		    	e.printStackTrace();
		    }catch(Exception e) {
		    	e.printStackTrace();
		    }
	}
 
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X-MTing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值