基于java的猜拳小游戏设计-毕设论文

基于java的猜拳小游戏设计-毕设论文
基于java的猜拳小游戏设计-毕设论文

目录

绪论............................................... 错误!未定义书签。

一、背景与意义..................................... 错误!未定义书签。

二、设计原理与方案................................. 错误!未定义书签。

一)方案....................................... 错误!未定义书签。

二)设计思路................................... 错误!未定义书签。

三)系统分析................................... 错误!未定义书签。

四)程序概要设计............................... 错误!未定义书签。

五)工作流程图................................ 错误!未定义书签。

六)程序框图.................................. 错误!未定义书签。

七)程序中所用类说明.......................... 错误!未定义书签。

八)程序运行效果及存在的问题................... 错误!未定义书签。

三、项目实现....................................... 错误!未定义书签。

一)程序用到的类库简介......................... 错误!未定义书签。

二)游戏主程序设计............................. 错误!未定义书签。

三)主界面PigPanel类......................... 错误!未定义书签。

四)具体实现.................................. 错误!未定义书签。

四、运行结果....................................... 错误!未定义书签。

一)结果截图................................... 错误!未定义书签。

二)系统在调度中经常出现的问题................. 错误!未定义书签。

五、心得........................................... 错误!未定义书签。

六、总结语......................................... 错误!未定义书签。

七、参考文献 (19)

绪论:

面向对象(OOP)的程序设计认为:现实世界是由一组彼此相关并互通信息的实体——对象(Object)组成的。不管是一所学校、一个班级;一辆汽车、一张桌子;还是一个窗体、一个按钮,都可视作对象。一个对象包含两部分内容:描述对象状态的数据和描述对象行为或功能(方法)的编码。数据和编码紧密结合,共同构成一个对象。面向对象的程序设计有三大特性:封装性、继承性和多态性。

计算机技术的应用正在朝着网络化的方向阔步前进,万维网成为世界上最大的信息中心。但目前外围网上的内容仍多为文本、图像、声音等静态信息,Java为其提供了简便并且功能强大的编程接口,开发人员利用这些编程接口可以向Web 增加动态性、交互性内容,这使得Web页面翻开了新的一页。

Java是一种跨平台的面向对象的语言,这就允许开发人员生成独立于平台的应用程序,用Java编写的程序可以在许多硬件平台上运行而不需要重新编译。Java具有很多优点:简单、面向对象、可移植、与硬件无关、强健安全、具有很高的性能,此外还对多线程、动态性提供了支持。

Java采用面向对象技术,所有的Java程序都是对象,通过封装性实现了模块化和信息隐藏,通过继承性实现了代码的复用,使得用户可以根据自己的需要创建自己的类库。

Java最强大的是网络方面的应用,本课程设计不涉及网络方面的应用。

一、背景与意义

游戏是全球最大的娱乐经济项目之一,已经被命名为“第九艺术”。而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,已成为了一系列专门的岗位。虽然说中国的游戏行业开始逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏又直接制约着行业的发展,这就更加严格了对社会培训机构的稳定性和正规性的要求。在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,来满足社会对游戏人才的需求。

通过Java程序设计的一些重要理论基础来实现“人机猜拳小游戏”的功能。通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果,逐步建立正确的全局观念。通过本次程序设计,我掌握了Java语言的基本运用,提高了理论结合实际能力。

二、设计原理及方案

程序总体介绍和设计要求程序使用J2SE语言编写,使用标准JDK平台编译和运行。程序使用已创建的PairOfDice类,设计并实现一个类来玩游戏。根据游戏规则玩家将和电脑进行比赛。创建小游戏,实现电脑与玩家之间互动猜拳这主要功能,通过按钮的方式,与电脑进行猜拳游戏,电脑随机出拳并能显示设置的图片,增加美观。

一)方案:

1)界面的左侧是电脑或者玩家的名字,让界面看起来一目了然。

2)系统界面的中间是电脑或者玩家出拳的图片。图片可以生动形象得表示出电脑或者玩家出的拳,显示的图片在对话框中也相得益彰。在图片的下方会显示,人机猜拳以后的输赢。

3)界面的右侧是三个剪刀石头布的按钮。玩家通过按钮出拳,电脑随机出拳,猜拳的输赢结果在下方显示。

二)设计思路:

在设计游戏时,我们要充分考虑到剪刀石头布游戏的特性,以及多种技术的实现:

⑴构造创建服务器端和客户端

⑵创建输入输出流

⑶编写服务器端处理数据的线程方法

