java游戏课程设计报告_201621123065《JAVA课程设计报告》

本文档详述了一个使用Java编写的猜数字游戏的设计与实现。游戏规则是玩家在1到100之间猜一个随机数,系统提供大小提示,记录猜测次数和时间,并将结果保存到文件。游戏界面采用图形化,支持多轮游戏,每轮结束后自动进入下一轮。
摘要由CSDN通过智能技术生成

一、需求分析

1.玩家输入一个数字,数字的范围在1~100之间,系统自动随机获取。

2.对玩家输入的数字进行判断大小,如果不是正确答案,则系统给出或大或小提示,用户继续进行猜测。

3.玩家猜中时系统对于所猜次数给出不同的评语,并把猜测过程所用时间记录于一个文本中。

4.每次猜测系统自动统计猜测次数并显示。

5.猜中后可自动进行下一轮游戏。

二、课题及本人任务

课题:猜数游戏

本人任务:整个程序

三、总体设计

游戏随机给出一个1~100(包括100)之间的数字,然后用户猜测是什么数字。用户可以随便猜测一个数字,游戏会提示太大还是太小,从而缩小范围。经过几次猜测与提示后,最终推出答案。(系统设计如下图)

游戏界面:采用图形界面显示。

游戏开始后,由计算机产生一个1~100的随机数。用户只需输入所猜想的数字,打印在输入框内,按Enter键表示确定,游戏返回提示语句并清空输入框,直到游戏结束。同时计算机计算猜测次数并显示,计算游戏时间并存入一个文档。可以通过按窗体关闭符直接结束游戏。

四、主要功能展示与代码分析

功能展示:

初始界面:

c758a67391f81efc3e73ee6b335bcef8.png

输入一个数字后:系统给出提示并清空输入框

743f0cc2d5323361ae5cbe810601d947.png

ac7120127ebc791f955255b7510871d3.png

猜对后给出评语:

09c929e5b357650c2705ce3d539b71b5.png

继续则进行下一轮游戏:

d8c14b2293a772a4cd6afa321dae91ff.png

用于存储猜测时间的文件:

c54c04a439cb9bb4711429239b868816.png

该文件存储游戏时间(毫秒):

c8db6c4270aa147491b7b64098169e0f.png

代码分析:

package KESHE;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Writer;

import java.awt.BorderLayout;

import static java.awt.BorderLayout.*;