⑷绘制游戏界面

⑸绘制界面上的提示

采用此方法设计使程序简洁明了,使绘制游戏界面时简单化,更加易于游戏的实现,程序也更易于读懂。

如java中得到输入输出流的方法:

//调用客户端的getInputStream()方法

Inputs=newBufferedReader(new

InputStreamReader(client.getInputStream()));

通过调用此方法获取从服务器得到的数据

调用客户端的getOutputStream()方法,通过此方法把客户端的数据传输给服务器。

三)系统分析

Java程序编辑器是:图形界面、线程、流与文件等技术的综合应用。

图形界面的实现:考虑到简单、实用、高效等特点,就选择了AWT来完成实现,在选择组件上,文本编辑区就选用了TaxtArea作为主要的部件。

线程实现文件自动保存:在相关的参考书上查阅到在Time类中有一个schedule方法可以在后台自动完成一定的功能,而且调用起来相当简单,于是就用了Time类中的schedule方法来实现文件自动保存及备份功能。

文件操作的实现:利用了字符文件流FileReader和FileWriter类来实现。

由于Java的特性,可能用任何一个编辑器来编辑,于是就将Windows中的记事本作为模仿对象,根据实现情况删减了其中的一些功能,如自动换行,设置字体,打印等功能。

在设计类的时候,考虑到简单明了,就用了两个类,一个主类和一个默认属性类作为程序的整体框架,所有的对象和方法都是在默认属性类中创建和实现的,以及为各组件注册事件监听程序也是在默认属性类中实现的。主类完成对象

的实例化及显示。这们设计的优点是:条理清晰,容易理解,容易修改。这样设计的缺点是:不利于共享类中的方法。

四)程序概要设计

1)功能需求分析

一个剪刀石头布游戏,根据一般的常识,首先要有两个人,两个人同时出,然后,根据双方的出拳,决定谁是赢者,虽然想起来这个游戏很简单,但如何实现,还是有一定难度的。实现这个时针时涉及到几个技术问题:

1.双方如何出拳

2.如何同时出拳

3.如何判断哪方赢了

4.如何显示结果

剪刀石头布游戏,都是通过两个人同时出拳,然后根据双方出的拳,判定哪方是赢家。

2)性能需求分析

准确性:在实现此的过程中,我们要考虑到,双方是否能同时地出拳,还要就是如何去判断,准确地知道哪方是赢家.

简洁性:在实现此的过程中,我们要考虑到,怎样使游戏界面更简单,让人更容易明白它怎样去玩。

五)工作流程图:

图1 工作流程图

六)程序框图

游戏程序框图如图2所示

图2 游戏程序框图

七)程序中所用类说明:

(1)用户自定义类

类名:SmallGame

作用:实例化对象

主要成员变量:

Frame myFrm // 定义主窗体

TextArea myText // 定义文本编辑区

Button BfontOK, Bfind, Breplace, Bnext, Bcancel //定义和创建各按钮Label Lf Lr, Ls //定义和创建各标签MenuBar Mbbar //定义和创建主菜单

Menu Mfile,Medit,Mformation,Mhelp //定义和创建主菜单中的选项Toolkit toolKit

Clipboard myCB //剪切板对象

FileDialog myFDlg //定义文件对话框

主要成员方法:

public void init() //初始化各部件菜单的定义和事件的监听

public void displayEdit ()//显示窗体及调用Time 中的schedule 方法 public void windowClosing () //关闭窗体

public void save //保存文件方法

.内部类类名:KeyEvents

作用:实现菜单的事件的响应功能

继承的父类:KeyAdapter

主要成员变量:无

成员方法:actionPerformed()、keyPressed()

(2)用户自定义类与Java 类的继承关系图如下:

图3 子类及其父类继承关系图

(3)类中成员及作用

Service 类成员: Thread

Servic

getInputSt

ream Start Run Random get O utputStrea m

Readline

String data; //接收数据

BufferedReader inputs;// 读取数据

PrintStream outputs;//输出数据

Socket client;//定义套接字

Client类成员:

String data;//接收数据

Socket client = null;//定义套接字

BufferedReader inputs = null;// 读取数据 BufferedReader key = null;// 缓冲数据

PrintStream outputs = null;//输出数据八)程序运行效果及存在的问题

(1)运行效果图

剪刀石头布游戏效果如图4所示:

图4游戏效果图

(2)存在的问题

此游戏界面简洁明了,但还是有许多问题的,比如说这个界面不是GUI 的,所以操作性不强,也不美观,而且处理数据的random函数也有问题,它可能出现相同的结果,不能成为真正意义上的随机,所以这个小游戏还是有许多问题的,我会进一步的改进它。

三、项目实现

一)程序用到的类库简介

(1)Java的抽象窗口工具集AWT(Abstract Window Toolkit)中包含了很多的类来支持GUI的设计,使得用户和程序可以非常方便地进行交互。java.awt包中包含Component、Panel、Frame、Applet、Container、Button等许多常用的类。

(2) Swing类库提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。而javax.swing.event则供 Swing 组件触发的事件使用。

(3)此外,程序还用到了部分applet、net、io、util类。

二)游戏主程序设计

主程序PigPanel用到两个类:Die和PairOfDice,均为已设计类。

Die类主要实现出招过程,PairOfDice过程主要返回游戏规定的得分情况,PigPanel使用这两个类,并产生用户交互界面,由用户操作实现出招、得分、等步骤。

三)主界面PigPanel类

1. 成员变量

restart

Jbutton

对本次游戏数据进行清零

get

JButton

模拟出招

pause

Jbutton

获得当前得分的点数

pod

PairOfDice

声明类以获得分点数2.成员变量

info

String

储存读取的信息

ta

JTextArea

显示文字

四)具体实现

首先建立一个Test类,如下:import java.awt.Color;

import java.awt.Image;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

import javax.swing.AbstractButton; import javax.swing.ImageIcon; import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane; import javax.swing.JPanel;

public class Test extends JFrame { JLabel jl,jl1;

final JLabel jl2,jl3;

JLabel jl4;

public String person;

public String m;

int j;

int i;

final String[] arr = new String[3];

public void Win(String person) {

arr[0] = "石头";

arr[1] = "剪刀";

arr[2] = "布";

person = arr[j];

i = (int) (Math.random() * 3);

String c = arr[i];

//判断输赢

if (c.equals(person)) {

jl4.setText("平手");

} else if (c.equals("剪刀") && person.equals("石头") || c.equals("石头")&& person.equals("布") || c.equals("布") && person.equals("剪刀")) {

jl4.setText("你赢了");

} else {

jl4.setText("你输了");

}

}

public Test() {

JFrame jf = new JFrame();

this.setSize(400, 300);

this.setTitle("猜拳游戏");

this.setLayout(null);

jl = new JLabel("电脑出的是:");

jl.setBounds(50, 50, 100, 50);

this.add(jl);

jl1 = new JLabel("你出的是:");

jl1.setBounds(50, 120, 100, 50);

this.add(jl1);

// 电脑的出的拳标签

jl2 = new JLabel();

jl2.setBounds(150, 50, 100, 50);

this.add(jl2);

//我出的拳的标签

jl3 = new JLabel();

jl3.setBounds(150, 120, 100, 60);

this.add(jl3);

jl4 = new JLabel("");

jl4.setBounds(150, 200, 100, 50);

this.add(jl4);

// 按钮

final JButton btn = new JButton("石头"); btn.setBounds(280, 50, 60, 40);

this.add(btn);

final JButton btn1 = new JButton("剪刀"); btn1.setBounds(280, 105, 60, 40);

this.add(btn1);

final JButton btn2 = new JButton("布"); btn2.setBounds(280, 160, 60, 40);

this.add(btn2);

//按钮事件监听

btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

//如果你鼠标点击的是石头按钮

j = 0;

String b = btn.getActionCommand();

jl3.setText(b);

jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".jpg")));

Win(person);

Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource (i+".jpg")));

Test.this.jl2.setText(arr[i]);

System.out.println(arr[i]);

}

});

btn1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

j = 1;

String b1 = btn1.getActionCommand();

jl3.setText(b1);

jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".jpg")));

Win(person);

Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource (i+".jpg")));

Test.this.jl2.setText(arr[i]);

System.out.println(arr[i]);

// System.out.println(b);

}

});

btn2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

j = 2;

String b2 = btn2.getActionCommand();

jl3.setText(b2);

jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".jpg")));

Win(person);

Test.this.jl2.setText(arr[i]);

System.out.println(arr[i]);

Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource (i+".jpg")));

// System.out.println(b);

}

});

this.setVisible(true);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

this.setResizable(false);

}

public static void main(String[] args) {

Test t = new Test();

}

}

再建立一个名为MyImg的类,把下面几张图片放到该类下

图片名称自左向右依次为布、石头、剪刀。

四、运行结果

一)结果截图

图5 开始界面

相关文档
最新文档