public class Finish extends JFrame {

int number,random,counter; //猜的数,答案,次数

long time;//时间

JLabel welcomeJLabel;//定义一个组件

JLabel hintJLabel; //提示显示框

JTextField guessField; //输入框

JPanel panel;//显示背景色

public Finish() { //布局

super("猜数字"); //窗体名

panel=new JPanel();

panel.setBackground(Color.PINK); //定义背景色

welcomeJLabel= new JLabel("已随机生成一个1到100的整数,来猜猜看吧");

add(welcomeJLabel,NORTH);

guessField=new JTextField(25); //容乃字符长度

panel.add(guessField);

add(panel); //默认添加到中间

hintJLabel= new JLabel(""); //初始换提示框

add(hintJLabel,SOUTH);

TextFieldHandler handler=new TextFieldHandler();

guessField.addActionListener(handler); //监听

random=(int)(1+100*Math.random()); //产生随机数

}

long begintime=System.currentTimeMillis();//开始计时

private class TextFieldHandler implements ActionListener {

public void actionPerformed (ActionEvent event) {

while(true){

number=Integer.parseInt(guessField.getText()); //获取猜测的数值

while(number!=random) {

number=Integer.parseInt(guessField.getText());

if(number>random) {

hintJLabel.setText("猜高了,再试试吧。已试错"+(++counter)+"次");

guessField.setText(""); //置空输入框

}

else{

hintJLabel.setText("猜低了,请继续!已试错"+(++counter)+"次");

guessField.setText("");

}

}

long endtime=System.currentTimeMillis();//结束计时

time=endtime-begintime;//总时间

//猜中后的用户提示

File f= new File("d:" + File.separator + "课设测试") ;//新建一个文件夹

Writer out = null ;

try {

String con=String.valueOf(time);//把time转换成字符串

con+="\r\n";//换行

out = new FileWriter(f,true);

out.write(con) ;// 将内容输出,保存文件

out.close() ;// 关闭文件

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if (counter<3)

JOptionPane.showMessageDialog(null, "恭喜您,猜中了,真厉害!");

else if (counter==6)

JOptionPane.showMessageDialog(null, "终于猜中了!");

else

JOptionPane.showMessageDialog(null, "您终于猜中了╮(╯▽╰)╭,您其实可以做得更好的!");

//开始下一轮猜数字游戏前的初始化工作

guessField.setText("");

random=(int)(1+100*Math.random());

counter=0;

}

}

}

public static void main(String[] args)

{

Finish f = new Finish(); // create ListFrame

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setSize(400,300);

f.setVisible(true);

}

}

五、测试与改进

把背景色改成了粉色

对于每次猜测给出提示和已经猜的次数,用户体验比较直观

一次游戏结束之后可以直接进行下一轮,无需再重新启动程序

生成jar文件,更方便使用。

六、附录

源代码:

package KESHE;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Writer;

import java.awt.BorderLayout;

import static java.awt.BorderLayout.*;

public class Finish extends JFrame {

int number,random,counter; //猜的数,答案,次数

long time;//时间

JLabel welcomeJLabel;//定义一个组件

JLabel hintJLabel; //提示显示框

JTextField guessField; //输入框

JPanel panel;//显示背景色

public Finish() { //布局

super("猜数字"); //窗体名

panel=new JPanel();

panel.setBackground(Color.PINK); //定义背景色

welcomeJLabel= new JLabel("已随机生成一个1到100的整数,来猜猜看吧");

add(welcomeJLabel,NORTH);

guessField=new JTextField(25); //容乃字符长度

panel.add(guessField);

add(panel); //默认添加到中间

hintJLabel= new JLabel(""); //初始换提示框

add(hintJLabel,SOUTH);

TextFieldHandler handler=new TextFieldHandler();

guessField.addActionListener(handler); //监听

random=(int)(1+100*Math.random()); //产生随机数

}

long begintime=System.currentTimeMillis();//开始计时

private class TextFieldHandler implements ActionListener {

public void actionPerformed (ActionEvent event) {

while(true){

number=Integer.parseInt(guessField.getText()); //获取猜测的数值

while(number!=random) {

number=Integer.parseInt(guessField.getText());

if(number>random) {

hintJLabel.setText("猜高了,再试试吧。已试错"+(++counter)+"次");

guessField.setText(""); //置空输入框

}

else{

hintJLabel.setText("猜低了,请继续!已试错"+(++counter)+"次");

guessField.setText("");

}

}

long endtime=System.currentTimeMillis();//结束计时

time=endtime-begintime;//总时间

//猜中后的用户提示

File f= new File("d:" + File.separator + "课设测试") ;//新建一个文件夹

Writer out = null ;

try {

String con=String.valueOf(time);//把time转换成字符串

con+="\r\n";//换行

out = new FileWriter(f,true);

out.write(con) ;// 将内容输出,保存文件

out.close() ;// 关闭文件

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if (counter<3)

JOptionPane.showMessageDialog(null, "恭喜您,猜中了,真厉害!");

else if (counter==6)

JOptionPane.showMessageDialog(null, "终于猜中了!");

else

JOptionPane.showMessageDialog(null, "您终于猜中了╮(╯▽╰)╭,您其实可以做得更好的!");

//开始下一轮猜数字游戏前的初始化工作

guessField.setText("");

random=(int)(1+100*Math.random());

counter=0;

}

}

}

public static void main(String[] args)

{

Finish f = new Finish(); // create ListFrame

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setSize(400,300);

f.setVisible(true);

}

}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值